/ Hex Artifact Content
Login

Artifact becd9202b733debc607b5aec43002769730e1f71:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 43 6f 64 65 20 66  ******.** Code f
0180: 6f 72 20 74 65 73 74 69 6e 67 20 61 6c 6c 20 73  or testing all s
0190: 6f 72 74 73 20 6f 66 20 53 51 4c 69 74 65 20 69  orts of SQLite i
01a0: 6e 74 65 72 66 61 63 65 73 2e 20 20 54 68 69 73  nterfaces.  This
01b0: 20 63 6f 64 65 0a 2a 2a 20 69 73 20 6e 6f 74 20   code.** is not 
01c0: 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
01d0: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 20  SQLite library. 
01e0: 20 49 74 20 69 73 20 75 73 65 64 20 66 6f 72 20   It is used for 
01f0: 61 75 74 6f 6d 61 74 65 64 0a 2a 2a 20 74 65 73  automated.** tes
0200: 74 69 6e 67 20 6f 66 20 74 68 65 20 53 51 4c 69  ting of the SQLi
0210: 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a  te library..**.*
0220: 2a 20 24 49 64 3a 20 74 65 73 74 31 2e 63 2c 76  * $Id: test1.c,v
0230: 20 31 2e 32 30 39 20 32 30 30 36 2f 30 33 2f 31   1.209 2006/03/1
0240: 39 20 31 33 3a 30 30 3a 32 35 20 64 72 68 20 45  9 13:00:25 drh E
0250: 78 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  xp $.*/.#include
0260: 20 22 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23   "sqliteInt.h".#
0270: 69 6e 63 6c 75 64 65 20 22 74 63 6c 2e 68 22 0a  include "tcl.h".
0280: 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a  #include "os.h".
0290: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
02a0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
02b0: 72 69 6e 67 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 54  ring.h>../*.** T
02c0: 68 69 73 20 69 73 20 61 20 63 6f 70 79 20 6f 66  his is a copy of
02d0: 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
02e0: 6f 66 20 74 68 65 20 53 71 6c 69 74 65 44 62 20  of the SqliteDb 
02f0: 73 74 72 75 63 74 75 72 65 20 69 6e 20 0a 2a 2a  structure in .**
0300: 20 74 63 6c 73 71 6c 69 74 65 2e 63 2e 20 20 57   tclsqlite.c.  W
0310: 65 20 6e 65 65 64 20 69 74 20 68 65 72 65 20 73  e need it here s
0320: 6f 20 74 68 61 74 20 74 68 65 20 67 65 74 5f 73  o that the get_s
0330: 71 6c 69 74 65 5f 70 6f 69 6e 74 65 72 20 72 6f  qlite_pointer ro
0340: 75 74 69 6e 65 0a 2a 2a 20 63 61 6e 20 65 78 74  utine.** can ext
0350: 72 61 63 74 20 74 68 65 20 73 71 6c 69 74 65 33  ract the sqlite3
0360: 2a 20 70 6f 69 6e 74 65 72 20 66 72 6f 6d 20 61  * pointer from a
0370: 6e 20 65 78 69 73 74 69 6e 67 20 54 63 6c 20 53  n existing Tcl S
0380: 51 4c 69 74 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  QLite.** connect
0390: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
03a0: 71 6c 69 74 65 44 62 20 7b 0a 20 20 73 71 6c 69  qliteDb {.  sqli
03b0: 74 65 33 20 2a 64 62 3b 0a 7d 3b 0a 0a 2f 2a 0a  te3 *db;.};../*.
03c0: 2a 2a 20 41 20 54 43 4c 20 63 6f 6d 6d 61 6e 64  ** A TCL command
03d0: 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68   that returns th
03e0: 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
03f0: 20 73 71 6c 69 74 65 2a 20 70 6f 69 6e 74 65 72   sqlite* pointer
0400: 0a 2a 2a 20 66 6f 72 20 61 6e 20 73 71 6c 69 74  .** for an sqlit
0410: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 6e 73  e connection ins
0420: 74 61 6e 63 65 2e 20 20 42 61 64 20 74 68 69 6e  tance.  Bad thin
0430: 67 73 20 68 61 70 70 65 6e 20 69 66 20 74 68 65  gs happen if the
0440: 0a 2a 2a 20 69 6e 70 75 74 20 69 73 20 6e 6f 74  .** input is not
0450: 20 61 6e 20 73 71 6c 69 74 65 20 63 6f 6e 6e 65   an sqlite conne
0460: 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63  ction..*/.static
0470: 20 69 6e 74 20 67 65 74 5f 73 71 6c 69 74 65 5f   int get_sqlite_
0480: 70 6f 69 6e 74 65 72 28 0a 20 20 76 6f 69 64 20  pointer(.  void 
0490: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
04a0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
04b0: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
04c0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
04d0: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 74 72   objv[].){.  str
04e0: 75 63 74 20 53 71 6c 69 74 65 44 62 20 2a 70 3b  uct SqliteDb *p;
04f0: 0a 20 20 54 63 6c 5f 43 6d 64 49 6e 66 6f 20 63  .  Tcl_CmdInfo c
0500: 6d 64 49 6e 66 6f 3b 0a 20 20 63 68 61 72 20 7a  mdInfo;.  char z
0510: 42 75 66 5b 31 30 30 5d 3b 0a 20 20 69 66 28 20  Buf[100];.  if( 
0520: 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
0530: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
0540: 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
0550: 20 22 53 51 4c 49 54 45 2d 43 4f 4e 4e 45 43 54   "SQLITE-CONNECT
0560: 49 4f 4e 22 29 3b 0a 20 20 20 20 72 65 74 75 72  ION");.    retur
0570: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
0580: 0a 20 20 69 66 28 20 21 54 63 6c 5f 47 65 74 43  .  if( !Tcl_GetC
0590: 6f 6d 6d 61 6e 64 49 6e 66 6f 28 69 6e 74 65 72  ommandInfo(inter
05a0: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
05b0: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 63 6d 64 49  (objv[1]), &cmdI
05c0: 6e 66 6f 29 20 29 7b 0a 20 20 20 20 54 63 6c 5f  nfo) ){.    Tcl_
05d0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
05e0: 65 72 70 2c 20 22 63 6f 6d 6d 61 6e 64 20 6e 6f  erp, "command no
05f0: 74 20 66 6f 75 6e 64 3a 20 22 2c 0a 20 20 20 20  t found: ",.    
0600: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
0610: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 28  ring(objv[1]), (
0620: 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 65  char*)0);.    re
0630: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
0640: 20 20 7d 0a 20 20 70 20 3d 20 28 73 74 72 75 63    }.  p = (struc
0650: 74 20 53 71 6c 69 74 65 44 62 2a 29 63 6d 64 49  t SqliteDb*)cmdI
0660: 6e 66 6f 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74  nfo.objClientDat
0670: 61 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75  a;.  sprintf(zBu
0680: 66 2c 20 22 25 70 22 2c 20 70 2d 3e 64 62 29 3b  f, "%p", p->db);
0690: 0a 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28 7a  .  if( strncmp(z
06a0: 42 75 66 2c 22 30 78 22 2c 32 29 20 29 7b 0a 20  Buf,"0x",2) ){. 
06b0: 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c     sprintf(zBuf,
06c0: 20 22 30 78 25 70 22 2c 20 70 2d 3e 64 62 29 3b   "0x%p", p->db);
06d0: 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e  .  }.  Tcl_Appen
06e0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
06f0: 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75  zBuf, 0);.  retu
0700: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 63 6f  rn TCL_OK;.}..co
0710: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
0720: 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65 28 69  3TestErrorName(i
0730: 6e 74 20 72 63 29 7b 0a 20 20 63 6f 6e 73 74 20  nt rc){.  const 
0740: 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 30 3b  char *zName = 0;
0750: 0a 20 20 73 77 69 74 63 68 28 20 72 63 20 29 7b  .  switch( rc ){
0760: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0770: 5f 4f 4b 3a 20 20 20 20 20 20 20 20 20 7a 4e 61  _OK:         zNa
0780: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4f 4b 22  me = "SQLITE_OK"
0790: 3b 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  ;          break
07a0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
07b0: 45 5f 45 52 52 4f 52 3a 20 20 20 20 20 20 7a 4e  E_ERROR:      zN
07c0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 45 52  ame = "SQLITE_ER
07d0: 52 4f 52 22 3b 20 20 20 20 20 20 20 62 72 65 61  ROR";       brea
07e0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
07f0: 54 45 5f 50 45 52 4d 3a 20 20 20 20 20 20 20 7a  TE_PERM:       z
0800: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 50  Name = "SQLITE_P
0810: 45 52 4d 22 3b 20 20 20 20 20 20 20 20 62 72 65  ERM";        bre
0820: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
0830: 49 54 45 5f 41 42 4f 52 54 3a 20 20 20 20 20 20  ITE_ABORT:      
0840: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
0850: 41 42 4f 52 54 22 3b 20 20 20 20 20 20 20 62 72  ABORT";       br
0860: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0870: 4c 49 54 45 5f 42 55 53 59 3a 20 20 20 20 20 20  LITE_BUSY:      
0880: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0890: 5f 42 55 53 59 22 3b 20 20 20 20 20 20 20 20 62  _BUSY";        b
08a0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
08b0: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3a 20 20 20  QLITE_LOCKED:   
08c0: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
08d0: 45 5f 4c 4f 43 4b 45 44 22 3b 20 20 20 20 20 20  E_LOCKED";      
08e0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
08f0: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3a 20 20 20  SQLITE_NOMEM:   
0900: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0910: 54 45 5f 4e 4f 4d 45 4d 22 3b 20 20 20 20 20 20  TE_NOMEM";      
0920: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
0930: 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59   SQLITE_READONLY
0940: 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c  :   zName = "SQL
0950: 49 54 45 5f 52 45 41 44 4f 4e 4c 59 22 3b 20 20  ITE_READONLY";  
0960: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0970: 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  e SQLITE_INTERRU
0980: 50 54 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51  PT:  zName = "SQ
0990: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 22 3b  LITE_INTERRUPT";
09a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
09b0: 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 3a  se SQLITE_IOERR:
09c0: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
09d0: 51 4c 49 54 45 5f 49 4f 45 52 52 22 3b 20 20 20  QLITE_IOERR";   
09e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
09f0: 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ase SQLITE_CORRU
0a00: 50 54 3a 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22  PT:    zName = "
0a10: 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 22 3b  SQLITE_CORRUPT";
0a20: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
0a30: 63 61 73 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c  case SQLITE_FULL
0a40: 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  :       zName = 
0a50: 22 53 51 4c 49 54 45 5f 46 55 4c 4c 22 3b 20 20  "SQLITE_FULL";  
0a60: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
0a70: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e   case SQLITE_CAN
0a80: 54 4f 50 45 4e 3a 20 20 20 7a 4e 61 6d 65 20 3d  TOPEN:   zName =
0a90: 20 22 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45   "SQLITE_CANTOPE
0aa0: 4e 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  N";    break;.  
0ab0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 50 52    case SQLITE_PR
0ac0: 4f 54 4f 43 4f 4c 3a 20 20 20 7a 4e 61 6d 65 20  OTOCOL:   zName 
0ad0: 3d 20 22 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43  = "SQLITE_PROTOC
0ae0: 4f 4c 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20  OL";    break;. 
0af0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45     case SQLITE_E
0b00: 4d 50 54 59 3a 20 20 20 20 20 20 7a 4e 61 6d 65  MPTY:      zName
0b10: 20 3d 20 22 53 51 4c 49 54 45 5f 45 4d 50 54 59   = "SQLITE_EMPTY
0b20: 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ";       break;.
0b30: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
0b40: 53 43 48 45 4d 41 3a 20 20 20 20 20 7a 4e 61 6d  SCHEMA:     zNam
0b50: 65 20 3d 20 22 53 51 4c 49 54 45 5f 53 43 48 45  e = "SQLITE_SCHE
0b60: 4d 41 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  MA";      break;
0b70: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0b80: 5f 43 4f 4e 53 54 52 41 49 4e 54 3a 20 7a 4e 61  _CONSTRAINT: zNa
0b90: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 4e  me = "SQLITE_CON
0ba0: 53 54 52 41 49 4e 54 22 3b 20 20 62 72 65 61 6b  STRAINT";  break
0bb0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0bc0: 45 5f 4d 49 53 4d 41 54 43 48 3a 20 20 20 7a 4e  E_MISMATCH:   zN
0bd0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4d 49  ame = "SQLITE_MI
0be0: 53 4d 41 54 43 48 22 3b 20 20 20 20 62 72 65 61  SMATCH";    brea
0bf0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
0c00: 54 45 5f 4d 49 53 55 53 45 3a 20 20 20 20 20 7a  TE_MISUSE:     z
0c10: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4d  Name = "SQLITE_M
0c20: 49 53 55 53 45 22 3b 20 20 20 20 20 20 62 72 65  ISUSE";      bre
0c30: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
0c40: 49 54 45 5f 4e 4f 4c 46 53 3a 20 20 20 20 20 20  ITE_NOLFS:      
0c50: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
0c60: 4e 4f 4c 46 53 22 3b 20 20 20 20 20 20 20 62 72  NOLFS";       br
0c70: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0c80: 4c 49 54 45 5f 41 55 54 48 3a 20 20 20 20 20 20  LITE_AUTH:      
0c90: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0ca0: 5f 41 55 54 48 22 3b 20 20 20 20 20 20 20 20 62  _AUTH";        b
0cb0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
0cc0: 51 4c 49 54 45 5f 46 4f 52 4d 41 54 3a 20 20 20  QLITE_FORMAT:   
0cd0: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
0ce0: 45 5f 46 4f 52 4d 41 54 22 3b 20 20 20 20 20 20  E_FORMAT";      
0cf0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0d00: 53 51 4c 49 54 45 5f 52 41 4e 47 45 3a 20 20 20  SQLITE_RANGE:   
0d10: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0d20: 54 45 5f 52 41 4e 47 45 22 3b 20 20 20 20 20 20  TE_RANGE";      
0d30: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
0d40: 20 53 51 4c 49 54 45 5f 52 4f 57 3a 20 20 20 20   SQLITE_ROW:    
0d50: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
0d60: 49 54 45 5f 52 4f 57 22 3b 20 20 20 20 20 20 20  ITE_ROW";       
0d70: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0d80: 65 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3a 20 20  e SQLITE_DONE:  
0d90: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
0da0: 4c 49 54 45 5f 44 4f 4e 45 22 3b 20 20 20 20 20  LITE_DONE";     
0db0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
0dc0: 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42  se SQLITE_NOTADB
0dd0: 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53  :     zName = "S
0de0: 51 4c 49 54 45 5f 4e 4f 54 41 44 42 22 3b 20 20  QLITE_NOTADB";  
0df0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
0e00: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20  efault:         
0e10: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0e20: 53 51 4c 49 54 45 5f 55 6e 6b 6e 6f 77 6e 22 3b  SQLITE_Unknown";
0e30: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a       break;.  }.
0e40: 20 20 72 65 74 75 72 6e 20 7a 4e 61 6d 65 3b 0a    return zName;.
0e50: 7d 0a 23 64 65 66 69 6e 65 20 65 72 72 6f 72 4e  }.#define errorN
0e60: 61 6d 65 20 73 71 6c 69 74 65 33 54 65 73 74 45  ame sqlite3TestE
0e70: 72 72 6f 72 4e 61 6d 65 0a 0a 2f 2a 0a 2a 2a 20  rrorName../*.** 
0e80: 43 6f 6e 76 65 72 74 20 61 6e 20 73 71 6c 69 74  Convert an sqlit
0e90: 65 33 5f 73 74 6d 74 2a 20 69 6e 74 6f 20 61 6e  e3_stmt* into an
0ea0: 20 73 71 6c 69 74 65 33 2a 2e 20 20 54 68 69 73   sqlite3*.  This
0eb0: 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 0a   depends on the.
0ec0: 2a 2a 20 66 61 63 74 20 74 68 61 74 20 74 68 65  ** fact that the
0ed0: 20 73 71 6c 69 74 65 33 2a 20 69 73 20 74 68 65   sqlite3* is the
0ee0: 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e 20   first field in 
0ef0: 74 68 65 20 56 64 62 65 20 73 74 72 75 63 74 75  the Vdbe structu
0f00: 72 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  re..*/.#define S
0f10: 74 6d 74 54 6f 44 62 28 58 29 20 20 20 73 71 6c  tmtToDb(X)   sql
0f20: 69 74 65 33 5f 64 62 5f 68 61 6e 64 6c 65 28 58  ite3_db_handle(X
0f30: 29 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 61  )../*.** Check a
0f40: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 74 6f   return value to
0f50: 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 61 67   make sure it ag
0f60: 72 65 65 73 20 77 69 74 68 20 74 68 65 20 72 65  rees with the re
0f70: 73 75 6c 74 73 0a 2a 2a 20 66 72 6f 6d 20 73 71  sults.** from sq
0f80: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 2e 0a 2a  lite3_errcode..*
0f90: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 73  /.int sqlite3Tes
0fa0: 74 45 72 72 43 6f 64 65 28 54 63 6c 5f 49 6e 74  tErrCode(Tcl_Int
0fb0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 73 71 6c  erp *interp, sql
0fc0: 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 72 63  ite3 *db, int rc
0fd0: 29 7b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  ){.  if( rc!=SQL
0fe0: 49 54 45 5f 4d 49 53 55 53 45 20 26 26 20 72 63  ITE_MISUSE && rc
0ff0: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 73  !=SQLITE_OK && s
1000: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64  qlite3_errcode(d
1010: 62 29 21 3d 72 63 20 29 7b 0a 20 20 20 20 63 68  b)!=rc ){.    ch
1020: 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20  ar zBuf[200];.  
1030: 20 20 69 6e 74 20 72 32 20 3d 20 73 71 6c 69 74    int r2 = sqlit
1040: 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29 3b 0a  e3_errcode(db);.
1050: 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66      sprintf(zBuf
1060: 2c 20 22 65 72 72 6f 72 20 63 6f 64 65 20 25 73  , "error code %s
1070: 20 28 25 64 29 20 64 6f 65 73 20 6e 6f 74 20 6d   (%d) does not m
1080: 61 74 63 68 20 73 71 6c 69 74 65 33 5f 65 72 72  atch sqlite3_err
1090: 63 6f 64 65 20 25 73 20 28 25 64 29 22 2c 0a 20  code %s (%d)",. 
10a0: 20 20 20 20 20 20 65 72 72 6f 72 4e 61 6d 65 28        errorName(
10b0: 72 63 29 2c 20 72 63 2c 20 65 72 72 6f 72 4e 61  rc), rc, errorNa
10c0: 6d 65 28 72 32 29 2c 20 72 32 29 3b 0a 20 20 20  me(r2), r2);.   
10d0: 20 54 63 6c 5f 52 65 73 65 74 52 65 73 75 6c 74   Tcl_ResetResult
10e0: 28 69 6e 74 65 72 70 29 3b 0a 20 20 20 20 54 63  (interp);.    Tc
10f0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
1100: 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b  nterp, zBuf, 0);
1110: 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20  .    return 1;. 
1120: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d   }.  return 0;.}
1130: 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6f 64 65 20 61  ../*.** Decode a
1140: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
1150: 71 6c 69 74 65 33 20 6f 62 6a 65 63 74 2e 0a 2a  qlite3 object..*
1160: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74  /.static int get
1170: 44 62 50 6f 69 6e 74 65 72 28 54 63 6c 5f 49 6e  DbPointer(Tcl_In
1180: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 63 6f  terp *interp, co
1190: 6e 73 74 20 63 68 61 72 20 2a 7a 41 2c 20 73 71  nst char *zA, sq
11a0: 6c 69 74 65 33 20 2a 2a 70 70 44 62 29 7b 0a 20  lite3 **ppDb){. 
11b0: 20 2a 70 70 44 62 20 3d 20 28 73 71 6c 69 74 65   *ppDb = (sqlite
11c0: 33 2a 29 73 71 6c 69 74 65 33 54 65 78 74 54 6f  3*)sqlite3TextTo
11d0: 50 74 72 28 7a 41 29 3b 0a 20 20 72 65 74 75 72  Ptr(zA);.  retur
11e0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
11f0: 2a 2a 20 44 65 63 6f 64 65 20 61 20 70 6f 69 6e  ** Decode a poin
1200: 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
1210: 33 5f 73 74 6d 74 20 6f 62 6a 65 63 74 2e 0a 2a  3_stmt object..*
1220: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74  /.static int get
1230: 53 74 6d 74 50 6f 69 6e 74 65 72 28 0a 20 20 54  StmtPointer(.  T
1240: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1250: 70 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  p, .  const char
1260: 20 2a 7a 41 72 67 2c 20 20 0a 20 20 73 71 6c 69   *zArg,  .  sqli
1270: 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53 74 6d  te3_stmt **ppStm
1280: 74 0a 29 7b 0a 20 20 2a 70 70 53 74 6d 74 20 3d  t.){.  *ppStmt =
1290: 20 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29   (sqlite3_stmt*)
12a0: 73 71 6c 69 74 65 33 54 65 78 74 54 6f 50 74 72  sqlite3TextToPtr
12b0: 28 7a 41 72 67 29 3b 0a 20 20 72 65 74 75 72 6e  (zArg);.  return
12c0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
12d0: 2a 20 44 65 63 6f 64 65 20 61 20 70 6f 69 6e 74  * Decode a point
12e0: 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
12f0: 5f 73 74 6d 74 20 6f 62 6a 65 63 74 2e 0a 2a 2f  _stmt object..*/
1300: 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 46  .static int getF
1310: 69 6c 65 50 6f 69 6e 74 65 72 28 0a 20 20 54 63  ilePointer(.  Tc
1320: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
1330: 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  , .  const char 
1340: 2a 7a 41 72 67 2c 20 20 0a 20 20 4f 73 46 69 6c  *zArg,  .  OsFil
1350: 65 20 2a 2a 70 70 46 69 6c 65 0a 29 7b 0a 20 20  e **ppFile.){.  
1360: 2a 70 70 46 69 6c 65 20 3d 20 28 4f 73 46 69 6c  *ppFile = (OsFil
1370: 65 2a 29 73 71 6c 69 74 65 33 54 65 78 74 54 6f  e*)sqlite3TextTo
1380: 50 74 72 28 7a 41 72 67 29 3b 0a 20 20 72 65 74  Ptr(zArg);.  ret
1390: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
13a0: 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 20  *.** Generate a 
13b0: 74 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74  text representat
13c0: 69 6f 6e 20 6f 66 20 61 20 70 6f 69 6e 74 65 72  ion of a pointer
13d0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 6e 64   that can be und
13e0: 65 72 73 74 6f 6f 64 0a 2a 2a 20 62 79 20 74 68  erstood.** by th
13f0: 65 20 67 65 74 44 62 50 6f 69 6e 74 65 72 20 61  e getDbPointer a
1400: 6e 64 20 67 65 74 56 6d 50 6f 69 6e 74 65 72 20  nd getVmPointer 
1410: 72 6f 75 74 69 6e 65 73 20 61 62 6f 76 65 2e 0a  routines above..
1420: 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 6f 62 6c 65  **.** The proble
1430: 6d 20 69 73 2c 20 6f 6e 20 73 6f 6d 65 20 6d 61  m is, on some ma
1440: 63 68 69 6e 65 73 20 28 53 6f 6c 61 72 69 73 29  chines (Solaris)
1450: 20 69 66 20 79 6f 75 20 64 6f 20 61 20 70 72 69   if you do a pri
1460: 6e 74 66 20 77 69 74 68 0a 2a 2a 20 22 25 70 22  ntf with.** "%p"
1470: 20 79 6f 75 20 63 61 6e 6e 6f 74 20 74 75 72 6e   you cannot turn
1480: 20 61 72 6f 75 6e 64 20 61 6e 64 20 64 6f 20 61   around and do a
1490: 20 73 63 61 6e 66 20 77 69 74 68 20 74 68 65 20   scanf with the 
14a0: 73 61 6d 65 20 22 25 70 22 20 61 6e 64 0a 2a 2a  same "%p" and.**
14b0: 20 67 65 74 20 79 6f 75 72 20 70 6f 69 6e 74 65   get your pointe
14c0: 72 20 62 61 63 6b 2e 20 20 59 6f 75 20 68 61 76  r back.  You hav
14d0: 65 20 74 6f 20 70 72 65 70 65 6e 64 20 61 20 22  e to prepend a "
14e0: 30 78 22 20 62 65 66 6f 72 65 20 69 74 20 77 69  0x" before it wi
14f0: 6c 6c 0a 2a 2a 20 77 6f 72 6b 2e 20 20 4f 72 20  ll.** work.  Or 
1500: 61 74 20 6c 65 61 73 74 20 74 68 61 74 20 69 73  at least that is
1510: 20 77 68 61 74 20 69 73 20 72 65 70 6f 72 74 65   what is reporte
1520: 64 20 74 6f 20 6d 65 20 28 64 72 68 29 2e 20 20  d to me (drh).  
1530: 42 75 74 20 74 68 69 73 0a 2a 2a 20 62 65 68 61  But this.** beha
1540: 76 69 6f 72 20 76 61 72 69 65 73 20 66 72 6f 6d  vior varies from
1550: 20 6d 61 63 68 69 6e 65 20 74 6f 20 6d 61 63 68   machine to mach
1560: 69 6e 65 2e 20 20 54 68 65 20 73 6f 6c 75 74 69  ine.  The soluti
1570: 6f 6e 20 75 73 65 64 20 68 65 72 20 69 73 0a 2a  on used her is.*
1580: 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20 73 74  * to test the st
1590: 72 69 6e 67 20 72 69 67 68 74 20 61 66 74 65 72  ring right after
15a0: 20 69 74 20 69 73 20 67 65 6e 65 72 61 74 65 64   it is generated
15b0: 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 63 61   to see if it ca
15c0: 6e 20 62 65 0a 2a 2a 20 75 6e 64 65 72 73 74 6f  n be.** understo
15d0: 6f 64 20 62 79 20 73 63 61 6e 66 2c 20 61 6e 64  od by scanf, and
15e0: 20 69 66 20 6e 6f 74 2c 20 74 72 79 20 70 72 65   if not, try pre
15f0: 70 65 6e 64 69 6e 67 20 61 6e 20 22 30 78 22 20  pending an "0x" 
1600: 74 6f 20 73 65 65 20 69 66 0a 2a 2a 20 74 68 61  to see if.** tha
1610: 74 20 68 65 6c 70 73 2e 20 20 49 66 20 6e 6f 74  t helps.  If not
1620: 68 69 6e 67 20 77 6f 72 6b 73 2c 20 61 20 66 61  hing works, a fa
1630: 74 61 6c 20 65 72 72 6f 72 20 69 73 20 67 65 6e  tal error is gen
1640: 65 72 61 74 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  erated..*/.int s
1650: 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
1660: 69 6e 74 65 72 53 74 72 28 54 63 6c 5f 49 6e 74  interStr(Tcl_Int
1670: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 63 68 61  erp *interp, cha
1680: 72 20 2a 7a 50 74 72 2c 20 76 6f 69 64 20 2a 70  r *zPtr, void *p
1690: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  ){.  sqlite3_snp
16a0: 72 69 6e 74 66 28 31 30 30 2c 20 7a 50 74 72 2c  rintf(100, zPtr,
16b0: 20 22 25 70 22 2c 20 70 29 3b 0a 20 20 72 65 74   "%p", p);.  ret
16c0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
16d0: 2a 0a 2a 2a 20 54 68 65 20 63 61 6c 6c 62 61 63  *.** The callbac
16e0: 6b 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 73 71  k routine for sq
16f0: 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74  lite3_exec_print
1700: 66 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  f()..*/.static i
1710: 6e 74 20 65 78 65 63 5f 70 72 69 6e 74 66 5f 63  nt exec_printf_c
1720: 62 28 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e  b(void *pArg, in
1730: 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61  t argc, char **a
1740: 72 67 76 2c 20 63 68 61 72 20 2a 2a 6e 61 6d 65  rgv, char **name
1750: 29 7b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  ){.  Tcl_DString
1760: 20 2a 73 74 72 20 3d 20 28 54 63 6c 5f 44 53 74   *str = (Tcl_DSt
1770: 72 69 6e 67 2a 29 70 41 72 67 3b 0a 20 20 69 6e  ring*)pArg;.  in
1780: 74 20 69 3b 0a 0a 20 20 69 66 28 20 54 63 6c 5f  t i;..  if( Tcl_
1790: 44 53 74 72 69 6e 67 4c 65 6e 67 74 68 28 73 74  DStringLength(st
17a0: 72 29 3d 3d 30 20 29 7b 0a 20 20 20 20 66 6f 72  r)==0 ){.    for
17b0: 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b  (i=0; i<argc; i+
17c0: 2b 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 44 53  +){.      Tcl_DS
17d0: 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65 6d 65  tringAppendEleme
17e0: 6e 74 28 73 74 72 2c 20 6e 61 6d 65 5b 69 5d 20  nt(str, name[i] 
17f0: 3f 20 6e 61 6d 65 5b 69 5d 20 3a 20 22 4e 55 4c  ? name[i] : "NUL
1800: 4c 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  L");.    }.  }. 
1810: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63   for(i=0; i<argc
1820: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f  ; i++){.    Tcl_
1830: 44 53 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65  DStringAppendEle
1840: 6d 65 6e 74 28 73 74 72 2c 20 61 72 67 76 5b 69  ment(str, argv[i
1850: 5d 20 3f 20 61 72 67 76 5b 69 5d 20 3a 20 22 4e  ] ? argv[i] : "N
1860: 55 4c 4c 22 29 3b 0a 20 20 7d 0a 20 20 72 65 74  ULL");.  }.  ret
1870: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
1880: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
1890: 65 78 65 63 5f 70 72 69 6e 74 66 20 20 44 42 20  exec_printf  DB 
18a0: 20 46 4f 52 4d 41 54 20 20 53 54 52 49 4e 47 0a   FORMAT  STRING.
18b0: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  **.** Invoke the
18c0: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 5f 70 72   sqlite3_exec_pr
18d0: 69 6e 74 66 28 29 20 69 6e 74 65 72 66 61 63 65  intf() interface
18e0: 20 75 73 69 6e 67 20 74 68 65 20 6f 70 65 6e 20   using the open 
18f0: 64 61 74 61 62 61 73 65 0a 2a 2a 20 44 42 2e 20  database.** DB. 
1900: 20 54 68 65 20 53 51 4c 20 69 73 20 74 68 65 20   The SQL is the 
1910: 73 74 72 69 6e 67 20 46 4f 52 4d 41 54 2e 20 20  string FORMAT.  
1920: 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e  The format strin
1930: 67 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e  g should contain
1940: 0a 2a 2a 20 6f 6e 65 20 25 73 20 6f 72 20 25 71  .** one %s or %q
1950: 2e 20 20 53 54 52 49 4e 47 20 69 73 20 74 68 65  .  STRING is the
1960: 20 76 61 6c 75 65 20 69 6e 73 65 72 74 65 64 20   value inserted 
1970: 69 6e 74 6f 20 25 73 20 6f 72 20 25 71 2e 0a 2a  into %s or %q..*
1980: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
1990: 74 5f 65 78 65 63 5f 70 72 69 6e 74 66 28 0a 20  t_exec_printf(. 
19a0: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
19b0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
19c0: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
19d0: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
19e0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
19f0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
1a00: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
1a10: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a20: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
1a30: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
1a40: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
1a50: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
1a60: 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  t */.){.  sqlite
1a70: 33 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53 74  3 *db;.  Tcl_DSt
1a80: 72 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74 20  ring str;.  int 
1a90: 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72  rc;.  char *zErr
1aa0: 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 53   = 0;.  char *zS
1ab0: 71 6c 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b  ql;.  char zBuf[
1ac0: 33 30 5d 3b 0a 20 20 69 66 28 20 61 72 67 63 21  30];.  if( argc!
1ad0: 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =4 ){.    Tcl_Ap
1ae0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
1af0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
1b00: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
1b10: 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
1b20: 20 20 22 20 44 42 20 46 4f 52 4d 41 54 20 53 54    " DB FORMAT ST
1b30: 52 49 4e 47 22 2c 20 30 29 3b 0a 20 20 20 20 72  RING", 0);.    r
1b40: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1b50: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
1b60: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
1b70: 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
1b80: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1b90: 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 49  ;.  Tcl_DStringI
1ba0: 6e 69 74 28 26 73 74 72 29 3b 0a 20 20 7a 53 71  nit(&str);.  zSq
1bb0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  l = sqlite3_mpri
1bc0: 6e 74 66 28 61 72 67 76 5b 32 5d 2c 20 61 72 67  ntf(argv[2], arg
1bd0: 76 5b 33 5d 29 3b 0a 20 20 72 63 20 3d 20 73 71  v[3]);.  rc = sq
1be0: 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a  lite3_exec(db, z
1bf0: 53 71 6c 2c 20 65 78 65 63 5f 70 72 69 6e 74 66  Sql, exec_printf
1c00: 5f 63 62 2c 20 26 73 74 72 2c 20 26 7a 45 72 72  _cb, &str, &zErr
1c10: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
1c20: 65 28 7a 53 71 6c 29 3b 0a 20 20 73 70 72 69 6e  e(zSql);.  sprin
1c30: 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 72  tf(zBuf, "%d", r
1c40: 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  c);.  Tcl_Append
1c50: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
1c60: 7a 42 75 66 29 3b 0a 20 20 54 63 6c 5f 41 70 70  zBuf);.  Tcl_App
1c70: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
1c80: 70 2c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p, rc==SQLITE_OK
1c90: 20 3f 20 54 63 6c 5f 44 53 74 72 69 6e 67 56 61   ? Tcl_DStringVa
1ca0: 6c 75 65 28 26 73 74 72 29 20 3a 20 7a 45 72 72  lue(&str) : zErr
1cb0: 29 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  );.  Tcl_DString
1cc0: 46 72 65 65 28 26 73 74 72 29 3b 0a 20 20 69 66  Free(&str);.  if
1cd0: 28 20 7a 45 72 72 20 29 20 66 72 65 65 28 7a 45  ( zErr ) free(zE
1ce0: 72 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  rr);.  if( sqlit
1cf0: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
1d00: 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20  terp, db, rc) ) 
1d10: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1d20: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
1d30: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
1d40: 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e:  sqlite3_mpri
1d50: 6e 74 66 5f 7a 5f 74 65 73 74 20 20 53 45 50 41  ntf_z_test  SEPA
1d60: 52 41 54 4f 52 20 20 41 52 47 30 20 20 41 52 47  RATOR  ARG0  ARG
1d70: 31 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 54 65 73 74  1 ....**.** Test
1d80: 20 74 68 65 20 25 7a 20 66 6f 72 6d 61 74 20 6f   the %z format o
1d90: 66 20 73 71 6c 69 74 65 4d 50 72 69 6e 74 66 28  f sqliteMPrintf(
1da0: 29 2e 20 20 55 73 65 20 6d 75 6c 74 69 70 6c 65  ).  Use multiple
1db0: 20 6d 70 72 69 6e 74 66 28 29 20 63 61 6c 6c 73   mprintf() calls
1dc0: 20 74 6f 20 0a 2a 2a 20 63 6f 6e 63 61 74 65 6e   to .** concaten
1dd0: 61 74 65 20 61 72 67 30 20 74 68 72 6f 75 67 68  ate arg0 through
1de0: 20 61 72 67 6e 20 75 73 69 6e 67 20 73 65 70 61   argn using sepa
1df0: 72 61 74 6f 72 20 61 73 20 74 68 65 20 73 65 70  rator as the sep
1e00: 61 72 61 74 6f 72 2e 0a 2a 2a 20 52 65 74 75 72  arator..** Retur
1e10: 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2f  n the result..*/
1e20: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
1e30: 5f 6d 70 72 69 6e 74 66 5f 7a 28 0a 20 20 76 6f  _mprintf_z(.  vo
1e40: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
1e50: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1e60: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
1e70: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
1e80: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
1e90: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
1ea0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
1eb0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1ec0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
1ed0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
1ee0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
1ef0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
1f00: 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 52 65  /.){.  char *zRe
1f10: 73 75 6c 74 20 3d 20 30 3b 0a 20 20 69 6e 74 20  sult = 0;.  int 
1f20: 69 3b 0a 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69  i;..  for(i=2; i
1f30: 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20  <argc; i++){.   
1f40: 20 7a 52 65 73 75 6c 74 20 3d 20 73 71 6c 69 74   zResult = sqlit
1f50: 65 33 4d 50 72 69 6e 74 66 28 22 25 7a 25 73 25  e3MPrintf("%z%s%
1f60: 73 22 2c 20 7a 52 65 73 75 6c 74 2c 20 61 72 67  s", zResult, arg
1f70: 76 5b 31 5d 2c 20 61 72 67 76 5b 69 5d 29 3b 0a  v[1], argv[i]);.
1f80: 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64    }.  Tcl_Append
1f90: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
1fa0: 52 65 73 75 6c 74 2c 20 30 29 3b 0a 20 20 73 71  Result, 0);.  sq
1fb0: 6c 69 74 65 46 72 65 65 28 7a 52 65 73 75 6c 74  liteFree(zResult
1fc0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
1fd0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
1fe0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72  ge:  sqlite3_mpr
1ff0: 69 6e 74 66 5f 6e 5f 74 65 73 74 20 20 53 54 52  intf_n_test  STR
2000: 49 4e 47 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74  ING.**.** Test t
2010: 68 65 20 25 6e 20 66 6f 72 6d 61 74 20 6f 66 20  he %n format of 
2020: 73 71 6c 69 74 65 4d 50 72 69 6e 74 66 28 29 2e  sqliteMPrintf().
2030: 20 20 52 65 74 75 72 6e 20 74 68 65 20 6c 65 6e    Return the len
2040: 67 74 68 20 6f 66 20 74 68 65 0a 2a 2a 20 69 6e  gth of the.** in
2050: 70 75 74 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73  put string..*/.s
2060: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6d  tatic int test_m
2070: 70 72 69 6e 74 66 5f 6e 28 0a 20 20 76 6f 69 64  printf_n(.  void
2080: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
2090: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
20a0: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
20b0: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
20c0: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
20d0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
20e0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
20f0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
2100: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
2110: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
2120: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
2130: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
2140: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 53 74 72 3b  ){.  char *zStr;
2150: 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20  .  int n = 0;.  
2160: 7a 53 74 72 20 3d 20 73 71 6c 69 74 65 33 4d 50  zStr = sqlite3MP
2170: 72 69 6e 74 66 28 22 25 73 25 6e 22 2c 20 61 72  rintf("%s%n", ar
2180: 67 76 5b 31 5d 2c 20 26 6e 29 3b 0a 20 20 73 71  gv[1], &n);.  sq
2190: 6c 69 74 65 46 72 65 65 28 7a 53 74 72 29 3b 0a  liteFree(zStr);.
21a0: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
21b0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
21c0: 65 77 49 6e 74 4f 62 6a 28 6e 29 29 3b 0a 20 20  ewIntObj(n));.  
21d0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
21e0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
21f0: 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c  sqlite3_get_tabl
2200: 65 5f 70 72 69 6e 74 66 20 20 44 42 20 20 46 4f  e_printf  DB  FO
2210: 52 4d 41 54 20 20 53 54 52 49 4e 47 0a 2a 2a 0a  RMAT  STRING.**.
2220: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 73 71  ** Invoke the sq
2230: 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f  lite3_get_table_
2240: 70 72 69 6e 74 66 28 29 20 69 6e 74 65 72 66 61  printf() interfa
2250: 63 65 20 75 73 69 6e 67 20 74 68 65 20 6f 70 65  ce using the ope
2260: 6e 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 44 42  n database.** DB
2270: 2e 20 20 54 68 65 20 53 51 4c 20 69 73 20 74 68  .  The SQL is th
2280: 65 20 73 74 72 69 6e 67 20 46 4f 52 4d 41 54 2e  e string FORMAT.
2290: 20 20 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72    The format str
22a0: 69 6e 67 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61  ing should conta
22b0: 69 6e 0a 2a 2a 20 6f 6e 65 20 25 73 20 6f 72 20  in.** one %s or 
22c0: 25 71 2e 20 20 53 54 52 49 4e 47 20 69 73 20 74  %q.  STRING is t
22d0: 68 65 20 76 61 6c 75 65 20 69 6e 73 65 72 74 65  he value inserte
22e0: 64 20 69 6e 74 6f 20 25 73 20 6f 72 20 25 71 2e  d into %s or %q.
22f0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
2300: 65 73 74 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72  est_get_table_pr
2310: 69 6e 74 66 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  intf(.  void *No
2320: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
2330: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
2340: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
2350: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
2360: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
2370: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
2380: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2390: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
23a0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
23b0: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
23c0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
23d0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
23e0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
23f0: 54 63 6c 5f 44 53 74 72 69 6e 67 20 73 74 72 3b  Tcl_DString str;
2400: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61  .  int rc;.  cha
2410: 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 69  r *zErr = 0;.  i
2420: 6e 74 20 6e 52 6f 77 2c 20 6e 43 6f 6c 3b 0a 20  nt nRow, nCol;. 
2430: 20 63 68 61 72 20 2a 2a 61 52 65 73 75 6c 74 3b   char **aResult;
2440: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68 61 72  .  int i;.  char
2450: 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 63 68 61   zBuf[30];.  cha
2460: 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 66 28 20 61  r *zSql;.  if( a
2470: 72 67 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63  rgc!=4 ){.    Tc
2480: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
2490: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
24a0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
24b0: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20  \"", argv[0], . 
24c0: 20 20 20 20 20 20 22 20 44 42 20 46 4f 52 4d 41        " DB FORMA
24d0: 54 20 53 54 52 49 4e 47 22 2c 20 30 29 3b 0a 20  T STRING", 0);. 
24e0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
24f0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
2500: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
2510: 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62  rp, argv[1], &db
2520: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
2530: 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 44 53 74 72  RROR;.  Tcl_DStr
2540: 69 6e 67 49 6e 69 74 28 26 73 74 72 29 3b 0a 20  ingInit(&str);. 
2550: 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f   zSql = sqlite3_
2560: 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 32 5d 2c  mprintf(argv[2],
2570: 61 72 67 76 5b 33 5d 29 3b 0a 20 20 72 63 20 3d  argv[3]);.  rc =
2580: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62   sqlite3_get_tab
2590: 6c 65 28 64 62 2c 20 7a 53 71 6c 2c 20 26 61 52  le(db, zSql, &aR
25a0: 65 73 75 6c 74 2c 20 26 6e 52 6f 77 2c 20 26 6e  esult, &nRow, &n
25b0: 43 6f 6c 2c 20 26 7a 45 72 72 29 3b 0a 20 20 73  Col, &zErr);.  s
25c0: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
25d0: 29 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75  );.  sprintf(zBu
25e0: 66 2c 20 22 25 64 22 2c 20 72 63 29 3b 0a 20 20  f, "%d", rc);.  
25f0: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
2600: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b  t(interp, zBuf);
2610: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2620: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 70 72 69  E_OK ){.    spri
2630: 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20  ntf(zBuf, "%d", 
2640: 6e 52 6f 77 29 3b 0a 20 20 20 20 54 63 6c 5f 41  nRow);.    Tcl_A
2650: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
2660: 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20  erp, zBuf);.    
2670: 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25  sprintf(zBuf, "%
2680: 64 22 2c 20 6e 43 6f 6c 29 3b 0a 20 20 20 20 54  d", nCol);.    T
2690: 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  cl_AppendElement
26a0: 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a  (interp, zBuf);.
26b0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 28      for(i=0; i<(
26c0: 6e 52 6f 77 2b 31 29 2a 6e 43 6f 6c 3b 20 69 2b  nRow+1)*nCol; i+
26d0: 2b 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41 70  +){.      Tcl_Ap
26e0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
26f0: 72 70 2c 20 61 52 65 73 75 6c 74 5b 69 5d 20 3f  rp, aResult[i] ?
2700: 20 61 52 65 73 75 6c 74 5b 69 5d 20 3a 20 22 4e   aResult[i] : "N
2710: 55 4c 4c 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  ULL");.    }.  }
2720: 65 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70  else{.    Tcl_Ap
2730: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
2740: 72 70 2c 20 7a 45 72 72 29 3b 0a 20 20 7d 0a 20  rp, zErr);.  }. 
2750: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 5f 74 61   sqlite3_free_ta
2760: 62 6c 65 28 61 52 65 73 75 6c 74 29 3b 0a 20 20  ble(aResult);.  
2770: 69 66 28 20 7a 45 72 72 20 29 20 66 72 65 65 28  if( zErr ) free(
2780: 7a 45 72 72 29 3b 0a 20 20 69 66 28 20 73 71 6c  zErr);.  if( sql
2790: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
27a0: 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20  interp, db, rc) 
27b0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
27c0: 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  OR;.  return TCL
27d0: 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55  _OK;.}.../*.** U
27e0: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6c  sage:  sqlite3_l
27f0: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
2800: 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e   DB.**.** Return
2810: 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 52 4f  s the integer RO
2820: 57 49 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20  WID of the most 
2830: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 2e 0a 2a  recent insert..*
2840: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
2850: 74 5f 6c 61 73 74 5f 72 6f 77 69 64 28 0a 20 20  t_last_rowid(.  
2860: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
2870: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
2880: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
2890: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
28a0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
28b0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
28c0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
28d0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
28e0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
28f0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
2900: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
2910: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
2920: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
2930: 20 2a 64 62 3b 0a 20 20 63 68 61 72 20 7a 42 75   *db;.  char zBu
2940: 66 5b 33 30 5d 3b 0a 0a 20 20 69 66 28 20 61 72  f[30];..  if( ar
2950: 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
2960: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
2970: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
2980: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
2990: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44  "", argv[0], " D
29a0: 42 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  B\"", 0);.    re
29b0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
29c0: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
29d0: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
29e0: 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
29f0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
2a00: 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c  .  sprintf(zBuf,
2a10: 20 22 25 6c 6c 64 22 2c 20 73 71 6c 69 74 65 33   "%lld", sqlite3
2a20: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
2a30: 69 64 28 64 62 29 29 3b 0a 20 20 54 63 6c 5f 41  id(db));.  Tcl_A
2a40: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
2a50: 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20  rp, zBuf, 0);.  
2a60: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
2a70: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
2a80: 3a 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 20 44  :  sqlite3_key D
2a90: 42 20 4b 45 59 0a 2a 2a 0a 2a 2a 20 53 65 74 20  B KEY.**.** Set 
2aa0: 74 68 65 20 63 6f 64 65 63 20 6b 65 79 2e 0a 2a  the codec key..*
2ab0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
2ac0: 74 5f 6b 65 79 28 0a 20 20 76 6f 69 64 20 2a 4e  t_key(.  void *N
2ad0: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
2ae0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
2af0: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
2b00: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
2b10: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
2b20: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
2b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2b40: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
2b50: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
2b60: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
2b70: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
2b80: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
2b90: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
2ba0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
2bb0: 79 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20  y;.  int nKey;. 
2bc0: 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a   if( argc!=3 ){.
2bd0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
2be0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
2bf0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
2c00: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
2c10: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c  0],.       " FIL
2c20: 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20  ENAME\"", 0);.  
2c30: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
2c40: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
2c50: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
2c60: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
2c70: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
2c80: 52 4f 52 3b 0a 20 20 7a 4b 65 79 20 3d 20 61 72  ROR;.  zKey = ar
2c90: 67 76 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20 3d 20  gv[2];.  nKey = 
2ca0: 73 74 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a 23 69  strlen(zKey);.#i
2cb0: 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f  fdef SQLITE_HAS_
2cc0: 43 4f 44 45 43 0a 20 20 73 71 6c 69 74 65 33 5f  CODEC.  sqlite3_
2cd0: 6b 65 79 28 64 62 2c 20 7a 4b 65 79 2c 20 6e 4b  key(db, zKey, nK
2ce0: 65 79 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65  ey);.#endif.  re
2cf0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
2d00: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
2d10: 6c 69 74 65 33 5f 72 65 6b 65 79 20 44 42 20 4b  lite3_rekey DB K
2d20: 45 59 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20  EY.**.** Change 
2d30: 74 68 65 20 63 6f 64 65 63 20 6b 65 79 2e 0a 2a  the codec key..*
2d40: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
2d50: 74 5f 72 65 6b 65 79 28 0a 20 20 76 6f 69 64 20  t_rekey(.  void 
2d60: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
2d70: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
2d80: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
2d90: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
2da0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
2db0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
2dc0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
2dd0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
2de0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
2df0: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
2e00: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
2e10: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
2e20: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
2e30: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
2e40: 4b 65 79 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b  Key;.  int nKey;
2e50: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
2e60: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
2e70: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
2e80: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
2e90: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
2ea0: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
2eb0: 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a  ILENAME\"", 0);.
2ec0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
2ed0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
2ee0: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
2ef0: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
2f00: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
2f10: 45 52 52 4f 52 3b 0a 20 20 7a 4b 65 79 20 3d 20  ERROR;.  zKey = 
2f20: 61 72 67 76 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20  argv[2];.  nKey 
2f30: 3d 20 73 74 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a  = strlen(zKey);.
2f40: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41  #ifdef SQLITE_HA
2f50: 53 5f 43 4f 44 45 43 0a 20 20 73 71 6c 69 74 65  S_CODEC.  sqlite
2f60: 33 5f 72 65 6b 65 79 28 64 62 2c 20 7a 4b 65 79  3_rekey(db, zKey
2f70: 2c 20 6e 4b 65 79 29 3b 0a 23 65 6e 64 69 66 0a  , nKey);.#endif.
2f80: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
2f90: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
2fa0: 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20    sqlite3_close 
2fb0: 44 42 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 73 20  DB.**.** Closes 
2fc0: 74 68 65 20 64 61 74 61 62 61 73 65 20 6f 70 65  the database ope
2fd0: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6f  ned by sqlite3_o
2fe0: 70 65 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  pen..*/.static i
2ff0: 6e 74 20 73 71 6c 69 74 65 5f 74 65 73 74 5f 63  nt sqlite_test_c
3000: 6c 6f 73 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  lose(.  void *No
3010: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
3020: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
3030: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
3040: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
3050: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
3060: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
3070: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3080: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
3090: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
30a0: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
30b0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
30c0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
30d0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
30e0: 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 61 72  int rc;.  if( ar
30f0: 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
3100: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
3110: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
3120: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
3130: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
3140: 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22      " FILENAME\"
3150: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
3160: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
3170: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
3180: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
3190: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
31a0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
31b0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6c 6f  rc = sqlite3_clo
31c0: 73 65 28 64 62 29 3b 0a 20 20 54 63 6c 5f 53 65  se(db);.  Tcl_Se
31d0: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
31e0: 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d  (char *)errorNam
31f0: 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49  e(rc), TCL_STATI
3200: 43 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  C);.  return TCL
3210: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d  _OK;.}../*.** Im
3220: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
3230: 74 68 65 20 78 5f 63 6f 61 6c 65 73 63 65 28 29  the x_coalesce()
3240: 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 52 65   function..** Re
3250: 74 75 72 6e 20 74 68 65 20 66 69 72 73 74 20 61  turn the first a
3260: 72 67 75 6d 65 6e 74 20 6e 6f 6e 2d 4e 55 4c 4c  rgument non-NULL
3270: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
3280: 61 74 69 63 20 76 6f 69 64 20 69 66 6e 75 6c 6c  atic void ifnull
3290: 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Func(sqlite3_con
32a0: 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20 69  text *context, i
32b0: 6e 74 20 61 72 67 63 2c 20 73 71 6c 69 74 65 33  nt argc, sqlite3
32c0: 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a  _value **argv){.
32d0: 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69    int i;.  for(i
32e0: 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29  =0; i<argc; i++)
32f0: 7b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45  {.    if( SQLITE
3300: 5f 4e 55 4c 4c 21 3d 73 71 6c 69 74 65 33 5f 76  _NULL!=sqlite3_v
3310: 61 6c 75 65 5f 74 79 70 65 28 61 72 67 76 5b 69  alue_type(argv[i
3320: 5d 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ]) ){.      sqli
3330: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
3340: 63 6f 6e 74 65 78 74 2c 20 28 63 68 61 72 2a 29  context, (char*)
3350: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
3360: 78 74 28 61 72 67 76 5b 69 5d 29 2c 0a 20 20 20  xt(argv[i]),.   
3370: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
3380: 61 6c 75 65 5f 62 79 74 65 73 28 61 72 67 76 5b  alue_bytes(argv[
3390: 69 5d 29 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e  i]), SQLITE_TRAN
33a0: 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 62 72  SIENT);.      br
33b0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  eak;.    }.  }.}
33c0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 74 72 75 63 74  ../*.** A struct
33d0: 75 72 65 20 69 6e 74 6f 20 77 68 69 63 68 20 74  ure into which t
33e0: 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 65 78  o accumulate tex
33f0: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 64 73 74  t..*/.struct dst
3400: 72 20 7b 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63  r {.  int nAlloc
3410: 3b 20 20 2f 2a 20 53 70 61 63 65 20 61 6c 6c 6f  ;  /* Space allo
3420: 63 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  cated */.  int n
3430: 55 73 65 64 3b 20 20 20 2f 2a 20 53 70 61 63 65  Used;   /* Space
3440: 20 75 73 65 64 20 2a 2f 0a 20 20 63 68 61 72 20   used */.  char 
3450: 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 73  *z;     /* The s
3460: 70 61 63 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  pace */.};../*.*
3470: 2a 20 41 70 70 65 6e 64 20 74 65 78 74 20 74 6f  * Append text to
3480: 20 61 20 64 73 74 72 0a 2a 2f 0a 73 74 61 74 69   a dstr.*/.stati
3490: 63 20 76 6f 69 64 20 64 73 74 72 41 70 70 65 6e  c void dstrAppen
34a0: 64 28 73 74 72 75 63 74 20 64 73 74 72 20 2a 70  d(struct dstr *p
34b0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
34c0: 20 69 6e 74 20 64 69 76 69 64 65 72 29 7b 0a 20   int divider){. 
34d0: 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65 6e 28   int n = strlen(
34e0: 7a 29 3b 0a 20 20 69 66 28 20 70 2d 3e 6e 55 73  z);.  if( p->nUs
34f0: 65 64 20 2b 20 6e 20 2b 20 32 20 3e 20 70 2d 3e  ed + n + 2 > p->
3500: 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 63 68  nAlloc ){.    ch
3510: 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 20 20 70 2d  ar *zNew;.    p-
3520: 3e 6e 41 6c 6c 6f 63 20 3d 20 70 2d 3e 6e 41 6c  >nAlloc = p->nAl
3530: 6c 6f 63 2a 32 20 2b 20 6e 20 2b 20 32 30 30 3b  loc*2 + n + 200;
3540: 0a 20 20 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69  .    zNew = sqli
3550: 74 65 52 65 61 6c 6c 6f 63 28 70 2d 3e 7a 2c 20  teRealloc(p->z, 
3560: 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20 20  p->nAlloc);.    
3570: 69 66 28 20 7a 4e 65 77 3d 3d 30 20 29 7b 0a 20  if( zNew==0 ){. 
3580: 20 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28       sqliteFree(
3590: 70 2d 3e 7a 29 3b 0a 20 20 20 20 20 20 6d 65 6d  p->z);.      mem
35a0: 73 65 74 28 70 2c 20 30 2c 20 73 69 7a 65 6f 66  set(p, 0, sizeof
35b0: 28 2a 70 29 29 3b 0a 20 20 20 20 20 20 72 65 74  (*p));.      ret
35c0: 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  urn;.    }.    p
35d0: 2d 3e 7a 20 3d 20 7a 4e 65 77 3b 0a 20 20 7d 0a  ->z = zNew;.  }.
35e0: 20 20 69 66 28 20 64 69 76 69 64 65 72 20 26 26    if( divider &&
35f0: 20 70 2d 3e 6e 55 73 65 64 3e 30 20 29 7b 0a 20   p->nUsed>0 ){. 
3600: 20 20 20 70 2d 3e 7a 5b 70 2d 3e 6e 55 73 65 64     p->z[p->nUsed
3610: 2b 2b 5d 20 3d 20 64 69 76 69 64 65 72 3b 0a 20  ++] = divider;. 
3620: 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 2d 3e   }.  memcpy(&p->
3630: 7a 5b 70 2d 3e 6e 55 73 65 64 5d 2c 20 7a 2c 20  z[p->nUsed], z, 
3640: 6e 2b 31 29 3b 0a 20 20 70 2d 3e 6e 55 73 65 64  n+1);.  p->nUsed
3650: 20 2b 3d 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   += n;.}../*.** 
3660: 49 6e 76 6f 6b 65 64 20 66 6f 72 20 65 61 63 68  Invoked for each
3670: 20 63 61 6c 6c 62 61 63 6b 20 66 72 6f 6d 20 73   callback from s
3680: 71 6c 69 74 65 33 45 78 65 63 46 75 6e 63 0a 2a  qlite3ExecFunc.*
3690: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 65 78 65  /.static int exe
36a0: 63 46 75 6e 63 43 61 6c 6c 62 61 63 6b 28 76 6f  cFuncCallback(vo
36b0: 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 61  id *pData, int a
36c0: 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76  rgc, char **argv
36d0: 2c 20 63 68 61 72 20 2a 2a 4e 6f 74 55 73 65 64  , char **NotUsed
36e0: 29 7b 0a 20 20 73 74 72 75 63 74 20 64 73 74 72  ){.  struct dstr
36f0: 20 2a 70 20 3d 20 28 73 74 72 75 63 74 20 64 73   *p = (struct ds
3700: 74 72 2a 29 70 44 61 74 61 3b 0a 20 20 69 6e 74  tr*)pData;.  int
3710: 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   i;.  for(i=0; i
3720: 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20  <argc; i++){.   
3730: 20 69 66 28 20 61 72 67 76 5b 69 5d 3d 3d 30 20   if( argv[i]==0 
3740: 29 7b 0a 20 20 20 20 20 20 64 73 74 72 41 70 70  ){.      dstrApp
3750: 65 6e 64 28 70 2c 20 22 4e 55 4c 4c 22 2c 20 27  end(p, "NULL", '
3760: 20 27 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   ');.    }else{.
3770: 20 20 20 20 20 20 64 73 74 72 41 70 70 65 6e 64        dstrAppend
3780: 28 70 2c 20 61 72 67 76 5b 69 5d 2c 20 27 20 27  (p, argv[i], ' '
3790: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  );.    }.  }.  r
37a0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 0;.}../*.*
37b0: 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * Implementation
37c0: 20 6f 66 20 74 68 65 20 78 5f 73 71 6c 69 74 65   of the x_sqlite
37d0: 5f 65 78 65 63 28 29 20 66 75 6e 63 74 69 6f 6e  _exec() function
37e0: 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  .  This function
37f0: 20 74 61 6b 65 73 0a 2a 2a 20 61 20 73 69 6e 67   takes.** a sing
3800: 6c 65 20 61 72 67 75 6d 65 6e 74 20 61 6e 64 20  le argument and 
3810: 61 74 74 65 6d 70 74 73 20 74 6f 20 65 78 65 63  attempts to exec
3820: 75 74 65 20 74 68 61 74 20 61 72 67 75 6d 65 6e  ute that argumen
3830: 74 20 61 73 20 53 51 4c 20 63 6f 64 65 2e 0a 2a  t as SQL code..*
3840: 2a 20 54 68 69 73 20 69 73 20 69 6c 6c 65 67 61  * This is illega
3850: 6c 20 61 6e 64 20 73 68 6f 75 6c 64 20 73 65 74  l and should set
3860: 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 49 53 55   the SQLITE_MISU
3870: 53 45 20 66 6c 61 67 20 6f 6e 20 74 68 65 20 64  SE flag on the d
3880: 61 74 61 62 61 73 65 2e 0a 2a 2a 0a 2a 2a 20 32  atabase..**.** 2
3890: 30 30 34 2d 4a 61 6e 2d 30 37 3a 20 20 57 65 20  004-Jan-07:  We 
38a0: 68 61 76 65 20 63 68 61 6e 67 65 64 20 74 68 69  have changed thi
38b0: 73 20 74 6f 20 6d 61 6b 65 20 69 74 20 6c 65 67  s to make it leg
38c0: 61 6c 20 74 6f 20 63 61 6c 6c 20 73 71 6c 69 74  al to call sqlit
38d0: 65 33 5f 65 78 65 63 28 29 0a 2a 2a 20 66 72 6f  e3_exec().** fro
38e0: 6d 20 77 69 74 68 69 6e 20 61 20 66 75 6e 63 74  m within a funct
38f0: 69 6f 6e 20 63 61 6c 6c 2e 20 20 0a 2a 2a 20 0a  ion call.  .** .
3900: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
3910: 73 69 6d 75 6c 61 74 65 73 20 74 68 65 20 65 66  simulates the ef
3920: 66 65 63 74 20 6f 66 20 68 61 76 69 6e 67 20 74  fect of having t
3930: 77 6f 20 74 68 72 65 61 64 73 20 61 74 74 65 6d  wo threads attem
3940: 70 74 20 74 6f 0a 2a 2a 20 75 73 65 20 74 68 65  pt to.** use the
3950: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61   same database a
3960: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e  t the same time.
3970: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3980: 73 71 6c 69 74 65 33 45 78 65 63 46 75 6e 63 28  sqlite3ExecFunc(
3990: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
39a0: 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20 0a 20 20  xt *context, .  
39b0: 69 6e 74 20 61 72 67 63 2c 20 20 0a 20 20 73 71  int argc,  .  sq
39c0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
39d0: 67 76 0a 29 7b 0a 20 20 73 74 72 75 63 74 20 64  gv.){.  struct d
39e0: 73 74 72 20 78 3b 0a 20 20 6d 65 6d 73 65 74 28  str x;.  memset(
39f0: 26 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28 78 29  &x, 0, sizeof(x)
3a00: 29 3b 0a 20 20 28 76 6f 69 64 29 73 71 6c 69 74  );.  (void)sqlit
3a10: 65 33 5f 65 78 65 63 28 28 73 71 6c 69 74 65 33  e3_exec((sqlite3
3a20: 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64  *)sqlite3_user_d
3a30: 61 74 61 28 63 6f 6e 74 65 78 74 29 2c 0a 20 20  ata(context),.  
3a40: 20 20 20 20 28 63 68 61 72 2a 29 73 71 6c 69 74      (char*)sqlit
3a50: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72  e3_value_text(ar
3a60: 67 76 5b 30 5d 29 2c 0a 20 20 20 20 20 20 65 78  gv[0]),.      ex
3a70: 65 63 46 75 6e 63 43 61 6c 6c 62 61 63 6b 2c 20  ecFuncCallback, 
3a80: 26 78 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65  &x, 0);.  sqlite
3a90: 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f  3_result_text(co
3aa0: 6e 74 65 78 74 2c 20 78 2e 7a 2c 20 78 2e 6e 55  ntext, x.z, x.nU
3ab0: 73 65 64 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e  sed, SQLITE_TRAN
3ac0: 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65  SIENT);.  sqlite
3ad0: 46 72 65 65 28 78 2e 7a 29 3b 0a 7d 0a 0a 2f 2a  Free(x.z);.}../*
3ae0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
3af0: 74 65 5f 74 65 73 74 5f 63 72 65 61 74 65 5f 66  te_test_create_f
3b00: 75 6e 63 74 69 6f 6e 20 44 42 0a 2a 2a 0a 2a 2a  unction DB.**.**
3b10: 20 43 61 6c 6c 20 74 68 65 20 73 71 6c 69 74 65   Call the sqlite
3b20: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
3b30: 6e 20 41 50 49 20 6f 6e 20 74 68 65 20 67 69 76  n API on the giv
3b40: 65 6e 20 64 61 74 61 62 61 73 65 20 69 6e 20 6f  en database in o
3b50: 72 64 65 72 0a 2a 2a 20 74 6f 20 63 72 65 61 74  rder.** to creat
3b60: 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d  e a function nam
3b70: 65 64 20 22 78 5f 63 6f 61 6c 65 73 63 65 22 2e  ed "x_coalesce".
3b80: 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20    This function 
3b90: 64 6f 65 73 20 74 68 65 20 73 61 6d 65 20 74 68  does the same th
3ba0: 69 6e 67 0a 2a 2a 20 61 73 20 74 68 65 20 22 63  ing.** as the "c
3bb0: 6f 61 6c 65 73 63 65 22 20 66 75 6e 63 74 69 6f  oalesce" functio
3bc0: 6e 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f  n.  This functio
3bd0: 6e 20 61 6c 73 6f 20 72 65 67 69 73 74 65 72 73  n also registers
3be0: 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
3bf0: 0a 2a 2a 20 6e 61 6d 65 64 20 22 78 5f 73 71 6c  .** named "x_sql
3c00: 69 74 65 5f 65 78 65 63 22 20 74 68 61 74 20 69  ite_exec" that i
3c10: 6e 76 6f 6b 65 73 20 73 71 6c 69 74 65 33 5f 65  nvokes sqlite3_e
3c20: 78 65 63 28 29 2e 20 20 49 6e 76 6f 6b 69 6e 67  xec().  Invoking
3c30: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a   sqlite3_exec().
3c40: 2a 2a 20 69 6e 20 74 68 69 73 20 77 61 79 20 69  ** in this way i
3c50: 73 20 69 6c 6c 65 67 61 6c 20 72 65 63 75 72 73  s illegal recurs
3c60: 69 6f 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20 72  ion and should r
3c70: 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d  aise an SQLITE_M
3c80: 49 53 55 53 45 20 65 72 72 6f 72 2e 0a 2a 2a 20  ISUSE error..** 
3c90: 54 68 65 20 65 66 66 65 63 74 20 69 73 20 73 69  The effect is si
3ca0: 6d 69 6c 61 72 20 74 6f 20 74 72 79 69 6e 67 20  milar to trying 
3cb0: 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 20  to use the same 
3cc0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
3cd0: 69 6f 6e 20 66 72 6f 6d 0a 2a 2a 20 74 77 6f 20  ion from.** two 
3ce0: 74 68 72 65 61 64 73 20 61 74 20 74 68 65 20 73  threads at the s
3cf0: 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20  ame time..**.** 
3d00: 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f 74  The original mot
3d10: 69 76 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73  ivation for this
3d20: 20 72 6f 75 74 69 6e 65 20 77 61 73 20 74 6f 20   routine was to 
3d30: 62 65 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c 20  be able to call 
3d40: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63  the.** sqlite3_c
3d50: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 66  reate_function f
3d60: 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20 61 20  unction while a 
3d70: 71 75 65 72 79 20 69 73 20 69 6e 20 70 72 6f 67  query is in prog
3d80: 72 65 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  ress in order.**
3d90: 20 74 6f 20 74 65 73 74 20 74 68 65 20 53 51 4c   to test the SQL
3da0: 49 54 45 5f 4d 49 53 55 53 45 20 64 65 74 65 63  ITE_MISUSE detec
3db0: 74 69 6f 6e 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73  tion logic..*/.s
3dc0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
3dd0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a  reate_function(.
3de0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
3df0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
3e00: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
3e10: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
3e20: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
3e30: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
3e40: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
3e50: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
3e60: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
3e70: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
3e80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
3e90: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
3ea0: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72  nt */.){.  int r
3eb0: 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  c;.  sqlite3 *db
3ec0: 3b 0a 20 20 65 78 74 65 72 6e 20 76 6f 69 64 20  ;.  extern void 
3ed0: 4d 64 35 5f 52 65 67 69 73 74 65 72 28 73 71 6c  Md5_Register(sql
3ee0: 69 74 65 33 2a 29 3b 0a 0a 20 20 69 66 28 20 61  ite3*);..  if( a
3ef0: 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  rgc!=2 ){.    Tc
3f00: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
3f10: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
3f20: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
3f30: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
3f40: 20 20 20 20 20 22 20 44 42 5c 22 22 2c 20 30 29       " DB\"", 0)
3f50: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
3f60: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
3f70: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
3f80: 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
3f90: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
3fa0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20  L_ERROR;.  rc = 
3fb0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
3fc0: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78 5f 63  unction(db, "x_c
3fd0: 6f 61 6c 65 73 63 65 22 2c 20 2d 31 2c 20 53 51  oalesce", -1, SQ
3fe0: 4c 49 54 45 5f 41 4e 59 2c 20 30 2c 20 0a 20 20  LITE_ANY, 0, .  
3ff0: 20 20 20 20 20 20 69 66 6e 75 6c 6c 46 75 6e 63        ifnullFunc
4000: 2c 20 30 2c 20 30 29 3b 0a 0a 23 69 66 6e 64 65  , 0, 0);..#ifnde
4010: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
4020: 46 31 36 0a 20 20 2f 2a 20 55 73 65 20 74 68 65  F16.  /* Use the
4030: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
4040: 66 75 6e 63 74 69 6f 6e 31 36 28 29 20 41 50 49  function16() API
4050: 20 68 65 72 65 2e 20 4d 61 69 6e 6c 79 20 66 6f   here. Mainly fo
4060: 72 20 66 75 6e 2c 20 62 75 74 20 61 6c 73 6f 20  r fun, but also 
4070: 0a 20 20 2a 2a 20 62 65 63 61 75 73 65 20 69 74  .  ** because it
4080: 20 69 73 20 6e 6f 74 20 74 65 73 74 65 64 20 61   is not tested a
4090: 6e 79 77 68 65 72 65 20 65 6c 73 65 2e 20 2a 2f  nywhere else. */
40a0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
40b0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69  E_OK ){.    sqli
40c0: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b  te3_value *pVal;
40d0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d  .#ifdef SQLITE_M
40e0: 45 4d 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  EMDEBUG.    if( 
40f0: 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46  sqlite3_iMallocF
4100: 61 69 6c 3e 30 20 29 7b 0a 20 20 20 20 20 20 73  ail>0 ){.      s
4110: 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61  qlite3_iMallocFa
4120: 69 6c 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  il++;.    }.#end
4130: 69 66 20 0a 20 20 20 20 70 56 61 6c 20 3d 20 73  if .    pVal = s
4140: 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29  qlite3ValueNew()
4150: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c  ;.    sqlite3Val
4160: 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d  ueSetStr(pVal, -
4170: 31 2c 20 22 78 5f 73 71 6c 69 74 65 5f 65 78 65  1, "x_sqlite_exe
4180: 63 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  c", SQLITE_UTF8,
4190: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
41a0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
41b0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
41c0: 6e 31 36 28 64 62 2c 20 0a 20 20 20 20 20 20 20  n16(db, .       
41d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 61         sqlite3Va
41e0: 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51  lueText(pVal, SQ
41f0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
4200: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
4210: 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36   1, SQLITE_UTF16
4220: 2c 20 64 62 2c 20 73 71 6c 69 74 65 33 45 78 65  , db, sqlite3Exe
4230: 63 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20  cFunc, 0, 0);.  
4240: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72    sqlite3ValueFr
4250: 65 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 23 65  ee(pVal);.  }.#e
4260: 6e 64 69 66 0a 0a 20 20 69 66 28 20 73 71 6c 69  ndif..  if( sqli
4270: 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
4280: 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29  nterp, db, rc) )
4290: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
42a0: 52 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75  R;.  Tcl_SetResu
42b0: 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72  lt(interp, (char
42c0: 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29   *)errorName(rc)
42d0: 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
42e0: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
42f0: 52 6f 75 74 69 6e 65 73 20 74 6f 20 69 6d 70 6c  Routines to impl
4300: 65 6d 65 6e 74 20 74 68 65 20 78 5f 63 6f 75 6e  ement the x_coun
4310: 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  t() aggregate fu
4320: 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 78 5f  nction..**.** x_
4330: 63 6f 75 6e 74 28 29 20 63 6f 75 6e 74 73 20 74  count() counts t
4340: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  he number of non
4350: 2d 6e 75 6c 6c 20 61 72 67 75 6d 65 6e 74 73 2e  -null arguments.
4360: 20 20 42 75 74 20 74 68 65 72 65 20 61 72 65 0a    But there are.
4370: 2a 2a 20 73 6f 6d 65 20 74 77 69 73 74 73 20 66  ** some twists f
4380: 6f 72 20 74 65 73 74 69 6e 67 20 70 75 72 70 6f  or testing purpo
4390: 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ses..**.** If th
43a0: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 5f  e argument to x_
43b0: 63 6f 75 6e 74 28 29 20 69 73 20 34 30 20 74 68  count() is 40 th
43c0: 65 6e 20 61 20 55 54 46 2d 38 20 65 72 72 6f 72  en a UTF-8 error
43d0: 20 69 73 20 72 65 70 6f 72 74 65 64 0a 2a 2a 20   is reported.** 
43e0: 6f 6e 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  on the step func
43f0: 74 69 6f 6e 2e 20 20 49 66 20 78 5f 63 6f 75 6e  tion.  If x_coun
4400: 74 28 34 31 29 20 69 73 20 73 65 65 6e 2c 20 74  t(41) is seen, t
4410: 68 65 6e 20 61 20 55 54 46 2d 31 36 20 65 72 72  hen a UTF-16 err
4420: 6f 72 0a 2a 2a 20 69 73 20 72 65 70 6f 72 74 65  or.** is reporte
4430: 64 20 6f 6e 20 74 68 65 20 73 74 65 70 20 66 75  d on the step fu
4440: 6e 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20  nction.  If the 
4450: 74 6f 74 61 6c 20 63 6f 75 6e 74 20 69 73 20 34  total count is 4
4460: 32 2c 20 74 68 65 6e 0a 2a 2a 20 61 20 55 54 46  2, then.** a UTF
4470: 2d 38 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  -8 error is repo
4480: 72 74 65 64 20 6f 6e 20 74 68 65 20 66 69 6e 61  rted on the fina
4490: 6c 69 7a 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  lize function..*
44a0: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
44b0: 20 43 6f 75 6e 74 43 74 78 20 43 6f 75 6e 74 43   CountCtx CountC
44c0: 74 78 3b 0a 73 74 72 75 63 74 20 43 6f 75 6e 74  tx;.struct Count
44d0: 43 74 78 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 7d  Ctx {.  int n;.}
44e0: 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 6f  ;.static void co
44f0: 75 6e 74 53 74 65 70 28 73 71 6c 69 74 65 33 5f  untStep(sqlite3_
4500: 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74  context *context
4510: 2c 20 69 6e 74 20 61 72 67 63 2c 20 73 71 6c 69  , int argc, sqli
4520: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76  te3_value **argv
4530: 29 7b 0a 20 20 43 6f 75 6e 74 43 74 78 20 2a 70  ){.  CountCtx *p
4540: 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33 5f  ;.  p = sqlite3_
4550: 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78  aggregate_contex
4560: 74 28 63 6f 6e 74 65 78 74 2c 20 73 69 7a 65 6f  t(context, sizeo
4570: 66 28 2a 70 29 29 3b 0a 20 20 69 66 28 20 28 61  f(*p));.  if( (a
4580: 72 67 63 3d 3d 30 20 7c 7c 20 53 51 4c 49 54 45  rgc==0 || SQLITE
4590: 5f 4e 55 4c 4c 21 3d 73 71 6c 69 74 65 33 5f 76  _NULL!=sqlite3_v
45a0: 61 6c 75 65 5f 74 79 70 65 28 61 72 67 76 5b 30  alue_type(argv[0
45b0: 5d 29 20 29 20 26 26 20 70 20 29 7b 0a 20 20 20  ]) ) && p ){.   
45c0: 20 70 2d 3e 6e 2b 2b 3b 0a 20 20 7d 0a 20 20 69   p->n++;.  }.  i
45d0: 66 28 20 61 72 67 63 3e 30 20 29 7b 0a 20 20 20  f( argc>0 ){.   
45e0: 20 69 6e 74 20 76 20 3d 20 73 71 6c 69 74 65 33   int v = sqlite3
45f0: 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b  _value_int(argv[
4600: 30 5d 29 3b 0a 20 20 20 20 69 66 28 20 76 3d 3d  0]);.    if( v==
4610: 34 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  40 ){.      sqli
4620: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
4630: 28 63 6f 6e 74 65 78 74 2c 20 22 76 61 6c 75 65  (context, "value
4640: 20 6f 66 20 34 30 20 68 61 6e 64 65 64 20 74 6f   of 40 handed to
4650: 20 78 5f 63 6f 75 6e 74 22 2c 20 2d 31 29 3b 0a   x_count", -1);.
4660: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4670: 4d 49 54 5f 55 54 46 31 36 0a 20 20 20 20 7d 65  MIT_UTF16.    }e
4680: 6c 73 65 20 69 66 28 20 76 3d 3d 34 31 20 29 7b  lse if( v==41 ){
4690: 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
46a0: 72 20 7a 55 74 66 31 36 45 72 72 4d 73 67 5b 5d  r zUtf16ErrMsg[]
46b0: 20 3d 20 7b 20 30 2c 20 30 78 36 31 2c 20 30 2c   = { 0, 0x61, 0,
46c0: 20 30 78 36 32 2c 20 30 2c 20 30 78 36 33 2c 20   0x62, 0, 0x63, 
46d0: 30 2c 20 30 2c 20 30 7d 3b 0a 20 20 20 20 20 20  0, 0, 0};.      
46e0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
46f0: 72 72 6f 72 31 36 28 63 6f 6e 74 65 78 74 2c 20  rror16(context, 
4700: 26 7a 55 74 66 31 36 45 72 72 4d 73 67 5b 31 2d  &zUtf16ErrMsg[1-
4710: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
4720: 5d 2c 20 2d 31 29 3b 0a 23 65 6e 64 69 66 0a 20  ], -1);.#endif. 
4730: 20 20 20 7d 0a 20 20 7d 0a 7d 20 20 20 0a 73 74     }.  }.}   .st
4740: 61 74 69 63 20 76 6f 69 64 20 63 6f 75 6e 74 46  atic void countF
4750: 69 6e 61 6c 69 7a 65 28 73 71 6c 69 74 65 33 5f  inalize(sqlite3_
4760: 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74  context *context
4770: 29 7b 0a 20 20 43 6f 75 6e 74 43 74 78 20 2a 70  ){.  CountCtx *p
4780: 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33 5f  ;.  p = sqlite3_
4790: 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78  aggregate_contex
47a0: 74 28 63 6f 6e 74 65 78 74 2c 20 73 69 7a 65 6f  t(context, sizeo
47b0: 66 28 2a 70 29 29 3b 0a 20 20 69 66 28 20 70 20  f(*p));.  if( p 
47c0: 29 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 3d  ){.    if( p->n=
47d0: 3d 34 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  =42 ){.      sql
47e0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
47f0: 72 28 63 6f 6e 74 65 78 74 2c 20 22 78 5f 63 6f  r(context, "x_co
4800: 75 6e 74 20 74 6f 74 61 6c 73 20 74 6f 20 34 32  unt totals to 42
4810: 22 2c 20 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73  ", -1);.    }els
4820: 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e{.      sqlite3
4830: 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74  _result_int(cont
4840: 65 78 74 2c 20 70 20 3f 20 70 2d 3e 6e 20 3a 20  ext, p ? p->n : 
4850: 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a  0);.    }.  }.}.
4860: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
4870: 71 6c 69 74 65 5f 74 65 73 74 5f 63 72 65 61 74  qlite_test_creat
4880: 65 5f 61 67 67 72 65 67 61 74 65 20 44 42 0a 2a  e_aggregate DB.*
4890: 2a 0a 2a 2a 20 43 61 6c 6c 20 74 68 65 20 73 71  *.** Call the sq
48a0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
48b0: 63 74 69 6f 6e 20 41 50 49 20 6f 6e 20 74 68 65  ction API on the
48c0: 20 67 69 76 65 6e 20 64 61 74 61 62 61 73 65 20   given database 
48d0: 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 63  in order.** to c
48e0: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
48f0: 20 6e 61 6d 65 64 20 22 78 5f 63 6f 75 6e 74 22   named "x_count"
4900: 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  .  This function
4910: 20 64 6f 65 73 20 74 68 65 20 73 61 6d 65 20 74   does the same t
4920: 68 69 6e 67 0a 2a 2a 20 61 73 20 74 68 65 20 22  hing.** as the "
4930: 6d 64 35 73 75 6d 22 20 66 75 6e 63 74 69 6f 6e  md5sum" function
4940: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6f 72 69 67  ..**.** The orig
4950: 69 6e 61 6c 20 6d 6f 74 69 76 61 74 69 6f 6e 20  inal motivation 
4960: 66 6f 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65  for this routine
4970: 20 77 61 73 20 74 6f 20 62 65 20 61 62 6c 65 20   was to be able 
4980: 74 6f 20 63 61 6c 6c 20 74 68 65 0a 2a 2a 20 73  to call the.** s
4990: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 61 67  qlite3_create_ag
49a0: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
49b0: 20 77 68 69 6c 65 20 61 20 71 75 65 72 79 20 69   while a query i
49c0: 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 69 6e  s in progress in
49d0: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 74 65 73   order.** to tes
49e0: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 49 53  t the SQLITE_MIS
49f0: 55 53 45 20 64 65 74 65 63 74 69 6f 6e 20 6c 6f  USE detection lo
4a00: 67 69 63 2e 20 20 53 65 65 20 6d 69 73 75 73 65  gic.  See misuse
4a10: 2e 74 65 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  .test..**.** Thi
4a20: 73 20 72 6f 75 74 69 6e 65 20 77 61 73 20 6c 61  s routine was la
4a30: 74 65 72 20 65 78 74 65 6e 64 65 64 20 74 6f 20  ter extended to 
4a40: 74 65 73 74 20 74 68 65 20 75 73 65 20 6f 66 20  test the use of 
4a50: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
4a60: 72 72 6f 72 28 29 0a 2a 2a 20 77 69 74 68 69 6e  rror().** within
4a70: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
4a80: 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ions..*/.static 
4a90: 69 6e 74 20 74 65 73 74 5f 63 72 65 61 74 65 5f  int test_create_
4aa0: 61 67 67 72 65 67 61 74 65 28 0a 20 20 76 6f 69  aggregate(.  voi
4ab0: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
4ac0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
4ad0: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
4ae0: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
4af0: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
4b00: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
4b10: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
4b20: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
4b30: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
4b40: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
4b50: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
4b60: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
4b70: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
4b80: 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  b;.  int rc;.  i
4b90: 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20  f( argc!=2 ){.  
4ba0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
4bb0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
4bc0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
4bd0: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
4be0: 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c 45 4e  ,.       " FILEN
4bf0: 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  AME\"", 0);.    
4c00: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
4c10: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
4c20: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
4c30: 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
4c40: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
4c50: 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
4c60: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
4c70: 6e 28 64 62 2c 20 22 78 5f 63 6f 75 6e 74 22 2c  n(db, "x_count",
4c80: 20 30 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   0, SQLITE_UTF8,
4c90: 20 30 2c 20 30 2c 0a 20 20 20 20 20 20 63 6f 75   0, 0,.      cou
4ca0: 6e 74 53 74 65 70 2c 63 6f 75 6e 74 46 69 6e 61  ntStep,countFina
4cb0: 6c 69 7a 65 29 3b 0a 20 20 69 66 28 20 72 63 3d  lize);.  if( rc=
4cc0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
4cd0: 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65    sqlite3_create
4ce0: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78  _function(db, "x
4cf0: 5f 63 6f 75 6e 74 22 2c 20 31 2c 20 53 51 4c 49  _count", 1, SQLI
4d00: 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 2c 0a 20  TE_UTF8, 0, 0,. 
4d10: 20 20 20 20 20 20 20 63 6f 75 6e 74 53 74 65 70         countStep
4d20: 2c 63 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 29 3b  ,countFinalize);
4d30: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
4d40: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
4d50: 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20  terp, db, rc) ) 
4d60: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
4d70: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
4d80: 4b 3b 0a 7d 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73  K;.}..../*.** Us
4d90: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
4da0: 72 69 6e 74 66 5f 69 6e 74 20 46 4f 52 4d 41 54  rintf_int FORMAT
4db0: 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52   INTEGER INTEGER
4dc0: 20 49 4e 54 45 47 45 52 0a 2a 2a 0a 2a 2a 20 43   INTEGER.**.** C
4dd0: 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68  all mprintf with
4de0: 20 74 68 72 65 65 20 69 6e 74 65 67 65 72 20 61   three integer a
4df0: 72 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61 74  rguments.*/.stat
4e00: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d  ic int sqlite3_m
4e10: 70 72 69 6e 74 66 5f 69 6e 74 28 0a 20 20 76 6f  printf_int(.  vo
4e20: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
4e30: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
4e40: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
4e50: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
4e60: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
4e70: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
4e80: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
4e90: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
4ea0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
4eb0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
4ec0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
4ed0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
4ee0: 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c  /.){.  int a[3],
4ef0: 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20   i;.  char *z;. 
4f00: 20 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a   if( argc!=5 ){.
4f10: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
4f20: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
4f30: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
4f40: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
4f50: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52  0],.       " FOR
4f60: 4d 41 54 20 49 4e 54 20 49 4e 54 20 49 4e 54 5c  MAT INT INT INT\
4f70: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
4f80: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
4f90: 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 35  }.  for(i=2; i<5
4fa0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
4fb0: 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72  Tcl_GetInt(inter
4fc0: 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69  p, argv[i], &a[i
4fd0: 2d 32 5d 29 20 29 20 72 65 74 75 72 6e 20 54 43  -2]) ) return TC
4fe0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a  L_ERROR;.  }.  z
4ff0: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
5000: 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d  tf(argv[1], a[0]
5010: 2c 20 61 5b 31 5d 2c 20 61 5b 32 5d 29 3b 0a 20  , a[1], a[2]);. 
5020: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
5030: 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b  t(interp, z, 0);
5040: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
5050: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  z);.  return TCL
5060: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66  _OK;.}../*.** If
5070: 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73   zNum represents
5080: 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74   an integer that
5090: 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 36 34 2d   will fit in 64-
50a0: 62 69 74 73 2c 20 74 68 65 6e 20 73 65 74 0a 2a  bits, then set.*
50b0: 2a 20 2a 70 56 61 6c 75 65 20 74 6f 20 74 68 61  * *pValue to tha
50c0: 74 20 69 6e 74 65 67 65 72 20 61 6e 64 20 72 65  t integer and re
50d0: 74 75 72 6e 20 74 72 75 65 2e 20 20 4f 74 68 65  turn true.  Othe
50e0: 72 77 69 73 65 20 72 65 74 75 72 6e 20 66 61 6c  rwise return fal
50f0: 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  se..*/.static in
5100: 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 36  t sqlite3GetInt6
5110: 34 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  4(const char *zN
5120: 75 6d 2c 20 69 36 34 20 2a 70 56 61 6c 75 65 29  um, i64 *pValue)
5130: 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 46  {.  if( sqlite3F
5140: 69 74 73 49 6e 36 34 42 69 74 73 28 7a 4e 75 6d  itsIn64Bits(zNum
5150: 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
5160: 61 74 6f 69 36 34 28 7a 4e 75 6d 2c 20 70 56 61  atoi64(zNum, pVa
5170: 6c 75 65 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  lue);.    return
5180: 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   1;.  }.  return
5190: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61   0;.}../*.** Usa
51a0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72  ge:  sqlite3_mpr
51b0: 69 6e 74 66 5f 69 6e 74 36 34 20 46 4f 52 4d 41  intf_int64 FORMA
51c0: 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45  T INTEGER INTEGE
51d0: 52 20 49 4e 54 45 47 45 52 0a 2a 2a 0a 2a 2a 20  R INTEGER.**.** 
51e0: 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74  Call mprintf wit
51f0: 68 20 74 68 72 65 65 20 36 34 2d 62 69 74 20 69  h three 64-bit i
5200: 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73  nteger arguments
5210: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
5220: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69  qlite3_mprintf_i
5230: 6e 74 36 34 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  nt64(.  void *No
5240: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
5250: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
5260: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
5270: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
5280: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
5290: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
52a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
52b0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
52c0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
52d0: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
52e0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
52f0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
5300: 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65   int i;.  sqlite
5310: 5f 69 6e 74 36 34 20 61 5b 33 5d 3b 0a 20 20 63  _int64 a[3];.  c
5320: 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72  har *z;.  if( ar
5330: 67 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=5 ){.    Tcl
5340: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
5350: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
5360: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
5370: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
5380: 20 20 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54      " FORMAT INT
5390: 20 49 4e 54 20 49 4e 54 5c 22 22 2c 20 30 29 3b   INT INT\"", 0);
53a0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
53b0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72  ERROR;.  }.  for
53c0: 28 69 3d 32 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b  (i=2; i<5; i++){
53d0: 0a 20 20 20 20 69 66 28 20 21 73 71 6c 69 74 65  .    if( !sqlite
53e0: 33 47 65 74 49 6e 74 36 34 28 61 72 67 76 5b 69  3GetInt64(argv[i
53f0: 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 7b 0a 20  ], &a[i-2]) ){. 
5400: 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52       Tcl_AppendR
5410: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 61  esult(interp, "a
5420: 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 61  rgument is not a
5430: 20 76 61 6c 69 64 20 36 34 2d 62 69 74 20 69 6e   valid 64-bit in
5440: 74 65 67 65 72 22 2c 20 30 29 3b 0a 20 20 20 20  teger", 0);.    
5450: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
5460: 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  OR;.    }.  }.  
5470: 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  z = sqlite3_mpri
5480: 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30  ntf(argv[1], a[0
5490: 5d 2c 20 61 5b 31 5d 2c 20 61 5b 32 5d 29 3b 0a  ], a[1], a[2]);.
54a0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
54b0: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29  lt(interp, z, 0)
54c0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
54d0: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  (z);.  return TC
54e0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
54f0: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d  sage:  sqlite3_m
5500: 70 72 69 6e 74 66 5f 73 74 72 20 46 4f 52 4d 41  printf_str FORMA
5510: 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45  T INTEGER INTEGE
5520: 52 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 43  R STRING.**.** C
5530: 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68  all mprintf with
5540: 20 74 77 6f 20 69 6e 74 65 67 65 72 20 61 72 67   two integer arg
5550: 75 6d 65 6e 74 73 20 61 6e 64 20 6f 6e 65 20 73  uments and one s
5560: 74 72 69 6e 67 20 61 72 67 75 6d 65 6e 74 0a 2a  tring argument.*
5570: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
5580: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72  ite3_mprintf_str
5590: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
55a0: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
55b0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
55c0: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
55d0: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
55e0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
55f0: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
5600: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
5610: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
5620: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
5630: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
5640: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
5650: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ment */.){.  int
5660: 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 63 68 61 72   a[3], i;.  char
5670: 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 3c   *z;.  if( argc<
5680: 34 20 7c 7c 20 61 72 67 63 3e 35 20 29 7b 0a 20  4 || argc>5 ){. 
5690: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
56a0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
56b0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
56c0: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
56d0: 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d  ],.       " FORM
56e0: 41 54 20 49 4e 54 20 49 4e 54 20 3f 53 54 52 49  AT INT INT ?STRI
56f0: 4e 47 3f 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  NG?\"", 0);.    
5700: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
5710: 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b  ;.  }.  for(i=2;
5720: 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<4; i++){.    
5730: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69  if( Tcl_GetInt(i
5740: 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20  nterp, argv[i], 
5750: 26 61 5b 69 2d 32 5d 29 20 29 20 72 65 74 75 72  &a[i-2]) ) retur
5760: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
5770: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d  .  z = sqlite3_m
5780: 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20  printf(argv[1], 
5790: 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 72 67 63  a[0], a[1], argc
57a0: 3e 34 20 3f 20 61 72 67 76 5b 34 5d 20 3a 20 4e  >4 ? argv[4] : N
57b0: 55 4c 4c 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  ULL);.  Tcl_Appe
57c0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
57d0: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
57e0: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
57f0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
5800: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
5810: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75  ite3_mprintf_dou
5820: 62 6c 65 20 46 4f 52 4d 41 54 20 49 4e 54 45 47  ble FORMAT INTEG
5830: 45 52 20 49 4e 54 45 47 45 52 20 44 4f 55 42 4c  ER INTEGER DOUBL
5840: 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72  E.**.** Call mpr
5850: 69 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e  intf with two in
5860: 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20  teger arguments 
5870: 61 6e 64 20 6f 6e 65 20 64 6f 75 62 6c 65 20 61  and one double a
5880: 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69  rgument.*/.stati
5890: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70  c int sqlite3_mp
58a0: 72 69 6e 74 66 5f 64 6f 75 62 6c 65 28 0a 20 20  rintf_double(.  
58b0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
58c0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
58d0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
58e0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
58f0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
5900: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
5910: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
5920: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
5930: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
5940: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
5950: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
5960: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
5970: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33   */.){.  int a[3
5980: 5d 2c 20 69 3b 0a 20 20 64 6f 75 62 6c 65 20 72  ], i;.  double r
5990: 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  ;.  char *z;.  i
59a0: 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20 20  f( argc!=5 ){.  
59b0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
59c0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
59d0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
59e0: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
59f0: 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41  ,.       " FORMA
5a00: 54 20 49 4e 54 20 49 4e 54 20 44 4f 55 42 4c 45  T INT INT DOUBLE
5a10: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
5a20: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
5a30: 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c   }.  for(i=2; i<
5a40: 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  4; i++){.    if(
5a50: 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65   Tcl_GetInt(inte
5a60: 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26 61 5b  rp, argv[i], &a[
5a70: 69 2d 32 5d 29 20 29 20 72 65 74 75 72 6e 20 54  i-2]) ) return T
5a80: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
5a90: 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c  if( Tcl_GetDoubl
5aa0: 65 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 34  e(interp, argv[4
5ab0: 5d 2c 20 26 72 29 20 29 20 72 65 74 75 72 6e 20  ], &r) ) return 
5ac0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 20 3d  TCL_ERROR;.  z =
5ad0: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
5ae0: 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20  (argv[1], a[0], 
5af0: 61 5b 31 5d 2c 20 72 29 3b 0a 20 20 54 63 6c 5f  a[1], r);.  Tcl_
5b00: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
5b10: 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71  erp, z, 0);.  sq
5b20: 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20  lite3_free(z);. 
5b30: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
5b40: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
5b50: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
5b60: 5f 73 63 61 6c 65 64 20 46 4f 52 4d 41 54 20 44  _scaled FORMAT D
5b70: 4f 55 42 4c 45 20 44 4f 55 42 4c 45 0a 2a 2a 0a  OUBLE DOUBLE.**.
5b80: 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20  ** Call mprintf 
5b90: 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f  with a single do
5ba0: 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68  uble argument wh
5bb0: 69 63 68 20 69 73 20 74 68 65 20 70 72 6f 64 75  ich is the produ
5bc0: 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77 6f  ct of the.** two
5bd0: 20 61 72 67 75 6d 65 6e 74 73 20 67 69 76 65 6e   arguments given
5be0: 20 61 62 6f 76 65 2e 20 20 54 68 69 73 20 69 73   above.  This is
5bf0: 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
5c00: 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20 75  e overflow and u
5c10: 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75 62  nderflow.** doub
5c20: 6c 65 73 20 74 6f 20 74 65 73 74 20 74 68 61 74  les to test that
5c30: 20 74 68 65 79 20 61 72 65 20 63 6f 6e 76 65 72   they are conver
5c40: 74 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a 2f  ted properly..*/
5c50: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
5c60: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c  te3_mprintf_scal
5c70: 65 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  ed(.  void *NotU
5c80: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
5c90: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
5ca0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
5cb0: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
5cc0: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
5cd0: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
5ce0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
5cf0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
5d00: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
5d10: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
5d20: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
5d30: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69  gument */.){.  i
5d40: 6e 74 20 69 3b 0a 20 20 64 6f 75 62 6c 65 20 72  nt i;.  double r
5d50: 5b 32 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  [2];.  char *z;.
5d60: 20 20 69 66 28 20 61 72 67 63 21 3d 34 20 29 7b    if( argc!=4 ){
5d70: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
5d80: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
5d90: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
5da0: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
5db0: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f  [0],.       " FO
5dc0: 52 4d 41 54 20 44 4f 55 42 4c 45 20 44 4f 55 42  RMAT DOUBLE DOUB
5dd0: 4c 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  LE\"", 0);.    r
5de0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
5df0: 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20  .  }.  for(i=2; 
5e00: 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<4; i++){.    i
5e10: 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65  f( Tcl_GetDouble
5e20: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d  (interp, argv[i]
5e30: 2c 20 26 72 5b 69 2d 32 5d 29 20 29 20 72 65 74  , &r[i-2]) ) ret
5e40: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
5e50: 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33   }.  z = sqlite3
5e60: 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d  _mprintf(argv[1]
5e70: 2c 20 72 5b 30 5d 2a 72 5b 31 5d 29 3b 0a 20 20  , r[0]*r[1]);.  
5e80: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
5e90: 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a  (interp, z, 0);.
5ea0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
5eb0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
5ec0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
5ed0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72  ge:  sqlite3_mpr
5ee0: 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 20 46 4f 52  intf_stronly FOR
5ef0: 4d 41 54 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a  MAT STRING.**.**
5f00: 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69   Call mprintf wi
5f10: 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f 75 62  th a single doub
5f20: 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63  le argument whic
5f30: 68 20 69 73 20 74 68 65 20 70 72 6f 64 75 63 74  h is the product
5f40: 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77 6f 20 61   of the.** two a
5f50: 72 67 75 6d 65 6e 74 73 20 67 69 76 65 6e 20 61  rguments given a
5f60: 62 6f 76 65 2e 20 20 54 68 69 73 20 69 73 20 75  bove.  This is u
5f70: 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  sed to generate 
5f80: 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20 75 6e 64  overflow and und
5f90: 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75 62 6c 65  erflow.** double
5fa0: 73 20 74 6f 20 74 65 73 74 20 74 68 61 74 20 74  s to test that t
5fb0: 68 65 79 20 61 72 65 20 63 6f 6e 76 65 72 74 65  hey are converte
5fc0: 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a 2f 0a 73  d properly..*/.s
5fd0: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
5fe0: 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c  3_mprintf_stronl
5ff0: 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  y(.  void *NotUs
6000: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
6010: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
6020: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
6030: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
6040: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
6050: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
6060: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
6070: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
6080: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
6090: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
60a0: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
60b0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68  ument */.){.  ch
60c0: 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67  ar *z;.  if( arg
60d0: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
60e0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
60f0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
6100: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
6110: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
6120: 20 20 20 22 20 46 4f 52 4d 41 54 20 53 54 52 49     " FORMAT STRI
6130: 4e 47 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  NG\"", 0);.    r
6140: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
6150: 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74  .  }.  z = sqlit
6160: 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b  e3_mprintf(argv[
6170: 31 5d 2c 20 61 72 67 76 5b 32 5d 29 3b 0a 20 20  1], argv[2]);.  
6180: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
6190: 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a  (interp, z, 0);.
61a0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
61b0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
61c0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
61d0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72  ge:  sqlite3_mpr
61e0: 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65 20 46  intf_hexdouble F
61f0: 4f 52 4d 41 54 20 48 45 58 0a 2a 2a 0a 2a 2a 20  ORMAT HEX.**.** 
6200: 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74  Call mprintf wit
6210: 68 20 61 20 73 69 6e 67 6c 65 20 64 6f 75 62 6c  h a single doubl
6220: 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63 68  e argument which
6230: 20 69 73 20 64 65 72 69 76 65 64 20 66 72 6f 6d   is derived from
6240: 20 74 68 65 0a 2a 2a 20 68 65 78 61 64 65 63 69   the.** hexadeci
6250: 6d 61 6c 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  mal encoding of 
6260: 61 6e 20 49 45 45 45 20 64 6f 75 62 6c 65 2e 0a  an IEEE double..
6270: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
6280: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65  lite3_mprintf_he
6290: 78 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64 20  xdouble(.  void 
62a0: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
62b0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
62c0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
62d0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
62e0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
62f0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
6300: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
6310: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
6320: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
6330: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
6340: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
6350: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
6360: 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 64  {.  char *z;.  d
6370: 6f 75 62 6c 65 20 72 3b 0a 20 20 75 6e 73 69 67  ouble r;.  unsig
6380: 6e 65 64 20 20 78 31 2c 20 78 32 3b 0a 20 20 6c  ned  x1, x2;.  l
6390: 6f 6e 67 20 6c 6f 6e 67 20 75 6e 73 69 67 6e 65  ong long unsigne
63a0: 64 20 64 3b 0a 20 20 69 66 28 20 61 72 67 63 21  d d;.  if( argc!
63b0: 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
63c0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
63d0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
63e0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
63f0: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
6400: 20 22 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47   " FORMAT STRING
6410: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
6420: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
6430: 20 7d 0a 20 20 69 66 28 20 73 73 63 61 6e 66 28   }.  if( sscanf(
6440: 61 72 67 76 5b 32 5d 2c 20 22 25 30 38 78 25 30  argv[2], "%08x%0
6450: 38 78 22 2c 20 26 78 32 2c 20 26 78 31 29 21 3d  8x", &x2, &x1)!=
6460: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
6470: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
6480: 2c 20 22 32 6e 64 20 61 72 67 75 6d 65 6e 74 20  , "2nd argument 
6490: 73 68 6f 75 6c 64 20 62 65 20 31 36 2d 63 68 61  should be 16-cha
64a0: 72 61 63 74 65 72 73 20 6f 66 20 68 65 78 22 2c  racters of hex",
64b0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
64c0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
64d0: 20 64 20 3d 20 78 32 3b 0a 20 20 64 20 3d 20 28   d = x2;.  d = (
64e0: 64 3c 3c 33 32 29 20 2b 20 78 31 3b 0a 20 20 6d  d<<32) + x1;.  m
64f0: 65 6d 63 70 79 28 26 72 2c 20 26 64 2c 20 73 69  emcpy(&r, &d, si
6500: 7a 65 6f 66 28 72 29 29 3b 0a 20 20 7a 20 3d 20  zeof(r));.  z = 
6510: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
6520: 61 72 67 76 5b 31 5d 2c 20 72 29 3b 0a 20 20 54  argv[1], r);.  T
6530: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
6540: 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20  interp, z, 0);. 
6550: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29   sqlite3_free(z)
6560: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
6570: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
6580: 65 3a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  e: sqlite_malloc
6590: 5f 66 61 69 6c 20 4e 20 20 3f 52 45 50 45 41 54  _fail N  ?REPEAT
65a0: 2d 49 4e 54 45 52 56 41 4c 3f 0a 2a 2a 0a 2a 2a  -INTERVAL?.**.**
65b0: 20 52 69 67 20 73 71 6c 69 74 65 4d 61 6c 6c 6f   Rig sqliteMallo
65c0: 63 28 29 20 74 6f 20 66 61 69 6c 20 6f 6e 20 74  c() to fail on t
65d0: 68 65 20 4e 2d 74 68 20 63 61 6c 6c 20 61 6e 64  he N-th call and
65e0: 20 65 76 65 72 79 20 52 45 50 45 41 54 2d 49 4e   every REPEAT-IN
65f0: 54 45 52 56 41 4c 20 63 61 6c 6c 0a 2a 2a 20 61  TERVAL call.** a
6600: 66 74 65 72 20 74 68 61 74 2e 20 20 49 66 20 52  fter that.  If R
6610: 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20 69  EPEAT-INTERVAL i
6620: 73 20 30 20 6f 72 20 69 73 20 6f 6d 69 74 74 65  s 0 or is omitte
6630: 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 61 20 73  d, then only a s
6640: 69 6e 67 6c 65 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  ingle.** malloc 
6650: 77 69 6c 6c 20 66 61 69 6c 2e 20 20 49 66 20 52  will fail.  If R
6660: 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20 69  EPEAT-INTERVAL i
6670: 73 20 31 20 74 68 65 6e 20 61 6c 6c 20 6d 61 6c  s 1 then all mal
6680: 6c 6f 63 73 20 61 66 74 65 72 20 74 68 65 0a 2a  locs after the.*
6690: 2a 20 66 69 72 73 74 20 66 61 69 6c 75 72 65 20  * first failure 
66a0: 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f  will continue to
66b0: 20 66 61 69 6c 20 6f 6e 20 65 76 65 72 79 20 63   fail on every c
66c0: 61 6c 6c 2e 20 20 49 66 20 52 45 50 45 41 54 2d  all.  If REPEAT-
66d0: 49 4e 54 45 52 56 41 4c 20 69 73 0a 2a 2a 20 32  INTERVAL is.** 2
66e0: 20 74 68 65 6e 20 65 76 65 72 79 20 6f 74 68 65   then every othe
66f0: 72 20 6d 61 6c 6c 6f 63 20 77 69 6c 6c 20 66 61  r malloc will fa
6700: 69 6c 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72 74  il.  And so fort
6710: 68 2e 0a 2a 2a 0a 2a 2a 20 54 75 72 6e 20 6f 66  h..**.** Turn of
6720: 66 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73 6d  f this mechanism
6730: 20 61 6e 64 20 72 65 73 65 74 20 74 68 65 20 73   and reset the s
6740: 71 6c 69 74 65 33 54 68 72 65 61 64 44 61 74 61  qlite3ThreadData
6750: 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  ()->mallocFailed
6760: 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 69 66   .** variable if
6770: 20 4e 3d 3d 30 2e 0a 2a 2f 0a 23 69 66 64 65 66   N==0..*/.#ifdef
6780: 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
6790: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
67a0: 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 28 0a  te_malloc_fail(.
67b0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
67c0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
67d0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
67e0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
67f0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
6800: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
6810: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
6820: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
6830: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
6840: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
6850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
6860: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
6870: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 6e  nt */.){.  int n
6880: 3b 0a 20 20 69 6e 74 20 72 65 70 3b 0a 20 20 69  ;.  int rep;.  i
6890: 66 28 20 61 72 67 63 21 3d 32 20 26 26 20 61 72  f( argc!=2 && ar
68a0: 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
68b0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
68c0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
68d0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
68e0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 4e  "", argv[0], " N
68f0: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
6900: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
6910: 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74   }.  if( Tcl_Get
6920: 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76  Int(interp, argv
6930: 5b 31 5d 2c 20 26 6e 29 20 29 20 72 65 74 75 72  [1], &n) ) retur
6940: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
6950: 66 28 20 61 72 67 63 3d 3d 33 20 29 7b 0a 20 20  f( argc==3 ){.  
6960: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
6970: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32 5d  (interp, argv[2]
6980: 2c 20 26 72 65 70 29 20 29 20 72 65 74 75 72 6e  , &rep) ) return
6990: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 65   TCL_ERROR;.  }e
69a0: 6c 73 65 7b 0a 20 20 20 20 72 65 70 20 3d 20 30  lse{.    rep = 0
69b0: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ;.  }.  sqlite3_
69c0: 69 4d 61 6c 6c 6f 63 46 61 69 6c 20 3d 20 6e 3b  iMallocFail = n;
69d0: 0a 20 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c  .  sqlite3_iMall
69e0: 6f 63 52 65 73 65 74 20 3d 20 72 65 70 3b 0a 20  ocReset = rep;. 
69f0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
6a00: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
6a10: 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f 6d 61  Usage: sqlite_ma
6a20: 6c 6c 6f 63 5f 73 74 61 74 0a 2a 2a 0a 2a 2a 20  lloc_stat.**.** 
6a30: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
6a40: 72 20 6f 66 20 70 72 69 6f 72 20 63 61 6c 6c 73  r of prior calls
6a50: 20 74 6f 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63   to sqliteMalloc
6a60: 28 29 20 61 6e 64 20 73 71 6c 69 74 65 46 72 65  () and sqliteFre
6a70: 65 28 29 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  e()..*/.#ifdef S
6a80: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 73  QLITE_MEMDEBUG.s
6a90: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
6aa0: 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 28 0a 20 20  _malloc_stat(.  
6ab0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
6ac0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
6ad0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
6ae0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
6af0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
6b00: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
6b10: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
6b20: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
6b30: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
6b40: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
6b50: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
6b60: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
6b70: 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 7a 42   */.){.  char zB
6b80: 75 66 5b 32 30 30 5d 3b 0a 20 20 73 70 72 69 6e  uf[200];.  sprin
6b90: 74 66 28 7a 42 75 66 2c 20 22 25 64 20 25 64 20  tf(zBuf, "%d %d 
6ba0: 25 64 22 2c 20 73 71 6c 69 74 65 33 5f 6e 4d 61  %d", sqlite3_nMa
6bb0: 6c 6c 6f 63 2c 73 71 6c 69 74 65 33 5f 6e 46 72  lloc,sqlite3_nFr
6bc0: 65 65 2c 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c  ee,sqlite3_iMall
6bd0: 6f 63 46 61 69 6c 29 3b 0a 20 20 54 63 6c 5f 41  ocFail);.  Tcl_A
6be0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
6bf0: 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20  rp, zBuf, 0);.  
6c00: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
6c10: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  ../*.** This fun
6c20: 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
6c30: 20 61 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 20 74   a Tcl command t
6c40: 68 61 74 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b  hat may be invok
6c50: 65 64 20 75 73 69 6e 67 20 61 6e 79 20 6f 66 0a  ed using any of.
6c60: 2a 2a 20 74 68 65 20 66 6f 75 72 20 66 6f 72 6d  ** the four form
6c70: 73 20 65 6e 75 6d 65 72 61 74 65 64 20 62 65 6c  s enumerated bel
6c80: 6f 77 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ow..**.** sqlite
6c90: 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64  _malloc_outstand
6ca0: 69 6e 67 0a 2a 2a 20 20 20 20 20 52 65 74 75 72  ing.**     Retur
6cb0: 6e 20 61 20 73 75 6d 6d 61 72 79 20 6f 66 20 61  n a summary of a
6cc0: 6c 6c 20 75 6e 66 72 65 65 64 20 62 6c 6f 63 6b  ll unfreed block
6cd0: 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  s of memory allo
6ce0: 63 61 74 65 64 20 62 79 20 74 68 65 0a 2a 2a 20  cated by the.** 
6cf0: 20 20 20 20 63 75 72 72 65 6e 74 20 74 68 72 65      current thre
6d00: 61 64 2e 20 53 65 65 20 63 6f 6d 6d 65 6e 74 73  ad. See comments
6d10: 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20   above function 
6d20: 73 71 6c 69 74 65 33 4f 75 74 73 74 61 6e 64 69  sqlite3Outstandi
6d30: 6e 67 4d 61 6c 6c 6f 63 73 28 29 20 0a 2a 2a 20  ngMallocs() .** 
6d40: 20 20 20 20 69 6e 20 75 74 69 6c 2e 63 20 66 6f      in util.c fo
6d50: 72 20 61 20 64 65 73 63 72 69 70 74 69 6f 6e 20  r a description 
6d60: 6f 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  of the returned 
6d70: 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  value..**.** sql
6d80: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74  ite_malloc_outst
6d90: 61 6e 64 69 6e 67 20 2d 62 79 74 65 73 0a 2a 2a  anding -bytes.**
6da0: 20 20 20 20 20 52 65 74 75 72 6e 20 74 68 65 20       Return the 
6db0: 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20  total amount of 
6dc0: 75 6e 66 72 65 65 64 20 6d 65 6d 6f 72 79 20 28  unfreed memory (
6dd0: 69 6e 20 62 79 74 65 73 29 20 61 6c 6c 6f 63 61  in bytes) alloca
6de0: 74 65 64 20 62 79 20 0a 2a 2a 20 20 20 20 20 74  ted by .**     t
6df0: 68 69 73 20 74 68 72 65 61 64 2e 0a 2a 2a 0a 2a  his thread..**.*
6e00: 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  * sqlite_malloc_
6e10: 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d 6d 61 78  outstanding -max
6e20: 62 79 74 65 73 0a 2a 2a 20 20 20 20 20 52 65 74  bytes.**     Ret
6e30: 75 72 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  urn the maximum 
6e40: 61 6d 6f 75 6e 74 20 6f 66 20 64 79 6e 61 6d 69  amount of dynami
6e50: 63 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20  c memory in use 
6e60: 61 74 20 6f 6e 65 20 74 69 6d 65 20 0a 2a 2a 20  at one time .** 
6e70: 20 20 20 20 62 79 20 74 68 69 73 20 74 68 72 65      by this thre
6e80: 61 64 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ad..**.** sqlite
6e90: 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64  _malloc_outstand
6ea0: 69 6e 67 20 2d 63 6c 65 61 72 6d 61 78 62 79 74  ing -clearmaxbyt
6eb0: 65 73 0a 2a 2a 20 20 20 20 20 53 65 74 20 74 68  es.**     Set th
6ec0: 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
6ed0: 20 62 79 20 5b 73 71 6c 69 74 65 5f 6d 61 6c 6c   by [sqlite_mall
6ee0: 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d  oc_outstanding -
6ef0: 6d 61 78 62 79 74 65 73 5d 0a 2a 2a 20 20 20 20  maxbytes].**    
6f00: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
6f10: 76 61 6c 75 65 20 6f 66 20 5b 73 71 6c 69 74 65  value of [sqlite
6f20: 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64  _malloc_outstand
6f30: 69 6e 67 20 2d 62 79 74 65 73 5d 2e 20 0a 2a 2f  ing -bytes]. .*/
6f40: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
6f50: 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61  te_malloc_outsta
6f60: 6e 64 69 6e 67 28 0a 20 20 43 6c 69 65 6e 74 44  nding(.  ClientD
6f70: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  ata clientData,.
6f80: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
6f90: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
6fa0: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
6fb0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
6fc0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
6fd0: 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20  nt objc,        
6fe0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
6ff0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
7000: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
7010: 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d   objv[]  /* Comm
7020: 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f  and arguments */
7030: 0a 29 7b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  .){.  extern int
7040: 20 73 71 6c 69 74 65 33 4f 75 74 73 74 61 6e 64   sqlite3Outstand
7050: 69 6e 67 4d 61 6c 6c 6f 63 73 28 54 63 6c 5f 49  ingMallocs(Tcl_I
7060: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29 3b 0a  nterp *interp);.
7070: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
7080: 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64 65  ITE_DEBUG) && de
7090: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
70a0: 44 45 42 55 47 29 20 26 26 20 53 51 4c 49 54 45  DEBUG) && SQLITE
70b0: 5f 4d 45 4d 44 45 42 55 47 3e 31 0a 20 20 69 66  _MEMDEBUG>1.  if
70c0: 28 20 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20  ( objc==2 ){.   
70d0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72   const char *zAr
70e0: 67 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  g = Tcl_GetStrin
70f0: 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 23 69 66 64  g(objv[1]);.#ifd
7100: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
7110: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
7120: 4e 54 0a 20 20 20 20 54 68 72 65 61 64 44 61 74  NT.    ThreadDat
7130: 61 20 63 6f 6e 73 74 20 2a 70 54 64 20 3d 20 73  a const *pTd = s
7140: 71 6c 69 74 65 33 54 68 72 65 61 64 44 61 74 61  qlite3ThreadData
7150: 52 65 61 64 4f 6e 6c 79 28 29 3b 0a 20 20 20 20  ReadOnly();.    
7160: 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 7a 41  if( 0==strcmp(zA
7170: 72 67 2c 20 22 2d 62 79 74 65 73 22 29 20 29 7b  rg, "-bytes") ){
7180: 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 4f 62  .      Tcl_SetOb
7190: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
71a0: 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 70 54  Tcl_NewIntObj(pT
71b0: 64 2d 3e 6e 41 6c 6c 6f 63 29 29 3b 0a 20 20 20  d->nAlloc));.   
71c0: 20 7d 65 6c 73 65 20 69 66 28 20 30 3d 3d 73 74   }else if( 0==st
71d0: 72 63 6d 70 28 7a 41 72 67 2c 20 22 2d 63 6c 65  rcmp(zArg, "-cle
71e0: 61 72 6d 61 78 62 79 74 65 73 22 29 20 29 7b 0a  armaxbytes") ){.
71f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6e 4d        sqlite3_nM
7200: 61 78 41 6c 6c 6f 63 20 3d 20 70 54 64 2d 3e 6e  axAlloc = pTd->n
7210: 41 6c 6c 6f 63 3b 0a 20 20 20 20 7d 65 6c 73 65  Alloc;.    }else
7220: 20 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28   .#endif.    if(
7230: 20 30 3d 3d 73 74 72 63 6d 70 28 7a 41 72 67 2c   0==strcmp(zArg,
7240: 20 22 2d 6d 61 78 62 79 74 65 73 22 29 20 29 7b   "-maxbytes") ){
7250: 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 4f 62  .      Tcl_SetOb
7260: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
7270: 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62  Tcl_NewWideIntOb
7280: 6a 28 73 71 6c 69 74 65 33 5f 6e 4d 61 78 41 6c  j(sqlite3_nMaxAl
7290: 6c 6f 63 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65  loc));.    }else
72a0: 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41 70 70 65  {.      Tcl_Appe
72b0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
72c0: 20 22 62 61 64 20 6f 70 74 69 6f 6e 20 5c 22 22   "bad option \""
72d0: 2c 20 7a 41 72 67 2c 20 0a 20 20 20 20 20 20 20  , zArg, .       
72e0: 20 22 5c 22 3a 20 6d 75 73 74 20 62 65 20 2d 62   "\": must be -b
72f0: 79 74 65 73 2c 20 2d 6d 61 78 62 79 74 65 73 20  ytes, -maxbytes 
7300: 6f 72 20 2d 63 6c 65 61 72 6d 61 78 62 79 74 65  or -clearmaxbyte
7310: 73 22 2c 20 30 0a 20 20 20 20 20 20 29 3b 0a 20  s", 0.      );. 
7320: 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f       return TCL_
7330: 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 0a 20 20  ERROR;.    }..  
7340: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
7350: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 6f 62 6a 63  .  }..  if( objc
7360: 21 3d 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=1 ){.    Tcl_W
7370: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
7380: 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 2d  rp, 1, objv, "?-
7390: 62 79 74 65 73 3f 22 29 3b 0a 20 20 20 20 72 65  bytes?");.    re
73a0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
73b0: 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 73 71    }..  return sq
73c0: 6c 69 74 65 33 4f 75 74 73 74 61 6e 64 69 6e 67  lite3Outstanding
73d0: 4d 61 6c 6c 6f 63 73 28 69 6e 74 65 72 70 29 3b  Mallocs(interp);
73e0: 0a 23 65 6c 73 65 0a 20 20 72 65 74 75 72 6e 20  .#else.  return 
73f0: 54 43 4c 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 7d  TCL_OK;.#endif.}
7400: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55  .#endif../*.** U
7410: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 65 6e  sage: sqlite3_en
7420: 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68  able_shared_cach
7430: 65 20 20 20 20 20 20 42 4f 4f 4c 45 41 4e 0a 2a  e      BOOLEAN.*
7440: 2a 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  *.*/.#if !define
7450: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  d(SQLITE_OMIT_SH
7460: 41 52 45 44 5f 43 41 43 48 45 29 0a 73 74 61 74  ARED_CACHE).stat
7470: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 6e 61 62  ic int test_enab
7480: 6c 65 5f 73 68 61 72 65 64 28 0a 20 20 43 6c 69  le_shared(.  Cli
7490: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
74a0: 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  ta, /* Pointer t
74b0: 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  o sqlite3_enable
74c0: 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  _XXX function */
74d0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
74e0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
74f0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
7500: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
7510: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
7520: 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
7530: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
7540: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
7550: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
7560: 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
7570: 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
7580: 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  /.){.  int rc;. 
7590: 20 69 6e 74 20 65 6e 61 62 6c 65 3b 0a 20 20 69   int enable;.  i
75a0: 6e 74 20 72 65 74 20 3d 20 30 3b 0a 0a 20 20 69  nt ret = 0;..  i
75b0: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
75c0: 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
75d0: 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
75e0: 6a 76 2c 20 22 42 4f 4f 4c 45 41 4e 22 29 3b 0a  jv, "BOOLEAN");.
75f0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
7600: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
7610: 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72  Tcl_GetBooleanFr
7620: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
7630: 6a 76 5b 31 5d 2c 20 26 65 6e 61 62 6c 65 29 20  jv[1], &enable) 
7640: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
7650: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
7660: 65 74 20 3d 20 73 71 6c 69 74 65 33 54 68 72 65  et = sqlite3Thre
7670: 61 64 44 61 74 61 52 65 61 64 4f 6e 6c 79 28 29  adDataReadOnly()
7680: 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 3b  ->useSharedData;
7690: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
76a0: 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61  enable_shared_ca
76b0: 63 68 65 28 65 6e 61 62 6c 65 29 3b 0a 20 20 69  che(enable);.  i
76c0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
76d0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52   ){.    Tcl_SetR
76e0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
76f0: 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72 72  har *)sqlite3Err
7700: 53 74 72 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  Str(rc), TCL_STA
7710: 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  TIC);.    return
7720: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
7730: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
7740: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
7750: 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 72 65 74  ewBooleanObj(ret
7760: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
7770: 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  _OK;.}.#endif../
7780: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
7790: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e  te3_libversion_n
77a0: 75 6d 62 65 72 0a 2a 2a 0a 2a 2f 0a 73 74 61 74  umber.**.*/.stat
77b0: 69 63 20 69 6e 74 20 74 65 73 74 5f 6c 69 62 76  ic int test_libv
77c0: 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 0a 20  ersion_number(. 
77d0: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
77e0: 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74  ntData, /* Point
77f0: 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e  er to sqlite3_en
7800: 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f  able_XXX functio
7810: 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  n */.  Tcl_Inter
7820: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
7830: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
7840: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
7850: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
7860: 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
7870: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
7880: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
7890: 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
78a0: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
78b0: 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
78c0: 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 53  ts */.){.  Tcl_S
78d0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
78e0: 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
78f0: 6a 28 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72  j(sqlite3_libver
7900: 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 29 29 3b  sion_number()));
7910: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
7920: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
7930: 3a 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  : sqlite3_table_
7940: 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 20  column_metadata 
7950: 44 42 20 64 62 6e 61 6d 65 20 74 62 6c 6e 61 6d  DB dbname tblnam
7960: 65 20 63 6f 6c 6e 61 6d 65 0a 2a 2a 0a 2a 2f 0a  e colname.**.*/.
7970: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
7980: 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41  ABLE_COLUMN_META
7990: 44 41 54 41 0a 73 74 61 74 69 63 20 69 6e 74 20  DATA.static int 
79a0: 74 65 73 74 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d  test_table_colum
79b0: 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20 20 43 6c  n_metadata(.  Cl
79c0: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
79d0: 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20  ata, /* Pointer 
79e0: 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  to sqlite3_enabl
79f0: 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a  e_XXX function *
7a00: 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
7a10: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
7a20: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
7a30: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
7a40: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
7a50: 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20   int objc,      
7a60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
7a70: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
7a80: 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  /.  Tcl_Obj *CON
7a90: 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f  ST objv[]  /* Co
7aa0: 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20  mmand arguments 
7ab0: 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  */.){.  sqlite3 
7ac0: 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  *db;.  const cha
7ad0: 72 20 2a 7a 44 62 3b 0a 20 20 63 6f 6e 73 74 20  r *zDb;.  const 
7ae0: 63 68 61 72 20 2a 7a 54 62 6c 3b 0a 20 20 63 6f  char *zTbl;.  co
7af0: 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 0a  nst char *zCol;.
7b00: 20 20 69 6e 74 20 72 63 3b 0a 20 20 54 63 6c 5f    int rc;.  Tcl_
7b10: 4f 62 6a 20 2a 70 52 65 74 3b 0a 0a 20 20 63 6f  Obj *pRet;..  co
7b20: 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 61 74  nst char *zDatat
7b30: 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  ype;.  const cha
7b40: 72 20 2a 7a 43 6f 6c 6c 73 65 71 3b 0a 20 20 69  r *zCollseq;.  i
7b50: 6e 74 20 6e 6f 74 6e 75 6c 6c 3b 0a 20 20 69 6e  nt notnull;.  in
7b60: 74 20 70 72 69 6d 61 72 79 6b 65 79 3b 0a 20 20  t primarykey;.  
7b70: 69 6e 74 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  int autoincremen
7b80: 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  t;..  if( objc!=
7b90: 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  5 ){.    Tcl_Wro
7ba0: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
7bb0: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42 20 64  , 1, objv, "DB d
7bc0: 62 6e 61 6d 65 20 74 62 6c 6e 61 6d 65 20 63 6f  bname tblname co
7bd0: 6c 6e 61 6d 65 22 29 3b 0a 20 20 20 20 72 65 74  lname");.    ret
7be0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
7bf0: 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
7c00: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
7c10: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
7c20: 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
7c30: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
7c40: 20 7a 44 62 20 3d 20 54 63 6c 5f 47 65 74 53 74   zDb = Tcl_GetSt
7c50: 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20  ring(objv[2]);. 
7c60: 20 7a 54 62 6c 20 3d 20 54 63 6c 5f 47 65 74 53   zTbl = Tcl_GetS
7c70: 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a  tring(objv[3]);.
7c80: 20 20 7a 43 6f 6c 20 3d 20 54 63 6c 5f 47 65 74    zCol = Tcl_Get
7c90: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 34 5d 29 3b  String(objv[4]);
7ca0: 0a 0a 20 20 69 66 28 20 73 74 72 6c 65 6e 28 7a  ..  if( strlen(z
7cb0: 44 62 29 3d 3d 30 20 29 20 7a 44 62 20 3d 20 30  Db)==0 ) zDb = 0
7cc0: 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
7cd0: 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d  3_table_column_m
7ce0: 65 74 61 64 61 74 61 28 64 62 2c 20 7a 44 62 2c  etadata(db, zDb,
7cf0: 20 7a 54 62 6c 2c 20 7a 43 6f 6c 2c 20 0a 20 20   zTbl, zCol, .  
7d00: 20 20 20 20 26 7a 44 61 74 61 74 79 70 65 2c 20      &zDatatype, 
7d10: 26 7a 43 6f 6c 6c 73 65 71 2c 20 26 6e 6f 74 6e  &zCollseq, &notn
7d20: 75 6c 6c 2c 20 26 70 72 69 6d 61 72 79 6b 65 79  ull, &primarykey
7d30: 2c 20 26 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  , &autoincrement
7d40: 29 3b 0a 0a 20 20 69 66 28 20 72 63 21 3d 53 51  );..  if( rc!=SQ
7d50: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54  LITE_OK ){.    T
7d60: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
7d70: 69 6e 74 65 72 70 2c 20 73 71 6c 69 74 65 33 5f  interp, sqlite3_
7d80: 65 72 72 6d 73 67 28 64 62 29 2c 20 30 29 3b 0a  errmsg(db), 0);.
7d90: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
7da0: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 70 52 65  RROR;.  }..  pRe
7db0: 74 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29  t = Tcl_NewObj()
7dc0: 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
7dd0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20  ppendElement(0, 
7de0: 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72  pRet, Tcl_NewStr
7df0: 69 6e 67 4f 62 6a 28 7a 44 61 74 61 74 79 70 65  ingObj(zDatatype
7e00: 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69  , -1));.  Tcl_Li
7e10: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
7e20: 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63 6c 5f  nt(0, pRet, Tcl_
7e30: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 43 6f  NewStringObj(zCo
7e40: 6c 6c 73 65 71 2c 20 2d 31 29 29 3b 0a 20 20 54  llseq, -1));.  T
7e50: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
7e60: 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c  Element(0, pRet,
7e70: 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e   Tcl_NewIntObj(n
7e80: 6f 74 6e 75 6c 6c 29 29 3b 0a 20 20 54 63 6c 5f  otnull));.  Tcl_
7e90: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
7ea0: 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63  ment(0, pRet, Tc
7eb0: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 70 72 69 6d  l_NewIntObj(prim
7ec0: 61 72 79 6b 65 79 29 29 3b 0a 20 20 54 63 6c 5f  arykey));.  Tcl_
7ed0: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
7ee0: 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63  ment(0, pRet, Tc
7ef0: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 75 74 6f  l_NewIntObj(auto
7f00: 69 6e 63 72 65 6d 65 6e 74 29 29 3b 0a 20 20 54  increment));.  T
7f10: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
7f20: 69 6e 74 65 72 70 2c 20 70 52 65 74 29 3b 0a 0a  interp, pRet);..
7f30: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
7f40: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  .}.#endif../*.**
7f50: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f   Usage:  sqlite_
7f60: 61 62 6f 72 74 0a 2a 2a 0a 2a 2a 20 53 68 75 74  abort.**.** Shut
7f70: 64 6f 77 6e 20 74 68 65 20 70 72 6f 63 65 73 73  down the process
7f80: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54   immediately.  T
7f90: 68 69 73 20 69 73 20 6e 6f 74 20 61 20 63 6c 65  his is not a cle
7fa0: 61 6e 20 73 68 75 74 64 6f 77 6e 2e 0a 2a 2a 20  an shutdown..** 
7fb0: 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20  This command is 
7fc0: 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65  used to test the
7fd0: 20 72 65 63 6f 76 65 72 61 62 69 6c 69 74 79 20   recoverability 
7fe0: 6f 66 20 61 20 64 61 74 61 62 61 73 65 20 69 6e  of a database in
7ff0: 0a 2a 2a 20 74 68 65 20 65 76 65 6e 74 20 6f 66  .** the event of
8000: 20 61 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68   a program crash
8010: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
8020: 73 71 6c 69 74 65 5f 61 62 6f 72 74 28 0a 20 20  sqlite_abort(.  
8030: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
8040: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
8050: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
8060: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
8070: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
8080: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
8090: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
80a0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
80b0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
80c0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
80d0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
80e0: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
80f0: 20 2a 2f 0a 29 7b 0a 20 20 61 73 73 65 72 74 28   */.){.  assert(
8100: 20 69 6e 74 65 72 70 3d 3d 30 20 29 3b 20 20 20   interp==0 );   
8110: 2f 2a 20 54 68 69 73 20 77 69 6c 6c 20 61 6c 77  /* This will alw
8120: 61 79 73 20 66 61 69 6c 20 2a 2f 0a 20 20 72 65  ays fail */.  re
8130: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
8140: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
8150: 69 6e 67 20 72 6f 75 74 69 6e 65 20 69 73 20 61  ing routine is a
8160: 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 53 51   user-defined SQ
8170: 4c 20 66 75 6e 63 74 69 6f 6e 20 77 68 6f 73 65  L function whose
8180: 20 70 75 72 70 6f 73 65 0a 2a 2a 20 69 73 20 74   purpose.** is t
8190: 6f 20 74 65 73 74 20 74 68 65 20 73 71 6c 69 74  o test the sqlit
81a0: 65 5f 73 65 74 5f 72 65 73 75 6c 74 28 29 20 41  e_set_result() A
81b0: 50 49 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  PI..*/.static vo
81c0: 69 64 20 74 65 73 74 46 75 6e 63 28 73 71 6c 69  id testFunc(sqli
81d0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
81e0: 74 65 78 74 2c 20 69 6e 74 20 61 72 67 63 2c 20  text, int argc, 
81f0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
8200: 61 72 67 76 29 7b 0a 20 20 77 68 69 6c 65 28 20  argv){.  while( 
8210: 61 72 67 63 3e 3d 32 20 29 7b 0a 20 20 20 20 63  argc>=2 ){.    c
8220: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 30  onst char *zArg0
8230: 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65   = (char*)sqlite
8240: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
8250: 76 5b 30 5d 29 3b 0a 20 20 20 20 69 66 28 20 7a  v[0]);.    if( z
8260: 41 72 67 30 20 29 7b 0a 20 20 20 20 20 20 69 66  Arg0 ){.      if
8270: 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49  ( 0==sqlite3StrI
8280: 43 6d 70 28 7a 41 72 67 30 2c 20 22 69 6e 74 22  Cmp(zArg0, "int"
8290: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ) ){.        sql
82a0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28  ite3_result_int(
82b0: 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69 74 65 33  context, sqlite3
82c0: 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b  _value_int(argv[
82d0: 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  1]));.      }els
82e0: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
82f0: 49 43 6d 70 28 7a 41 72 67 30 2c 22 69 6e 74 36  ICmp(zArg0,"int6
8300: 34 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  4")==0 ){.      
8310: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
8320: 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20  _int64(context, 
8330: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
8340: 74 36 34 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20  t64(argv[1]));. 
8350: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
8360: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41  qlite3StrICmp(zA
8370: 72 67 30 2c 22 73 74 72 69 6e 67 22 29 3d 3d 30  rg0,"string")==0
8380: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
8390: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
83a0: 63 6f 6e 74 65 78 74 2c 20 28 63 68 61 72 2a 29  context, (char*)
83b0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
83c0: 78 74 28 61 72 67 76 5b 31 5d 29 2c 20 2d 31 2c  xt(argv[1]), -1,
83d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
83e0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
83f0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
8400: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
8410: 41 72 67 30 2c 22 64 6f 75 62 6c 65 22 29 3d 3d  Arg0,"double")==
8420: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
8430: 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62  ite3_result_doub
8440: 6c 65 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69  le(context, sqli
8450: 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
8460: 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20 20  (argv[1]));.    
8470: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
8480: 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30  te3StrICmp(zArg0
8490: 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20  ,"null")==0 ){. 
84a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
84b0: 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65  esult_null(conte
84c0: 78 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  xt);.      }else
84d0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
84e0: 43 6d 70 28 7a 41 72 67 30 2c 22 76 61 6c 75 65  Cmp(zArg0,"value
84f0: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
8500: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
8510: 76 61 6c 75 65 28 63 6f 6e 74 65 78 74 2c 20 61  value(context, a
8520: 72 67 76 5b 73 71 6c 69 74 65 33 5f 76 61 6c 75  rgv[sqlite3_valu
8530: 65 5f 69 6e 74 28 61 72 67 76 5b 31 5d 29 5d 29  e_int(argv[1])])
8540: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
8550: 20 20 20 20 20 20 20 67 6f 74 6f 20 65 72 72 6f         goto erro
8560: 72 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  r_out;.      }. 
8570: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
8580: 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b 0a  goto error_out;.
8590: 20 20 20 20 7d 0a 20 20 20 20 61 72 67 63 20 2d      }.    argc -
85a0: 3d 20 32 3b 0a 20 20 20 20 61 72 67 76 20 2b 3d  = 2;.    argv +=
85b0: 20 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   2;.  }.  return
85c0: 3b 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a 20 20  ;..error_out:.  
85d0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
85e0: 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 22 66 69  rror(context,"fi
85f0: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 73 68 6f  rst argument sho
8600: 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20 22  uld be one of: "
8610: 0a 20 20 20 20 20 20 22 69 6e 74 20 69 6e 74 36  .      "int int6
8620: 34 20 73 74 72 69 6e 67 20 64 6f 75 62 6c 65 20  4 string double 
8630: 6e 75 6c 6c 20 76 61 6c 75 65 22 2c 20 2d 31 29  null value", -1)
8640: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
8650: 3a 20 20 20 73 71 6c 69 74 65 5f 72 65 67 69 73  :   sqlite_regis
8660: 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  ter_test_functio
8670: 6e 20 20 44 42 20 20 4e 41 4d 45 0a 2a 2a 0a 2a  n  DB  NAME.**.*
8680: 2a 20 52 65 67 69 73 74 65 72 20 74 68 65 20 74  * Register the t
8690: 65 73 74 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  est SQL function
86a0: 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
86b0: 20 44 42 20 75 6e 64 65 72 20 74 68 65 20 6e 61   DB under the na
86c0: 6d 65 20 4e 41 4d 45 2e 0a 2a 2f 0a 73 74 61 74  me NAME..*/.stat
86d0: 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65 67 69  ic int test_regi
86e0: 73 74 65 72 5f 66 75 6e 63 28 0a 20 20 76 6f 69  ster_func(.  voi
86f0: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
8700: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
8710: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
8720: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
8730: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
8740: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
8750: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
8760: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
8770: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
8780: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
8790: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
87a0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
87b0: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
87c0: 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  b;.  int rc;.  i
87d0: 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  f( argc!=3 ){.  
87e0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
87f0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
8800: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
8810: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
8820: 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 20 46  , .       " DB F
8830: 55 4e 43 54 49 4f 4e 2d 4e 41 4d 45 22 2c 20 30  UNCTION-NAME", 0
8840: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
8850: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
8860: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
8870: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
8880: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
8890: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
88a0: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
88b0: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 61 72 67  function(db, arg
88c0: 76 5b 32 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45  v[2], -1, SQLITE
88d0: 5f 55 54 46 38 2c 20 30 2c 20 0a 20 20 20 20 20  _UTF8, 0, .     
88e0: 20 74 65 73 74 46 75 6e 63 2c 20 30 2c 20 30 29   testFunc, 0, 0)
88f0: 3b 0a 20 20 69 66 28 20 72 63 21 3d 30 20 29 7b  ;.  if( rc!=0 ){
8900: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
8910: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71  esult(interp, sq
8920: 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 2c  lite3ErrStr(rc),
8930: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
8940: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
8950: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
8960: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
8970: 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
8980: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65   TCL_ERROR;.  re
8990: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
89a0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
89b0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 20  lite3_finalize  
89c0: 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 46 69 6e 61  STMT .**.** Fina
89d0: 6c 69 7a 65 20 61 20 73 74 61 74 65 6d 65 6e 74  lize a statement
89e0: 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74   handle..*/.stat
89f0: 69 63 20 69 6e 74 20 74 65 73 74 5f 66 69 6e 61  ic int test_fina
8a00: 6c 69 7a 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  lize(.  void * c
8a10: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
8a20: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
8a30: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
8a40: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
8a50: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
8a60: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
8a70: 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74   int rc;.  sqlit
8a80: 65 33 20 2a 64 62 3b 0a 0a 20 20 69 66 28 20 6f  e3 *db;..  if( o
8a90: 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
8aa0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
8ab0: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
8ac0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
8ad0: 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c  \"",.        Tcl
8ae0: 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
8af0: 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
8b00: 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20 20   <STMT>", 0);.  
8b10: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
8b20: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
8b30: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
8b40: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
8b50: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
8b60: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
8b70: 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66 28  CL_ERROR;..  if(
8b80: 20 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 64 62   pStmt ){.    db
8b90: 20 3d 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d   = StmtToDb(pStm
8ba0: 74 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  t);.  }.  rc = s
8bb0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
8bc0: 70 53 74 6d 74 29 3b 0a 20 20 54 63 6c 5f 53 65  pStmt);.  Tcl_Se
8bd0: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
8be0: 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d  (char *)errorNam
8bf0: 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49  e(rc), TCL_STATI
8c00: 43 29 3b 0a 20 20 69 66 28 20 64 62 20 26 26 20  C);.  if( db && 
8c10: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
8c20: 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
8c30: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
8c40: 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20  ERROR;.  return 
8c50: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
8c60: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
8c70: 5f 72 65 73 65 74 20 20 53 54 4d 54 20 0a 2a 2a  _reset  STMT .**
8c80: 0a 2a 2a 20 52 65 73 65 74 20 61 20 73 74 61 74  .** Reset a stat
8c90: 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f  ement handle..*/
8ca0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
8cb0: 5f 72 65 73 65 74 28 0a 20 20 76 6f 69 64 20 2a  _reset(.  void *
8cc0: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
8cd0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
8ce0: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
8cf0: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
8d00: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
8d10: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
8d20: 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
8d30: 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
8d40: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
8d50: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
8d60: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
8d70: 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
8d80: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
8d90: 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
8da0: 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b  , " <STMT>", 0);
8db0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
8dc0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
8dd0: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
8de0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
8df0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
8e00: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
8e10: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
8e20: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73  rc = sqlite3_res
8e30: 65 74 28 70 53 74 6d 74 29 3b 0a 20 20 69 66 28  et(pStmt);.  if(
8e40: 20 70 53 74 6d 74 20 26 26 20 73 71 6c 69 74 65   pStmt && sqlite
8e50: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
8e60: 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53  erp, StmtToDb(pS
8e70: 74 6d 74 29 2c 20 72 63 29 20 29 7b 0a 20 20 20  tmt), rc) ){.   
8e80: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
8e90: 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74  R;.  }.  Tcl_Set
8ea0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
8eb0: 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65  char *)errorName
8ec0: 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43  (rc), TCL_STATIC
8ed0: 29 3b 0a 2f 2a 0a 20 20 69 66 28 20 72 63 20 29  );./*.  if( rc )
8ee0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
8ef0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 2a 2f 0a 20  _ERROR;.  }.*/. 
8f00: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
8f10: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
8f20: 20 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64   sqlite3_expired
8f30: 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74   STMT .**.** Ret
8f40: 75 72 6e 20 54 52 55 45 20 69 66 20 61 20 72 65  urn TRUE if a re
8f50: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 66 20 74  compilation of t
8f60: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  he statement is 
8f70: 72 65 63 6f 6d 6d 65 6e 64 65 64 2e 0a 2a 2f 0a  recommended..*/.
8f80: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
8f90: 65 78 70 69 72 65 64 28 0a 20 20 76 6f 69 64 20  expired(.  void 
8fa0: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
8fb0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
8fc0: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
8fd0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
8fe0: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
8ff0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
9000: 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ;.  if( objc!=2 
9010: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
9020: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
9030: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
9040: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
9050: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
9060: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
9070: 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54 4d 54 3e  0], 0), " <STMT>
9080: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
9090: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
90a0: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
90b0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
90c0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
90d0: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
90e0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
90f0: 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
9100: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
9110: 5f 4e 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 73  _NewBooleanObj(s
9120: 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64 28 70  qlite3_expired(p
9130: 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72  Stmt)));.  retur
9140: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
9150: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
9160: 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64  e3_transfer_bind
9170: 69 6e 67 73 20 46 52 4f 4d 53 54 4d 54 20 54 4f  ings FROMSTMT TO
9180: 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  STMT.**.** Trans
9190: 66 65 72 20 61 6c 6c 20 62 69 6e 64 69 6e 67 73  fer all bindings
91a0: 20 66 72 6f 6d 20 46 52 4f 4d 53 54 4d 54 20 6f   from FROMSTMT o
91b0: 76 65 72 20 74 6f 20 54 4f 53 54 4d 54 0a 2a 2f  ver to TOSTMT.*/
91c0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
91d0: 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 28 0a  _transfer_bind(.
91e0: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
91f0: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
9200: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
9210: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
9220: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
9230: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
9240: 20 2a 70 53 74 6d 74 31 2c 20 2a 70 53 74 6d 74   *pStmt1, *pStmt
9250: 32 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  2;.  if( objc!=3
9260: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
9270: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
9280: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
9290: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
92a0: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
92b0: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
92c0: 5b 30 5d 2c 20 30 29 2c 20 22 20 46 52 4f 4d 2d  [0], 0), " FROM-
92d0: 53 54 4d 54 20 54 4f 2d 53 54 4d 54 22 2c 20 30  STMT TO-STMT", 0
92e0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
92f0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
9300: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
9310: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
9320: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
9330: 2c 20 26 70 53 74 6d 74 31 29 29 20 72 65 74 75  , &pStmt1)) retu
9340: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
9350: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
9360: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
9370: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d  etString(objv[2]
9380: 29 2c 20 26 70 53 74 6d 74 32 29 29 20 72 65 74  ), &pStmt2)) ret
9390: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
93a0: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
93b0: 74 28 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20  t(interp, .     
93c0: 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71  Tcl_NewIntObj(sq
93d0: 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62  lite3_transfer_b
93e0: 69 6e 64 69 6e 67 73 28 70 53 74 6d 74 31 2c 70  indings(pStmt1,p
93f0: 53 74 6d 74 32 29 29 29 3b 0a 20 20 72 65 74 75  Stmt2)));.  retu
9400: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
9410: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
9420: 74 65 33 5f 63 68 61 6e 67 65 73 20 44 42 0a 2a  te3_changes DB.*
9430: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
9440: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65  number of change
9450: 73 20 6d 61 64 65 20 74 6f 20 74 68 65 20 64 61  s made to the da
9460: 74 61 62 61 73 65 20 62 79 20 74 68 65 20 6c 61  tabase by the la
9470: 73 74 20 53 51 4c 0a 2a 2a 20 65 78 65 63 75 74  st SQL.** execut
9480: 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ion..*/.static i
9490: 6e 74 20 74 65 73 74 5f 63 68 61 6e 67 65 73 28  nt test_changes(
94a0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
94b0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
94c0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
94d0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
94e0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
94f0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
9500: 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ;.  if( objc!=2 
9510: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
9520: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
9530: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
9540: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
9550: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
9560: 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44  ng(objv[0]), " D
9570: 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  B", 0);.    retu
9580: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
9590: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
95a0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
95b0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
95c0: 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
95d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
95e0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
95f0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
9600: 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63  IntObj(sqlite3_c
9610: 68 61 6e 67 65 73 28 64 62 29 29 29 3b 0a 20 20  hanges(db)));.  
9620: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
9630: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
9640: 74 68 65 20 22 73 74 61 74 69 63 5f 62 69 6e 64  the "static_bind
9650: 5f 76 61 6c 75 65 22 20 74 68 61 74 20 76 61 72  _value" that var
9660: 69 61 62 6c 65 73 20 61 72 65 20 62 6f 75 6e 64  iables are bound
9670: 20 74 6f 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20   to when.** the 
9680: 46 4c 41 47 20 6f 70 74 69 6f 6e 20 6f 66 20 73  FLAG option of s
9690: 71 6c 69 74 65 33 5f 62 69 6e 64 20 69 73 20 22  qlite3_bind is "
96a0: 73 74 61 74 69 63 22 0a 2a 2f 0a 73 74 61 74 69  static".*/.stati
96b0: 63 20 63 68 61 72 20 2a 73 71 6c 69 74 65 5f 73  c char *sqlite_s
96c0: 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65  tatic_bind_value
96d0: 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 55 73 61   = 0;../*.** Usa
96e0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  ge:  sqlite3_bin
96f0: 64 20 20 56 4d 20 20 49 44 58 20 20 56 41 4c 55  d  VM  IDX  VALU
9700: 45 20 20 46 4c 41 47 53 0a 2a 2a 0a 2a 2a 20 53  E  FLAGS.**.** S
9710: 65 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ets the value of
9720: 20 74 68 65 20 49 44 58 2d 74 68 20 6f 63 63 75   the IDX-th occu
9730: 72 61 6e 63 65 20 6f 66 20 22 3f 22 20 69 6e 20  rance of "?" in 
9740: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c  the original SQL
9750: 0a 2a 2a 20 73 74 72 69 6e 67 2e 20 20 56 41 4c  .** string.  VAL
9760: 55 45 20 69 73 20 74 68 65 20 6e 65 77 20 76 61  UE is the new va
9770: 6c 75 65 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d  lue.  If FLAGS==
9780: 22 6e 75 6c 6c 22 20 74 68 65 6e 20 56 41 4c 55  "null" then VALU
9790: 45 20 69 73 0a 2a 2a 20 69 67 6e 6f 72 65 64 20  E is.** ignored 
97a0: 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 73  and the value is
97b0: 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 49   set to NULL.  I
97c0: 66 20 46 4c 41 47 53 3d 3d 22 73 74 61 74 69 63  f FLAGS=="static
97d0: 22 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 76 61  " then.** the va
97e0: 6c 75 65 20 69 73 20 73 65 74 20 74 6f 20 74 68  lue is set to th
97f0: 65 20 76 61 6c 75 65 20 6f 66 20 61 20 73 74 61  e value of a sta
9800: 74 69 63 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  tic variable nam
9810: 65 64 0a 2a 2a 20 22 73 71 6c 69 74 65 5f 73 74  ed.** "sqlite_st
9820: 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 22  atic_bind_value"
9830: 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e 6f  .  If FLAGS=="no
9840: 72 6d 61 6c 22 20 74 68 65 6e 20 61 20 63 6f 70  rmal" then a cop
9850: 79 0a 2a 2a 20 6f 66 20 74 68 65 20 56 41 4c 55  y.** of the VALU
9860: 45 20 69 73 20 6d 61 64 65 2e 20 20 49 66 20 46  E is made.  If F
9870: 4c 41 47 53 3d 3d 22 62 6c 6f 62 31 30 22 20 74  LAGS=="blob10" t
9880: 68 65 6e 20 61 20 56 41 4c 55 45 20 69 73 20 69  hen a VALUE is i
9890: 67 6e 6f 72 65 64 0a 2a 2a 20 61 6e 20 61 20 31  gnored.** an a 1
98a0: 30 2d 62 79 74 65 20 62 6c 6f 62 20 22 61 62 63  0-byte blob "abc
98b0: 5c 30 30 30 78 79 7a 5c 30 30 30 70 71 22 20 69  \000xyz\000pq" i
98c0: 73 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a 73  s inserted..*/.s
98d0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62  tatic int test_b
98e0: 69 6e 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  ind(.  void *Not
98f0: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
9900: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
9910: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
9920: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
9930: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
9940: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
9950: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9960: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
9970: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
9980: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
9990: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
99a0: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
99b0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
99c0: 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  tmt;.  int rc;. 
99d0: 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 66 28 20   int idx;.  if( 
99e0: 61 72 67 63 21 3d 35 20 29 7b 0a 20 20 20 20 54  argc!=5 ){.    T
99f0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
9a00: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
9a10: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
9a20: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a   \"", argv[0], .
9a30: 20 20 20 20 20 20 20 22 20 56 4d 20 49 44 58 20         " VM IDX 
9a40: 56 41 4c 55 45 20 28 6e 75 6c 6c 7c 73 74 61 74  VALUE (null|stat
9a50: 69 63 7c 6e 6f 72 6d 61 6c 29 5c 22 22 2c 20 30  ic|normal)\"", 0
9a60: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
9a70: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
9a80: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
9a90: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
9aa0: 5d 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ], &pStmt) ) ret
9ab0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
9ac0: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28   if( Tcl_GetInt(
9ad0: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c  interp, argv[2],
9ae0: 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20   &idx) ) return 
9af0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
9b00: 20 73 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c   strcmp(argv[4],
9b10: 22 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20  "null")==0 ){.  
9b20: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62    rc = sqlite3_b
9b30: 69 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20  ind_null(pStmt, 
9b40: 69 64 78 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  idx);.  }else if
9b50: 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b 34 5d  ( strcmp(argv[4]
9b60: 2c 22 73 74 61 74 69 63 22 29 3d 3d 30 20 29 7b  ,"static")==0 ){
9b70: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
9b80: 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d  3_bind_text(pStm
9b90: 74 2c 20 69 64 78 2c 20 73 71 6c 69 74 65 5f 73  t, idx, sqlite_s
9ba0: 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65  tatic_bind_value
9bb0: 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 7d 65 6c 73  , -1, 0);.  }els
9bc0: 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67  e if( strcmp(arg
9bd0: 76 5b 34 5d 2c 22 6e 6f 72 6d 61 6c 22 29 3d 3d  v[4],"normal")==
9be0: 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
9bf0: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
9c00: 70 53 74 6d 74 2c 20 69 64 78 2c 20 61 72 67 76  pStmt, idx, argv
9c10: 5b 33 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  [3], -1, SQLITE_
9c20: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 7d 65  TRANSIENT);.  }e
9c30: 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61  lse if( strcmp(a
9c40: 72 67 76 5b 34 5d 2c 22 62 6c 6f 62 31 30 22 29  rgv[4],"blob10")
9c50: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
9c60: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
9c70: 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 22 61  t(pStmt, idx, "a
9c80: 62 63 5c 30 30 30 78 79 7a 5c 30 30 30 70 71 22  bc\000xyz\000pq"
9c90: 2c 20 31 30 2c 20 53 51 4c 49 54 45 5f 53 54 41  , 10, SQLITE_STA
9ca0: 54 49 43 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  TIC);.  }else{. 
9cb0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
9cc0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 34 74 68  ult(interp, "4th
9cd0: 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64   argument should
9ce0: 20 62 65 20 22 0a 20 20 20 20 20 20 20 20 22 5c   be ".        "\
9cf0: 22 6e 75 6c 6c 5c 22 20 6f 72 20 5c 22 73 74 61  "null\" or \"sta
9d00: 74 69 63 5c 22 20 6f 72 20 5c 22 6e 6f 72 6d 61  tic\" or \"norma
9d10: 6c 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  l\"", 0);.    re
9d20: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
9d30: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
9d40: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
9d50: 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53  erp, StmtToDb(pS
9d60: 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75  tmt), rc) ) retu
9d70: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
9d80: 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 63 68  if( rc ){.    ch
9d90: 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20 20  ar zBuf[50];.   
9da0: 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22   sprintf(zBuf, "
9db0: 28 25 64 29 20 22 2c 20 72 63 29 3b 0a 20 20 20  (%d) ", rc);.   
9dc0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
9dd0: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
9de0: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
9df0: 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ), 0);.    retur
9e00: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
9e10: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
9e20: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
9e30: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f  ITE_OMIT_UTF16./
9e40: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f  *.** Usage: add_
9e50: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 3c 64 62  test_collate <db
9e60: 20 70 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75 74   ptr> <utf8> <ut
9e70: 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e  f16le> <utf16be>
9e80: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  .**.** This func
9e90: 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
9ea0: 74 65 73 74 20 74 68 61 74 20 53 51 4c 69 74 65  test that SQLite
9eb0: 20 73 65 6c 65 63 74 73 20 74 68 65 20 63 6f 72   selects the cor
9ec0: 72 65 63 74 20 63 6f 6c 6c 61 74 69 6f 6e 0a 2a  rect collation.*
9ed0: 2a 20 73 65 71 75 65 6e 63 65 20 63 61 6c 6c 62  * sequence callb
9ee0: 61 63 6b 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c  ack when multipl
9ef0: 65 20 76 65 72 73 69 6f 6e 73 20 28 66 6f 72 20  e versions (for 
9f00: 64 69 66 66 65 72 65 6e 74 20 74 65 78 74 20 65  different text e
9f10: 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a 20 61 72 65  ncodings).** are
9f20: 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a   available..**.*
9f30: 2a 20 43 61 6c 6c 69 6e 67 20 74 68 69 73 20 72  * Calling this r
9f40: 6f 75 74 69 6e 65 20 72 65 67 69 73 74 65 72 73  outine registers
9f50: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
9f60: 65 71 75 65 6e 63 65 20 22 74 65 73 74 5f 63 6f  equence "test_co
9f70: 6c 6c 61 74 65 22 0a 2a 2a 20 77 69 74 68 20 64  llate".** with d
9f80: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c  atabase handle <
9f90: 64 62 3e 2e 20 54 68 65 20 73 65 63 6f 6e 64 20  db>. The second 
9fa0: 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65  argument must be
9fb0: 20 61 20 6c 69 73 74 20 6f 66 20 74 68 72 65 65   a list of three
9fc0: 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  .** boolean valu
9fd0: 65 73 2e 20 49 66 20 74 68 65 20 66 69 72 73 74  es. If the first
9fe0: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 61   is true, then a
9ff0: 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 65 73 74   version of test
a000: 5f 63 6f 6c 6c 61 74 65 20 69 73 0a 2a 2a 20 72  _collate is.** r
a010: 65 67 69 73 74 65 72 65 64 20 66 6f 72 20 55 54  egistered for UT
a020: 46 2d 38 2c 20 69 66 20 74 68 65 20 73 65 63 6f  F-8, if the seco
a030: 6e 64 20 69 73 20 74 72 75 65 2c 20 61 20 76 65  nd is true, a ve
a040: 72 73 69 6f 6e 20 69 73 20 72 65 67 69 73 74 65  rsion is registe
a050: 72 65 64 20 66 6f 72 0a 2a 2a 20 55 54 46 2d 31  red for.** UTF-1
a060: 36 6c 65 2c 20 69 66 20 74 68 65 20 74 68 69 72  6le, if the thir
a070: 64 20 69 73 20 74 72 75 65 2c 20 61 20 55 54 46  d is true, a UTF
a080: 2d 31 36 62 65 20 76 65 72 73 69 6f 6e 20 69 73  -16be version is
a090: 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 20 50   available..** P
a0a0: 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73  revious versions
a0b0: 20 6f 66 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65   of test_collate
a0c0: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a 2a   are deleted..**
a0d0: 0a 2a 2a 20 54 68 65 20 63 6f 6c 6c 61 74 69 6f  .** The collatio
a0e0: 6e 20 73 65 71 75 65 6e 63 65 20 74 65 73 74 5f  n sequence test_
a0f0: 63 6f 6c 6c 61 74 65 20 69 73 20 69 6d 70 6c 65  collate is imple
a100: 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e  mented by callin
a110: 67 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69  g the.** followi
a120: 6e 67 20 54 43 4c 20 73 63 72 69 70 74 3a 0a 2a  ng TCL script:.*
a130: 2a 0a 2a 2a 20 20 20 22 74 65 73 74 5f 63 6f 6c  *.**   "test_col
a140: 6c 61 74 65 20 3c 65 6e 63 3e 20 3c 6c 68 73 3e  late <enc> <lhs>
a150: 20 3c 72 68 73 3e 22 0a 2a 2a 0a 2a 2a 20 54 68   <rhs>".**.** Th
a160: 65 20 3c 6c 68 73 3e 20 61 6e 64 20 3c 72 68 73  e <lhs> and <rhs
a170: 3e 20 61 72 65 20 74 68 65 20 74 77 6f 20 76 61  > are the two va
a180: 6c 75 65 73 20 62 65 69 6e 67 20 63 6f 6d 70 61  lues being compa
a190: 72 65 64 2c 20 65 6e 63 6f 64 65 64 20 69 6e 20  red, encoded in 
a1a0: 55 54 46 2d 38 2e 0a 2a 2a 20 54 68 65 20 3c 65  UTF-8..** The <e
a1b0: 6e 63 3e 20 70 61 72 61 6d 65 74 65 72 20 69 73  nc> parameter is
a1c0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
a1d0: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 66   the collation f
a1e0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  unction that.** 
a1f0: 53 51 4c 69 74 65 20 73 65 6c 65 63 74 65 64 20  SQLite selected 
a200: 74 6f 20 63 61 6c 6c 2e 20 54 68 65 20 54 43 4c  to call. The TCL
a210: 20 74 65 73 74 20 73 63 72 69 70 74 20 69 6d 70   test script imp
a220: 6c 65 6d 65 6e 74 73 20 74 68 65 0a 2a 2a 20 22  lements the.** "
a230: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 20 70 72  test_collate" pr
a240: 6f 63 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74  oc..**.** Note t
a250: 68 61 74 20 74 68 69 73 20 77 69 6c 6c 20 6f 6e  hat this will on
a260: 6c 79 20 77 6f 72 6b 20 77 69 74 68 20 6f 6e 65  ly work with one
a270: 20 69 6e 74 65 70 72 65 74 65 72 20 61 74 20 61   intepreter at a
a280: 20 74 69 6d 65 2c 20 61 73 20 74 68 65 0a 2a 2a   time, as the.**
a290: 20 69 6e 74 65 72 70 20 70 6f 69 6e 74 65 72 20   interp pointer 
a2a0: 74 6f 20 75 73 65 20 77 68 65 6e 20 65 76 61 6c  to use when eval
a2b0: 75 61 74 69 6e 67 20 74 68 65 20 54 43 4c 20 73  uating the TCL s
a2c0: 63 72 69 70 74 20 69 73 20 73 74 6f 72 65 64 20  cript is stored 
a2d0: 69 6e 0a 2a 2a 20 70 54 65 73 74 43 6f 6c 6c 61  in.** pTestColla
a2e0: 74 65 49 6e 74 65 72 70 2e 0a 2a 2f 0a 73 74 61  teInterp..*/.sta
a2f0: 74 69 63 20 54 63 6c 5f 49 6e 74 65 72 70 2a 20  tic Tcl_Interp* 
a300: 70 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65  pTestCollateInte
a310: 72 70 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 74  rp;.static int t
a320: 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63  est_collate_func
a330: 28 0a 20 20 76 6f 69 64 20 2a 70 43 74 78 2c 20  (.  void *pCtx, 
a340: 0a 20 20 69 6e 74 20 6e 41 2c 20 63 6f 6e 73 74  .  int nA, const
a350: 20 76 6f 69 64 20 2a 7a 41 2c 0a 20 20 69 6e 74   void *zA,.  int
a360: 20 6e 42 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20   nB, const void 
a370: 2a 7a 42 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74  *zB.){.  Tcl_Int
a380: 65 72 70 20 2a 69 20 3d 20 70 54 65 73 74 43 6f  erp *i = pTestCo
a390: 6c 6c 61 74 65 49 6e 74 65 72 70 3b 0a 20 20 69  llateInterp;.  i
a3a0: 6e 74 20 65 6e 63 69 6e 20 3d 20 28 69 6e 74 29  nt encin = (int)
a3b0: 70 43 74 78 3b 0a 20 20 69 6e 74 20 72 65 73 3b  pCtx;.  int res;
a3c0: 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 73 71 6c  .  int n;..  sql
a3d0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
a3e0: 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b  ;.  Tcl_Obj *pX;
a3f0: 0a 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77  ..  pX = Tcl_New
a400: 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f  StringObj("test_
a410: 63 6f 6c 6c 61 74 65 22 2c 20 2d 31 29 3b 0a 20  collate", -1);. 
a420: 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e   Tcl_IncrRefCoun
a430: 74 28 70 58 29 3b 0a 0a 20 20 73 77 69 74 63 68  t(pX);..  switch
a440: 28 20 65 6e 63 69 6e 20 29 7b 0a 20 20 20 20 63  ( encin ){.    c
a450: 61 73 65 20 53 51 4c 49 54 45 5f 55 54 46 38 3a  ase SQLITE_UTF8:
a460: 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f  .      Tcl_ListO
a470: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
a480: 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69  i,pX,Tcl_NewStri
a490: 6e 67 4f 62 6a 28 22 55 54 46 2d 38 22 2c 2d 31  ngObj("UTF-8",-1
a4a0: 29 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ));.      break;
a4b0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
a4c0: 5f 55 54 46 31 36 4c 45 3a 0a 20 20 20 20 20 20  _UTF16LE:.      
a4d0: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
a4e0: 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63  dElement(i,pX,Tc
a4f0: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
a500: 55 54 46 2d 31 36 4c 45 22 2c 2d 31 29 29 3b 0a  UTF-16LE",-1));.
a510: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
a520: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 55 54 46   case SQLITE_UTF
a530: 31 36 42 45 3a 0a 20 20 20 20 20 20 54 63 6c 5f  16BE:.      Tcl_
a540: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
a550: 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e 65  ment(i,pX,Tcl_Ne
a560: 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d  wStringObj("UTF-
a570: 31 36 42 45 22 2c 2d 31 29 29 3b 0a 20 20 20 20  16BE",-1));.    
a580: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66    break;.    def
a590: 61 75 6c 74 3a 0a 20 20 20 20 20 20 61 73 73 65  ault:.      asse
a5a0: 72 74 28 30 29 3b 0a 20 20 7d 0a 0a 20 20 70 56  rt(0);.  }..  pV
a5b0: 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75  al = sqlite3Valu
a5c0: 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65  eNew();.  sqlite
a5d0: 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61  3ValueSetStr(pVa
a5e0: 6c 2c 20 6e 41 2c 20 7a 41 2c 20 65 6e 63 69 6e  l, nA, zA, encin
a5f0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
a600: 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f  ;.  n = sqlite3_
a610: 76 61 6c 75 65 5f 62 79 74 65 73 28 70 56 61 6c  value_bytes(pVal
a620: 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  );.  Tcl_ListObj
a630: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c  AppendElement(i,
a640: 70 58 2c 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65  pX,.      Tcl_Ne
a650: 77 53 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72  wStringObj((char
a660: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
a670: 74 65 78 74 28 70 56 61 6c 29 2c 6e 29 29 3b 0a  text(pVal),n));.
a680: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
a690: 74 53 74 72 28 70 56 61 6c 2c 20 6e 42 2c 20 7a  tStr(pVal, nB, z
a6a0: 42 2c 20 65 6e 63 69 6e 2c 20 53 51 4c 49 54 45  B, encin, SQLITE
a6b0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 6e 20 3d 20  _STATIC);.  n = 
a6c0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
a6d0: 74 65 73 28 70 56 61 6c 29 3b 0a 20 20 54 63 6c  tes(pVal);.  Tcl
a6e0: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
a6f0: 65 6d 65 6e 74 28 69 2c 70 58 2c 0a 20 20 20 20  ement(i,pX,.    
a700: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
a710: 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65  bj((char*)sqlite
a720: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61  3_value_text(pVa
a730: 6c 29 2c 6e 29 29 3b 0a 20 20 73 71 6c 69 74 65  l),n));.  sqlite
a740: 33 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29  3ValueFree(pVal)
a750: 3b 0a 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a  ;..  Tcl_EvalObj
a760: 45 78 28 69 2c 20 70 58 2c 20 30 29 3b 0a 20 20  Ex(i, pX, 0);.  
a770: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
a780: 28 70 58 29 3b 0a 20 20 54 63 6c 5f 47 65 74 49  (pX);.  Tcl_GetI
a790: 6e 74 46 72 6f 6d 4f 62 6a 28 69 2c 20 54 63 6c  ntFromObj(i, Tcl
a7a0: 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 29  _GetObjResult(i)
a7b0: 2c 20 26 72 65 73 29 3b 0a 20 20 72 65 74 75 72  , &res);.  retur
a7c0: 6e 20 72 65 73 3b 0a 7d 0a 73 74 61 74 69 63 20  n res;.}.static 
a7d0: 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65  int test_collate
a7e0: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
a7f0: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
a800: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
a810: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
a820: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
a830: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
a840: 62 3b 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 20 20  b;.  int val;.  
a850: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
a860: 56 61 6c 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  Val;.  int rc;..
a870: 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 20    if( objc!=5 ) 
a880: 67 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20  goto bad_args;. 
a890: 20 70 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74   pTestCollateInt
a8a0: 65 72 70 20 3d 20 69 6e 74 65 72 70 3b 0a 20 20  erp = interp;.  
a8b0: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
a8c0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
a8d0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
a8e0: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
a8f0: 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66 28  CL_ERROR;..  if(
a900: 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74   TCL_OK!=Tcl_Get
a910: 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69  BooleanFromObj(i
a920: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
a930: 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54  &val) ) return T
a940: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
a950: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
a960: 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 74  collation(db, "t
a970: 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 53 51  est_collate", SQ
a980: 4c 49 54 45 5f 55 54 46 38 2c 20 0a 20 20 20 20  LITE_UTF8, .    
a990: 20 20 20 20 20 20 28 76 6f 69 64 20 2a 29 53 51        (void *)SQ
a9a0: 4c 49 54 45 5f 55 54 46 38 2c 20 76 61 6c 3f 74  LITE_UTF8, val?t
a9b0: 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63  est_collate_func
a9c0: 3a 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  :0);.  if( rc==S
a9d0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
a9e0: 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f  if( TCL_OK!=Tcl_
a9f0: 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62  GetBooleanFromOb
aa00: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33  j(interp, objv[3
aa10: 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75 72  ], &val) ) retur
aa20: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
aa30: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
aa40: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64  eate_collation(d
aa50: 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65  b, "test_collate
aa60: 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  ", SQLITE_UTF16L
aa70: 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  E, .            
aa80: 28 76 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f 55  (void *)SQLITE_U
aa90: 54 46 31 36 4c 45 2c 20 76 61 6c 3f 74 65 73 74  TF16LE, val?test
aaa0: 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29  _collate_func:0)
aab0: 3b 0a 20 20 20 20 69 66 28 20 54 43 4c 5f 4f 4b  ;.    if( TCL_OK
aac0: 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e  !=Tcl_GetBoolean
aad0: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
aae0: 6f 62 6a 76 5b 34 5d 2c 20 26 76 61 6c 29 20 29  objv[4], &val) )
aaf0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
ab00: 52 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  R;..#ifdef SQLIT
ab10: 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 20 20 69  E_MEMDEBUG.    i
ab20: 66 28 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c  f( sqlite3_iMall
ab30: 6f 63 46 61 69 6c 3e 30 20 29 7b 0a 20 20 20 20  ocFail>0 ){.    
ab40: 20 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f    sqlite3_iMallo
ab50: 63 46 61 69 6c 2b 2b 3b 0a 20 20 20 20 7d 0a 23  cFail++;.    }.#
ab60: 65 6e 64 69 66 0a 20 20 20 20 70 56 61 6c 20 3d  endif.    pVal =
ab70: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77   sqlite3ValueNew
ab80: 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  ();.    sqlite3V
ab90: 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
aba0: 20 2d 31 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61   -1, "test_colla
abb0: 74 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  te", SQLITE_UTF8
abc0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
abd0: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
abe0: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
abf0: 69 6f 6e 31 36 28 64 62 2c 20 0a 20 20 20 20 20  ion16(db, .     
ac00: 20 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75       sqlite3Valu
ac10: 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49  eText(pVal, SQLI
ac20: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 29 2c  TE_UTF16NATIVE),
ac30: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c   SQLITE_UTF16BE,
ac40: 20 0a 20 20 20 20 20 20 20 20 20 20 28 76 6f 69   .          (voi
ac50: 64 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 31 36  d *)SQLITE_UTF16
ac60: 42 45 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f 6c  BE, val?test_col
ac70: 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20 20  late_func:0);.  
ac80: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72    sqlite3ValueFr
ac90: 65 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20  ee(pVal);.  }.  
aca0: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
acb0: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
acc0: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
acd0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 0a 20 20  TCL_ERROR;.  .  
ace0: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
acf0: 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  K ){.    Tcl_App
ad00: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
ad10: 2c 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  , sqlite3TestErr
ad20: 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a  orName(rc), 0);.
ad30: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
ad40: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75  RROR;.  }.  retu
ad50: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f  rn TCL_OK;..bad_
ad60: 61 72 67 73 3a 0a 20 20 54 63 6c 5f 41 70 70 65  args:.  Tcl_Appe
ad70: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
ad80: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
ad90: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
ada0: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
adb0: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
adc0: 5d 2c 20 30 29 2c 20 22 20 3c 44 42 3e 20 3c 75  ], 0), " <DB> <u
add0: 74 66 38 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c  tf8> <utf16le> <
ade0: 75 74 66 31 36 62 65 3e 22 2c 20 30 29 3b 0a 20  utf16be>", 0);. 
adf0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
ae00: 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e  R;.}../*.** When
ae10: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 6e   the collation n
ae20: 65 65 64 65 64 20 63 61 6c 6c 62 61 63 6b 20 69  eeded callback i
ae30: 73 20 69 6e 76 6f 6b 65 64 2c 20 72 65 63 6f 72  s invoked, recor
ae40: 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 0a 2a  d the name of .*
ae50: 2a 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20  * the requested 
ae60: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
ae70: 6f 6e 20 68 65 72 65 2e 20 20 54 68 65 20 72 65  on here.  The re
ae80: 63 6f 72 64 65 64 20 6e 61 6d 65 20 69 73 20 6c  corded name is l
ae90: 69 6e 6b 65 64 0a 2a 2a 20 74 6f 20 61 20 54 43  inked.** to a TC
aea0: 4c 20 76 61 72 69 61 62 6c 65 20 61 6e 64 20 75  L variable and u
aeb0: 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  sed to make sure
aec0: 20 74 68 61 74 20 74 68 65 20 72 65 71 75 65 73   that the reques
aed0: 74 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 0a 2a 2a  ted collation.**
aee0: 20 6e 61 6d 65 20 69 73 20 63 6f 72 72 65 63 74   name is correct
aef0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72  ..*/.static char
af00: 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f   zNeededCollatio
af10: 6e 5b 32 30 30 5d 3b 0a 73 74 61 74 69 63 20 63  n[200];.static c
af20: 68 61 72 20 2a 70 7a 4e 65 65 64 65 64 43 6f 6c  har *pzNeededCol
af30: 6c 61 74 69 6f 6e 20 3d 20 7a 4e 65 65 64 65 64  lation = zNeeded
af40: 43 6f 6c 6c 61 74 69 6f 6e 3b 0a 0a 0a 2f 2a 0a  Collation;.../*.
af50: 2a 2a 20 43 61 6c 6c 65 64 20 77 68 65 6e 20 61  ** Called when a
af60: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
af70: 6e 63 65 20 69 73 20 6e 65 65 64 65 64 2e 20 20  nce is needed.  
af80: 52 65 67 69 73 74 65 72 65 64 20 75 73 69 6e 67  Registered using
af90: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c  .** sqlite3_coll
afa0: 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31 36 28 29  ation_needed16()
afb0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
afc0: 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65   test_collate_ne
afd0: 65 64 65 64 5f 63 62 28 0a 20 20 76 6f 69 64 20  eded_cb(.  void 
afe0: 2a 70 43 74 78 2c 20 0a 20 20 73 71 6c 69 74 65  *pCtx, .  sqlite
aff0: 33 20 2a 64 62 2c 0a 20 20 69 6e 74 20 65 54 65  3 *db,.  int eTe
b000: 78 74 52 65 70 2c 0a 20 20 63 6f 6e 73 74 20 76  xtRep,.  const v
b010: 6f 69 64 20 2a 70 4e 61 6d 65 0a 29 7b 0a 20 20  oid *pName.){.  
b020: 69 6e 74 20 65 6e 63 20 3d 20 45 4e 43 28 64 62  int enc = ENC(db
b030: 29 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68  );.  int i;.  ch
b040: 61 72 20 2a 7a 3b 0a 20 20 66 6f 72 28 7a 20 3d  ar *z;.  for(z =
b050: 20 28 63 68 61 72 2a 29 70 4e 61 6d 65 2c 20 69   (char*)pName, i
b060: 3d 30 3b 20 2a 7a 20 7c 7c 20 7a 5b 31 5d 3b 20  =0; *z || z[1]; 
b070: 7a 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 2a 7a  z++){.    if( *z
b080: 20 29 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74   ) zNeededCollat
b090: 69 6f 6e 5b 69 2b 2b 5d 20 3d 20 2a 7a 3b 0a 20  ion[i++] = *z;. 
b0a0: 20 7d 0a 20 20 7a 4e 65 65 64 65 64 43 6f 6c 6c   }.  zNeededColl
b0b0: 61 74 69 6f 6e 5b 69 5d 20 3d 20 30 3b 0a 20 20  ation[i] = 0;.  
b0c0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
b0d0: 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 20 20 20 20  ollation(.      
b0e0: 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74  db, "test_collat
b0f0: 65 22 2c 20 45 4e 43 28 64 62 29 2c 20 28 76 6f  e", ENC(db), (vo
b100: 69 64 20 2a 29 65 6e 63 2c 20 74 65 73 74 5f 63  id *)enc, test_c
b110: 6f 6c 6c 61 74 65 5f 66 75 6e 63 29 3b 0a 7d 0a  ollate_func);.}.
b120: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64  ./*.** Usage: ad
b130: 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e  d_test_collate_n
b140: 65 65 64 65 64 20 44 42 0a 2a 2f 0a 73 74 61 74  eeded DB.*/.stat
b150: 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c  ic int test_coll
b160: 61 74 65 5f 6e 65 65 64 65 64 28 0a 20 20 76 6f  ate_needed(.  vo
b170: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
b180: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
b190: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
b1a0: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
b1b0: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
b1c0: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
b1d0: 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
b1e0: 6a 63 21 3d 32 20 29 20 67 6f 74 6f 20 62 61 64  jc!=2 ) goto bad
b1f0: 5f 61 72 67 73 3b 0a 20 20 69 66 28 20 67 65 74  _args;.  if( get
b200: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
b210: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
b220: 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
b230: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
b240: 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
b250: 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64  3_collation_need
b260: 65 64 31 36 28 64 62 2c 20 30 2c 20 74 65 73 74  ed16(db, 0, test
b270: 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 5f  _collate_needed_
b280: 63 62 29 3b 0a 20 20 7a 4e 65 65 64 65 64 43 6f  cb);.  zNeededCo
b290: 6c 6c 61 74 69 6f 6e 5b 30 5d 20 3d 20 30 3b 0a  llation[0] = 0;.
b2a0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
b2b0: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
b2c0: 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
b2d0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
b2e0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 62  eturn TCL_OK;..b
b2f0: 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 57  ad_args:.  Tcl_W
b300: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
b310: 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42  rp, 1, objv, "DB
b320: 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ");.  return TCL
b330: 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  _ERROR;.}../*.**
b340: 20 74 63 6c 63 6d 64 3a 20 20 20 61 64 64 5f 61   tclcmd:   add_a
b350: 6c 69 67 6e 6d 65 6e 74 5f 74 65 73 74 5f 63 6f  lignment_test_co
b360: 6c 6c 61 74 69 6f 6e 73 20 20 44 42 0a 2a 2a 0a  llations  DB.**.
b370: 2a 2a 20 41 64 64 20 74 77 6f 20 6e 65 77 20 63  ** Add two new c
b380: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
b390: 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
b3a0: 73 65 20 44 42 0a 2a 2a 0a 2a 2a 20 20 20 20 20  se DB.**.**     
b3b0: 75 74 66 31 36 5f 61 6c 69 67 6e 65 64 0a 2a 2a  utf16_aligned.**
b3c0: 20 20 20 20 20 75 74 66 31 36 5f 75 6e 61 6c 69       utf16_unali
b3d0: 67 6e 65 64 0a 2a 2a 0a 2a 2a 20 42 6f 74 68 20  gned.**.** Both 
b3e0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
b3f0: 63 65 73 20 75 73 65 20 74 68 65 20 73 61 6d 65  ces use the same
b400: 20 73 6f 72 74 20 6f 72 64 65 72 20 61 73 20 42   sort order as B
b410: 49 4e 41 52 59 2e 0a 2a 2a 20 54 68 65 20 6f 6e  INARY..** The on
b420: 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  ly difference is
b430: 20 74 68 61 74 20 74 68 65 20 75 74 66 31 36 5f   that the utf16_
b440: 61 6c 69 67 6e 65 64 20 63 6f 6c 6c 61 74 69 6e  aligned collatin
b450: 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 69 73  g.** sequence is
b460: 20 64 65 63 6c 61 72 65 64 20 77 69 74 68 20 74   declared with t
b470: 68 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 5f  he SQLITE_UTF16_
b480: 41 4c 49 47 4e 45 44 20 66 6c 61 67 2e 0a 2a 2a  ALIGNED flag..**
b490: 20 42 6f 74 68 20 63 6f 6c 6c 61 74 69 6e 67 20   Both collating 
b4a0: 66 75 6e 63 74 69 6f 6e 73 20 69 6e 63 72 65 6d  functions increm
b4b0: 65 6e 74 20 74 68 65 20 75 6e 61 6c 69 67 6e 65  ent the unaligne
b4c0: 64 20 75 74 66 31 36 20 63 6f 75 6e 74 65 72 0a  d utf16 counter.
b4d0: 2a 2a 20 77 68 65 6e 65 76 65 72 20 74 68 65 79  ** whenever they
b4e0: 20 73 65 65 20 61 20 73 74 72 69 6e 67 20 74 68   see a string th
b4f0: 61 74 20 62 65 67 69 6e 73 20 6f 6e 20 61 6e 20  at begins on an 
b500: 6f 64 64 20 62 79 74 65 20 62 6f 75 6e 64 61 72  odd byte boundar
b510: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  y..*/.static int
b520: 20 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e   unaligned_strin
b530: 67 5f 63 6f 75 6e 74 65 72 20 3d 20 30 3b 0a 73  g_counter = 0;.s
b540: 74 61 74 69 63 20 69 6e 74 20 61 6c 69 67 6e 6d  tatic int alignm
b550: 65 6e 74 43 6f 6c 6c 46 75 6e 63 28 0a 20 20 76  entCollFunc(.  v
b560: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
b570: 69 6e 74 20 6e 4b 65 79 31 2c 20 63 6f 6e 73 74  int nKey1, const
b580: 20 76 6f 69 64 20 2a 70 4b 65 79 31 2c 0a 20 20   void *pKey1,.  
b590: 69 6e 74 20 6e 4b 65 79 32 2c 20 63 6f 6e 73 74  int nKey2, const
b5a0: 20 76 6f 69 64 20 2a 70 4b 65 79 32 0a 29 7b 0a   void *pKey2.){.
b5b0: 20 20 69 6e 74 20 72 63 2c 20 6e 3b 0a 20 20 6e    int rc, n;.  n
b5c0: 20 3d 20 6e 4b 65 79 31 3c 6e 4b 65 79 32 20 3f   = nKey1<nKey2 ?
b5d0: 20 6e 4b 65 79 31 20 3a 20 6e 4b 65 79 32 3b 0a   nKey1 : nKey2;.
b5e0: 20 20 69 66 28 20 6e 4b 65 79 31 3e 30 20 26 26    if( nKey1>0 &&
b5f0: 20 31 3d 3d 28 31 26 28 69 6e 74 29 70 4b 65 79   1==(1&(int)pKey
b600: 31 29 20 29 20 75 6e 61 6c 69 67 6e 65 64 5f 73  1) ) unaligned_s
b610: 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72 2b 2b 3b  tring_counter++;
b620: 0a 20 20 69 66 28 20 6e 4b 65 79 32 3e 30 20 26  .  if( nKey2>0 &
b630: 26 20 31 3d 3d 28 31 26 28 69 6e 74 29 70 4b 65  & 1==(1&(int)pKe
b640: 79 32 29 20 29 20 75 6e 61 6c 69 67 6e 65 64 5f  y2) ) unaligned_
b650: 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72 2b 2b  string_counter++
b660: 3b 0a 20 20 72 63 20 3d 20 6d 65 6d 63 6d 70 28  ;.  rc = memcmp(
b670: 70 4b 65 79 31 2c 20 70 4b 65 79 32 2c 20 6e 29  pKey1, pKey2, n)
b680: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30 20 29 7b  ;.  if( rc==0 ){
b690: 0a 20 20 20 20 72 63 20 3d 20 6e 4b 65 79 31 20  .    rc = nKey1 
b6a0: 2d 20 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20 20 72  - nKey2;.  }.  r
b6b0: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 73 74 61 74  eturn rc;.}.stat
b6c0: 69 63 20 69 6e 74 20 61 64 64 5f 61 6c 69 67 6e  ic int add_align
b6d0: 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61 74  ment_test_collat
b6e0: 69 6f 6e 73 28 0a 20 20 76 6f 69 64 20 2a 20 63  ions(.  void * c
b6f0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
b700: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
b710: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
b720: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
b730: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
b740: 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 6f 62 6a  3 *db;.  if( obj
b750: 63 3e 3d 32 20 29 7b 0a 20 20 20 20 69 66 28 20  c>=2 ){.    if( 
b760: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
b770: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
b780: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
b790: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
b7a0: 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65  RROR;.    sqlite
b7b0: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
b7c0: 6f 6e 28 64 62 2c 20 22 75 74 66 31 36 5f 75 6e  on(db, "utf16_un
b7d0: 61 6c 69 67 6e 65 64 22 2c 0a 20 20 20 20 20 20  aligned",.      
b7e0: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 2c 20    SQLITE_UTF16, 
b7f0: 0a 20 20 20 20 20 20 20 20 30 2c 20 61 6c 69 67  .        0, alig
b800: 6e 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63 29 3b 0a  nmentCollFunc);.
b810: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
b820: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  te_collation(db,
b830: 20 22 75 74 66 31 36 5f 61 6c 69 67 6e 65 64 22   "utf16_aligned"
b840: 2c 0a 20 20 20 20 20 20 20 20 53 51 4c 49 54 45  ,.        SQLITE
b850: 5f 55 54 46 31 36 20 7c 20 53 51 4c 49 54 45 5f  _UTF16 | SQLITE_
b860: 55 54 46 31 36 5f 41 4c 49 47 4e 45 44 2c 20 0a  UTF16_ALIGNED, .
b870: 20 20 20 20 20 20 20 20 30 2c 20 61 6c 69 67 6e          0, align
b880: 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63 29 3b 0a 20  mentCollFunc);. 
b890: 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49   }.  return SQLI
b8a0: 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20  TE_OK;.}.#endif 
b8b0: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
b8c0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 29 20 2a  TE_OMIT_UTF16) *
b8d0: 2f 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  /../*.** Usage: 
b8e0: 61 64 64 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  add_test_functio
b8f0: 6e 20 3c 64 62 20 70 74 72 3e 20 3c 75 74 66 38  n <db ptr> <utf8
b900: 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66  > <utf16le> <utf
b910: 31 36 62 65 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  16be>.**.** This
b920: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
b930: 64 20 74 6f 20 74 65 73 74 20 74 68 61 74 20 53  d to test that S
b940: 51 4c 69 74 65 20 73 65 6c 65 63 74 73 20 74 68  QLite selects th
b950: 65 20 63 6f 72 72 65 63 74 20 75 73 65 72 0a 2a  e correct user.*
b960: 2a 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 62  * function callb
b970: 61 63 6b 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c  ack when multipl
b980: 65 20 76 65 72 73 69 6f 6e 73 20 28 66 6f 72 20  e versions (for 
b990: 64 69 66 66 65 72 65 6e 74 20 74 65 78 74 20 65  different text e
b9a0: 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a 20 61 72 65  ncodings).** are
b9b0: 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a   available..**.*
b9c0: 2a 20 43 61 6c 6c 69 6e 67 20 74 68 69 73 20 72  * Calling this r
b9d0: 6f 75 74 69 6e 65 20 72 65 67 69 73 74 65 72 73  outine registers
b9e0: 20 75 70 20 74 6f 20 74 68 72 65 65 20 76 65 72   up to three ver
b9f0: 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 75 73 65  sions of the use
ba00: 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 22 74  r function.** "t
ba10: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 20 77 69  est_function" wi
ba20: 74 68 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  th database hand
ba30: 6c 65 20 3c 64 62 3e 2e 20 20 49 66 20 74 68 65  le <db>.  If the
ba40: 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74   second argument
ba50: 20 69 73 0a 2a 2a 20 74 72 75 65 2c 20 74 68 65   is.** true, the
ba60: 6e 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  n a version of t
ba70: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 69 73 20  est_function is 
ba80: 72 65 67 69 73 74 65 72 65 64 20 66 6f 72 20 55  registered for U
ba90: 54 46 2d 38 2c 20 69 66 20 74 68 65 0a 2a 2a 20  TF-8, if the.** 
baa0: 74 68 69 72 64 20 69 73 20 74 72 75 65 2c 20 61  third is true, a
bab0: 20 76 65 72 73 69 6f 6e 20 69 73 20 72 65 67 69   version is regi
bac0: 73 74 65 72 65 64 20 66 6f 72 20 55 54 46 2d 31  stered for UTF-1
bad0: 36 6c 65 2c 20 69 66 20 74 68 65 20 66 6f 75 72  6le, if the four
bae0: 74 68 20 69 73 0a 2a 2a 20 74 72 75 65 2c 20 61  th is.** true, a
baf0: 20 55 54 46 2d 31 36 62 65 20 76 65 72 73 69 6f   UTF-16be versio
bb00: 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  n is available. 
bb10: 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f   Previous versio
bb20: 6e 73 20 6f 66 0a 2a 2a 20 74 65 73 74 5f 66 75  ns of.** test_fu
bb30: 6e 63 74 69 6f 6e 20 61 72 65 20 64 65 6c 65 74  nction are delet
bb40: 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 73  ed..**.** The us
bb50: 65 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69  er function is i
bb60: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
bb70: 6c 6c 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77  lling the follow
bb80: 69 6e 67 20 54 43 4c 20 73 63 72 69 70 74 3a 0a  ing TCL script:.
bb90: 2a 2a 0a 2a 2a 20 20 20 22 74 65 73 74 5f 66 75  **.**   "test_fu
bba0: 6e 63 74 69 6f 6e 20 3c 65 6e 63 3e 20 3c 61 72  nction <enc> <ar
bbb0: 67 3e 22 0a 2a 2a 0a 2a 2a 20 57 68 65 72 65 20  g>".**.** Where 
bbc0: 3c 65 6e 63 3e 20 69 73 20 6f 6e 65 20 6f 66 20  <enc> is one of 
bbd0: 55 54 46 2d 38 2c 20 55 54 46 2d 31 36 4c 45 20  UTF-8, UTF-16LE 
bbe0: 6f 72 20 55 54 46 31 36 42 45 2c 20 61 6e 64 20  or UTF16BE, and 
bbf0: 3c 61 72 67 3e 20 69 73 20 74 68 65 0a 2a 2a 20  <arg> is the.** 
bc00: 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 20  single argument 
bc10: 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 53 51  passed to the SQ
bc20: 4c 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 65 20  L function. The 
bc30: 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  value returned b
bc40: 79 0a 2a 2a 20 74 68 65 20 54 43 4c 20 73 63 72  y.** the TCL scr
bc50: 69 70 74 20 69 73 20 75 73 65 64 20 61 73 20 74  ipt is used as t
bc60: 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  he return value 
bc70: 6f 66 20 74 68 65 20 53 51 4c 20 66 75 6e 63 74  of the SQL funct
bc80: 69 6f 6e 2e 20 49 74 0a 2a 2a 20 69 73 20 70 61  ion. It.** is pa
bc90: 73 73 65 64 20 74 6f 20 53 51 4c 69 74 65 20 75  ssed to SQLite u
bca0: 73 69 6e 67 20 55 54 46 2d 31 36 42 45 20 66 6f  sing UTF-16BE fo
bcb0: 72 20 61 20 55 54 46 2d 38 20 74 65 73 74 5f 66  r a UTF-8 test_f
bcc0: 75 6e 63 74 69 6f 6e 28 29 2c 20 55 54 46 2d 38  unction(), UTF-8
bcd0: 0a 2a 2a 20 66 6f 72 20 61 20 55 54 46 2d 31 36  .** for a UTF-16
bce0: 4c 45 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  LE test_function
bcf0: 28 29 2c 20 61 6e 64 20 55 54 46 2d 31 36 4c 45  (), and UTF-16LE
bd00: 20 66 6f 72 20 61 6e 20 69 6d 70 6c 65 6d 65 6e   for an implemen
bd10: 74 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 70  tation that.** p
bd20: 72 65 66 65 72 73 20 55 54 46 2d 31 36 42 45 2e  refers UTF-16BE.
bd30: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
bd40: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 73 74  TE_OMIT_UTF16.st
bd50: 61 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f 66  atic void test_f
bd60: 75 6e 63 74 69 6f 6e 5f 75 74 66 38 28 0a 20 20  unction_utf8(.  
bd70: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
bd80: 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41  *pCtx, .  int nA
bd90: 72 67 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg,.  sqlite3_va
bda0: 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  lue **argv.){.  
bdb0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
bdc0: 72 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  rp;.  Tcl_Obj *p
bdd0: 58 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  X;.  sqlite3_val
bde0: 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65  ue *pVal;.  inte
bdf0: 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70  rp = (Tcl_Interp
be00: 20 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f   *)sqlite3_user_
be10: 64 61 74 61 28 70 43 74 78 29 3b 0a 20 20 70 58  data(pCtx);.  pX
be20: 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67   = Tcl_NewString
be30: 4f 62 6a 28 22 74 65 73 74 5f 66 75 6e 63 74 69  Obj("test_functi
be40: 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f  on", -1);.  Tcl_
be50: 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29  IncrRefCount(pX)
be60: 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
be70: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
be80: 65 72 70 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77  erp, pX, Tcl_New
be90: 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 38  StringObj("UTF-8
bea0: 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c  ", -1));.  Tcl_L
beb0: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
bec0: 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20  ent(interp, pX, 
bed0: 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74  .      Tcl_NewSt
bee0: 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73  ringObj((char*)s
bef0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
bf00: 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29  t(argv[0]), -1))
bf10: 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45  ;.  Tcl_EvalObjE
bf20: 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30 29  x(interp, pX, 0)
bf30: 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  ;.  Tcl_DecrRefC
bf40: 6f 75 6e 74 28 70 58 29 3b 0a 20 20 73 71 6c 69  ount(pX);.  sqli
bf50: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
bf60: 70 43 74 78 2c 20 54 63 6c 5f 47 65 74 53 74 72  pCtx, Tcl_GetStr
bf70: 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ingResult(interp
bf80: 29 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52  ), -1, SQLITE_TR
bf90: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 70 56 61 6c  ANSIENT);.  pVal
bfa0: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
bfb0: 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ew();.  sqlite3V
bfc0: 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
bfd0: 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72 69   -1, Tcl_GetStri
bfe0: 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  ngResult(interp)
bff0: 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  , .      SQLITE_
c000: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
c010: 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  TIC);.  sqlite3_
c020: 72 65 73 75 6c 74 5f 74 65 78 74 31 36 62 65 28  result_text16be(
c030: 70 43 74 78 2c 20 73 71 6c 69 74 65 33 5f 76 61  pCtx, sqlite3_va
c040: 6c 75 65 5f 74 65 78 74 31 36 62 65 28 70 56 61  lue_text16be(pVa
c050: 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c 20 53 51  l),.      -1, SQ
c060: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
c070: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  .  sqlite3ValueF
c080: 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a 73 74 61  ree(pVal);.}.sta
c090: 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f 66 75  tic void test_fu
c0a0: 6e 63 74 69 6f 6e 5f 75 74 66 31 36 6c 65 28 0a  nction_utf16le(.
c0b0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
c0c0: 74 20 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74 20  t *pCtx, .  int 
c0d0: 6e 41 72 67 2c 0a 20 20 73 71 6c 69 74 65 33 5f  nArg,.  sqlite3_
c0e0: 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a  value **argv.){.
c0f0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
c100: 74 65 72 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20  terp;.  Tcl_Obj 
c110: 2a 70 58 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  *pX;.  sqlite3_v
c120: 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e  alue *pVal;.  in
c130: 74 65 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74 65  terp = (Tcl_Inte
c140: 72 70 20 2a 29 73 71 6c 69 74 65 33 5f 75 73 65  rp *)sqlite3_use
c150: 72 5f 64 61 74 61 28 70 43 74 78 29 3b 0a 20 20  r_data(pCtx);.  
c160: 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69  pX = Tcl_NewStri
c170: 6e 67 4f 62 6a 28 22 74 65 73 74 5f 66 75 6e 63  ngObj("test_func
c180: 74 69 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20 54 63  tion", -1);.  Tc
c190: 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70  l_IncrRefCount(p
c1a0: 58 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  X);.  Tcl_ListOb
c1b0: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
c1c0: 6e 74 65 72 70 2c 20 70 58 2c 20 54 63 6c 5f 4e  nterp, pX, Tcl_N
c1d0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46  ewStringObj("UTF
c1e0: 2d 31 36 4c 45 22 2c 20 2d 31 29 29 3b 0a 20 20  -16LE", -1));.  
c1f0: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
c200: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
c210: 20 70 58 2c 20 0a 20 20 20 20 20 20 54 63 6c 5f   pX, .      Tcl_
c220: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28 63 68  NewStringObj((ch
c230: 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
c240: 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c  e_text(argv[0]),
c250: 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 45 76 61   -1));.  Tcl_Eva
c260: 6c 4f 62 6a 45 78 28 69 6e 74 65 72 70 2c 20 70  lObjEx(interp, p
c270: 58 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63  X, 0);.  Tcl_Dec
c280: 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20  rRefCount(pX);. 
c290: 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56   pVal = sqlite3V
c2a0: 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c  alueNew();.  sql
c2b0: 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
c2c0: 70 56 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f 47 65  pVal, -1, Tcl_Ge
c2d0: 74 53 74 72 69 6e 67 52 65 73 75 6c 74 28 69 6e  tStringResult(in
c2e0: 74 65 72 70 29 2c 20 0a 20 20 20 20 20 20 53 51  terp), .      SQ
c2f0: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
c300: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 73 71 6c  E_STATIC);.  sql
c310: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
c320: 28 70 43 74 78 2c 28 63 68 61 72 2a 29 73 71 6c  (pCtx,(char*)sql
c330: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
c340: 70 56 61 6c 29 2c 2d 31 2c 53 51 4c 49 54 45 5f  pVal),-1,SQLITE_
c350: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71  TRANSIENT);.  sq
c360: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
c370: 56 61 6c 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76  Val);.}.static v
c380: 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  oid test_functio
c390: 6e 5f 75 74 66 31 36 62 65 28 0a 20 20 73 71 6c  n_utf16be(.  sql
c3a0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
c3b0: 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c  tx, .  int nArg,
c3c0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
c3d0: 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c   **argv.){.  Tcl
c3e0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b  _Interp *interp;
c3f0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a  .  Tcl_Obj *pX;.
c400: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
c410: 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20  *pVal;.  interp 
c420: 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29  = (Tcl_Interp *)
c430: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
c440: 61 28 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20  a(pCtx);.  pX = 
c450: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
c460: 28 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22  ("test_function"
c470: 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63  , -1);.  Tcl_Inc
c480: 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20  rRefCount(pX);. 
c490: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
c4a0: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
c4b0: 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72  , pX, Tcl_NewStr
c4c0: 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 42 45  ingObj("UTF-16BE
c4d0: 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c  ", -1));.  Tcl_L
c4e0: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
c4f0: 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20  ent(interp, pX, 
c500: 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74  .      Tcl_NewSt
c510: 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73  ringObj((char*)s
c520: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
c530: 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29  t(argv[0]), -1))
c540: 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45  ;.  Tcl_EvalObjE
c550: 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30 29  x(interp, pX, 0)
c560: 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  ;.  Tcl_DecrRefC
c570: 6f 75 6e 74 28 70 58 29 3b 0a 20 20 70 56 61 6c  ount(pX);.  pVal
c580: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
c590: 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ew();.  sqlite3V
c5a0: 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
c5b0: 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72 69   -1, Tcl_GetStri
c5c0: 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  ngResult(interp)
c5d0: 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  , .      SQLITE_
c5e0: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
c5f0: 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  TIC);.  sqlite3_
c600: 72 65 73 75 6c 74 5f 74 65 78 74 31 36 6c 65 28  result_text16le(
c610: 70 43 74 78 2c 20 73 71 6c 69 74 65 33 5f 76 61  pCtx, sqlite3_va
c620: 6c 75 65 5f 74 65 78 74 31 36 6c 65 28 70 56 61  lue_text16le(pVa
c630: 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c 20 53 51  l),.      -1, SQ
c640: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
c650: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  .  sqlite3ValueF
c660: 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a 23 65 6e  ree(pVal);.}.#en
c670: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
c680: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 73 74 61 74  IT_UTF16 */.stat
c690: 69 63 20 69 6e 74 20 74 65 73 74 5f 66 75 6e 63  ic int test_func
c6a0: 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63  tion(.  void * c
c6b0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
c6c0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
c6d0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
c6e0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
c6f0: 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
c700: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
c710: 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  6.  sqlite3 *db;
c720: 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 0a 20 20 69  .  int val;..  i
c730: 66 28 20 6f 62 6a 63 21 3d 35 20 29 20 67 6f 74  f( objc!=5 ) got
c740: 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20 20 69 66  o bad_args;.  if
c750: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
c760: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
c770: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
c780: 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
c790: 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66 28 20 54  _ERROR;..  if( T
c7a0: 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
c7b0: 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
c7c0: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 76  erp, objv[2], &v
c7d0: 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
c7e0: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61  _ERROR;.  if( va
c7f0: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
c800: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
c810: 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74  (db, "test_funct
c820: 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f  ion", 1, SQLITE_
c830: 55 54 46 38 2c 20 0a 20 20 20 20 20 20 20 20 69  UTF8, .        i
c840: 6e 74 65 72 70 2c 20 74 65 73 74 5f 66 75 6e 63  nterp, test_func
c850: 74 69 6f 6e 5f 75 74 66 38 2c 20 30 2c 20 30 29  tion_utf8, 0, 0)
c860: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 43 4c 5f  ;.  }.  if( TCL_
c870: 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65  OK!=Tcl_GetBoole
c880: 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  anFromObj(interp
c890: 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 29  , objv[3], &val)
c8a0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
c8b0: 52 4f 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29  ROR;.  if( val )
c8c0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72  {.    sqlite3_cr
c8d0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62  eate_function(db
c8e0: 2c 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  , "test_function
c8f0: 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  ", 1, SQLITE_UTF
c900: 31 36 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 69  16LE, .        i
c910: 6e 74 65 72 70 2c 20 74 65 73 74 5f 66 75 6e 63  nterp, test_func
c920: 74 69 6f 6e 5f 75 74 66 31 36 6c 65 2c 20 30 2c  tion_utf16le, 0,
c930: 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54   0);.  }.  if( T
c940: 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
c950: 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
c960: 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 76  erp, objv[4], &v
c970: 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
c980: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61  _ERROR;.  if( va
c990: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
c9a0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
c9b0: 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74  (db, "test_funct
c9c0: 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f  ion", 1, SQLITE_
c9d0: 55 54 46 31 36 42 45 2c 20 0a 20 20 20 20 20 20  UTF16BE, .      
c9e0: 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66    interp, test_f
c9f0: 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 62 65 2c  unction_utf16be,
ca00: 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 72   0, 0);.  }..  r
ca10: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 62 61  eturn TCL_OK;.ba
ca20: 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 41 70  d_args:.  Tcl_Ap
ca30: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
ca40: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
ca50: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
ca60: 0a 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74  .      Tcl_GetSt
ca70: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
ca80: 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44 42 3e 20  [0], 0), " <DB> 
ca90: 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c 65 3e  <utf8> <utf16le>
caa0: 20 3c 75 74 66 31 36 62 65 3e 22 2c 20 30 29 3b   <utf16be>", 0);
cab0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
cac0: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
cad0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
cae0: 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OR;.}../*.** Usa
caf0: 67 65 3a 20 20 20 20 20 20 20 20 20 74 65 73 74  ge:         test
cb00: 5f 65 72 72 73 74 72 20 3c 65 72 72 20 63 6f 64  _errstr <err cod
cb10: 65 3e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  e>.**.** Test th
cb20: 61 74 20 74 68 65 20 65 6e 67 6c 69 73 68 20 6c  at the english l
cb30: 61 6e 67 75 61 67 65 20 73 74 72 69 6e 67 20 65  anguage string e
cb40: 71 75 69 76 61 6c 65 6e 74 73 20 66 6f 72 20 73  quivalents for s
cb50: 71 6c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65  qlite error code
cb60: 73 0a 2a 2a 20 61 72 65 20 73 61 6e 65 2e 20 54  s.** are sane. T
cb70: 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  he parameter is 
cb80: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
cb90: 73 65 6e 74 69 6e 67 20 61 6e 20 73 71 6c 69 74  senting an sqlit
cba0: 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a  e error code..**
cbb0: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
cbc0: 20 6c 69 73 74 20 6f 66 20 74 77 6f 20 65 6c 65   list of two ele
cbd0: 6d 65 6e 74 73 2c 20 74 68 65 20 73 74 72 69 6e  ments, the strin
cbe0: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
cbf0: 20 6f 66 20 74 68 65 0a 2a 2a 20 65 72 72 6f 72   of the.** error
cc00: 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20 65 6e   code and the en
cc10: 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 65  glish language e
cc20: 78 70 6c 61 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  xplanation..*/.s
cc30: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65  tatic int test_e
cc40: 72 72 73 74 72 28 0a 20 20 76 6f 69 64 20 2a 20  rrstr(.  void * 
cc50: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
cc60: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
cc70: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
cc80: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
cc90: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 68 61 72 20  bjv[].){.  char 
cca0: 2a 7a 43 6f 64 65 3b 0a 20 20 69 6e 74 20 69 3b  *zCode;.  int i;
ccb0: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 31 20 29  .  if( objc!=1 )
ccc0: 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
ccd0: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
cce0: 2c 20 6f 62 6a 76 2c 20 22 3c 65 72 72 6f 72 20  , objv, "<error 
ccf0: 63 6f 64 65 3e 22 29 3b 0a 20 20 7d 0a 0a 20 20  code>");.  }..  
cd00: 7a 43 6f 64 65 20 3d 20 54 63 6c 5f 47 65 74 53  zCode = Tcl_GetS
cd10: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a  tring(objv[1]);.
cd20: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 32 30 30    for(i=0; i<200
cd30: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
cd40: 30 3d 3d 73 74 72 63 6d 70 28 65 72 72 6f 72 4e  0==strcmp(errorN
cd50: 61 6d 65 28 69 29 2c 20 7a 43 6f 64 65 29 20 29  ame(i), zCode) )
cd60: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 54 63   break;.  }.  Tc
cd70: 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
cd80: 72 70 2c 20 28 63 68 61 72 20 2a 29 73 71 6c 69  rp, (char *)sqli
cd90: 74 65 33 45 72 72 53 74 72 28 69 29 2c 20 30 29  te3ErrStr(i), 0)
cda0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
cdb0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
cdc0: 65 3a 20 20 20 20 62 72 65 61 6b 70 6f 69 6e 74  e:    breakpoint
cdd0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74  .**.** This rout
cde0: 69 6e 65 20 65 78 69 73 74 73 20 66 6f 72 20 6f  ine exists for o
cdf0: 6e 65 20 70 75 72 70 6f 73 65 20 2d 20 74 6f 20  ne purpose - to 
ce00: 70 72 6f 76 69 64 65 20 61 20 70 6c 61 63 65 20  provide a place 
ce10: 74 6f 20 70 75 74 20 61 0a 2a 2a 20 62 72 65 61  to put a.** brea
ce20: 6b 70 6f 69 6e 74 20 77 69 74 68 20 47 44 42 20  kpoint with GDB 
ce30: 74 68 61 74 20 63 61 6e 20 62 65 20 74 72 69 67  that can be trig
ce40: 67 65 72 65 64 20 75 73 69 6e 67 20 54 43 4c 20  gered using TCL 
ce50: 63 6f 64 65 2e 20 20 54 68 65 20 75 73 65 0a 2a  code.  The use.*
ce60: 2a 20 66 6f 72 20 74 68 69 73 20 69 73 20 77 68  * for this is wh
ce70: 65 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  en a particular 
ce80: 74 65 73 74 20 66 61 69 6c 73 20 6f 6e 20 28 73  test fails on (s
ce90: 61 79 29 20 74 68 65 20 31 34 38 35 74 68 20 69  ay) the 1485th i
cea0: 74 65 72 61 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20  teration..** In 
ceb0: 74 68 65 20 54 43 4c 20 74 65 73 74 20 73 63 72  the TCL test scr
cec0: 69 70 74 2c 20 77 65 20 63 61 6e 20 61 64 64 20  ipt, we can add 
ced0: 63 6f 64 65 20 6c 69 6b 65 20 74 68 69 73 3a 0a  code like this:.
cee0: 2a 2a 0a 2a 2a 20 20 20 20 20 69 66 20 7b 24 69  **.**     if {$i
cef0: 3d 3d 31 34 38 35 7d 20 62 72 65 61 6b 70 6f 69  ==1485} breakpoi
cf00: 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 65 6e 20 72 75  nt.**.** Then ru
cf10: 6e 20 74 65 73 74 66 69 78 74 75 72 65 20 69 6e  n testfixture in
cf20: 20 74 68 65 20 64 65 62 75 67 67 65 72 20 61 6e   the debugger an
cf30: 64 20 77 61 69 74 20 66 6f 72 20 74 68 65 20 62  d wait for the b
cf40: 72 65 61 6b 70 6f 69 6e 74 20 74 6f 0a 2a 2a 20  reakpoint to.** 
cf50: 66 69 72 65 2e 20 20 54 68 65 6e 20 61 64 64 69  fire.  Then addi
cf60: 74 69 6f 6e 61 6c 20 62 72 65 61 6b 70 6f 69 6e  tional breakpoin
cf70: 74 73 20 63 61 6e 20 62 65 20 73 65 74 20 74 6f  ts can be set to
cf80: 20 74 72 61 63 65 20 64 6f 77 6e 20 74 68 65 20   trace down the 
cf90: 62 75 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  bug..*/.static i
cfa0: 6e 74 20 74 65 73 74 5f 62 72 65 61 6b 70 6f 69  nt test_breakpoi
cfb0: 6e 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  nt(.  void *NotU
cfc0: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
cfd0: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
cfe0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
cff0: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
d000: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
d010: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
d020: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
d030: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
d040: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
d050: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
d060: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
d070: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 72  gument */.){.  r
d080: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 20 20 20  eturn TCL_OK;   
d090: 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 68        /* Do noth
d0a0: 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ing */.}../*.** 
d0b0: 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
d0c0: 5f 62 69 6e 64 5f 69 6e 74 20 20 53 54 4d 54 20  _bind_int  STMT 
d0d0: 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65  N VALUE.**.** Te
d0e0: 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62  st the sqlite3_b
d0f0: 69 6e 64 5f 69 6e 74 20 69 6e 74 65 72 66 61 63  ind_int interfac
d100: 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72  e.  STMT is a pr
d110: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
d120: 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e  ..** N is the in
d130: 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72  dex of a wildcar
d140: 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  d in the prepare
d150: 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  d statement.  Th
d160: 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69  is command.** bi
d170: 6e 64 73 20 61 20 33 32 2d 62 69 74 20 69 6e 74  nds a 32-bit int
d180: 65 67 65 72 20 56 41 4c 55 45 20 74 6f 20 74 68  eger VALUE to th
d190: 61 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a  at wildcard..*/.
d1a0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
d1b0: 62 69 6e 64 5f 69 6e 74 28 0a 20 20 76 6f 69 64  bind_int(.  void
d1c0: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
d1d0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
d1e0: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
d1f0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
d200: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
d210: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
d220: 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  t;.  int idx;.  
d230: 69 6e 74 20 76 61 6c 75 65 3b 0a 20 20 69 6e 74  int value;.  int
d240: 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
d250: 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=4 ){.    Tcl_A
d260: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
d270: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
d280: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
d290: 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
d2a0: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
d2b0: 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54  bjv[0], 0), " ST
d2c0: 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20 30 29 3b  MT N VALUE", 0);
d2d0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
d2e0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
d2f0: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
d300: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
d310: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
d320: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
d330: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
d340: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
d350: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
d360: 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65  v[2], &idx) ) re
d370: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
d380: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
d390: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
d3a0: 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29  objv[3], &value)
d3b0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
d3c0: 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
d3d0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 70 53  ite3_bind_int(pS
d3e0: 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65 29  tmt, idx, value)
d3f0: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
d400: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
d410: 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
d420: 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  t), rc) ) return
d430: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
d440: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
d450: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
d460: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
d470: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
d480: 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  .../*.** Usage: 
d490: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
d4a0: 6e 74 36 34 20 20 53 54 4d 54 20 4e 20 56 41 4c  nt64  STMT N VAL
d4b0: 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  UE.**.** Test th
d4c0: 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  e sqlite3_bind_i
d4d0: 6e 74 36 34 20 69 6e 74 65 72 66 61 63 65 2e 20  nt64 interface. 
d4e0: 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61   STMT is a prepa
d4f0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  red statement..*
d500: 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78  * N is the index
d510: 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69   of a wildcard i
d520: 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
d530: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20  tatement.  This 
d540: 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73  command.** binds
d550: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
d560: 72 20 56 41 4c 55 45 20 74 6f 20 74 68 61 74 20  r VALUE to that 
d570: 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61  wildcard..*/.sta
d580: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
d590: 64 5f 69 6e 74 36 34 28 0a 20 20 76 6f 69 64 20  d_int64(.  void 
d5a0: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
d5b0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
d5c0: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
d5d0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
d5e0: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
d5f0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
d600: 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69  ;.  int idx;.  i
d610: 36 34 20 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20  64 value;.  int 
d620: 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
d630: 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =4 ){.    Tcl_Ap
d640: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
d650: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
d660: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
d670: 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  .        Tcl_Get
d680: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
d690: 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d  jv[0], 0), " STM
d6a0: 54 20 4e 20 56 41 4c 55 45 22 2c 20 30 29 3b 0a  T N VALUE", 0);.
d6b0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
d6c0: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
d6d0: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
d6e0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
d6f0: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
d700: 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
d710: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
d720: 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
d730: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
d740: 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74  [2], &idx) ) ret
d750: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
d760: 20 69 66 28 20 54 63 6c 5f 47 65 74 57 69 64 65   if( Tcl_GetWide
d770: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
d780: 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c  p, objv[3], &val
d790: 75 65 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ue) ) return TCL
d7a0: 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
d7b0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
d7c0: 36 34 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76  64(pStmt, idx, v
d7d0: 61 6c 75 65 29 3b 0a 20 20 69 66 28 20 73 71 6c  alue);.  if( sql
d7e0: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
d7f0: 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
d800: 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
d810: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
d820: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
d830: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75  E_OK ){.    retu
d840: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
d850: 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  }..  return TCL_
d860: 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73  OK;.}.../*.** Us
d870: 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62  age:   sqlite3_b
d880: 69 6e 64 5f 64 6f 75 62 6c 65 20 20 53 54 4d 54  ind_double  STMT
d890: 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54   N VALUE.**.** T
d8a0: 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f  est the sqlite3_
d8b0: 62 69 6e 64 5f 64 6f 75 62 6c 65 20 69 6e 74 65  bind_double inte
d8c0: 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20  rface.  STMT is 
d8d0: 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
d8e0: 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68  ment..** N is th
d8f0: 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c  e index of a wil
d900: 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65  dcard in the pre
d910: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
d920: 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a    This command.*
d930: 2a 20 62 69 6e 64 73 20 61 20 36 34 2d 62 69 74  * binds a 64-bit
d940: 20 69 6e 74 65 67 65 72 20 56 41 4c 55 45 20 74   integer VALUE t
d950: 6f 20 74 68 61 74 20 77 69 6c 64 63 61 72 64 2e  o that wildcard.
d960: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
d970: 65 73 74 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28  est_bind_double(
d980: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
d990: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
d9a0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
d9b0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
d9c0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
d9d0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
d9e0: 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
d9f0: 69 64 78 3b 0a 20 20 64 6f 75 62 6c 65 20 76 61  idx;.  double va
da00: 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  lue;.  int rc;..
da10: 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b    if( objc!=4 ){
da20: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
da30: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
da40: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
da50: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
da60: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
da70: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
da80: 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56  , 0), " STMT N V
da90: 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20 72  ALUE", 0);.    r
daa0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
dab0: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
dac0: 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
dad0: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
dae0: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
daf0: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
db00: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
db10: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
db20: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
db30: 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
db40: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
db50: 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65 46 72 6f  Tcl_GetDoubleFro
db60: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
db70: 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29 20 29 20  v[3], &value) ) 
db80: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
db90: 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
dba0: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 70 53  3_bind_double(pS
dbb0: 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65 29  tmt, idx, value)
dbc0: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
dbd0: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
dbe0: 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
dbf0: 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  t), rc) ) return
dc00: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
dc10: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
dc20: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
dc30: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
dc40: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
dc50: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
dc60: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75   sqlite3_bind_nu
dc70: 6c 6c 20 20 53 54 4d 54 20 4e 0a 2a 2a 0a 2a 2a  ll  STMT N.**.**
dc80: 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65   Test the sqlite
dc90: 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 69 6e 74 65  3_bind_null inte
dca0: 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20  rface.  STMT is 
dcb0: 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
dcc0: 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68  ment..** N is th
dcd0: 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c  e index of a wil
dce0: 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65  dcard in the pre
dcf0: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
dd00: 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a    This command.*
dd10: 2a 20 62 69 6e 64 73 20 61 20 4e 55 4c 4c 20 74  * binds a NULL t
dd20: 6f 20 74 68 65 20 77 69 6c 64 63 61 72 64 2e 0a  o the wildcard..
dd30: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
dd40: 73 74 5f 62 69 6e 64 5f 6e 75 6c 6c 28 0a 20 20  st_bind_null(.  
dd50: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
dd60: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
dd70: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
dd80: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
dd90: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
dda0: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
ddb0: 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78  pStmt;.  int idx
ddc0: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69  ;.  int rc;..  i
ddd0: 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20  f( objc!=3 ){.  
dde0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
ddf0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
de00: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
de10: 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
de20: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
de30: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
de40: 29 2c 20 22 20 53 54 4d 54 20 4e 22 2c 20 30 29  ), " STMT N", 0)
de50: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
de60: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
de70: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
de80: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
de90: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
dea0: 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
deb0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
dec0: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
ded0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
dee0: 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72  jv[2], &idx) ) r
def0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
df00: 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
df10: 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d 74  _bind_null(pStmt
df20: 2c 20 69 64 78 29 3b 0a 20 20 69 66 28 20 73 71  , idx);.  if( sq
df30: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
df40: 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44  (interp, StmtToD
df50: 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20  b(pStmt), rc) ) 
df60: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
df70: 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
df80: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
df90: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
dfa0: 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   }..  return TCL
dfb0: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
dfc0: 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62  age:   sqlite3_b
dfd0: 69 6e 64 5f 74 65 78 74 20 20 53 54 4d 54 20 4e  ind_text  STMT N
dfe0: 20 53 54 52 49 4e 47 20 42 59 54 45 53 0a 2a 2a   STRING BYTES.**
dff0: 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c  .** Test the sql
e000: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 69  ite3_bind_text i
e010: 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20  nterface.  STMT 
e020: 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74  is a prepared st
e030: 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73  atement..** N is
e040: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
e050: 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20  wildcard in the 
e060: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
e070: 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e  nt.  This comman
e080: 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55 54 46  d.** binds a UTF
e090: 2d 38 20 73 74 72 69 6e 67 20 53 54 52 49 4e 47  -8 string STRING
e0a0: 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72 64   to the wildcard
e0b0: 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20 69 73  .  The string is
e0c0: 20 42 59 54 45 53 20 62 79 74 65 73 0a 2a 2a 20   BYTES bytes.** 
e0d0: 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  long..*/.static 
e0e0: 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 74 65  int test_bind_te
e0f0: 78 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  xt(.  void * cli
e100: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
e110: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
e120: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
e130: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
e140: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
e150: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
e160: 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 62 79  nt idx;.  int by
e170: 74 65 73 3b 0a 20 20 63 68 61 72 20 2a 76 61 6c  tes;.  char *val
e180: 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  ue;.  int rc;.. 
e190: 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a   if( objc!=5 ){.
e1a0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
e1b0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
e1c0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
e1d0: 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
e1e0: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
e1f0: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
e200: 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56 41   0), " STMT N VA
e210: 4c 55 45 20 42 59 54 45 53 22 2c 20 30 29 3b 0a  LUE BYTES", 0);.
e220: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
e230: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
e240: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
e250: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
e260: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
e270: 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
e280: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
e290: 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
e2a0: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
e2b0: 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74  [2], &idx) ) ret
e2c0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
e2d0: 20 76 61 6c 75 65 20 3d 20 54 63 6c 5f 47 65 74   value = Tcl_Get
e2e0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b  String(objv[3]);
e2f0: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
e300: 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
e310: 20 6f 62 6a 76 5b 34 5d 2c 20 26 62 79 74 65 73   objv[4], &bytes
e320: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
e330: 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71  RROR;..  rc = sq
e340: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
e350: 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75  pStmt, idx, valu
e360: 65 2c 20 62 79 74 65 73 2c 20 53 51 4c 49 54 45  e, bytes, SQLITE
e370: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 69  _TRANSIENT);.  i
e380: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
e390: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74  rCode(interp, St
e3a0: 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72  mtToDb(pStmt), r
e3b0: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
e3c0: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21  ERROR;.  if( rc!
e3d0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
e3e0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
e3f0: 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c 69 74  lt(interp, sqlit
e400: 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65 28  e3TestErrorName(
e410: 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  rc), 0);.    ret
e420: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
e430: 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   }..  return TCL
e440: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
e450: 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62  age:   sqlite3_b
e460: 69 6e 64 5f 74 65 78 74 31 36 20 3f 2d 73 74 61  ind_text16 ?-sta
e470: 74 69 63 3f 20 53 54 4d 54 20 4e 20 53 54 52 49  tic? STMT N STRI
e480: 4e 47 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54  NG BYTES.**.** T
e490: 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f  est the sqlite3_
e4a0: 62 69 6e 64 5f 74 65 78 74 31 36 20 69 6e 74 65  bind_text16 inte
e4b0: 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20  rface.  STMT is 
e4c0: 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
e4d0: 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68  ment..** N is th
e4e0: 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c  e index of a wil
e4f0: 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65  dcard in the pre
e500: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
e510: 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a    This command.*
e520: 2a 20 62 69 6e 64 73 20 61 20 55 54 46 2d 31 36  * binds a UTF-16
e530: 20 73 74 72 69 6e 67 20 53 54 52 49 4e 47 20 74   string STRING t
e540: 6f 20 74 68 65 20 77 69 6c 64 63 61 72 64 2e 20  o the wildcard. 
e550: 20 54 68 65 20 73 74 72 69 6e 67 20 69 73 20 42   The string is B
e560: 59 54 45 53 20 62 79 74 65 73 0a 2a 2a 20 6c 6f  YTES bytes.** lo
e570: 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ng..*/.static in
e580: 74 20 74 65 73 74 5f 62 69 6e 64 5f 74 65 78 74  t test_bind_text
e590: 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  16(.  void * cli
e5a0: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
e5b0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
e5c0: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
e5d0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
e5e0: 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51  [].){.#ifndef SQ
e5f0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
e600: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
e610: 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78  pStmt;.  int idx
e620: 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 20  ;.  int bytes;. 
e630: 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20   char *value;.  
e640: 69 6e 74 20 72 63 3b 0a 0a 20 20 76 6f 69 64 20  int rc;..  void 
e650: 28 2a 78 44 65 6c 29 28 29 20 3d 20 28 6f 62 6a  (*xDel)() = (obj
e660: 63 3d 3d 36 3f 53 51 4c 49 54 45 5f 53 54 41 54  c==6?SQLITE_STAT
e670: 49 43 3a 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  IC:SQLITE_TRANSI
e680: 45 4e 54 29 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20  ENT);.  Tcl_Obj 
e690: 2a 6f 53 74 6d 74 20 20 20 20 3d 20 6f 62 6a 76  *oStmt    = objv
e6a0: 5b 6f 62 6a 63 2d 34 5d 3b 0a 20 20 54 63 6c 5f  [objc-4];.  Tcl_
e6b0: 4f 62 6a 20 2a 6f 4e 20 20 20 20 20 20 20 3d 20  Obj *oN       = 
e6c0: 6f 62 6a 76 5b 6f 62 6a 63 2d 33 5d 3b 0a 20 20  objv[objc-3];.  
e6d0: 54 63 6c 5f 4f 62 6a 20 2a 6f 53 74 72 69 6e 67  Tcl_Obj *oString
e6e0: 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 32 5d    = objv[objc-2]
e6f0: 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 42 79  ;.  Tcl_Obj *oBy
e700: 74 65 73 20 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a  tes   = objv[obj
e710: 63 2d 31 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  c-1];..  if( obj
e720: 63 21 3d 35 20 26 26 20 6f 62 6a 63 21 3d 36 29  c!=5 && objc!=6)
e730: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
e740: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
e750: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
e760: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
e770: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
e780: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
e790: 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20  ], 0), " STMT N 
e7a0: 56 41 4c 55 45 20 42 59 54 45 53 22 2c 20 30 29  VALUE BYTES", 0)
e7b0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
e7c0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
e7d0: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
e7e0: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
e7f0: 74 53 74 72 69 6e 67 28 6f 53 74 6d 74 29 2c 20  tString(oStmt), 
e800: 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
e810: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
e820: 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
e830: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 4e 2c 20  Obj(interp, oN, 
e840: 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
e850: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75  CL_ERROR;.  valu
e860: 65 20 3d 20 28 63 68 61 72 2a 29 54 63 6c 5f 47  e = (char*)Tcl_G
e870: 65 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f  etByteArrayFromO
e880: 62 6a 28 6f 53 74 72 69 6e 67 2c 20 30 29 3b 0a  bj(oString, 0);.
e890: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
e8a0: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
e8b0: 6f 42 79 74 65 73 2c 20 26 62 79 74 65 73 29 20  oBytes, &bytes) 
e8c0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
e8d0: 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  OR;..  rc = sqli
e8e0: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 28  te3_bind_text16(
e8f0: 70 53 74 6d 74 2c 20 69 64 78 2c 20 28 76 6f 69  pStmt, idx, (voi
e900: 64 20 2a 29 76 61 6c 75 65 2c 20 62 79 74 65 73  d *)value, bytes
e910: 2c 20 78 44 65 6c 29 3b 0a 20 20 69 66 28 20 73  , xDel);.  if( s
e920: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
e930: 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f  e(interp, StmtTo
e940: 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29  Db(pStmt), rc) )
e950: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
e960: 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  R;.  if( rc!=SQL
e970: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
e980: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
e990: 20 20 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53    }..#endif /* S
e9a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
e9b0: 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   */.  return TCL
e9c0: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
e9d0: 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62  age:   sqlite3_b
e9e0: 69 6e 64 5f 62 6c 6f 62 20 20 53 54 4d 54 20 4e  ind_blob  STMT N
e9f0: 20 44 41 54 41 20 42 59 54 45 53 0a 2a 2a 0a 2a   DATA BYTES.**.*
ea00: 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74  * Test the sqlit
ea10: 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 20 69 6e 74  e3_bind_blob int
ea20: 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73  erface.  STMT is
ea30: 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74   a prepared stat
ea40: 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74  ement..** N is t
ea50: 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69  he index of a wi
ea60: 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72  ldcard in the pr
ea70: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
ea80: 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a  .  This command.
ea90: 2a 2a 20 62 69 6e 64 73 20 61 20 42 4c 4f 42 20  ** binds a BLOB 
eaa0: 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72 64 2e  to the wildcard.
eab0: 20 20 54 68 65 20 42 4c 4f 42 20 69 73 20 42 59    The BLOB is BY
eac0: 54 45 53 20 62 79 74 65 73 20 69 6e 20 73 69 7a  TES bytes in siz
ead0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
eae0: 20 74 65 73 74 5f 62 69 6e 64 5f 62 6c 6f 62 28   test_bind_blob(
eaf0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
eb00: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
eb10: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
eb20: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
eb30: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
eb40: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
eb50: 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
eb60: 69 64 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73  idx;.  int bytes
eb70: 3b 0a 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b  ;.  char *value;
eb80: 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
eb90: 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20  ( objc!=5 ){.   
eba0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
ebb0: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
ebc0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
ebd0: 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
ebe0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
ebf0: 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
ec00: 2c 20 22 20 53 54 4d 54 20 4e 20 44 41 54 41 20  , " STMT N DATA 
ec10: 42 59 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20  BYTES", 0);.    
ec20: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
ec30: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
ec40: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
ec50: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
ec60: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
ec70: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
ec80: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
ec90: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
eca0: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
ecb0: 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20   &idx) ) return 
ecc0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c  TCL_ERROR;.  val
ecd0: 75 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  ue = Tcl_GetStri
ece0: 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 69  ng(objv[3]);.  i
ecf0: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
ed00: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
ed10: 76 5b 34 5d 2c 20 26 62 79 74 65 73 29 20 29 20  v[4], &bytes) ) 
ed20: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
ed30: 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
ed40: 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 70 53 74 6d  3_bind_blob(pStm
ed50: 74 2c 20 69 64 78 2c 20 76 61 6c 75 65 2c 20 62  t, idx, value, b
ed60: 79 74 65 73 2c 20 53 51 4c 49 54 45 5f 54 52 41  ytes, SQLITE_TRA
ed70: 4e 53 49 45 4e 54 29 3b 0a 20 20 69 66 28 20 73  NSIENT);.  if( s
ed80: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
ed90: 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f  e(interp, StmtTo
eda0: 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29  Db(pStmt), rc) )
edb0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
edc0: 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  R;.  if( rc!=SQL
edd0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
ede0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
edf0: 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43    }..  return TC
ee00: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
ee10: 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f  sage:   sqlite3_
ee20: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63  bind_parameter_c
ee30: 6f 75 6e 74 20 20 53 54 4d 54 0a 2a 2a 0a 2a 2a  ount  STMT.**.**
ee40: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
ee50: 65 72 20 6f 66 20 77 69 6c 64 63 61 72 64 73 20  er of wildcards 
ee60: 69 6e 20 74 68 65 20 67 69 76 65 6e 20 73 74 61  in the given sta
ee70: 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69  tement..*/.stati
ee80: 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
ee90: 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28  parameter_count(
eea0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
eeb0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
eec0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
eed0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
eee0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
eef0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
ef00: 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28  t *pStmt;..  if(
ef10: 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20   objc!=2 ){.    
ef20: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
ef30: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
ef40: 2c 20 22 53 54 4d 54 22 29 3b 0a 20 20 20 20 72  , "STMT");.    r
ef50: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
ef60: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74  .  }.  if( getSt
ef70: 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
ef80: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
ef90: 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
efa0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
efb0: 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  RROR;.  Tcl_SetO
efc0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
efd0: 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73   Tcl_NewIntObj(s
efe0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
eff0: 6d 65 74 65 72 5f 63 6f 75 6e 74 28 70 53 74 6d  meter_count(pStm
f000: 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  t)));.  return T
f010: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
f020: 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
f030: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
f040: 6e 61 6d 65 20 20 53 54 4d 54 20 20 4e 0a 2a 2a  name  STMT  N.**
f050: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
f060: 61 6d 65 20 6f 66 20 74 68 65 20 4e 74 68 20 77  ame of the Nth w
f070: 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20 66 69  ildcard.  The fi
f080: 72 73 74 20 77 69 6c 64 63 61 72 64 20 69 73 20  rst wildcard is 
f090: 31 2e 0a 2a 2a 20 41 6e 20 65 6d 70 74 79 20 73  1..** An empty s
f0a0: 74 72 69 6e 67 20 69 73 20 72 65 74 75 72 6e 65  tring is returne
f0b0: 64 20 69 66 20 4e 20 69 73 20 6f 75 74 20 6f 66  d if N is out of
f0c0: 20 72 61 6e 67 65 20 6f 72 20 69 66 20 74 68 65   range or if the
f0d0: 20 77 69 6c 64 63 61 72 64 0a 2a 2a 20 69 73 20   wildcard.** is 
f0e0: 6e 61 6d 65 6c 65 73 73 2e 0a 2a 2f 0a 73 74 61  nameless..*/.sta
f0f0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
f100: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
f110: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
f120: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
f130: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
f140: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
f150: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
f160: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
f170: 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74  mt *pStmt;.  int
f180: 20 69 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21   i;..  if( objc!
f190: 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =3 ){.    Tcl_Wr
f1a0: 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
f1b0: 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d  p, 1, objv, "STM
f1c0: 54 20 4e 22 29 3b 0a 20 20 20 20 72 65 74 75 72  T N");.    retur
f1d0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
f1e0: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
f1f0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
f200: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
f210: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
f220: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f230: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
f240: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
f250: 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 29 20 29  , objv[2], &i) )
f260: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f270: 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  R;.  Tcl_SetObjR
f280: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a 20  esult(interp, . 
f290: 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e      Tcl_NewStrin
f2a0: 67 4f 62 6a 28 73 71 6c 69 74 65 33 5f 62 69 6e  gObj(sqlite3_bin
f2b0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
f2c0: 28 70 53 74 6d 74 2c 69 29 2c 2d 31 29 0a 20 20  (pStmt,i),-1).  
f2d0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
f2e0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
f2f0: 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ge:   sqlite3_bi
f300: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64  nd_parameter_ind
f310: 65 78 20 20 53 54 4d 54 20 20 4e 41 4d 45 0a 2a  ex  STMT  NAME.*
f320: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
f330: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 77 69 6c  index of the wil
f340: 64 63 61 72 64 20 63 61 6c 6c 65 64 20 4e 41 4d  dcard called NAM
f350: 45 2e 20 20 52 65 74 75 72 6e 20 30 20 69 66 20  E.  Return 0 if 
f360: 74 68 65 72 65 20 69 73 0a 2a 2a 20 6e 6f 20 73  there is.** no s
f370: 75 63 68 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f  uch wildcard..*/
f380: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
f390: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
f3a0: 69 6e 64 65 78 28 0a 20 20 76 6f 69 64 20 2a 20  index(.  void * 
f3b0: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
f3c0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
f3d0: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
f3e0: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
f3f0: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
f400: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
f410: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
f420: 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
f430: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
f440: 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 20 4e 41  , objv, "STMT NA
f450: 4d 45 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  ME");.    return
f460: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
f470: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
f480: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
f490: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
f4a0: 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
f4b0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
f4c0: 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
f4d0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a 20 20 20  ult(interp, .   
f4e0: 20 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28    Tcl_NewIntObj(
f4f0: 0a 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  .       sqlite3_
f500: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69  bind_parameter_i
f510: 6e 64 65 78 28 70 53 74 6d 74 2c 54 63 6c 5f 47  ndex(pStmt,Tcl_G
f520: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d  etString(objv[2]
f530: 29 29 0a 20 20 20 20 20 29 0a 20 20 29 3b 0a 20  )).     ).  );. 
f540: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
f550: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
f560: 20 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f    sqlite3_clear_
f570: 62 69 6e 64 69 6e 67 73 20 53 54 4d 54 0a 2a 2a  bindings STMT.**
f580: 0a 2a 2f 0a 23 69 66 20 30 0a 73 74 61 74 69 63  .*/.#if 0.static
f590: 20 69 6e 74 20 74 65 73 74 5f 63 6c 65 61 72 5f   int test_clear_
f5a0: 62 69 6e 64 69 6e 67 73 28 0a 20 20 76 6f 69 64  bindings(.  void
f5b0: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
f5c0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
f5d0: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
f5e0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
f5f0: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
f600: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
f610: 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  t;..  if( objc!=
f620: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  2 ){.    Tcl_Wro
f630: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
f640: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54  , 1, objv, "STMT
f650: 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
f660: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
f670: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
f680: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
f690: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
f6a0: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
f6b0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
f6c0: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
f6d0: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
f6e0: 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f  wIntObj(sqlite3_
f6f0: 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 70  clear_bindings(p
f700: 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72  Stmt)));.  retur
f710: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64  n TCL_OK;.}.#end
f720: 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  if../*.** Usage:
f730: 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65   sqlite3_errcode
f740: 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e   DB.**.** Return
f750: 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 70 72   the string repr
f760: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
f770: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71  e most recent sq
f780: 6c 69 74 65 33 5f 2a 20 41 50 49 0a 2a 2a 20 65  lite3_* API.** e
f790: 72 72 6f 72 20 63 6f 64 65 2e 20 65 2e 67 2e 20  rror code. e.g. 
f7a0: 22 53 51 4c 49 54 45 5f 45 52 52 4f 52 22 2e 0a  "SQLITE_ERROR"..
f7b0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
f7c0: 73 74 5f 65 72 72 63 6f 64 65 28 0a 20 20 76 6f  st_errcode(.  vo
f7d0: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
f7e0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
f7f0: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
f800: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
f810: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
f820: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 0a 20 20  sqlite3 *db;..  
f830: 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
f840: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
f850: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
f860: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
f870: 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
f880: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
f890: 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c  objv[0]), " DB",
f8a0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
f8b0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
f8c0: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
f8d0: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
f8e0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
f8f0: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
f900: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
f910: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
f920: 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72  p, (char *)error
f930: 4e 61 6d 65 28 73 71 6c 69 74 65 33 5f 65 72 72  Name(sqlite3_err
f940: 63 6f 64 65 28 64 62 29 29 2c 20 30 29 3b 0a 20  code(db)), 0);. 
f950: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
f960: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
f970: 20 20 74 65 73 74 5f 65 72 72 6d 73 67 20 44 42    test_errmsg DB
f980: 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74  .**.** Returns t
f990: 68 65 20 55 54 46 2d 38 20 72 65 70 72 65 73 65  he UTF-8 represe
f9a0: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 65  ntation of the e
f9b0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72  rror message str
f9c0: 69 6e 67 20 66 6f 72 20 74 68 65 0a 2a 2a 20 6d  ing for the.** m
f9d0: 6f 73 74 20 72 65 63 65 6e 74 20 73 71 6c 69 74  ost recent sqlit
f9e0: 65 33 5f 2a 20 41 50 49 20 63 61 6c 6c 2e 0a 2a  e3_* API call..*
f9f0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
fa00: 74 5f 65 72 72 6d 73 67 28 0a 20 20 76 6f 69 64  t_errmsg(.  void
fa10: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
fa20: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
fa30: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
fa40: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
fa50: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
fa60: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e  lite3 *db;.  con
fa70: 73 74 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a 0a  st char *zErr;..
fa80: 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
fa90: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
faa0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
fab0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
fac0: 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
fad0: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
fae0: 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42  g(objv[0]), " DB
faf0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
fb00: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
fb10: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
fb20: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
fb30: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
fb40: 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  ]), &db) ) retur
fb50: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
fb60: 7a 45 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 65  zErr = sqlite3_e
fb70: 72 72 6d 73 67 28 64 62 29 3b 0a 20 20 54 63 6c  rrmsg(db);.  Tcl
fb80: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
fb90: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
fba0: 69 6e 67 4f 62 6a 28 7a 45 72 72 2c 20 2d 31 29  ingObj(zErr, -1)
fbb0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
fbc0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
fbd0: 67 65 3a 20 20 20 74 65 73 74 5f 65 72 72 6d 73  ge:   test_errms
fbe0: 67 31 36 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74  g16 DB.**.** Ret
fbf0: 75 72 6e 73 20 74 68 65 20 55 54 46 2d 31 36 20  urns the UTF-16 
fc00: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
fc10: 66 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  f the error mess
fc20: 61 67 65 20 73 74 72 69 6e 67 20 66 6f 72 20 74  age string for t
fc30: 68 65 0a 2a 2a 20 6d 6f 73 74 20 72 65 63 65 6e  he.** most recen
fc40: 74 20 73 71 6c 69 74 65 33 5f 2a 20 41 50 49 20  t sqlite3_* API 
fc50: 63 61 6c 6c 2e 20 54 68 69 73 20 69 73 20 61 20  call. This is a 
fc60: 62 79 74 65 20 61 72 72 61 79 20 6f 62 6a 65 63  byte array objec
fc70: 74 20 61 74 20 74 68 65 20 54 43 4c 20 0a 2a 2a  t at the TCL .**
fc80: 20 6c 65 76 65 6c 2c 20 61 6e 64 20 69 74 20 69   level, and it i
fc90: 6e 63 6c 75 64 65 73 20 74 68 65 20 30 78 30 30  ncludes the 0x00
fca0: 20 30 78 30 30 20 74 65 72 6d 69 6e 61 74 6f 72   0x00 terminator
fcb0: 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e   bytes at the en
fcc0: 64 20 6f 66 20 74 68 65 0a 2a 2a 20 55 54 46 2d  d of the.** UTF-
fcd0: 31 36 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74  16 string..*/.st
fce0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65 72  atic int test_er
fcf0: 72 6d 73 67 31 36 28 0a 20 20 76 6f 69 64 20 2a  rmsg16(.  void *
fd00: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
fd10: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
fd20: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
fd30: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
fd40: 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65  objv[].){.#ifnde
fd50: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
fd60: 46 31 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  F16.  sqlite3 *d
fd70: 62 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  b;.  const void 
fd80: 2a 7a 45 72 72 3b 0a 20 20 69 6e 74 20 62 79 74  *zErr;.  int byt
fd90: 65 73 20 3d 20 30 3b 0a 0a 20 20 69 66 28 20 6f  es = 0;..  if( o
fda0: 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
fdb0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
fdc0: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
fdd0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
fde0: 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
fdf0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
fe00: 30 5d 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a  0]), " DB", 0);.
fe10: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
fe20: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
fe30: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
fe40: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
fe50: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
fe60: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
fe70: 52 52 4f 52 3b 0a 0a 20 20 7a 45 72 72 20 3d 20  RROR;..  zErr = 
fe80: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36  sqlite3_errmsg16
fe90: 28 64 62 29 3b 0a 20 20 69 66 28 20 7a 45 72 72  (db);.  if( zErr
fea0: 20 29 7b 0a 20 20 20 20 62 79 74 65 73 20 3d 20   ){.    bytes = 
feb0: 73 71 6c 69 74 65 33 75 74 66 31 36 42 79 74 65  sqlite3utf16Byte
fec0: 4c 65 6e 28 7a 45 72 72 2c 20 2d 31 29 3b 0a 20  Len(zErr, -1);. 
fed0: 20 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52   }.  Tcl_SetObjR
fee0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
fef0: 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62  l_NewByteArrayOb
ff00: 6a 28 7a 45 72 72 2c 20 62 79 74 65 73 29 29 3b  j(zErr, bytes));
ff10: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
ff20: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
ff30: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
ff40: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
ff50: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
ff60: 20 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61   DB sql bytes ta
ff70: 69 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  ilvar.**.** Comp
ff80: 69 6c 65 20 75 70 20 74 6f 20 3c 62 79 74 65 73  ile up to <bytes
ff90: 3e 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 73  > bytes of the s
ffa0: 75 70 70 6c 69 65 64 20 53 51 4c 20 73 74 72 69  upplied SQL stri
ffb0: 6e 67 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a  ng <sql> using.*
ffc0: 2a 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  * database handl
ffd0: 65 20 3c 44 42 3e 2e 20 54 68 65 20 70 61 72 61  e <DB>. The para
ffe0: 6d 65 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20  meter <tailval> 
fff0: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
10000 20 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61   global.** varia
10010 62 6c 65 20 74 68 61 74 20 69 73 20 73 65 74 20  ble that is set 
10020 74 6f 20 74 68 65 20 75 6e 75 73 65 64 20 70 6f  to the unused po
10030 72 74 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28  rtion of <sql> (
10040 69 66 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54  if any). A.** ST
10050 4d 54 20 68 61 6e 64 6c 65 20 69 73 20 72 65 74  MT handle is ret
10060 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  urned..*/.static
10070 20 69 6e 74 20 74 65 73 74 5f 70 72 65 70 61 72   int test_prepar
10080 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
10090 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
100a0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
100b0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
100c0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
100d0 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ].){.  sqlite3 *
100e0 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  db;.  const char
100f0 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e 74 20 62 79   *zSql;.  int by
10100 74 65 73 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  tes;.  const cha
10110 72 20 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20  r *zTail = 0;.  
10120 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
10130 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20  tmt = 0;.  char 
10140 7a 42 75 66 5b 35 30 5d 3b 0a 20 20 69 6e 74 20  zBuf[50];.  int 
10150 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
10160 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =5 ){.    Tcl_Ap
10170 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
10180 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
10190 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
101a0 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
101b0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
101c0 20 22 20 44 42 20 73 71 6c 20 62 79 74 65 73 20   " DB sql bytes 
101d0 74 61 69 6c 76 61 72 22 2c 20 30 29 3b 0a 20 20  tailvar", 0);.  
101e0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
101f0 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
10200 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
10210 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
10220 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20  (objv[1]), &db) 
10230 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
10240 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d 20 54 63 6c  OR;.  zSql = Tcl
10250 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
10260 32 5d 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  2]);.  if( Tcl_G
10270 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
10280 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62  erp, objv[3], &b
10290 79 74 65 73 29 20 29 20 72 65 74 75 72 6e 20 54  ytes) ) return T
102a0 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20  CL_ERROR;..  rc 
102b0 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
102c0 65 28 64 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65  e(db, zSql, byte
102d0 73 2c 20 26 70 53 74 6d 74 2c 20 26 7a 54 61 69  s, &pStmt, &zTai
102e0 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  l);.  if( sqlite
102f0 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
10300 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72  erp, db, rc) ) r
10310 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
10320 0a 20 20 69 66 28 20 7a 54 61 69 6c 20 29 7b 0a  .  if( zTail ){.
10330 20 20 20 20 69 66 28 20 62 79 74 65 73 3e 3d 30      if( bytes>=0
10340 20 29 7b 0a 20 20 20 20 20 20 62 79 74 65 73 20   ){.      bytes 
10350 3d 20 62 79 74 65 73 20 2d 20 28 7a 54 61 69 6c  = bytes - (zTail
10360 2d 7a 53 71 6c 29 3b 0a 20 20 20 20 7d 0a 20 20  -zSql);.    }.  
10370 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32    Tcl_ObjSetVar2
10380 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d  (interp, objv[4]
10390 2c 20 30 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  , 0, Tcl_NewStri
103a0 6e 67 4f 62 6a 28 7a 54 61 69 6c 2c 20 62 79 74  ngObj(zTail, byt
103b0 65 73 29 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69  es), 0);.  }.  i
103c0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
103d0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
103e0 70 53 74 6d 74 3d 3d 30 20 29 3b 0a 20 20 20 20  pStmt==0 );.    
103f0 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 28  sprintf(zBuf, "(
10400 25 64 29 20 22 2c 20 72 63 29 3b 0a 20 20 20 20  %d) ", rc);.    
10410 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
10420 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 73  (interp, zBuf, s
10430 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62  qlite3_errmsg(db
10440 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ), 0);.    retur
10450 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
10460 0a 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b  ..  if( pStmt ){
10470 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
10480 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53  TestMakePointerS
10490 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  tr(interp, zBuf,
104a0 20 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e   pStmt) ) return
104b0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20   TCL_ERROR;.    
104c0 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
104d0 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30  (interp, zBuf, 0
104e0 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
104f0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
10500 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
10510 70 72 65 70 61 72 65 20 44 42 20 73 71 6c 20 62  prepare DB sql b
10520 79 74 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a 0a  ytes tailvar.**.
10530 2a 2a 20 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f  ** Compile up to
10540 20 3c 62 79 74 65 73 3e 20 62 79 74 65 73 20 6f   <bytes> bytes o
10550 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 53  f the supplied S
10560 51 4c 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20  QL string <sql> 
10570 75 73 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73  using.** databas
10580 65 20 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54  e handle <DB>. T
10590 68 65 20 70 61 72 61 6d 65 74 65 72 20 3c 74 61  he parameter <ta
105a0 69 6c 76 61 6c 3e 20 69 73 20 74 68 65 20 6e 61  ilval> is the na
105b0 6d 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a  me of a global.*
105c0 2a 20 76 61 72 69 61 62 6c 65 20 74 68 61 74 20  * variable that 
105d0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 75 6e  is set to the un
105e0 75 73 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20  used portion of 
105f0 3c 73 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20  <sql> (if any). 
10600 41 0a 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65  A.** STMT handle
10610 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f   is returned..*/
10620 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
10630 5f 70 72 65 70 61 72 65 31 36 28 0a 20 20 76 6f  _prepare16(.  vo
10640 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
10650 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
10660 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
10670 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
10680 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69  NST objv[].){.#i
10690 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
106a0 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69 74 65  T_UTF16.  sqlite
106b0 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 76  3 *db;.  const v
106c0 6f 69 64 20 2a 7a 53 71 6c 3b 0a 20 20 63 6f 6e  oid *zSql;.  con
106d0 73 74 20 76 6f 69 64 20 2a 7a 54 61 69 6c 20 3d  st void *zTail =
106e0 20 30 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70   0;.  Tcl_Obj *p
106f0 54 61 69 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69  Tail = 0;.  sqli
10700 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20  te3_stmt *pStmt 
10710 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 42 75 66  = 0;.  char zBuf
10720 5b 35 30 5d 3b 20 0a 20 20 69 6e 74 20 72 63 3b  [50]; .  int rc;
10730 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 20 20 20  .  int bytes;   
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10750 54 68 65 20 69 6e 74 65 67 65 72 20 73 70 65 63  The integer spec
10760 69 66 69 65 64 20 61 73 20 61 72 67 20 33 20 2a  ified as arg 3 *
10770 2f 0a 20 20 69 6e 74 20 6f 62 6a 6c 65 6e 3b 20  /.  int objlen; 
10780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10790 20 54 68 65 20 62 79 74 65 2d 61 72 72 61 79 20   The byte-array 
107a0 6c 65 6e 67 74 68 20 6f 66 20 61 72 67 20 32 20  length of arg 2 
107b0 2a 2f 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  */..  if( objc!=
107c0 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  5 ){.    Tcl_App
107d0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
107e0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
107f0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
10800 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
10810 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
10820 22 20 44 42 20 73 71 6c 20 62 79 74 65 73 20 74  " DB sql bytes t
10830 61 69 6c 76 61 72 22 2c 20 30 29 3b 0a 20 20 20  ailvar", 0);.   
10840 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
10850 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
10860 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
10870 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
10880 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
10890 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
108a0 52 3b 0a 20 20 7a 53 71 6c 20 3d 20 54 63 6c 5f  R;.  zSql = Tcl_
108b0 47 65 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d  GetByteArrayFrom
108c0 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 26 6f 62  Obj(objv[2], &ob
108d0 6a 6c 65 6e 29 3b 0a 20 20 69 66 28 20 54 63 6c  jlen);.  if( Tcl
108e0 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
108f0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20  nterp, objv[3], 
10900 26 62 79 74 65 73 29 20 29 20 72 65 74 75 72 6e  &bytes) ) return
10910 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
10920 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
10930 61 72 65 31 36 28 64 62 2c 20 7a 53 71 6c 2c 20  are16(db, zSql, 
10940 62 79 74 65 73 2c 20 26 70 53 74 6d 74 2c 20 26  bytes, &pStmt, &
10950 7a 54 61 69 6c 29 3b 0a 20 20 69 66 28 20 73 71  zTail);.  if( sq
10960 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
10970 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
10980 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
10990 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 20 29 7b  ROR;.  if( rc ){
109a0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
109b0 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
109c0 28 20 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20 6f  ( zTail ){.    o
109d0 62 6a 6c 65 6e 20 3d 20 6f 62 6a 6c 65 6e 20 2d  bjlen = objlen -
109e0 20 28 28 75 38 20 2a 29 7a 54 61 69 6c 2d 28 75   ((u8 *)zTail-(u
109f0 38 20 2a 29 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c  8 *)zSql);.  }el
10a00 73 65 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e 20 3d  se{.    objlen =
10a10 20 30 3b 0a 20 20 7d 0a 20 20 70 54 61 69 6c 20   0;.  }.  pTail 
10a20 3d 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72  = Tcl_NewByteArr
10a30 61 79 4f 62 6a 28 28 75 38 20 2a 29 7a 54 61 69  ayObj((u8 *)zTai
10a40 6c 2c 20 6f 62 6a 6c 65 6e 29 3b 0a 20 20 54 63  l, objlen);.  Tc
10a50 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70  l_IncrRefCount(p
10a60 54 61 69 6c 29 3b 0a 20 20 54 63 6c 5f 4f 62 6a  Tail);.  Tcl_Obj
10a70 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
10a80 6f 62 6a 76 5b 34 5d 2c 20 30 2c 20 70 54 61 69  objv[4], 0, pTai
10a90 6c 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63  l, 0);.  Tcl_Dec
10aa0 72 52 65 66 43 6f 75 6e 74 28 70 54 61 69 6c 29  rRefCount(pTail)
10ab0 3b 0a 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29  ;..  if( pStmt )
10ac0 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  {.    if( sqlite
10ad0 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72  3TestMakePointer
10ae0 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  Str(interp, zBuf
10af0 2c 20 70 53 74 6d 74 29 20 29 20 72 65 74 75 72  , pStmt) ) retur
10b00 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
10b10 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
10b20 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
10b30 2c 20 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  , 0);.#endif /* 
10b40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
10b50 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43  6 */.  return TC
10b60 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
10b70 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70  sage: sqlite3_op
10b80 65 6e 20 66 69 6c 65 6e 61 6d 65 20 3f 6f 70 74  en filename ?opt
10b90 69 6f 6e 73 2d 6c 69 73 74 3f 0a 2a 2f 0a 73 74  ions-list?.*/.st
10ba0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6f 70  atic int test_op
10bb0 65 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  en(.  void * cli
10bc0 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
10bd0 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
10be0 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
10bf0 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
10c00 5b 5d 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68  [].){.  const ch
10c10 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20  ar *zFilename;. 
10c20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
10c30 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 7a  int rc;.  char z
10c40 42 75 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28  Buf[100];..  if(
10c50 20 6f 62 6a 63 21 3d 33 20 26 26 20 6f 62 6a 63   objc!=3 && objc
10c60 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
10c70 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
10c80 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
10c90 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
10ca0 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
10cb0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
10cc0 2c 20 22 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74  , " filename opt
10cd0 69 6f 6e 73 2d 6c 69 73 74 22 2c 20 30 29 3b 0a  ions-list", 0);.
10ce0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
10cf0 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69  RROR;.  }..  zFi
10d00 6c 65 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74  lename = Tcl_Get
10d10 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b  String(objv[1]);
10d20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
10d30 6f 70 65 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c 20  open(zFilename, 
10d40 26 64 62 29 3b 0a 20 20 0a 20 20 69 66 28 20 73  &db);.  .  if( s
10d50 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
10d60 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c  interStr(interp,
10d70 20 7a 42 75 66 2c 20 64 62 29 20 29 20 72 65 74   zBuf, db) ) ret
10d80 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
10d90 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
10da0 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
10db0 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  0);.  return TCL
10dc0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
10dd0 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65  age: sqlite3_ope
10de0 6e 31 36 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74  n16 filename opt
10df0 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ions.*/.static i
10e00 6e 74 20 74 65 73 74 5f 6f 70 65 6e 31 36 28 0a  nt test_open16(.
10e10 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
10e20 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
10e30 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
10e40 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
10e50 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
10e60 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
10e70 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 63 6f  _OMIT_UTF16.  co
10e80 6e 73 74 20 76 6f 69 64 20 2a 7a 46 69 6c 65 6e  nst void *zFilen
10e90 61 6d 65 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ame;.  sqlite3 *
10ea0 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  db;.  int rc;.  
10eb0 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a  char zBuf[100];.
10ec0 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
10ed0 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
10ee0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
10ef0 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
10f00 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
10f10 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
10f20 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66  ng(objv[0]), " f
10f30 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73 2d  ilename options-
10f40 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20 20 20 72  list", 0);.    r
10f50 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
10f60 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61 6d  .  }..  zFilenam
10f70 65 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41  e = Tcl_GetByteA
10f80 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  rrayFromObj(objv
10f90 5b 31 5d 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20  [1], 0);.  rc = 
10fa0 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28 7a  sqlite3_open16(z
10fb0 46 69 6c 65 6e 61 6d 65 2c 20 26 64 62 29 3b 0a  Filename, &db);.
10fc0 20 20 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33    .  if( sqlite3
10fd0 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53  TestMakePointerS
10fe0 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  tr(interp, zBuf,
10ff0 20 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43   db) ) return TC
11000 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 41  L_ERROR;.  Tcl_A
11010 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
11020 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23 65  rp, zBuf, 0);.#e
11030 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
11040 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72  MIT_UTF16 */.  r
11050 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
11060 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
11070 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31 36  lite3_complete16
11080 20 3c 55 54 46 2d 31 36 20 73 74 72 69 6e 67 3e   <UTF-16 string>
11090 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31 20  .**.** Return 1 
110a0 69 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  if the supplied 
110b0 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 63 6f  argument is a co
110c0 6d 70 6c 65 74 65 20 53 51 4c 20 73 74 61 74 65  mplete SQL state
110d0 6d 65 6e 74 2c 20 6f 72 20 7a 65 72 6f 0a 2a 2a  ment, or zero.**
110e0 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a 73   otherwise..*/.s
110f0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
11100 6f 6d 70 6c 65 74 65 31 36 28 0a 20 20 76 6f 69  omplete16(.  voi
11110 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
11120 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
11130 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
11140 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
11150 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66  ST objv[].){.#if
11160 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
11170 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 29 20  _OMIT_COMPLETE) 
11180 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
11190 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 29 0a 20  TE_OMIT_UTF16). 
111a0 20 63 68 61 72 20 2a 7a 42 75 66 3b 0a 0a 20 20   char *zBuf;..  
111b0 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
111c0 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
111d0 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
111e0 62 6a 76 2c 20 22 3c 75 74 66 2d 31 36 20 73 71  bjv, "<utf-16 sq
111f0 6c 3e 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  l>");.    return
11200 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
11210 0a 20 20 7a 42 75 66 20 3d 20 28 63 68 61 72 2a  .  zBuf = (char*
11220 29 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61  )Tcl_GetByteArra
11230 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31 5d  yFromObj(objv[1]
11240 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  , 0);.  Tcl_SetO
11250 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
11260 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73   Tcl_NewIntObj(s
11270 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31  qlite3_complete1
11280 36 28 7a 42 75 66 29 29 29 3b 0a 23 65 6e 64 69  6(zBuf)));.#endi
11290 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
112a0 5f 43 4f 4d 50 4c 45 54 45 20 26 26 20 53 51 4c  _COMPLETE && SQL
112b0 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
112c0 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  /.  return TCL_O
112d0 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
112e0 65 3a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  e: sqlite3_step 
112f0 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e  STMT.**.** Advan
11300 63 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  ce the statement
11310 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77   to the next row
11320 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
11330 74 65 73 74 5f 73 74 65 70 28 0a 20 20 76 6f 69  test_step(.  voi
11340 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
11350 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
11360 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
11370 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
11380 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
11390 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
113a0 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  mt;.  int rc;.. 
113b0 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
113c0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
113d0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
113e0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
113f0 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
11400 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
11410 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d  (objv[0]), " STM
11420 54 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  T", 0);.    retu
11430 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
11440 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
11450 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
11460 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
11470 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
11480 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
11490 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  OR;.  rc = sqlit
114a0 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3b 0a  e3_step(pStmt);.
114b0 0a 20 20 2f 2a 20 69 66 28 20 72 63 21 3d 53 51  .  /* if( rc!=SQ
114c0 4c 49 54 45 5f 44 4f 4e 45 20 26 26 20 72 63 21  LITE_DONE && rc!
114d0 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 20 72 65  =SQLITE_ROW ) re
114e0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 20  turn TCL_ERROR; 
114f0 2a 2f 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75  */.  Tcl_SetResu
11500 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72  lt(interp, (char
11510 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29   *)errorName(rc)
11520 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
11530 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
11540 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63  Usage: sqlite3_c
11550 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 53 54 4d 54  olumn_count STMT
11560 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74   .**.** Return t
11570 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
11580 75 6d 6e 73 20 72 65 74 75 72 6e 65 64 20 62 79  umns returned by
11590 20 74 68 65 20 73 71 6c 20 73 74 61 74 65 6d 65   the sql stateme
115a0 6e 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74  nt STMT..*/.stat
115b0 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75  ic int test_colu
115c0 6d 6e 5f 63 6f 75 6e 74 28 0a 20 20 76 6f 69 64  mn_count(.  void
115d0 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
115e0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
115f0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
11600 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
11610 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
11620 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
11630 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  t;..  if( objc!=
11640 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
11650 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
11660 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
11670 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
11680 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
11690 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
116a0 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20  " STMT column", 
116b0 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
116c0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
116d0 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
116e0 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
116f0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
11700 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
11710 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
11720 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
11730 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
11740 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65  NewIntObj(sqlite
11750 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70  3_column_count(p
11760 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72  Stmt)));.  retur
11770 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
11780 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
11790 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 53 54  3_column_type ST
117a0 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20  MT column.**.** 
117b0 52 65 74 75 72 6e 20 74 68 65 20 74 79 70 65 20  Return the type 
117c0 6f 66 20 74 68 65 20 64 61 74 61 20 69 6e 20 63  of the data in c
117d0 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f  olumn 'column' o
117e0 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
117f0 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  w..*/.static int
11800 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 74 79 70   test_column_typ
11810 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
11820 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
11830 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
11840 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
11850 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
11860 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
11870 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
11880 74 20 63 6f 6c 3b 0a 20 20 69 6e 74 20 74 70 3b  t col;.  int tp;
11890 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
118a0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
118b0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
118c0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
118d0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
118e0 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
118f0 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
11900 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29  STMT column", 0)
11910 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
11920 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
11930 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
11940 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
11950 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
11960 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
11970 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
11980 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
11990 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
119a0 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72  jv[2], &col) ) r
119b0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
119c0 0a 0a 20 20 74 70 20 3d 20 73 71 6c 69 74 65 33  ..  tp = sqlite3
119d0 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74  _column_type(pSt
119e0 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 73 77 69 74  mt, col);.  swit
119f0 63 68 28 20 74 70 20 29 7b 0a 20 20 20 20 63 61  ch( tp ){.    ca
11a00 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45  se SQLITE_INTEGE
11a10 52 3a 20 0a 20 20 20 20 20 20 54 63 6c 5f 53 65  R: .      Tcl_Se
11a20 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
11a30 22 49 4e 54 45 47 45 52 22 2c 20 54 43 4c 5f 53  "INTEGER", TCL_S
11a40 54 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62  TATIC); .      b
11a50 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
11a60 51 4c 49 54 45 5f 4e 55 4c 4c 3a 0a 20 20 20 20  QLITE_NULL:.    
11a70 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
11a80 69 6e 74 65 72 70 2c 20 22 4e 55 4c 4c 22 2c 20  interp, "NULL", 
11a90 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20  TCL_STATIC); .  
11aa0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
11ab0 61 73 65 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54  ase SQLITE_FLOAT
11ac0 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52  :.      Tcl_SetR
11ad0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 46  esult(interp, "F
11ae0 4c 4f 41 54 22 2c 20 54 43 4c 5f 53 54 41 54 49  LOAT", TCL_STATI
11af0 43 29 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b  C); .      break
11b00 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
11b10 45 5f 54 45 58 54 3a 0a 20 20 20 20 20 20 54 63  E_TEXT:.      Tc
11b20 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
11b30 72 70 2c 20 22 54 45 58 54 22 2c 20 54 43 4c 5f  rp, "TEXT", TCL_
11b40 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20  STATIC); .      
11b50 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
11b60 53 51 4c 49 54 45 5f 42 4c 4f 42 3a 0a 20 20 20  SQLITE_BLOB:.   
11b70 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74     Tcl_SetResult
11b80 28 69 6e 74 65 72 70 2c 20 22 42 4c 4f 42 22 2c  (interp, "BLOB",
11b90 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20   TCL_STATIC); . 
11ba0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
11bb0 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 61  default:.      a
11bc0 73 73 65 72 74 28 30 29 3b 0a 20 20 7d 0a 0a 20  ssert(0);.  }.. 
11bd0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
11be0 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
11bf0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
11c00 6e 74 36 34 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  nt64 STMT column
11c10 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
11c20 65 20 64 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e  e data in column
11c30 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65   'column' of the
11c40 20 63 75 72 72 65 6e 74 20 72 6f 77 20 63 61 73   current row cas
11c50 74 20 61 73 20 61 6e 0a 2a 2a 20 77 69 64 65 20  t as an.** wide 
11c60 28 36 34 2d 62 69 74 29 20 69 6e 74 65 67 65 72  (64-bit) integer
11c70 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
11c80 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  test_column_int6
11c90 34 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  4(.  void * clie
11ca0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
11cb0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
11cc0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
11cd0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
11ce0 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
11cf0 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
11d00 74 20 63 6f 6c 3b 0a 20 20 69 36 34 20 69 56 61  t col;.  i64 iVa
11d10 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  l;..  if( objc!=
11d20 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
11d30 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
11d40 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
11d50 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
11d60 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
11d70 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
11d80 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20  " STMT column", 
11d90 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
11da0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
11db0 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
11dc0 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
11dd0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
11de0 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
11df0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
11e00 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
11e10 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
11e20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29  objv[2], &col) )
11e30 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11e40 52 3b 0a 0a 20 20 69 56 61 6c 20 3d 20 73 71 6c  R;..  iVal = sql
11e50 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
11e60 34 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20  4(pStmt, col);. 
11e70 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
11e80 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
11e90 77 57 69 64 65 49 6e 74 4f 62 6a 28 69 56 61 6c  wWideIntObj(iVal
11ea0 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
11eb0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
11ec0 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
11ed0 75 6d 6e 5f 62 6c 6f 62 20 53 54 4d 54 20 63 6f  umn_blob STMT co
11ee0 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  lumn.*/.static i
11ef0 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 62  nt test_column_b
11f00 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  lob(.  void * cl
11f10 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
11f20 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
11f30 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
11f40 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
11f50 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
11f60 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
11f70 69 6e 74 20 63 6f 6c 3b 0a 0a 20 20 69 6e 74 20  int col;..  int 
11f80 6c 65 6e 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  len;.  const voi
11f90 64 20 2a 70 42 6c 6f 62 3b 0a 0a 20 20 69 66 28  d *pBlob;..  if(
11fa0 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20   objc!=3 ){.    
11fb0 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
11fc0 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
11fd0 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
11fe0 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
11ff0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
12000 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f  v[0]), " STMT co
12010 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72  lumn", 0);.    r
12020 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12030 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
12040 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
12050 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
12060 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
12070 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
12080 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
12090 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
120a0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
120b0 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54  &col) ) return T
120c0 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 70 42 6c  CL_ERROR;..  pBl
120d0 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  ob = sqlite3_col
120e0 75 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 20  umn_blob(pStmt, 
120f0 63 6f 6c 29 3b 0a 20 20 6c 65 6e 20 3d 20 73 71  col);.  len = sq
12100 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
12110 65 73 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a  es(pStmt, col);.
12120 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
12130 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
12140 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28 70  ewByteArrayObj(p
12150 42 6c 6f 62 2c 20 6c 65 6e 29 29 3b 0a 20 20 72  Blob, len));.  r
12160 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
12170 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
12180 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
12190 62 6c 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ble STMT column.
121a0 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
121b0 20 64 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e 20   data in column 
121c0 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65 20  'column' of the 
121d0 63 75 72 72 65 6e 74 20 72 6f 77 20 63 61 73 74  current row cast
121e0 20 61 73 20 61 20 64 6f 75 62 6c 65 2e 0a 2a 2f   as a double..*/
121f0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
12200 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 0a  _column_double(.
12210 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
12220 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
12230 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
12240 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
12250 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
12260 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
12270 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63   *pStmt;.  int c
12280 6f 6c 3b 0a 20 20 64 6f 75 62 6c 65 20 72 56 61  ol;.  double rVa
12290 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  l;..  if( objc!=
122a0 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
122b0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
122c0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
122d0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
122e0 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
122f0 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
12300 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20  " STMT column", 
12310 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
12320 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
12330 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
12340 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
12350 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
12360 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
12370 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
12380 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
12390 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
123a0 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29  objv[2], &col) )
123b0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
123c0 52 3b 0a 0a 20 20 72 56 61 6c 20 3d 20 73 71 6c  R;..  rVal = sql
123d0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
123e0 6c 65 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a  le(pStmt, col);.
123f0 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
12400 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
12410 65 77 44 6f 75 62 6c 65 4f 62 6a 28 72 56 61 6c  ewDoubleObj(rVal
12420 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
12430 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
12440 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 64 61 74  age: sqlite3_dat
12450 61 5f 63 6f 75 6e 74 20 53 54 4d 54 20 0a 2a 2a  a_count STMT .**
12460 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
12470 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
12480 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
12490 20 73 71 6c 20 73 74 61 74 65 6d 65 6e 74 20 53   sql statement S
124a0 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  TMT..*/.static i
124b0 6e 74 20 74 65 73 74 5f 64 61 74 61 5f 63 6f 75  nt test_data_cou
124c0 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  nt(.  void * cli
124d0 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
124e0 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
124f0 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
12500 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
12510 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
12520 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20  stmt *pStmt;..  
12530 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
12540 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
12550 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
12560 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
12570 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
12580 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
12590 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
125a0 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
125b0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
125c0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
125d0 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
125e0 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
125f0 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
12600 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
12610 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 54 63 6c  CL_ERROR;..  Tcl
12620 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
12630 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
12640 4f 62 6a 28 73 71 6c 69 74 65 33 5f 64 61 74 61  Obj(sqlite3_data
12650 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 29 29 3b  _count(pStmt)));
12660 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
12670 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
12680 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
12690 5f 74 65 78 74 20 53 54 4d 54 20 63 6f 6c 75 6d  _text STMT colum
126a0 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  n.**.** Usage: s
126b0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
126c0 63 6c 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75  cltype STMT colu
126d0 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  mn.**.** Usage: 
126e0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
126f0 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ame STMT column.
12700 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
12710 73 74 5f 73 74 6d 74 5f 75 74 66 38 28 0a 20 20  st_stmt_utf8(.  
12720 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
12730 61 2c 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  a,        /* Poi
12740 6e 74 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41  nter to SQLite A
12750 50 49 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62  PI function to b
12760 65 20 69 6e 76 6f 6b 65 20 2a 2f 0a 20 20 54 63  e invoke */.  Tc
12770 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
12780 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
12790 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
127a0 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
127b0 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
127c0 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 63 6f 6e    int col;.  con
127d0 73 74 20 63 68 61 72 20 2a 28 2a 78 46 75 6e 63  st char *(*xFunc
127e0 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c  )(sqlite3_stmt*,
127f0 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61   int) = clientDa
12800 74 61 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ta;.  const char
12810 20 2a 7a 52 65 74 3b 0a 0a 20 20 69 66 28 20 6f   *zRet;..  if( o
12820 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
12830 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
12840 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
12850 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
12860 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
12870 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
12880 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75  0]), " STMT colu
12890 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  mn", 0);.    ret
128a0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
128b0 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
128c0 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
128d0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
128e0 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
128f0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
12900 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
12910 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
12920 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63  erp, objv[2], &c
12930 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ol) ) return TCL
12940 5f 45 52 52 4f 52 3b 0a 20 20 7a 52 65 74 20 3d  _ERROR;.  zRet =
12950 20 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f   xFunc(pStmt, co
12960 6c 29 3b 0a 20 20 69 66 28 20 7a 52 65 74 20 29  l);.  if( zRet )
12970 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73  {.    Tcl_SetRes
12980 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
12990 72 20 2a 29 7a 52 65 74 2c 20 30 29 3b 0a 20 20  r *)zRet, 0);.  
129a0 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  }.  return TCL_O
129b0 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74  K;.}..static int
129c0 20 74 65 73 74 5f 67 6c 6f 62 61 6c 5f 72 65 63   test_global_rec
129d0 6f 76 65 72 28 0a 20 20 76 6f 69 64 20 2a 20 63  over(.  void * c
129e0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
129f0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
12a00 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
12a10 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
12a20 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
12a30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f 42  SQLITE_OMIT_GLOB
12a40 41 4c 52 45 43 4f 56 45 52 0a 20 20 69 6e 74 20  ALRECOVER.  int 
12a50 72 63 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  rc;.  if( objc!=
12a60 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  1 ){.    Tcl_Wro
12a70 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
12a80 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 22 29 3b 0a  , 1, objv, "");.
12a90 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
12aa0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  RROR;.  }.  rc =
12ab0 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f   sqlite3_global_
12ac0 72 65 63 6f 76 65 72 28 29 3b 0a 20 20 54 63 6c  recover();.  Tcl
12ad0 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
12ae0 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72  p, (char *)error
12af0 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
12b00 41 54 49 43 29 3b 0a 23 65 6e 64 69 66 0a 20 20  ATIC);.#endif.  
12b10 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
12b20 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
12b30 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
12b40 78 74 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a  xt STMT column.*
12b50 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
12b60 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
12b70 79 70 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ype STMT column.
12b80 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  **.** Usage: sql
12b90 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
12ba0 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a   STMT column.*/.
12bb0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
12bc0 73 74 6d 74 5f 75 74 66 31 36 28 0a 20 20 76 6f  stmt_utf16(.  vo
12bd0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
12be0 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
12bf0 74 6f 20 53 51 4c 69 74 65 20 41 50 49 20 66 75  to SQLite API fu
12c00 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76  nction to be inv
12c10 6f 6b 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  oked */.  Tcl_In
12c20 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
12c30 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
12c40 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
12c50 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ].){.#ifndef SQL
12c60 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
12c70 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
12c80 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b  Stmt;.  int col;
12c90 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 52 65 74  .  Tcl_Obj *pRet
12ca0 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ;.  const void *
12cb0 7a 4e 61 6d 65 31 36 3b 0a 20 20 63 6f 6e 73 74  zName16;.  const
12cc0 20 76 6f 69 64 20 2a 28 2a 78 46 75 6e 63 29 28   void *(*xFunc)(
12cd0 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 20 69  sqlite3_stmt*, i
12ce0 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  nt) = clientData
12cf0 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  ;..  if( objc!=3
12d00 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
12d10 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
12d20 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
12d30 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
12d40 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
12d50 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
12d60 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30   STMT column", 0
12d70 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
12d80 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
12d90 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
12da0 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
12db0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
12dc0 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
12dd0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
12de0 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
12df0 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
12e00 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20  bjv[2], &col) ) 
12e10 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
12e20 3b 0a 0a 20 20 7a 4e 61 6d 65 31 36 20 3d 20 78  ;..  zName16 = x
12e30 46 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c 29  Func(pStmt, col)
12e40 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65 31 36 20  ;.  if( zName16 
12e50 29 7b 0a 20 20 20 20 70 52 65 74 20 3d 20 54 63  ){.    pRet = Tc
12e60 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62  l_NewByteArrayOb
12e70 6a 28 7a 4e 61 6d 65 31 36 2c 20 73 71 6c 69 74  j(zName16, sqlit
12e80 65 33 75 74 66 31 36 42 79 74 65 4c 65 6e 28 7a  e3utf16ByteLen(z
12e90 4e 61 6d 65 31 36 2c 20 2d 31 29 2b 32 29 3b 0a  Name16, -1)+2);.
12ea0 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65      Tcl_SetObjRe
12eb0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 70 52 65  sult(interp, pRe
12ec0 74 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f  t);.  }.#endif /
12ed0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
12ee0 46 31 36 20 2a 2f 0a 0a 20 20 72 65 74 75 72 6e  F16 */..  return
12ef0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
12f00 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
12f10 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 53 54 4d 54  _column_int STMT
12f20 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73   column.**.** Us
12f30 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
12f40 75 6d 6e 5f 62 79 74 65 73 20 53 54 4d 54 20 63  umn_bytes STMT c
12f50 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67  olumn.**.** Usag
12f60 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
12f70 6e 5f 62 79 74 65 73 31 36 20 53 54 4d 54 20 63  n_bytes16 STMT c
12f80 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2f 0a 73 74 61 74  olumn.**.*/.stat
12f90 69 63 20 69 6e 74 20 74 65 73 74 5f 73 74 6d 74  ic int test_stmt
12fa0 5f 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  _int(.  void * c
12fb0 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 2f 2a  lientData,    /*
12fc0 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c 69   Pointer to SQLi
12fd0 74 65 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20  te API function 
12fe0 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 2a 2f  to be invoked */
12ff0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
13000 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
13010 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
13020 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
13030 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
13040 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a  tmt;.  int col;.
13050 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 73    int (*xFunc)(s
13060 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 20 69 6e  qlite3_stmt*, in
13070 74 29 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 3b  t) = clientData;
13080 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
13090 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
130a0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
130b0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
130c0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
130d0 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
130e0 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
130f0 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29  STMT column", 0)
13100 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
13110 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
13120 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
13130 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
13140 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
13150 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
13160 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
13170 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
13180 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
13190 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72  jv[2], &col) ) r
131a0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
131b0 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ..  Tcl_SetObjRe
131c0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
131d0 5f 4e 65 77 49 6e 74 4f 62 6a 28 78 46 75 6e 63  _NewIntObj(xFunc
131e0 28 70 53 74 6d 74 2c 20 63 6f 6c 29 29 29 3b 0a  (pStmt, col)));.
131f0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
13200 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
13210 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 2f  TE_OMIT_DISKIO./
13220 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
13230 69 74 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72  ite3OsOpenReadWr
13240 69 74 65 20 3c 66 69 6c 65 6e 61 6d 65 3e 0a 2a  ite <filename>.*
13250 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
13260 74 5f 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52  t_sqlite3OsOpenR
13270 65 61 64 57 72 69 74 65 28 0a 20 20 76 6f 69 64  eadWrite(.  void
13280 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
13290 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
132a0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
132b0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
132c0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73  T objv[].){.  Os
132d0 46 69 6c 65 20 2a 70 46 69 6c 65 3b 0a 20 20 69  File *pFile;.  i
132e0 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 64 75 6d  nt rc;.  int dum
132f0 6d 79 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b  my;.  char zBuf[
13300 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  100];..  if( obj
13310 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
13320 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
13330 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
13340 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
13350 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
13360 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
13370 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65 22 2c 20  ), " filename", 
13380 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
13390 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
133a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 4f   rc = sqlite3OsO
133b0 70 65 6e 52 65 61 64 57 72 69 74 65 28 54 63 6c  penReadWrite(Tcl
133c0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
133d0 31 5d 29 2c 20 26 70 46 69 6c 65 2c 20 26 64 75  1]), &pFile, &du
133e0 6d 6d 79 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  mmy);.  if( rc!=
133f0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
13400 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
13410 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65  nterp, (char *)e
13420 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43  rrorName(rc), TC
13430 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72  L_STATIC);.    r
13440 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
13450 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 54 65  .  }.  sqlite3Te
13460 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72  stMakePointerStr
13470 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70  (interp, zBuf, p
13480 46 69 6c 65 29 3b 0a 20 20 54 63 6c 5f 53 65 74  File);.  Tcl_Set
13490 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
134a0 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  Buf, 0);.  retur
134b0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0a  n TCL_ERROR;.}..
134c0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
134d0 6c 69 74 65 33 4f 73 43 6c 6f 73 65 20 3c 66 69  lite3OsClose <fi
134e0 6c 65 20 68 61 6e 64 6c 65 3e 0a 2a 2f 0a 73 74  le handle>.*/.st
134f0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 71  atic int test_sq
13500 6c 69 74 65 33 4f 73 43 6c 6f 73 65 28 0a 20 20  lite3OsClose(.  
13510 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
13520 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
13530 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
13540 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
13550 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
13560 20 20 4f 73 46 69 6c 65 20 2a 70 46 69 6c 65 3b    OsFile *pFile;
13570 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
13580 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
13590 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
135a0 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
135b0 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
135c0 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
135d0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
135e0 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65 68 61  jv[0]), " fileha
135f0 6e 64 6c 65 22 2c 20 30 29 3b 0a 20 20 20 20 72  ndle", 0);.    r
13600 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
13610 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 46  .  }..  if( getF
13620 69 6c 65 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  ilePointer(inter
13630 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
13640 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c  (objv[1]), &pFil
13650 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  e) ){.    return
13660 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
13670 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73    rc = sqlite3Os
13680 43 6c 6f 73 65 28 26 70 46 69 6c 65 29 3b 0a 20  Close(&pFile);. 
13690 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
136a0 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65  OK ){.    Tcl_Se
136b0 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
136c0 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d  (char *)errorNam
136d0 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49  e(rc), TCL_STATI
136e0 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  C);.    return T
136f0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
13700 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
13710 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
13720 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 20 3c 66  sqlite3OsLock <f
13730 69 6c 65 20 68 61 6e 64 6c 65 3e 20 3c 6c 6f 63  ile handle> <loc
13740 6b 74 79 70 65 3e 0a 2a 2f 0a 73 74 61 74 69 63  ktype>.*/.static
13750 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65   int test_sqlite
13760 33 4f 73 4c 6f 63 6b 28 0a 20 20 76 6f 69 64 20  3OsLock(.  void 
13770 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
13780 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
13790 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
137a0 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
137b0 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46   objv[].){.  OsF
137c0 69 6c 65 20 2a 20 70 46 69 6c 65 3b 0a 20 20 69  ile * pFile;.  i
137d0 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
137e0 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
137f0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
13800 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
13810 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
13820 22 22 2c 20 0a 20 20 20 20 20 20 20 20 54 63 6c  "", .        Tcl
13830 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
13840 30 5d 29 2c 20 0a 20 20 20 20 20 20 20 20 22 20  0]), .        " 
13850 66 69 6c 65 68 61 6e 64 6c 65 20 28 53 48 41 52  filehandle (SHAR
13860 45 44 7c 52 45 53 45 52 56 45 44 7c 50 45 4e 44  ED|RESERVED|PEND
13870 49 4e 47 7c 45 58 43 4c 55 53 49 56 45 29 22 2c  ING|EXCLUSIVE)",
13880 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
13890 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
138a0 20 20 69 66 28 20 67 65 74 46 69 6c 65 50 6f 69    if( getFilePoi
138b0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
138c0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
138d0 31 5d 29 2c 20 26 70 46 69 6c 65 29 20 29 7b 0a  1]), &pFile) ){.
138e0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
138f0 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
13900 20 30 3d 3d 73 74 72 63 6d 70 28 22 53 48 41 52   0==strcmp("SHAR
13910 45 44 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  ED", Tcl_GetStri
13920 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a  ng(objv[2])) ){.
13930 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
13940 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 53 48  OsLock(pFile, SH
13950 41 52 45 44 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 0a  ARED_LOCK);.  }.
13960 20 20 65 6c 73 65 20 69 66 28 20 30 3d 3d 73 74    else if( 0==st
13970 72 63 6d 70 28 22 52 45 53 45 52 56 45 44 22 2c  rcmp("RESERVED",
13980 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
13990 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20 20  bjv[2])) ){.    
139a0 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c 6f  rc = sqlite3OsLo
139b0 63 6b 28 70 46 69 6c 65 2c 20 52 45 53 45 52 56  ck(pFile, RESERV
139c0 45 44 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20  ED_LOCK);.  }.  
139d0 65 6c 73 65 20 69 66 28 20 30 3d 3d 73 74 72 63  else if( 0==strc
139e0 6d 70 28 22 50 45 4e 44 49 4e 47 22 2c 20 54 63  mp("PENDING", Tc
139f0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
13a00 5b 32 5d 29 29 20 29 7b 0a 20 20 20 20 72 63 20  [2])) ){.    rc 
13a10 3d 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28  = sqlite3OsLock(
13a20 70 46 69 6c 65 2c 20 50 45 4e 44 49 4e 47 5f 4c  pFile, PENDING_L
13a30 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c 73 65  OCK);.  }.  else
13a40 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 22   if( 0==strcmp("
13a50 45 58 43 4c 55 53 49 56 45 22 2c 20 54 63 6c 5f  EXCLUSIVE", Tcl_
13a60 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32  GetString(objv[2
13a70 5d 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ])) ){.    rc = 
13a80 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46  sqlite3OsLock(pF
13a90 69 6c 65 2c 20 45 58 43 4c 55 53 49 56 45 5f 4c  ile, EXCLUSIVE_L
13aa0 4f 43 4b 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  OCK);.  }else{. 
13ab0 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
13ac0 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
13ad0 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
13ae0 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
13af0 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
13b00 28 6f 62 6a 76 5b 30 5d 29 2c 20 0a 20 20 20 20  (objv[0]), .    
13b10 20 20 20 20 22 20 66 69 6c 65 68 61 6e 64 6c 65      " filehandle
13b20 20 28 53 48 41 52 45 44 7c 52 45 53 45 52 56 45   (SHARED|RESERVE
13b30 44 7c 50 45 4e 44 49 4e 47 7c 45 58 43 4c 55 53  D|PENDING|EXCLUS
13b40 49 56 45 29 22 2c 20 30 29 3b 0a 20 20 20 20 72  IVE)", 0);.    r
13b50 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
13b60 0a 20 20 7d 0a 0a 20 20 69 66 28 20 72 63 21 3d  .  }..  if( rc!=
13b70 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
13b80 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
13b90 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65  nterp, (char *)e
13ba0 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43  rrorName(rc), TC
13bb0 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72  L_STATIC);.    r
13bc0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
13bd0 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
13be0 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
13bf0 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73  sage:  sqlite3Os
13c00 55 6e 6c 6f 63 6b 20 3c 66 69 6c 65 20 68 61 6e  Unlock <file han
13c10 64 6c 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  dle>.*/.static i
13c20 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f  nt test_sqlite3O
13c30 73 55 6e 6c 6f 63 6b 28 0a 20 20 76 6f 69 64 20  sUnlock(.  void 
13c40 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
13c50 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
13c60 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
13c70 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
13c80 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46   objv[].){.  OsF
13c90 69 6c 65 20 2a 20 70 46 69 6c 65 3b 0a 20 20 69  ile * pFile;.  i
13ca0 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
13cb0 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
13cc0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
13cd0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
13ce0 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
13cf0 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
13d00 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
13d10 5d 29 2c 20 22 20 66 69 6c 65 68 61 6e 64 6c 65  ]), " filehandle
13d20 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
13d30 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
13d40 0a 0a 20 20 69 66 28 20 67 65 74 46 69 6c 65 50  ..  if( getFileP
13d50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
13d60 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
13d70 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65 29 20 29  v[1]), &pFile) )
13d80 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
13d90 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63  _ERROR;.  }.  rc
13da0 20 3d 20 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f   = sqlite3OsUnlo
13db0 63 6b 28 70 46 69 6c 65 2c 20 4e 4f 5f 4c 4f 43  ck(pFile, NO_LOC
13dc0 4b 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  K);.  if( rc!=SQ
13dd0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54  LITE_OK ){.    T
13de0 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
13df0 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72  erp, (char *)err
13e00 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f  orName(rc), TCL_
13e10 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 65 74  STATIC);.    ret
13e20 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
13e30 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f   }.  return TCL_
13e40 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
13e50 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73 54 65  ge:  sqlite3OsTe
13e60 6d 70 46 69 6c 65 4e 61 6d 65 0a 2a 2f 0a 73 74  mpFileName.*/.st
13e70 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 71  atic int test_sq
13e80 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e  lite3OsTempFileN
13e90 61 6d 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ame(.  void * cl
13ea0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
13eb0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
13ec0 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
13ed0 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
13ee0 76 5b 5d 0a 29 7b 0a 20 20 63 68 61 72 20 7a 46  v[].){.  char zF
13ef0 69 6c 65 5b 53 51 4c 49 54 45 5f 54 45 4d 50 4e  ile[SQLITE_TEMPN
13f00 41 4d 45 5f 53 49 5a 45 5d 3b 0a 20 20 69 6e 74  AME_SIZE];.  int
13f10 20 72 63 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c   rc;..  rc = sql
13f20 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61  ite3OsTempFileNa
13f30 6d 65 28 7a 46 69 6c 65 29 3b 0a 20 20 69 66 28  me(zFile);.  if(
13f40 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
13f50 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73  {.    Tcl_SetRes
13f60 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
13f70 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63  r *)errorName(rc
13f80 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a  ), TCL_STATIC);.
13f90 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
13fa0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  RROR;.  }.  Tcl_
13fb0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
13fc0 65 72 70 2c 20 7a 46 69 6c 65 2c 20 30 29 3b 0a  erp, zFile, 0);.
13fd0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
13fe0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  .}.#endif../*.**
13ff0 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f   Usage:  sqlite_
14000 73 65 74 5f 6d 61 67 69 63 20 20 44 42 20 20 4d  set_magic  DB  M
14010 41 47 49 43 2d 4e 55 4d 42 45 52 0a 2a 2a 0a 2a  AGIC-NUMBER.**.*
14020 2a 20 53 65 74 20 74 68 65 20 64 62 2d 3e 6d 61  * Set the db->ma
14030 67 69 63 20 76 61 6c 75 65 2e 20 20 54 68 69 73  gic value.  This
14040 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
14050 20 65 72 72 6f 72 20 72 65 63 6f 76 65 72 79 20   error recovery 
14060 6c 6f 67 69 63 2e 0a 2a 2f 0a 73 74 61 74 69 63  logic..*/.static
14070 20 69 6e 74 20 73 71 6c 69 74 65 5f 73 65 74 5f   int sqlite_set_
14080 6d 61 67 69 63 28 0a 20 20 76 6f 69 64 20 2a 20  magic(.  void * 
14090 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
140a0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
140b0 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20  ,.  int argc,.  
140c0 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20  char **argv.){. 
140d0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
140e0 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20  if( argc!=3 ){. 
140f0 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
14100 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
14110 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
14120 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
14130 5d 2c 0a 20 20 20 20 20 20 20 20 20 22 20 44 42  ],.         " DB
14140 20 4d 41 47 49 43 22 2c 20 30 29 3b 0a 20 20 20   MAGIC", 0);.   
14150 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
14160 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
14170 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
14180 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20  , argv[1], &db) 
14190 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
141a0 4f 52 3b 0a 20 20 69 66 28 20 73 74 72 63 6d 70  OR;.  if( strcmp
141b0 28 61 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54  (argv[2], "SQLIT
141c0 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 22 29 3d 3d  E_MAGIC_OPEN")==
141d0 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67  0 ){.    db->mag
141e0 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49  ic = SQLITE_MAGI
141f0 43 5f 4f 50 45 4e 3b 0a 20 20 7d 65 6c 73 65 20  C_OPEN;.  }else 
14200 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b  if( strcmp(argv[
14210 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41 47 49  2], "SQLITE_MAGI
14220 43 5f 43 4c 4f 53 45 44 22 29 3d 3d 30 20 29 7b  C_CLOSED")==0 ){
14230 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  .    db->magic =
14240 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
14250 4f 53 45 44 3b 0a 20 20 7d 65 6c 73 65 20 69 66  OSED;.  }else if
14260 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d  ( strcmp(argv[2]
14270 2c 20 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  , "SQLITE_MAGIC_
14280 42 55 53 59 22 29 3d 3d 30 20 29 7b 0a 20 20 20  BUSY")==0 ){.   
14290 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c   db->magic = SQL
142a0 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a  ITE_MAGIC_BUSY;.
142b0 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
142c0 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53 51 4c  mp(argv[2], "SQL
142d0 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 22  ITE_MAGIC_ERROR"
142e0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e  )==0 ){.    db->
142f0 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
14300 41 47 49 43 5f 45 52 52 4f 52 3b 0a 20 20 7d 65  AGIC_ERROR;.  }e
14310 6c 73 65 20 69 66 28 20 54 63 6c 5f 47 65 74 49  lse if( Tcl_GetI
14320 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  nt(interp, argv[
14330 32 5d 2c 20 26 64 62 2d 3e 6d 61 67 69 63 29 20  2], &db->magic) 
14340 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
14350 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
14360 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
14370 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
14380 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
14390 20 20 44 42 20 0a 2a 2a 0a 2a 2a 20 54 72 69 67    DB .**.** Trig
143a0 67 65 72 20 61 6e 20 69 6e 74 65 72 72 75 70 74  ger an interrupt
143b0 20 6f 6e 20 44 42 0a 2a 2f 0a 73 74 61 74 69 63   on DB.*/.static
143c0 20 69 6e 74 20 74 65 73 74 5f 69 6e 74 65 72 72   int test_interr
143d0 75 70 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  upt(.  void * cl
143e0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
143f0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
14400 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68    int argc,.  ch
14410 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73  ar **argv.){.  s
14420 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66  qlite3 *db;.  if
14430 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20  ( argc!=2 ){.   
14440 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
14450 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
14460 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
14470 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
14480 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20   " DB", 0);.    
14490 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
144a0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
144b0 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
144c0 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
144d0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
144e0 52 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  R;.  sqlite3_int
144f0 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 72 65  errupt(db);.  re
14500 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
14510 73 74 61 74 69 63 20 75 38 20 2a 73 71 6c 69 74  static u8 *sqlit
14520 65 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e  e3_stack_baselin
14530 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 46 69  e = 0;../*.** Fi
14540 6c 6c 20 74 68 65 20 73 74 61 63 6b 20 77 69 74  ll the stack wit
14550 68 20 61 20 6b 6e 6f 77 6e 20 62 69 74 70 61 74  h a known bitpat
14560 74 65 72 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tern..*/.static 
14570 76 6f 69 64 20 70 72 65 70 53 74 61 63 6b 28 76  void prepStack(v
14580 6f 69 64 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  oid){.  int i;. 
14590 20 75 33 32 20 62 69 67 42 75 66 5b 36 35 35 33   u32 bigBuf[6553
145a0 36 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  6];.  for(i=0; i
145b0 3c 73 69 7a 65 6f 66 28 62 69 67 42 75 66 29 3b  <sizeof(bigBuf);
145c0 20 69 2b 2b 29 20 62 69 67 42 75 66 5b 69 5d 20   i++) bigBuf[i] 
145d0 3d 20 30 78 64 65 61 64 62 65 65 66 3b 0a 20 20  = 0xdeadbeef;.  
145e0 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61  sqlite3_stack_ba
145f0 73 65 6c 69 6e 65 20 3d 20 28 75 38 2a 29 26 62  seline = (u8*)&b
14600 69 67 42 75 66 5b 36 35 35 33 36 5d 3b 0a 7d 0a  igBuf[65536];.}.
14610 0a 2f 2a 0a 2a 2a 20 47 65 74 20 74 68 65 20 63  ./*.** Get the c
14620 75 72 72 65 6e 74 20 73 74 61 63 6b 20 64 65 70  urrent stack dep
14630 74 68 2e 20 20 55 73 65 64 20 66 6f 72 20 64 65  th.  Used for de
14640 62 75 67 67 69 6e 67 20 6f 6e 6c 79 2e 0a 2a 2f  bugging only..*/
14650 0a 75 36 34 20 73 71 6c 69 74 65 33 53 74 61 63  .u64 sqlite3Stac
14660 6b 44 65 70 74 68 28 76 6f 69 64 29 7b 0a 20 20  kDepth(void){.  
14670 75 38 20 78 3b 0a 20 20 72 65 74 75 72 6e 20 28  u8 x;.  return (
14680 75 36 34 29 28 73 71 6c 69 74 65 33 5f 73 74 61  u64)(sqlite3_sta
14690 63 6b 5f 62 61 73 65 6c 69 6e 65 20 2d 20 26 78  ck_baseline - &x
146a0 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  );.}../*.** Usag
146b0 65 3a 20 20 73 71 6c 69 74 65 33 5f 73 74 61 63  e:  sqlite3_stac
146c0 6b 5f 75 73 65 64 20 44 42 20 53 51 4c 0a 2a 2a  k_used DB SQL.**
146d0 0a 2a 2a 20 54 72 79 20 74 6f 20 6d 65 61 73 75  .** Try to measu
146e0 72 65 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66  re the amount of
146f0 20 73 74 61 63 6b 20 73 70 61 63 65 20 75 73 65   stack space use
14700 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 73  d by a call to s
14710 71 6c 69 74 65 33 5f 65 78 65 63 0a 2a 2f 0a 73  qlite3_exec.*/.s
14720 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
14730 74 61 63 6b 5f 75 73 65 64 28 0a 20 20 76 6f 69  tack_used(.  voi
14740 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
14750 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
14760 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63  terp,.  int argc
14770 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a  ,.  char **argv.
14780 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
14790 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28  ;.  int i;.  if(
147a0 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20   argc!=3 ){.    
147b0 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
147c0 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
147d0 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
147e0 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20  e \"", argv[0], 
147f0 0a 20 20 20 20 20 20 20 20 22 20 44 42 20 53 51  .        " DB SQ
14800 4c 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  L", 0);.    retu
14810 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
14820 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
14830 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
14840 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
14850 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
14860 20 70 72 65 70 53 74 61 63 6b 28 29 3b 0a 20 20   prepStack();.  
14870 28 76 6f 69 64 29 73 71 6c 69 74 65 33 5f 65 78  (void)sqlite3_ex
14880 65 63 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20  ec(db, argv[2], 
14890 30 2c 20 30 2c 20 30 29 3b 0a 20 20 66 6f 72 28  0, 0, 0);.  for(
148a0 69 3d 36 35 35 33 35 3b 20 69 3e 3d 30 20 26 26  i=65535; i>=0 &&
148b0 20 28 28 75 33 32 2a 29 73 71 6c 69 74 65 33 5f   ((u32*)sqlite3_
148c0 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65 29 5b  stack_baseline)[
148d0 2d 69 5d 3d 3d 30 78 64 65 61 64 62 65 65 66 3b  -i]==0xdeadbeef;
148e0 20 69 2d 2d 29 7b 7d 0a 20 20 54 63 6c 5f 53 65   i--){}.  Tcl_Se
148f0 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
14900 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a  p, Tcl_NewIntObj
14910 28 69 2a 34 29 29 3b 0a 20 20 72 65 74 75 72 6e  (i*4));.  return
14920 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
14930 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f  * Usage: sqlite_
14940 64 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 20  delete_function 
14950 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65  DB function-name
14960 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
14970 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  e user function 
14980 27 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 27 20  'function-name' 
14990 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 68 61  from database ha
149a0 6e 64 6c 65 20 44 42 2e 20 49 74 0a 2a 2a 20 69  ndle DB. It.** i
149b0 73 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 74  s assumed that t
149c0 68 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  he user function
149d0 20 77 61 73 20 63 72 65 61 74 65 64 20 61 73 20   was created as 
149e0 55 54 46 38 2c 20 61 6e 79 20 6e 75 6d 62 65 72  UTF8, any number
149f0 20 6f 66 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 73   of.** arguments
14a00 20 28 74 68 65 20 77 61 79 20 74 68 65 20 54 43   (the way the TC
14a10 4c 20 69 6e 74 65 72 66 61 63 65 20 64 6f 65 73  L interface does
14a20 20 69 74 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   it)..*/.static 
14a30 69 6e 74 20 64 65 6c 65 74 65 5f 66 75 6e 63 74  int delete_funct
14a40 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ion(.  void * cl
14a50 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
14a60 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
14a70 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68    int argc,.  ch
14a80 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69  ar **argv.){.  i
14a90 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33  nt rc;.  sqlite3
14aa0 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63   *db;.  if( argc
14ab0 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
14ac0 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
14ad0 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
14ae0 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
14af0 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20  , argv[0], .    
14b00 20 20 20 20 22 20 44 42 20 66 75 6e 63 74 69 6f      " DB functio
14b10 6e 2d 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20  n-name", 0);.   
14b20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
14b30 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
14b40 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
14b50 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20  , argv[1], &db) 
14b60 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
14b70 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  OR;.  rc = sqlit
14b80 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
14b90 6f 6e 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20  on(db, argv[2], 
14ba0 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  -1, SQLITE_UTF8,
14bb0 20 30 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20   0, 0, 0, 0);.  
14bc0 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
14bd0 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72  terp, (char *)er
14be0 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
14bf0 5f 53 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75  _STATIC);.  retu
14c00 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
14c10 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
14c20 65 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69  e_delete_collati
14c30 6f 6e 20 44 42 20 63 6f 6c 6c 61 74 69 6f 6e 2d  on DB collation-
14c40 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  name.**.** Delet
14c50 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  e the collation 
14c60 73 65 71 75 65 6e 63 65 20 27 63 6f 6c 6c 61 74  sequence 'collat
14c70 69 6f 6e 2d 6e 61 6d 65 27 20 66 72 6f 6d 20 64  ion-name' from d
14c80 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 0a  atabase handle .
14c90 2a 2a 20 44 42 2e 20 49 74 20 69 73 20 61 73 73  ** DB. It is ass
14ca0 75 6d 65 64 20 74 68 61 74 20 74 68 65 20 63 6f  umed that the co
14cb0 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
14cc0 20 77 61 73 20 63 72 65 61 74 65 64 20 61 73 20   was created as 
14cd0 55 54 46 38 20 28 74 68 65 20 0a 2a 2a 20 77 61  UTF8 (the .** wa
14ce0 79 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72 66  y the TCL interf
14cf0 61 63 65 20 64 6f 65 73 20 69 74 29 2e 0a 2a 2f  ace does it)..*/
14d00 0a 73 74 61 74 69 63 20 69 6e 74 20 64 65 6c 65  .static int dele
14d10 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20  te_collation(.  
14d20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
14d30 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
14d40 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61  *interp,.  int a
14d50 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72  rgc,.  char **ar
14d60 67 76 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  gv.){.  int rc;.
14d70 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
14d80 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a   if( argc!=3 ){.
14d90 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
14da0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
14db0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
14dc0 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
14dd0 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44  0], .        " D
14de0 42 20 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 22  B function-name"
14df0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
14e00 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
14e10 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
14e20 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
14e30 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
14e40 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
14e50 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
14e60 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  te_collation(db,
14e70 20 61 72 67 76 5b 32 5d 2c 20 53 51 4c 49 54 45   argv[2], SQLITE
14e80 5f 55 54 46 38 2c 20 30 2c 20 30 29 3b 0a 20 20  _UTF8, 0, 0);.  
14e90 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
14ea0 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72  terp, (char *)er
14eb0 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
14ec0 5f 53 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75  _STATIC);.  retu
14ed0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
14ee0 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
14ef0 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
14f00 74 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  t DB.**.** Retur
14f10 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 64 61  n true if the da
14f20 74 61 62 61 73 65 20 44 42 20 69 73 20 63 75 72  tabase DB is cur
14f30 72 65 6e 74 6c 79 20 69 6e 20 61 75 74 6f 2d 63  rently in auto-c
14f40 6f 6d 6d 69 74 20 6d 6f 64 65 2e 0a 2a 2a 20 52  ommit mode..** R
14f50 65 74 75 72 6e 20 66 61 6c 73 65 20 69 66 20 6e  eturn false if n
14f60 6f 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ot..*/.static in
14f70 74 20 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  t get_autocommit
14f80 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
14f90 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
14fa0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
14fb0 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20  nt argc,.  char 
14fc0 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 63 68 61 72  **argv.){.  char
14fd0 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 73 71 6c   zBuf[30];.  sql
14fe0 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
14ff0 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  argc!=2 ){.    T
15000 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
15010 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
15020 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
15030 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a   \"", argv[0], .
15040 20 20 20 20 20 20 20 20 22 20 44 42 22 2c 20 30          " DB", 0
15050 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
15060 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
15070 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
15080 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
15090 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
150a0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 70 72 69  CL_ERROR;.  spri
150b0 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20  ntf(zBuf, "%d", 
150c0 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
150d0 63 6f 6d 6d 69 74 28 64 62 29 29 3b 0a 20 20 54  commit(db));.  T
150e0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
150f0 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29  interp, zBuf, 0)
15100 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
15110 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
15120 65 3a 20 20 74 63 6c 5f 76 61 72 69 61 62 6c 65  e:  tcl_variable
15130 5f 74 79 70 65 20 56 41 52 49 41 42 4c 45 4e 41  _type VARIABLENA
15140 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  ME.**.** Return 
15150 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
15160 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
15170 6e 74 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 0a  ntation for the.
15180 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
15190 67 69 76 65 6e 20 76 61 72 69 61 62 6c 65 2e 0a  given variable..
151a0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 63  */.static int tc
151b0 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65 28  l_variable_type(
151c0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
151d0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
151e0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
151f0 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
15200 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
15210 29 7b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 56  ){.  Tcl_Obj *pV
15220 61 72 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  ar;.  if( objc!=
15230 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  2 ){.    Tcl_Wro
15240 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
15250 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 56 41 52 49  , 1, objv, "VARI
15260 41 42 4c 45 22 29 3b 0a 20 20 20 20 72 65 74 75  ABLE");.    retu
15270 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
15280 7d 0a 20 20 70 56 61 72 20 3d 20 54 63 6c 5f 47  }.  pVar = Tcl_G
15290 65 74 56 61 72 32 45 78 28 69 6e 74 65 72 70 2c  etVar2Ex(interp,
152a0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
152b0 62 6a 76 5b 31 5d 29 2c 20 30 2c 20 54 43 4c 5f  bjv[1]), 0, TCL_
152c0 4c 45 41 56 45 5f 45 52 52 5f 4d 53 47 29 3b 0a  LEAVE_ERR_MSG);.
152d0 20 20 69 66 28 20 70 56 61 72 3d 3d 30 20 29 20    if( pVar==0 ) 
152e0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
152f0 3b 0a 20 20 69 66 28 20 70 56 61 72 2d 3e 74 79  ;.  if( pVar->ty
15300 70 65 50 74 72 20 29 7b 0a 20 20 20 20 54 63 6c  pePtr ){.    Tcl
15310 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
15320 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72  terp, Tcl_NewStr
15330 69 6e 67 4f 62 6a 28 70 56 61 72 2d 3e 74 79 70  ingObj(pVar->typ
15340 65 50 74 72 2d 3e 6e 61 6d 65 2c 20 2d 31 29 29  ePtr->name, -1))
15350 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54  ;.  }.  return T
15360 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
15370 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
15380 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 20 3f  release_memory ?
15390 4e 3f 0a 2a 2a 0a 2a 2a 20 41 74 74 65 6d 70 74  N?.**.** Attempt
153a0 20 74 6f 20 72 65 6c 65 61 73 65 20 6d 65 6d 6f   to release memo
153b0 72 79 20 63 75 72 72 65 6e 74 6c 79 20 68 65 6c  ry currently hel
153c0 64 20 62 75 74 20 6e 6f 74 20 61 63 74 75 61 6c  d but not actual
153d0 6c 79 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 20  ly required..** 
153e0 54 68 65 20 69 6e 74 65 67 65 72 20 4e 20 69 73  The integer N is
153f0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
15400 79 74 65 73 20 77 65 20 61 72 65 20 74 72 79 69  ytes we are tryi
15410 6e 67 20 74 6f 20 72 65 6c 65 61 73 65 2e 20 20  ng to release.  
15420 54 68 65 20 0a 2a 2a 20 72 65 74 75 72 6e 20 76  The .** return v
15430 61 6c 75 65 20 69 73 20 74 68 65 20 61 6d 6f 75  alue is the amou
15440 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 20 61 63 74  nt of memory act
15450 75 61 6c 6c 79 20 72 65 6c 65 61 73 65 64 2e 0a  ually released..
15460 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
15470 73 74 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72  st_release_memor
15480 79 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  y(.  void * clie
15490 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
154a0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
154b0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
154c0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
154d0 5d 0a 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64  ].){.#if defined
154e0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  (SQLITE_ENABLE_M
154f0 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54  EMORY_MANAGEMENT
15500 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
15510 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f  LITE_OMIT_DISKIO
15520 29 0a 20 20 69 6e 74 20 4e 3b 0a 20 20 69 6e 74  ).  int N;.  int
15530 20 61 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63   amt;.  if( objc
15540 21 3d 31 20 26 26 20 6f 62 6a 63 21 3d 32 20 29  !=1 && objc!=2 )
15550 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
15560 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
15570 2c 20 6f 62 6a 76 2c 20 22 3f 4e 3f 22 29 3b 0a  , objv, "?N?");.
15580 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
15590 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
155a0 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20 20 69  objc==2 ){.    i
155b0 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
155c0 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
155d0 76 5b 31 5d 2c 20 26 4e 29 20 29 20 72 65 74 75  v[1], &N) ) retu
155e0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
155f0 7d 65 6c 73 65 7b 0a 20 20 20 20 4e 20 3d 20 2d  }else{.    N = -
15600 31 3b 0a 20 20 7d 0a 20 20 61 6d 74 20 3d 20 73  1;.  }.  amt = s
15610 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d  qlite3_release_m
15620 65 6d 6f 72 79 28 4e 29 3b 0a 20 20 54 63 6c 5f  emory(N);.  Tcl_
15630 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
15640 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
15650 62 6a 28 61 6d 74 29 29 3b 0a 23 65 6e 64 69 66  bj(amt));.#endif
15660 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
15670 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
15680 3a 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f  :  sqlite3_soft_
15690 68 65 61 70 5f 6c 69 6d 69 74 20 3f 4e 3f 0a 2a  heap_limit ?N?.*
156a0 2a 0a 2a 2a 20 51 75 65 72 79 20 6f 72 20 73 65  *.** Query or se
156b0 74 20 74 68 65 20 73 6f 66 74 20 68 65 61 70 20  t the soft heap 
156c0 6c 69 6d 69 74 20 66 6f 72 20 74 68 65 20 63 75  limit for the cu
156d0 72 72 65 6e 74 20 74 68 72 65 61 64 2e 20 20 54  rrent thread.  T
156e0 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 69 73 20 6f  he.** limit is o
156f0 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20 74  nly changed if t
15700 68 65 20 4e 20 69 73 20 70 72 65 73 65 6e 74 2e  he N is present.
15710 20 20 54 68 65 20 70 72 65 76 69 6f 75 73 20 6c    The previous l
15720 69 6d 69 74 0a 2a 2a 20 69 73 20 72 65 74 75 72  imit.** is retur
15730 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ned..*/.static i
15740 6e 74 20 74 65 73 74 5f 73 6f 66 74 5f 68 65 61  nt test_soft_hea
15750 70 5f 6c 69 6d 69 74 28 0a 20 20 76 6f 69 64 20  p_limit(.  void 
15760 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
15770 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
15780 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
15790 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
157a0 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 20 64   objv[].){.#if d
157b0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
157c0 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41  ABLE_MEMORY_MANA
157d0 47 45 4d 45 4e 54 29 20 26 26 20 21 64 65 66 69  GEMENT) && !defi
157e0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
157f0 44 49 53 4b 49 4f 29 0a 20 20 69 6e 74 20 61 6d  DISKIO).  int am
15800 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 31  t;.  if( objc!=1
15810 20 26 26 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20   && objc!=2 ){. 
15820 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
15830 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
15840 62 6a 76 2c 20 22 3f 4e 3f 22 29 3b 0a 20 20 20  bjv, "?N?");.   
15850 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
15860 52 3b 0a 20 20 7d 0a 20 20 61 6d 74 20 3d 20 73  R;.  }.  amt = s
15870 71 6c 69 74 65 33 54 68 72 65 61 64 44 61 74 61  qlite3ThreadData
15880 52 65 61 64 4f 6e 6c 79 28 29 2d 3e 6e 53 6f 66  ReadOnly()->nSof
15890 74 48 65 61 70 4c 69 6d 69 74 3b 0a 20 20 69 66  tHeapLimit;.  if
158a0 28 20 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20  ( objc==2 ){.   
158b0 20 69 6e 74 20 4e 3b 0a 20 20 20 20 69 66 28 20   int N;.    if( 
158c0 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
158d0 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31  j(interp, objv[1
158e0 5d 2c 20 26 4e 29 20 29 20 72 65 74 75 72 6e 20  ], &N) ) return 
158f0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73  TCL_ERROR;.    s
15900 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70  qlite3_soft_heap
15910 5f 6c 69 6d 69 74 28 4e 29 3b 0a 20 20 7d 0a 20  _limit(N);.  }. 
15920 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
15930 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
15940 77 49 6e 74 4f 62 6a 28 61 6d 74 29 29 3b 0a 23  wIntObj(amt));.#
15950 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54  endif.  return T
15960 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
15970 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
15980 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65 6d 64 65  _clear_tsd_memde
15990 62 75 67 0a 2a 2a 0a 2a 2a 20 43 6c 65 61 72 20  bug.**.** Clear 
159a0 61 6c 6c 20 6f 66 20 74 68 65 20 4d 45 4d 44 45  all of the MEMDE
159b0 42 55 47 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  BUG information 
159c0 6f 75 74 20 6f 66 20 74 68 72 65 61 64 2d 73 70  out of thread-sp
159d0 65 63 69 66 69 63 20 64 61 74 61 2e 0a 2a 2a 20  ecific data..** 
159e0 54 68 69 73 20 77 69 6c 6c 20 61 6c 6c 6f 77 20  This will allow 
159f0 69 74 20 74 6f 20 62 65 20 64 65 61 6c 6c 6f 63  it to be dealloc
15a00 61 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ated..*/.static 
15a10 69 6e 74 20 74 65 73 74 5f 63 6c 65 61 72 5f 74  int test_clear_t
15a20 73 64 5f 6d 65 6d 64 65 62 75 67 28 0a 20 20 76  sd_memdebug(.  v
15a30 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
15a40 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
15a50 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
15a60 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
15a70 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
15a80 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
15a90 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
15aa0 20 20 73 71 6c 69 74 65 33 5f 74 73 64 5f 72 65    sqlite3_tsd_re
15ab0 6c 65 61 73 65 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c  lease.**.** Call
15ac0 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
15ad0 68 72 65 61 64 44 61 74 61 2e 0a 2a 2f 0a 73 74  hreadData..*/.st
15ae0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 74 73  atic int test_ts
15af0 64 5f 72 65 6c 65 61 73 65 28 0a 20 20 76 6f 69  d_release(.  voi
15b00 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
15b10 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
15b20 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
15b30 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
15b40 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66  ST objv[].){.#if
15b50 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
15b60 4d 45 4d 44 45 42 55 47 29 0a 20 20 73 71 6c 69  MEMDEBUG).  sqli
15b70 74 65 33 52 65 6c 65 61 73 65 54 68 72 65 61 64  te3ReleaseThread
15b80 44 61 74 61 28 29 3b 0a 23 65 6e 64 69 66 0a 20  Data();.#endif. 
15b90 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
15ba0 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
15bb0 20 20 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64    sqlite3_thread
15bc0 5f 63 6c 65 61 6e 75 70 0a 2a 2a 0a 2a 2a 20 43  _cleanup.**.** C
15bd0 61 6c 6c 20 74 68 65 20 73 71 6c 69 74 65 33 5f  all the sqlite3_
15be0 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 20 41  thread_cleanup A
15bf0 50 49 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  PI..*/.static in
15c00 74 20 74 65 73 74 5f 74 68 72 65 61 64 5f 63 6c  t test_thread_cl
15c10 65 61 6e 75 70 28 0a 20 20 76 6f 69 64 20 2a 20  eanup(.  void * 
15c20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
15c30 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
15c40 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
15c50 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
15c60 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
15c70 65 33 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75  e3_thread_cleanu
15c80 70 28 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  p();.  return TC
15c90 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  L_OK;.}.../*.** 
15ca0 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 65 74  This routine set
15cb0 73 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  s entries in the
15cc0 20 67 6c 6f 62 61 6c 20 3a 3a 73 71 6c 69 74 65   global ::sqlite
15cd0 5f 6f 70 74 69 6f 6e 73 28 29 20 61 72 72 61 79  _options() array
15ce0 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 61 63 63   variable.** acc
15cf0 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 63 6f  ording to the co
15d00 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69  mpile-time confi
15d10 67 75 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  guration of the 
15d20 64 61 74 61 62 61 73 65 2e 20 20 54 65 73 74 0a  database.  Test.
15d30 2a 2a 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  ** procedures us
15d40 65 20 74 68 69 73 20 74 6f 20 64 65 74 65 72 6d  e this to determ
15d50 69 6e 65 20 77 68 65 6e 20 74 65 73 74 73 20 73  ine when tests s
15d60 68 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64  hould be omitted
15d70 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
15d80 20 73 65 74 5f 6f 70 74 69 6f 6e 73 28 54 63 6c   set_options(Tcl
15d90 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29  _Interp *interp)
15da0 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
15db0 33 32 42 49 54 5f 52 4f 57 49 44 0a 20 20 54 63  32BIT_ROWID.  Tc
15dc0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15dd0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
15de0 73 22 2c 20 22 72 6f 77 69 64 33 32 22 2c 20 22  s", "rowid32", "
15df0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
15e00 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
15e10 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15e20 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
15e30 73 22 2c 20 22 72 6f 77 69 64 33 32 22 2c 20 22  s", "rowid32", "
15e40 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
15e50 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
15e60 66 64 65 66 20 53 51 4c 49 54 45 5f 43 41 53 45  fdef SQLITE_CASE
15e70 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 0a  _SENSITIVE_LIKE.
15e80 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
15e90 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
15ea0 74 69 6f 6e 73 22 2c 22 63 61 73 65 73 65 6e 73  tions","casesens
15eb0 69 74 69 76 65 6c 69 6b 65 22 2c 22 31 22 2c 54  itivelike","1",T
15ec0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
15ed0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
15ee0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
15ef0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 63  lite_options","c
15f00 61 73 65 73 65 6e 73 69 74 69 76 65 6c 69 6b 65  asesensitivelike
15f10 22 2c 22 30 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c  ","0",TCL_GLOBAL
15f20 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
15f30 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 49  #ifdef SQLITE_DI
15f40 53 41 42 4c 45 5f 44 49 52 53 59 4e 43 0a 20 20  SABLE_DIRSYNC.  
15f50 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
15f60 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
15f70 6f 6e 73 22 2c 20 22 64 69 72 73 79 6e 63 22 2c  ons", "dirsync",
15f80 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
15f90 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
15fa0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
15fb0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
15fc0 6f 6e 73 22 2c 20 22 64 69 72 73 79 6e 63 22 2c  ons", "dirsync",
15fd0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
15fe0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
15ff0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 49  #ifdef SQLITE_DI
16000 53 41 42 4c 45 5f 4c 46 53 0a 20 20 54 63 6c 5f  SABLE_LFS.  Tcl_
16010 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
16020 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
16030 2c 20 22 6c 66 73 22 2c 20 22 30 22 2c 20 54 43  , "lfs", "0", TC
16040 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
16050 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
16060 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
16070 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6c  ite_options", "l
16080 66 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  fs", "1", TCL_GL
16090 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
160a0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
160b0 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
160c0 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  E.  Tcl_SetVar2(
160d0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
160e0 6f 70 74 69 6f 6e 73 22 2c 20 22 61 6c 74 65 72  options", "alter
160f0 74 61 62 6c 65 22 2c 20 22 30 22 2c 20 54 43 4c  table", "0", TCL
16100 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
16110 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
16120 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16130 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 6c  te_options", "al
16140 74 65 72 74 61 62 6c 65 22 2c 20 22 31 22 2c 20  tertable", "1", 
16150 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
16160 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
16170 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41   SQLITE_OMIT_ANA
16180 4c 59 5a 45 0a 20 20 54 63 6c 5f 53 65 74 56 61  LYZE.  Tcl_SetVa
16190 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
161a0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 6e  te_options", "an
161b0 61 6c 79 7a 65 22 2c 20 22 30 22 2c 20 54 43 4c  alyze", "0", TCL
161c0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
161d0 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
161e0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
161f0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 6e  te_options", "an
16200 61 6c 79 7a 65 22 2c 20 22 31 22 2c 20 54 43 4c  alyze", "1", TCL
16210 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
16220 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
16230 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
16240 49 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65  IZATION.  Tcl_Se
16250 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16260 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16270 22 61 75 74 68 22 2c 20 22 30 22 2c 20 54 43 4c  "auth", "0", TCL
16280 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
16290 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
162a0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
162b0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75  te_options", "au
162c0 74 68 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  th", "1", TCL_GL
162d0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
162e0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
162f0 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
16300 4d 45 4e 54 0a 20 20 54 63 6c 5f 53 65 74 56 61  MENT.  Tcl_SetVa
16310 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16320 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75  te_options", "au
16330 74 6f 69 6e 63 22 2c 20 22 30 22 2c 20 54 43 4c  toinc", "0", TCL
16340 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
16350 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
16360 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16370 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75  te_options", "au
16380 74 6f 69 6e 63 22 2c 20 22 31 22 2c 20 54 43 4c  toinc", "1", TCL
16390 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
163a0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
163b0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
163c0 43 55 55 4d 0a 20 20 54 63 6c 5f 53 65 74 56 61  CUUM.  Tcl_SetVa
163d0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
163e0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75  te_options", "au
163f0 74 6f 76 61 63 75 75 6d 22 2c 20 22 30 22 2c 20  tovacuum", "0", 
16400 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
16410 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
16420 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16430 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16440 22 61 75 74 6f 76 61 63 75 75 6d 22 2c 20 22 31  "autovacuum", "1
16450 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
16460 4c 59 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  LY);.#endif /* S
16470 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
16480 41 43 55 55 4d 20 2a 2f 0a 23 69 66 20 21 64 65  ACUUM */.#if !de
16490 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46  fined(SQLITE_DEF
164a0 41 55 4c 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  AULT_AUTOVACUUM)
164b0 20 7c 7c 20 53 51 4c 49 54 45 5f 44 45 46 41 55   || SQLITE_DEFAU
164c0 4c 54 5f 41 55 54 4f 56 41 43 55 55 4d 3d 3d 30  LT_AUTOVACUUM==0
164d0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
164e0 6e 74 65 72 70 2c 22 73 71 6c 69 74 65 5f 6f 70  nterp,"sqlite_op
164f0 74 69 6f 6e 73 22 2c 22 64 65 66 61 75 6c 74 5f  tions","default_
16500 61 75 74 6f 76 61 63 75 75 6d 22 2c 22 30 22 2c  autovacuum","0",
16510 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
16520 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
16530 74 56 61 72 32 28 69 6e 74 65 72 70 2c 22 73 71  tVar2(interp,"sq
16540 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 64  lite_options","d
16550 65 66 61 75 6c 74 5f 61 75 74 6f 76 61 63 75 75  efault_autovacuu
16560 6d 22 2c 22 31 22 2c 54 43 4c 5f 47 4c 4f 42 41  m","1",TCL_GLOBA
16570 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
16580 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
16590 4d 49 54 5f 42 45 54 57 45 45 4e 5f 4f 50 54 49  MIT_BETWEEN_OPTI
165a0 4d 49 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53  MIZATION.  Tcl_S
165b0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
165c0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
165d0 20 22 62 65 74 77 65 65 6e 5f 6f 70 74 22 2c 20   "between_opt", 
165e0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
165f0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
16600 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
16610 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
16620 6e 73 22 2c 20 22 62 65 74 77 65 65 6e 5f 6f 70  ns", "between_op
16630 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  t", "1", TCL_GLO
16640 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
16650 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
16660 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52  _OMIT_BLOB_LITER
16670 41 4c 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  AL.  Tcl_SetVar2
16680 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
16690 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 62 6c 6f 62  _options", "blob
166a0 6c 69 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  lit", "0", TCL_G
166b0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
166c0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
166d0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
166e0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 62 6c 6f 62  _options", "blob
166f0 6c 69 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  lit", "1", TCL_G
16700 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
16710 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
16720 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 20 20 54  TE_OMIT_CAST.  T
16730 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
16740 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
16750 6e 73 22 2c 20 22 63 61 73 74 22 2c 20 22 30 22  ns", "cast", "0"
16760 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
16770 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
16780 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
16790 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
167a0 2c 20 22 63 61 73 74 22 2c 20 22 31 22 2c 20 54  , "cast", "1", T
167b0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
167c0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
167d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43  SQLITE_OMIT_CHEC
167e0 4b 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  K.  Tcl_SetVar2(
167f0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
16800 6f 70 74 69 6f 6e 73 22 2c 20 22 63 68 65 63 6b  options", "check
16810 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
16820 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
16830 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
16840 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
16850 74 69 6f 6e 73 22 2c 20 22 63 68 65 63 6b 22 2c  tions", "check",
16860 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
16870 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
16880 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
16890 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41  ABLE_COLUMN_META
168a0 44 41 54 41 0a 20 20 54 63 6c 5f 53 65 74 56 61  DATA.  Tcl_SetVa
168b0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
168c0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f  te_options", "co
168d0 6c 75 6d 6e 6d 65 74 61 64 61 74 61 22 2c 20 22  lumnmetadata", "
168e0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
168f0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
16900 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
16910 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
16920 73 22 2c 20 22 63 6f 6c 75 6d 6e 6d 65 74 61 64  s", "columnmetad
16930 61 74 61 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ata", "0", TCL_G
16940 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
16950 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
16960 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45  TE_OMIT_COMPLETE
16970 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
16980 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
16990 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6d 70 6c 65  ptions", "comple
169a0 74 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  te", "0", TCL_GL
169b0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
169c0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
169d0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
169e0 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6d 70 6c  options", "compl
169f0 65 74 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  ete", "1", TCL_G
16a00 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
16a10 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
16a20 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44  TE_OMIT_COMPOUND
16a30 5f 53 45 4c 45 43 54 0a 20 20 54 63 6c 5f 53 65  _SELECT.  Tcl_Se
16a40 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16a50 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16a60 22 63 6f 6d 70 6f 75 6e 64 22 2c 20 22 30 22 2c  "compound", "0",
16a70 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
16a80 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
16a90 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
16aa0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
16ab0 20 22 63 6f 6d 70 6f 75 6e 64 22 2c 20 22 31 22   "compound", "1"
16ac0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
16ad0 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
16ae0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
16af0 4f 4e 46 4c 49 43 54 5f 43 4c 41 55 53 45 0a 20  ONFLICT_CLAUSE. 
16b00 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
16b10 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
16b20 69 6f 6e 73 22 2c 20 22 63 6f 6e 66 6c 69 63 74  ions", "conflict
16b30 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
16b40 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
16b50 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
16b60 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
16b70 74 69 6f 6e 73 22 2c 20 22 63 6f 6e 66 6c 69 63  tions", "conflic
16b80 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  t", "1", TCL_GLO
16b90 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
16ba0 66 0a 0a 23 69 66 20 4f 53 5f 55 4e 49 58 0a 20  f..#if OS_UNIX. 
16bb0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
16bc0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
16bd0 69 6f 6e 73 22 2c 20 22 63 72 61 73 68 74 65 73  ions", "crashtes
16be0 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  t", "1", TCL_GLO
16bf0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
16c00 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
16c10 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
16c20 70 74 69 6f 6e 73 22 2c 20 22 63 72 61 73 68 74  ptions", "crasht
16c30 65 73 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  est", "0", TCL_G
16c40 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
16c50 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
16c60 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45  TE_OMIT_DATETIME
16c70 5f 46 55 4e 43 53 0a 20 20 54 63 6c 5f 53 65 74  _FUNCS.  Tcl_Set
16c80 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
16c90 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
16ca0 64 61 74 65 74 69 6d 65 22 2c 20 22 30 22 2c 20  datetime", "0", 
16cb0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
16cc0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
16cd0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16ce0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16cf0 22 64 61 74 65 74 69 6d 65 22 2c 20 22 31 22 2c  "datetime", "1",
16d00 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
16d10 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
16d20 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49  f SQLITE_OMIT_DI
16d30 53 4b 49 4f 0a 20 20 54 63 6c 5f 53 65 74 56 61  SKIO.  Tcl_SetVa
16d40 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16d50 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 69  te_options", "di
16d60 73 6b 69 6f 22 2c 20 22 30 22 2c 20 54 43 4c 5f  skio", "0", TCL_
16d70 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
16d80 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
16d90 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
16da0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 69 73  e_options", "dis
16db0 6b 69 6f 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  kio", "1", TCL_G
16dc0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
16dd0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
16de0 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
16df0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
16e00 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
16e10 74 69 6f 6e 73 22 2c 20 22 65 78 70 6c 61 69 6e  tions", "explain
16e20 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
16e30 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
16e40 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
16e50 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
16e60 74 69 6f 6e 73 22 2c 20 22 65 78 70 6c 61 69 6e  tions", "explain
16e70 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
16e80 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
16e90 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
16ea0 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
16eb0 49 4e 54 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  INT.  Tcl_SetVar
16ec0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
16ed0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66 6c 6f  e_options", "flo
16ee0 61 74 69 6e 67 70 6f 69 6e 74 22 2c 20 22 30 22  atingpoint", "0"
16ef0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
16f00 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
16f10 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
16f20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
16f30 2c 20 22 66 6c 6f 61 74 69 6e 67 70 6f 69 6e 74  , "floatingpoint
16f40 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
16f50 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
16f60 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
16f70 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
16f80 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
16f90 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
16fa0 70 74 69 6f 6e 73 22 2c 20 22 66 6f 72 65 69 67  ptions", "foreig
16fb0 6e 6b 65 79 22 2c 20 22 30 22 2c 20 54 43 4c 5f  nkey", "0", TCL_
16fc0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
16fd0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
16fe0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
16ff0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66 6f 72  e_options", "for
17000 65 69 67 6e 6b 65 79 22 2c 20 22 31 22 2c 20 54  eignkey", "1", T
17010 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
17020 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
17030 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f 42  SQLITE_OMIT_GLOB
17040 41 4c 52 45 43 4f 56 45 52 0a 20 20 54 63 6c 5f  ALRECOVER.  Tcl_
17050 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
17060 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
17070 2c 20 22 67 6c 6f 62 61 6c 72 65 63 6f 76 65 72  , "globalrecover
17080 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
17090 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
170a0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
170b0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
170c0 74 69 6f 6e 73 22 2c 20 22 67 6c 6f 62 61 6c 72  tions", "globalr
170d0 65 63 6f 76 65 72 22 2c 20 22 31 22 2c 20 54 43  ecover", "1", TC
170e0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
170f0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
17100 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
17110 52 49 54 59 5f 43 48 45 43 4b 0a 20 20 54 63 6c  RITY_CHECK.  Tcl
17120 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
17130 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
17140 22 2c 20 22 69 6e 74 65 67 72 69 74 79 63 6b 22  ", "integrityck"
17150 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
17160 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
17170 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
17180 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
17190 69 6f 6e 73 22 2c 20 22 69 6e 74 65 67 72 69 74  ions", "integrit
171a0 79 63 6b 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  yck", "1", TCL_G
171b0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
171c0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
171d0 54 45 5f 4f 4d 49 54 5f 4c 49 4b 45 5f 4f 50 54  TE_OMIT_LIKE_OPT
171e0 49 4d 49 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f  IMIZATION.  Tcl_
171f0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
17200 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
17210 2c 20 22 6c 69 6b 65 5f 6f 70 74 22 2c 20 22 30  , "like_opt", "0
17220 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
17230 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
17240 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
17250 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
17260 22 2c 20 22 6c 69 6b 65 5f 6f 70 74 22 2c 20 22  ", "like_opt", "
17270 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
17280 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
17290 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
172a0 5f 4d 45 4d 4f 52 59 44 42 0a 20 20 54 63 6c 5f  _MEMORYDB.  Tcl_
172b0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
172c0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
172d0 2c 20 22 6d 65 6d 6f 72 79 64 62 22 2c 20 22 30  , "memorydb", "0
172e0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
172f0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
17300 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
17310 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
17320 22 2c 20 22 6d 65 6d 6f 72 79 64 62 22 2c 20 22  ", "memorydb", "
17330 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
17340 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
17350 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
17360 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45  LE_MEMORY_MANAGE
17370 4d 45 4e 54 0a 20 20 54 63 6c 5f 53 65 74 56 61  MENT.  Tcl_SetVa
17380 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
17390 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6d 65  te_options", "me
173a0 6d 6f 72 79 6d 61 6e 61 67 65 22 2c 20 22 31 22  morymanage", "1"
173b0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
173c0 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
173d0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
173e0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
173f0 2c 20 22 6d 65 6d 6f 72 79 6d 61 6e 61 67 65 22  , "memorymanage"
17400 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
17410 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
17420 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
17430 4d 49 54 5f 4f 52 5f 4f 50 54 49 4d 49 5a 41 54  MIT_OR_OPTIMIZAT
17440 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  ION.  Tcl_SetVar
17450 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
17460 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6f 72 5f  e_options", "or_
17470 6f 70 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  opt", "0", TCL_G
17480 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
17490 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
174a0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
174b0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6f 72 5f 6f  _options", "or_o
174c0 70 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  pt", "1", TCL_GL
174d0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
174e0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
174f0 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
17500 47 4d 41 53 0a 20 20 54 63 6c 5f 53 65 74 56 61  GMAS.  Tcl_SetVa
17510 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
17520 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 61  te_options", "pa
17530 67 65 72 5f 70 72 61 67 6d 61 73 22 2c 20 22 30  ger_pragmas", "0
17540 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
17550 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
17560 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
17570 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
17580 22 2c 20 22 70 61 67 65 72 5f 70 72 61 67 6d 61  ", "pager_pragma
17590 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  s", "1", TCL_GLO
175a0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
175b0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
175c0 5f 4f 4d 49 54 5f 50 41 52 53 45 52 0a 20 20 54  _OMIT_PARSER.  T
175d0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
175e0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
175f0 6e 73 22 2c 20 22 70 61 72 73 65 72 22 2c 20 22  ns", "parser", "
17600 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
17610 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
17620 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
17630 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
17640 73 22 2c 20 22 70 61 72 73 65 72 22 2c 20 22 31  s", "parser", "1
17650 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
17660 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
17670 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
17680 4f 4d 49 54 5f 50 52 41 47 4d 41 29 20 7c 7c 20  OMIT_PRAGMA) || 
17690 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
176a0 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
176b0 29 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  ).  Tcl_SetVar2(
176c0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
176d0 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72 61 67 6d  options", "pragm
176e0 61 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  a", "0", TCL_GLO
176f0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 20 20 54 63 6c  BAL_ONLY);.  Tcl
17700 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
17710 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
17720 22 2c 20 22 69 6e 74 65 67 72 69 74 79 63 6b 22  ", "integrityck"
17730 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
17740 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
17750 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
17760 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
17770 69 6f 6e 73 22 2c 20 22 70 72 61 67 6d 61 22 2c  ions", "pragma",
17780 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
17790 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
177a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
177b0 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
177c0 42 41 43 4b 0a 20 20 54 63 6c 5f 53 65 74 56 61  BACK.  Tcl_SetVa
177d0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
177e0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72  te_options", "pr
177f0 6f 67 72 65 73 73 22 2c 20 22 30 22 2c 20 54 43  ogress", "0", TC
17800 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
17810 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
17820 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
17830 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70  ite_options", "p
17840 72 6f 67 72 65 73 73 22 2c 20 22 31 22 2c 20 54  rogress", "1", T
17850 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
17860 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
17870 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 45  SQLITE_ENABLE_RE
17880 44 45 46 5f 49 4f 0a 20 20 54 63 6c 5f 53 65 74  DEF_IO.  Tcl_Set
17890 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
178a0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
178b0 72 65 64 65 66 69 6f 22 2c 20 22 31 22 2c 20 54  redefio", "1", T
178c0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
178d0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
178e0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
178f0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
17900 72 65 64 65 66 69 6f 22 2c 20 22 30 22 2c 20 54  redefio", "0", T
17910 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
17920 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
17930 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 52 45 49 4e  SQLITE_OMIT_REIN
17940 44 45 58 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  DEX.  Tcl_SetVar
17950 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
17960 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72 65 69  e_options", "rei
17970 6e 64 65 78 22 2c 20 22 30 22 2c 20 54 43 4c 5f  ndex", "0", TCL_
17980 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
17990 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
179a0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
179b0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72 65 69  e_options", "rei
179c0 6e 64 65 78 22 2c 20 22 31 22 2c 20 54 43 4c 5f  ndex", "1", TCL_
179d0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
179e0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
179f0 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
17a00 50 52 41 47 4d 41 53 0a 20 20 54 63 6c 5f 53 65  PRAGMAS.  Tcl_Se
17a10 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
17a20 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
17a30 22 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 22  "schema_pragmas"
17a40 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
17a50 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
17a60 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
17a70 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
17a80 69 6f 6e 73 22 2c 20 22 73 63 68 65 6d 61 5f 70  ions", "schema_p
17a90 72 61 67 6d 61 73 22 2c 20 22 31 22 2c 20 54 43  ragmas", "1", TC
17aa0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
17ab0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
17ac0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
17ad0 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41  A_VERSION_PRAGMA
17ae0 53 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  S.  Tcl_SetVar2(
17af0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17b00 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63 68 65 6d  options", "schem
17b10 61 5f 76 65 72 73 69 6f 6e 22 2c 20 22 30 22 2c  a_version", "0",
17b20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
17b30 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
17b40 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
17b50 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
17b60 20 22 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e   "schema_version
17b70 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
17b80 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
17b90 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
17ba0 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
17bb0 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  E.  Tcl_SetVar2(
17bc0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17bd0 6f 70 74 69 6f 6e 73 22 2c 20 22 73 68 61 72 65  options", "share
17be0 64 5f 63 61 63 68 65 22 2c 20 22 30 22 2c 20 54  d_cache", "0", T
17bf0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
17c00 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
17c10 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
17c20 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
17c30 73 68 61 72 65 64 5f 63 61 63 68 65 22 2c 20 22  shared_cache", "
17c40 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
17c50 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
17c60 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
17c70 5f 53 55 42 51 55 45 52 59 0a 20 20 54 63 6c 5f  _SUBQUERY.  Tcl_
17c80 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
17c90 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
17ca0 2c 20 22 73 75 62 71 75 65 72 79 22 2c 20 22 30  , "subquery", "0
17cb0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
17cc0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
17cd0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
17ce0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
17cf0 22 2c 20 22 73 75 62 71 75 65 72 79 22 2c 20 22  ", "subquery", "
17d00 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
17d10 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
17d20 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
17d30 5f 54 43 4c 5f 56 41 52 49 41 42 4c 45 0a 20 20  _TCL_VARIABLE.  
17d40 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
17d50 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
17d60 6f 6e 73 22 2c 20 22 74 63 6c 76 61 72 22 2c 20  ons", "tclvar", 
17d70 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
17d80 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
17d90 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
17da0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
17db0 6e 73 22 2c 20 22 74 63 6c 76 61 72 22 2c 20 22  ns", "tclvar", "
17dc0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
17dd0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
17de0 66 20 64 65 66 69 6e 65 64 28 54 48 52 45 41 44  f defined(THREAD
17df0 53 41 46 45 29 20 26 26 20 54 48 52 45 41 44 53  SAFE) && THREADS
17e00 41 46 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  AFE.  Tcl_SetVar
17e10 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
17e20 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 68 72  e_options", "thr
17e30 65 61 64 73 61 66 65 22 2c 20 22 31 22 2c 20 54  eadsafe", "1", T
17e40 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
17e50 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
17e60 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
17e70 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
17e80 74 68 72 65 61 64 73 61 66 65 22 2c 20 22 30 22  threadsafe", "0"
17e90 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
17ea0 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
17eb0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
17ec0 52 41 43 45 0a 20 20 54 63 6c 5f 53 65 74 56 61  RACE.  Tcl_SetVa
17ed0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
17ee0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72  te_options", "tr
17ef0 61 63 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ace", "0", TCL_G
17f00 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
17f10 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
17f20 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
17f30 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72 61 63  _options", "trac
17f40 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  e", "1", TCL_GLO
17f50 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
17f60 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
17f70 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
17f80 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
17f90 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
17fa0 6f 6e 73 22 2c 20 22 74 72 69 67 67 65 72 22 2c  ons", "trigger",
17fb0 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
17fc0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
17fd0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
17fe0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
17ff0 6f 6e 73 22 2c 20 22 74 72 69 67 67 65 72 22 2c  ons", "trigger",
18000 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
18010 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
18020 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
18030 49 54 5f 54 45 4d 50 44 42 0a 20 20 54 63 6c 5f  IT_TEMPDB.  Tcl_
18040 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
18050 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
18060 2c 20 22 74 65 6d 70 64 62 22 2c 20 22 30 22 2c  , "tempdb", "0",
18070 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
18080 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
18090 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
180a0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
180b0 20 22 74 65 6d 70 64 62 22 2c 20 22 31 22 2c 20   "tempdb", "1", 
180c0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
180d0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
180e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
180f0 31 36 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  16.  Tcl_SetVar2
18100 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
18110 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 75 74 66 31  _options", "utf1
18120 36 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  6", "0", TCL_GLO
18130 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
18140 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
18150 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
18160 70 74 69 6f 6e 73 22 2c 20 22 75 74 66 31 36 22  ptions", "utf16"
18170 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
18180 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
18190 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
181a0 4d 49 54 5f 56 41 43 55 55 4d 0a 20 20 54 63 6c  MIT_VACUUM.  Tcl
181b0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
181c0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
181d0 22 2c 20 22 76 61 63 75 75 6d 22 2c 20 22 30 22  ", "vacuum", "0"
181e0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
181f0 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
18200 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
18210 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
18220 2c 20 22 76 61 63 75 75 6d 22 2c 20 22 31 22 2c  , "vacuum", "1",
18230 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
18240 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
18250 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
18260 45 57 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  EW.  Tcl_SetVar2
18270 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
18280 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76 69 65 77  _options", "view
18290 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
182a0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
182b0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
182c0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
182d0 74 69 6f 6e 73 22 2c 20 22 76 69 65 77 22 2c 20  tions", "view", 
182e0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
182f0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 7d 0a  ONLY);.#endif.}.
18300 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  ./*.** Register 
18310 63 6f 6d 6d 61 6e 64 73 20 77 69 74 68 20 74 68  commands with th
18320 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
18330 72 2e 0a 2a 2f 0a 69 6e 74 20 53 71 6c 69 74 65  r..*/.int Sqlite
18340 74 65 73 74 31 5f 49 6e 69 74 28 54 63 6c 5f 49  test1_Init(Tcl_I
18350 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29 7b 0a  nterp *interp){.
18360 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
18370 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
18380 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  t;.  extern int 
18390 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
183a0 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72  t_count;.  exter
183b0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70  n int sqlite3_op
183c0 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 3b 0a 20  en_file_count;. 
183d0 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
183e0 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 3b 0a  te3_sort_count;.
183f0 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
18400 69 74 65 33 5f 63 75 72 72 65 6e 74 5f 74 69 6d  ite3_current_tim
18410 65 3b 0a 20 20 73 74 61 74 69 63 20 73 74 72 75  e;.  static stru
18420 63 74 20 7b 0a 20 20 20 20 20 63 68 61 72 20 2a  ct {.     char *
18430 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 54 63 6c 5f  zName;.     Tcl_
18440 43 6d 64 50 72 6f 63 20 2a 78 50 72 6f 63 3b 0a  CmdProc *xProc;.
18450 20 20 7d 20 61 43 6d 64 5b 5d 20 3d 20 7b 0a 20    } aCmd[] = {. 
18460 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
18470 70 72 69 6e 74 66 5f 69 6e 74 22 2c 20 20 20 20  printf_int",    
18480 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
18490 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
184a0 69 6e 74 66 5f 69 6e 74 20 20 20 20 7d 2c 0a 20  intf_int    },. 
184b0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
184c0 70 72 69 6e 74 66 5f 69 6e 74 36 34 22 2c 20 20  printf_int64",  
184d0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
184e0 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
184f0 69 6e 74 66 5f 69 6e 74 36 34 20 20 7d 2c 0a 20  intf_int64  },. 
18500 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
18510 70 72 69 6e 74 66 5f 73 74 72 22 2c 20 20 20 20  printf_str",    
18520 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
18530 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
18540 69 6e 74 66 5f 73 74 72 20 20 20 20 7d 2c 0a 20  intf_str    },. 
18550 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
18560 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 22 2c  printf_stronly",
18570 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
18580 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
18590 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 7d 2c 0a 20  intf_stronly},. 
185a0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
185b0 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 22 2c 20  printf_double", 
185c0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
185d0 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
185e0 69 6e 74 66 5f 64 6f 75 62 6c 65 20 7d 2c 0a 20  intf_double },. 
185f0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
18600 70 72 69 6e 74 66 5f 73 63 61 6c 65 64 22 2c 20  printf_scaled", 
18610 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
18620 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
18630 69 6e 74 66 5f 73 63 61 6c 65 64 20 7d 2c 0a 20  intf_scaled },. 
18640 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
18650 70 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65  printf_hexdouble
18660 22 2c 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f  ",   (Tcl_CmdPro
18670 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  c*)sqlite3_mprin
18680 74 66 5f 68 65 78 64 6f 75 62 6c 65 7d 2c 0a 20  tf_hexdouble},. 
18690 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
186a0 70 72 69 6e 74 66 5f 7a 5f 74 65 73 74 22 2c 20  printf_z_test", 
186b0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
186c0 72 6f 63 2a 29 74 65 73 74 5f 6d 70 72 69 6e 74  roc*)test_mprint
186d0 66 5f 7a 20 20 20 20 20 20 20 20 7d 2c 0a 20 20  f_z        },.  
186e0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70     { "sqlite3_mp
186f0 72 69 6e 74 66 5f 6e 5f 74 65 73 74 22 2c 20 20  rintf_n_test",  
18700 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
18710 6f 63 2a 29 74 65 73 74 5f 6d 70 72 69 6e 74 66  oc*)test_mprintf
18720 5f 6e 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20  _n        },.   
18730 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6c 61 73    { "sqlite3_las
18740 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 22 2c  t_insert_rowid",
18750 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
18760 63 2a 29 74 65 73 74 5f 6c 61 73 74 5f 72 6f 77  c*)test_last_row
18770 69 64 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  id       },.    
18780 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 78 65 63   { "sqlite3_exec
18790 5f 70 72 69 6e 74 66 22 2c 20 20 20 20 20 20 20  _printf",       
187a0 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
187b0 2a 29 74 65 73 74 5f 65 78 65 63 5f 70 72 69 6e  *)test_exec_prin
187c0 74 66 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  tf      },.     
187d0 7b 20 22 73 71 6c 69 74 65 33 5f 67 65 74 5f 74  { "sqlite3_get_t
187e0 61 62 6c 65 5f 70 72 69 6e 74 66 22 2c 20 20 20  able_printf",   
187f0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
18800 29 74 65 73 74 5f 67 65 74 5f 74 61 62 6c 65 5f  )test_get_table_
18810 70 72 69 6e 74 66 20 7d 2c 0a 20 20 20 20 20 7b  printf },.     {
18820 20 22 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 22   "sqlite3_close"
18830 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
18840 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
18850 73 71 6c 69 74 65 5f 74 65 73 74 5f 63 6c 6f 73  sqlite_test_clos
18860 65 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20  e     },.     { 
18870 22 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  "sqlite3_create_
18880 66 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20 20 20  function",      
18890 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
188a0 65 73 74 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  est_create_funct
188b0 69 6f 6e 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22  ion  },.     { "
188c0 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 61  sqlite3_create_a
188d0 67 67 72 65 67 61 74 65 22 2c 20 20 20 20 20 20  ggregate",      
188e0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
188f0 73 74 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67  st_create_aggreg
18900 61 74 65 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73  ate },.     { "s
18910 71 6c 69 74 65 5f 72 65 67 69 73 74 65 72 5f 74  qlite_register_t
18920 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 28  est_function", (
18930 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
18940 74 5f 72 65 67 69 73 74 65 72 5f 66 75 6e 63 20  t_register_func 
18950 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
18960 6c 69 74 65 5f 61 62 6f 72 74 22 2c 20 20 20 20  lite_abort",    
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
18980 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
18990 74 65 5f 61 62 6f 72 74 20 20 20 20 20 20 20 20  te_abort        
189a0 20 20 7d 2c 0a 23 69 66 64 65 66 20 53 51 4c 49    },.#ifdef SQLI
189b0 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 20 20  TE_MEMDEBUG.    
189c0 20 7b 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f   { "sqlite_mallo
189d0 63 5f 66 61 69 6c 22 2c 20 20 20 20 20 20 20 20  c_fail",        
189e0 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
189f0 2a 29 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  *)sqlite_malloc_
18a00 66 61 69 6c 20 20 20 20 7d 2c 0a 20 20 20 20 20  fail    },.     
18a10 7b 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  { "sqlite_malloc
18a20 5f 73 74 61 74 22 2c 20 20 20 20 20 20 20 20 20  _stat",         
18a30 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
18a40 29 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 73  )sqlite_malloc_s
18a50 74 61 74 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66  tat    },.#endif
18a60 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f  .     { "sqlite_
18a70 62 69 6e 64 22 2c 20 20 20 20 20 20 20 20 20 20  bind",          
18a80 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
18a90 64 50 72 6f 63 2a 29 74 65 73 74 5f 62 69 6e 64  dProc*)test_bind
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
18ab0 20 20 20 20 20 7b 20 22 62 72 65 61 6b 70 6f 69       { "breakpoi
18ac0 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  nt",            
18ad0 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
18ae0 50 72 6f 63 2a 29 74 65 73 74 5f 62 72 65 61 6b  Proc*)test_break
18af0 70 6f 69 6e 74 20 20 20 20 20 20 20 7d 2c 0a 20  point       },. 
18b00 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6b      { "sqlite3_k
18b10 65 79 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ey",            
18b20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
18b30 72 6f 63 2a 29 74 65 73 74 5f 6b 65 79 20 20 20  roc*)test_key   
18b40 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
18b50 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 72 65     { "sqlite3_re
18b60 6b 65 79 22 2c 20 20 20 20 20 20 20 20 20 20 20  key",           
18b70 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
18b80 6f 63 2a 29 74 65 73 74 5f 72 65 6b 65 79 20 20  oc*)test_rekey  
18b90 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
18ba0 20 20 7b 20 22 73 71 6c 69 74 65 5f 73 65 74 5f    { "sqlite_set_
18bb0 6d 61 67 69 63 22 2c 20 20 20 20 20 20 20 20 20  magic",         
18bc0 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
18bd0 63 2a 29 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61  c*)sqlite_set_ma
18be0 67 69 63 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  gic      },.    
18bf0 20 7b 20 22 73 71 6c 69 74 65 33 5f 69 6e 74 65   { "sqlite3_inte
18c00 72 72 75 70 74 22 2c 20 20 20 20 20 20 20 20 20  rrupt",         
18c10 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
18c20 2a 29 74 65 73 74 5f 69 6e 74 65 72 72 75 70 74  *)test_interrupt
18c30 20 20 20 20 20 20 20 20 7d 2c 0a 23 69 66 20 30          },.#if 0
18c40 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
18c50 5f 73 6c 65 65 70 22 2c 20 20 20 20 20 20 20 20  _sleep",        
18c60 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
18c70 64 50 72 6f 63 2a 29 74 65 73 74 5f 73 6c 65 65  dProc*)test_slee
18c80 70 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  p            },.
18c90 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73  #endif.     { "s
18ca0 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e  qlite_delete_fun
18cb0 63 74 69 6f 6e 22 2c 20 20 20 20 20 20 20 20 28  ction",        (
18cc0 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c  Tcl_CmdProc*)del
18cd0 65 74 65 5f 66 75 6e 63 74 69 6f 6e 20 20 20 20  ete_function    
18ce0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
18cf0 6c 69 74 65 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c  lite_delete_coll
18d00 61 74 69 6f 6e 22 2c 20 20 20 20 20 20 20 28 54  ation",       (T
18d10 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65  cl_CmdProc*)dele
18d20 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 20 20 20 20  te_collation    
18d30 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
18d40 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
18d50 6d 69 74 22 2c 20 20 20 20 20 20 20 20 28 54 63  mit",        (Tc
18d60 6c 5f 43 6d 64 50 72 6f 63 2a 29 67 65 74 5f 61  l_CmdProc*)get_a
18d70 75 74 6f 63 6f 6d 6d 69 74 20 20 20 20 20 20 20  utocommit       
18d80 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
18d90 74 65 33 5f 73 74 61 63 6b 5f 75 73 65 64 22 2c  te3_stack_used",
18da0 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
18db0 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 73  _CmdProc*)test_s
18dc0 74 61 63 6b 5f 75 73 65 64 20 20 20 20 20 20 20  tack_used       
18dd0 7d 2c 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69 63  },.  };.  static
18de0 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 63   struct {.     c
18df0 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20  har *zName;.    
18e00 20 54 63 6c 5f 4f 62 6a 43 6d 64 50 72 6f 63 20   Tcl_ObjCmdProc 
18e10 2a 78 50 72 6f 63 3b 0a 20 20 20 20 20 76 6f 69  *xProc;.     voi
18e20 64 20 2a 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20  d *clientData;. 
18e30 20 7d 20 61 4f 62 6a 43 6d 64 5b 5d 20 3d 20 7b   } aObjCmd[] = {
18e40 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
18e50 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
18e60 74 65 72 22 2c 20 20 20 20 67 65 74 5f 73 71 6c  ter",    get_sql
18e70 69 74 65 5f 70 6f 69 6e 74 65 72 2c 20 30 20 7d  ite_pointer, 0 }
18e80 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
18e90 33 5f 62 69 6e 64 5f 69 6e 74 22 2c 20 20 20 20  3_bind_int",    
18ea0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62            test_b
18eb0 69 6e 64 5f 69 6e 74 2c 20 20 20 20 20 20 30 20  ind_int,      0 
18ec0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
18ed0 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 22 2c 20  e3_bind_int64", 
18ee0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
18ef0 62 69 6e 64 5f 69 6e 74 36 34 2c 20 20 20 20 30  bind_int64,    0
18f00 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
18f10 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 22  te3_bind_double"
18f20 2c 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74  ,           test
18f30 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 2c 20 20 20  _bind_double,   
18f40 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
18f50 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 22 2c  ite3_bind_null",
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
18f70 74 5f 62 69 6e 64 5f 6e 75 6c 6c 20 20 20 20 20  t_bind_null     
18f80 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
18f90 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 22  lite3_bind_text"
18fa0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65  ,             te
18fb0 73 74 5f 62 69 6e 64 5f 74 65 78 74 20 20 20 20  st_bind_text    
18fc0 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
18fd0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
18fe0 31 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 74  16",           t
18ff0 65 73 74 5f 62 69 6e 64 5f 74 65 78 74 31 36 20  est_bind_text16 
19000 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
19010 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
19020 62 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  b",             
19030 74 65 73 74 5f 62 69 6e 64 5f 62 6c 6f 62 20 20  test_bind_blob  
19040 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
19050 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  "sqlite3_bind_pa
19060 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 22 2c 20  rameter_count", 
19070 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d   test_bind_param
19080 65 74 65 72 5f 63 6f 75 6e 74 2c 20 30 7d 2c 0a  eter_count, 0},.
19090 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
190a0 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
190b0 61 6d 65 22 2c 20 20 20 74 65 73 74 5f 62 69 6e  ame",   test_bin
190c0 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
190d0 2c 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73  ,  0},.     { "s
190e0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
190f0 6d 65 74 65 72 5f 69 6e 64 65 78 22 2c 20 20 74  meter_index",  t
19100 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  est_bind_paramet
19110 65 72 5f 69 6e 64 65 78 2c 20 30 7d 2c 0a 23 69  er_index, 0},.#i
19120 66 20 30 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  f 0.     { "sqli
19130 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e  te3_clear_bindin
19140 67 73 22 2c 20 20 20 20 20 20 20 20 74 65 73 74  gs",        test
19150 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 2c  _clear_bindings,
19160 20 30 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20   0},.#endif.    
19170 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72 63   { "sqlite3_errc
19180 6f 64 65 22 2c 20 20 20 20 20 20 20 20 20 20 20  ode",           
19190 20 20 20 20 74 65 73 74 5f 65 72 72 63 6f 64 65      test_errcode
191a0 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
191b0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72    { "sqlite3_err
191c0 6d 73 67 22 2c 20 20 20 20 20 20 20 20 20 20 20  msg",           
191d0 20 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67       test_errmsg
191e0 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20          ,0 },.  
191f0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72     { "sqlite3_er
19200 72 6d 73 67 31 36 22 2c 20 20 20 20 20 20 20 20  rmsg16",        
19210 20 20 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73        test_errms
19220 67 31 36 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20  g16      ,0 },. 
19230 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f      { "sqlite3_o
19240 70 65 6e 22 2c 20 20 20 20 20 20 20 20 20 20 20  pen",           
19250 20 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65 6e         test_open
19260 20 20 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a            ,0 },.
19270 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
19280 6f 70 65 6e 31 36 22 2c 20 20 20 20 20 20 20 20  open16",        
19290 20 20 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65          test_ope
192a0 6e 31 36 20 20 20 20 20 20 20 20 2c 30 20 7d 2c  n16        ,0 },
192b0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
192c0 5f 63 6f 6d 70 6c 65 74 65 31 36 22 2c 20 20 20  _complete16",   
192d0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f           test_co
192e0 6d 70 6c 65 74 65 31 36 20 20 20 20 2c 30 20 7d  mplete16    ,0 }
192f0 2c 0a 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  ,..     { "sqlit
19300 65 33 5f 70 72 65 70 61 72 65 22 2c 20 20 20 20  e3_prepare",    
19310 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
19320 70 72 65 70 61 72 65 20 20 20 20 20 20 20 2c 30  prepare       ,0
19330 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
19340 74 65 33 5f 70 72 65 70 61 72 65 31 36 22 2c 20  te3_prepare16", 
19350 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
19360 5f 70 72 65 70 61 72 65 31 36 20 20 20 20 20 2c  _prepare16     ,
19370 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
19380 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 22 2c 20  ite3_finalize", 
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
193a0 74 5f 66 69 6e 61 6c 69 7a 65 20 20 20 20 20 20  t_finalize      
193b0 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
193c0 6c 69 74 65 33 5f 72 65 73 65 74 22 2c 20 20 20  lite3_reset",   
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
193e0 73 74 5f 72 65 73 65 74 20 20 20 20 20 20 20 20  st_reset        
193f0 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
19400 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64 22 2c  qlite3_expired",
19410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19420 65 73 74 5f 65 78 70 69 72 65 64 20 20 20 20 20  est_expired     
19430 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
19440 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72  sqlite3_transfer
19450 5f 62 69 6e 64 69 6e 67 73 22 2c 20 20 20 20 20  _bindings",     
19460 74 65 73 74 5f 74 72 61 6e 73 66 65 72 5f 62 69  test_transfer_bi
19470 6e 64 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20  nd ,0 },.     { 
19480 22 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  "sqlite3_changes
19490 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
194a0 20 74 65 73 74 5f 63 68 61 6e 67 65 73 20 20 20   test_changes   
194b0 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
194c0 20 22 73 71 6c 69 74 65 33 5f 73 74 65 70 22 2c   "sqlite3_step",
194d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194e0 20 20 74 65 73 74 5f 73 74 65 70 20 20 20 20 20    test_step     
194f0 20 20 20 20 20 2c 30 20 7d 2c 0a 0a 20 20 20 20       ,0 },..    
19500 20 7b 20 22 73 71 6c 69 74 65 33 5f 72 65 6c 65   { "sqlite3_rele
19510 61 73 65 5f 6d 65 6d 6f 72 79 22 2c 20 20 20 20  ase_memory",    
19520 20 20 20 20 74 65 73 74 5f 72 65 6c 65 61 73 65      test_release
19530 5f 6d 65 6d 6f 72 79 2c 20 20 20 20 20 30 7d 2c  _memory,     0},
19540 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
19550 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
19560 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f 73 6f  ",       test_so
19570 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 2c 20 20  ft_heap_limit,  
19580 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71    0},.     { "sq
19590 6c 69 74 65 33 5f 63 6c 65 61 72 5f 74 73 64 5f  lite3_clear_tsd_
195a0 6d 65 6d 64 65 62 75 67 22 2c 20 20 20 20 74 65  memdebug",    te
195b0 73 74 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65 6d  st_clear_tsd_mem
195c0 64 65 62 75 67 2c 20 30 7d 2c 0a 20 20 20 20 20  debug, 0},.     
195d0 7b 20 22 73 71 6c 69 74 65 33 5f 74 73 64 5f 72  { "sqlite3_tsd_r
195e0 65 6c 65 61 73 65 22 2c 20 20 20 20 20 20 20 20  elease",        
195f0 20 20 20 74 65 73 74 5f 74 73 64 5f 72 65 6c 65     test_tsd_rele
19600 61 73 65 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  ase,        0},.
19610 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
19620 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 22 2c  thread_cleanup",
19630 20 20 20 20 20 20 20 20 74 65 73 74 5f 74 68 72          test_thr
19640 65 61 64 5f 63 6c 65 61 6e 75 70 2c 20 20 20 20  ead_cleanup,    
19650 20 30 7d 2c 0a 0a 20 20 20 20 20 2f 2a 20 73 71   0},..     /* sq
19660 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 2a 28 29  lite3_column_*()
19670 20 41 50 49 20 2a 2f 0a 20 20 20 20 20 7b 20 22   API */.     { "
19680 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63  sqlite3_column_c
19690 6f 75 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20  ount",          
196a0 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  test_column_coun
196b0 74 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20  t  ,0 },.     { 
196c0 22 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f  "sqlite3_data_co
196d0 75 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 20  unt",           
196e0 20 74 65 73 74 5f 64 61 74 61 5f 63 6f 75 6e 74   test_data_count
196f0 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
19700 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
19710 5f 74 79 70 65 22 2c 20 20 20 20 20 20 20 20 20  _type",         
19720 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 74 79    test_column_ty
19730 70 65 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20  pe   ,0 },.     
19740 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
19750 6e 5f 62 6c 6f 62 22 2c 20 20 20 20 20 20 20 20  n_blob",        
19760 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 62     test_column_b
19770 6c 6f 62 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20  lob   ,0 },.    
19780 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
19790 6d 6e 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20 20  mn_double",     
197a0 20 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f      test_column_
197b0 64 6f 75 62 6c 65 20 2c 30 20 7d 2c 0a 20 20 20  double ,0 },.   
197c0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
197d0 75 6d 6e 5f 69 6e 74 36 34 22 2c 20 20 20 20 20  umn_int64",     
197e0 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e       test_column
197f0 5f 69 6e 74 36 34 20 20 2c 30 20 7d 2c 0a 20 20  _int64  ,0 },.  
19800 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
19810 6c 75 6d 6e 5f 74 65 78 74 22 2c 20 20 20 20 20  lumn_text",     
19820 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38    test_stmt_utf8
19830 2c 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ,  sqlite3_colum
19840 6e 5f 74 65 78 74 20 20 20 20 20 20 7d 2c 0a 20  n_text      },. 
19850 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
19860 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 22 2c  olumn_decltype",
19870 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66     test_stmt_utf
19880 38 2c 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  8,  sqlite3_colu
19890 6d 6e 5f 64 65 63 6c 74 79 70 65 20 20 7d 2c 0a  mn_decltype  },.
198a0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
198b0 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 22 2c 20 20 20  column_name",   
198c0 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74      test_stmt_ut
198d0 66 38 2c 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c  f8,  sqlite3_col
198e0 75 6d 6e 5f 6e 61 6d 65 20 20 20 20 20 20 7d 2c  umn_name      },
198f0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
19900 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 22 2c 20 20 20  _column_int",   
19910 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 69       test_stmt_i
19920 6e 74 2c 20 20 20 73 71 6c 69 74 65 33 5f 63 6f  nt,   sqlite3_co
19930 6c 75 6d 6e 5f 69 6e 74 20 20 20 20 20 20 20 7d  lumn_int       }
19940 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
19950 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 22 2c  3_column_bytes",
19960 20 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f        test_stmt_
19970 69 6e 74 2c 20 20 20 73 71 6c 69 74 65 33 5f 63  int,   sqlite3_c
19980 6f 6c 75 6d 6e 5f 62 79 74 65 73 20 20 20 20 20  olumn_bytes     
19990 7d 2c 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  },.#ifdef SQLITE
199a0 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d  _ENABLE_COLUMN_M
199b0 45 54 41 44 41 54 41 0a 7b 20 22 73 71 6c 69 74  ETADATA.{ "sqlit
199c0 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61  e3_column_databa
199d0 73 65 5f 6e 61 6d 65 22 2c 20 74 65 73 74 5f 73  se_name", test_s
199e0 74 6d 74 5f 75 74 66 38 2c 20 73 71 6c 69 74 65  tmt_utf8, sqlite
199f0 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
19a00 65 5f 6e 61 6d 65 7d 2c 0a 7b 20 22 73 71 6c 69  e_name},.{ "sqli
19a10 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65  te3_column_table
19a20 5f 6e 61 6d 65 22 2c 20 74 65 73 74 5f 73 74 6d  _name", test_stm
19a30 74 5f 75 74 66 38 2c 20 73 71 6c 69 74 65 33 5f  t_utf8, sqlite3_
19a40 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
19a50 65 7d 2c 0a 7b 20 22 73 71 6c 69 74 65 33 5f 63  e},.{ "sqlite3_c
19a60 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d  olumn_origin_nam
19a70 65 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74  e", test_stmt_ut
19a80 66 38 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  f8, sqlite3_colu
19a90 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 7d 2c  mn_origin_name},
19aa0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
19ab0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
19ac0 31 36 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  16.     { "sqlit
19ad0 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31  e3_column_bytes1
19ae0 36 22 2c 20 20 20 20 74 65 73 74 5f 73 74 6d 74  6",    test_stmt
19af0 5f 69 6e 74 2c 20 20 20 73 71 6c 69 74 65 33 5f  _int,   sqlite3_
19b00 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20 20  column_bytes16  
19b10 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
19b20 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
19b30 36 22 2c 20 20 20 20 20 74 65 73 74 5f 73 74 6d  6",     test_stm
19b40 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65 33  t_utf16, sqlite3
19b50 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 20 20  _column_text16  
19b60 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
19b70 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
19b80 74 79 70 65 31 36 22 2c 20 74 65 73 74 5f 73 74  type16", test_st
19b90 6d 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65  mt_utf16, sqlite
19ba0 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
19bb0 65 31 36 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  e16},.     { "sq
19bc0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
19bd0 65 31 36 22 2c 20 20 20 20 20 74 65 73 74 5f 73  e16",     test_s
19be0 74 6d 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74  tmt_utf16, sqlit
19bf0 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36  e3_column_name16
19c00 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61      },.     { "a
19c10 64 64 5f 61 6c 69 67 6e 6d 65 6e 74 5f 74 65 73  dd_alignment_tes
19c20 74 5f 63 6f 6c 6c 61 74 69 6f 6e 73 22 2c 20 61  t_collations", a
19c30 64 64 5f 61 6c 69 67 6e 6d 65 6e 74 5f 74 65 73  dd_alignment_tes
19c40 74 5f 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 30 20  t_collations, 0 
19c50 20 20 20 20 20 7d 2c 0a 23 69 66 64 65 66 20 53       },.#ifdef S
19c60 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
19c70 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 7b 22 73  UMN_METADATA.{"s
19c80 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
19c90 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 22 2c 0a  tabase_name16",.
19ca0 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31    test_stmt_utf1
19cb0 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  6, sqlite3_colum
19cc0 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31  n_database_name1
19cd0 36 7d 2c 0a 7b 22 73 71 6c 69 74 65 33 5f 63 6f  6},.{"sqlite3_co
19ce0 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31  lumn_table_name1
19cf0 36 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74  6", test_stmt_ut
19d00 66 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c  f16, sqlite3_col
19d10 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36  umn_table_name16
19d20 7d 2c 0a 7b 22 73 71 6c 69 74 65 33 5f 63 6f 6c  },.{"sqlite3_col
19d30 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31  umn_origin_name1
19d40 36 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74  6", test_stmt_ut
19d50 66 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c  f16, sqlite3_col
19d60 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31  umn_origin_name1
19d70 36 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  6},.#endif.#endi
19d80 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  f.     { "sqlite
19d90 33 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72  3_global_recover
19da0 22 2c 20 20 20 20 74 65 73 74 5f 67 6c 6f 62 61  ",    test_globa
19db0 6c 5f 72 65 63 6f 76 65 72 2c 20 30 20 20 20 7d  l_recover, 0   }
19dc0 2c 0a 0a 20 20 20 20 20 2f 2a 20 46 75 6e 63 74  ,..     /* Funct
19dd0 69 6f 6e 73 20 66 72 6f 6d 20 6f 73 2e 68 20 2a  ions from os.h *
19de0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
19df0 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 20 20 20  _OMIT_DISKIO.   
19e00 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 4f 70    { "sqlite3OsOp
19e10 65 6e 52 65 61 64 57 72 69 74 65 22 2c 74 65 73  enReadWrite",tes
19e20 74 5f 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52  t_sqlite3OsOpenR
19e30 65 61 64 57 72 69 74 65 2c 20 30 20 7d 2c 0a 20  eadWrite, 0 },. 
19e40 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73      { "sqlite3Os
19e50 43 6c 6f 73 65 22 2c 20 20 20 20 20 20 20 20 74  Close",        t
19e60 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 43 6c 6f  est_sqlite3OsClo
19e70 73 65 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20  se, 0 },.     { 
19e80 22 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 22 2c  "sqlite3OsLock",
19e90 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 73 71           test_sq
19ea0 6c 69 74 65 33 4f 73 4c 6f 63 6b 2c 20 30 20 7d  lite3OsLock, 0 }
19eb0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
19ec0 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 22  3OsTempFileName"
19ed0 2c 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73  , test_sqlite3Os
19ee0 54 65 6d 70 46 69 6c 65 4e 61 6d 65 2c 20 30 20  TempFileName, 0 
19ef0 7d 2c 0a 20 20 20 0a 20 20 20 20 20 2f 2a 20 43  },.   .     /* C
19f00 75 73 74 6f 6d 20 74 65 73 74 20 69 6e 74 65 72  ustom test inter
19f10 66 61 63 65 73 20 2a 2f 0a 20 20 20 20 20 7b 20  faces */.     { 
19f20 22 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b  "sqlite3OsUnlock
19f30 22 2c 20 20 20 20 20 20 20 20 20 74 65 73 74 5f  ",         test_
19f40 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 2c  sqlite3OsUnlock,
19f50 20 30 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a   0    },.#endif.
19f60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
19f70 4d 49 54 5f 55 54 46 31 36 0a 20 20 20 20 20 7b  MIT_UTF16.     {
19f80 20 22 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61   "add_test_colla
19f90 74 65 22 2c 20 20 20 20 20 20 20 20 74 65 73 74  te",        test
19fa0 5f 63 6f 6c 6c 61 74 65 2c 20 30 20 20 20 20 20  _collate, 0     
19fb0 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b         },.     {
19fc0 20 22 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61   "add_test_colla
19fd0 74 65 5f 6e 65 65 64 65 64 22 2c 20 74 65 73 74  te_needed", test
19fe0 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 2c  _collate_needed,
19ff0 20 30 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b   0     },.     {
1a000 20 22 61 64 64 5f 74 65 73 74 5f 66 75 6e 63 74   "add_test_funct
1a010 69 6f 6e 22 2c 20 20 20 20 20 20 20 74 65 73 74  ion",       test
1a020 5f 66 75 6e 63 74 69 6f 6e 2c 20 30 20 20 20 20  _function, 0    
1a030 20 20 20 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66         },.#endif
1a040 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d  .#ifdef SQLITE_M
1a050 45 4d 44 45 42 55 47 0a 20 20 20 20 20 7b 20 22  EMDEBUG.     { "
1a060 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75  sqlite_malloc_ou
1a070 74 73 74 61 6e 64 69 6e 67 22 2c 20 73 71 6c 69  tstanding", sqli
1a080 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61  te_malloc_outsta
1a090 6e 64 69 6e 67 2c 20 30 7d 2c 0a 23 65 6e 64 69  nding, 0},.#endi
1a0a0 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  f.     { "sqlite
1a0b0 33 5f 74 65 73 74 5f 65 72 72 73 74 72 22 2c 20  3_test_errstr", 
1a0c0 20 20 20 20 74 65 73 74 5f 65 72 72 73 74 72 2c      test_errstr,
1a0d0 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d   0             }
1a0e0 2c 0a 20 20 20 20 20 7b 20 22 74 63 6c 5f 76 61  ,.     { "tcl_va
1a0f0 72 69 61 62 6c 65 5f 74 79 70 65 22 2c 20 20 20  riable_type",   
1a100 20 20 20 20 74 63 6c 5f 76 61 72 69 61 62 6c 65      tcl_variable
1a110 5f 74 79 70 65 2c 20 30 20 20 20 20 20 20 20 7d  _type, 0       }
1a120 2c 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ,.#ifndef SQLITE
1a130 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
1a140 48 45 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  HE.     { "sqlit
1a150 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64  e3_enable_shared
1a160 5f 63 61 63 68 65 22 2c 20 74 65 73 74 5f 65 6e  _cache", test_en
1a170 61 62 6c 65 5f 73 68 61 72 65 64 2c 20 30 20 20  able_shared, 0  
1a180 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b  },.#endif.     {
1a190 20 22 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72   "sqlite3_libver
1a1a0 73 69 6f 6e 5f 6e 75 6d 62 65 72 22 2c 20 74 65  sion_number", te
1a1b0 73 74 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75  st_libversion_nu
1a1c0 6d 62 65 72 2c 20 30 20 20 7d 2c 0a 23 69 66 64  mber, 0  },.#ifd
1a1d0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1a1e0 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41  _COLUMN_METADATA
1a1f0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1a200 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
1a210 74 61 64 61 74 61 22 2c 20 74 65 73 74 5f 74 61  tadata", test_ta
1a220 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64  ble_column_metad
1a230 61 74 61 2c 20 30 20 20 7d 2c 0a 23 65 6e 64 69  ata, 0  },.#endi
1a240 66 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69 63 20  f.  };.  static 
1a250 69 6e 74 20 62 69 74 6d 61 73 6b 5f 73 69 7a 65  int bitmask_size
1a260 20 3d 20 73 69 7a 65 6f 66 28 42 69 74 6d 61 73   = sizeof(Bitmas
1a270 6b 29 2a 38 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  k)*8;.  int i;. 
1a280 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
1a290 74 65 33 5f 6f 73 5f 74 72 61 63 65 3b 0a 20 20  te3_os_trace;.  
1a2a0 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
1a2b0 65 33 5f 77 68 65 72 65 5f 74 72 61 63 65 3b 0a  e3_where_trace;.
1a2c0 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
1a2d0 69 74 65 33 5f 73 79 6e 63 5f 63 6f 75 6e 74 2c  ite3_sync_count,
1a2e0 20 73 71 6c 69 74 65 33 5f 66 75 6c 6c 73 79 6e   sqlite3_fullsyn
1a2f0 63 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72  c_count;.  exter
1a300 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70  n int sqlite3_op
1a310 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 3b 0a 20 20  entemp_count;.  
1a320 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
1a330 65 33 5f 6d 65 6d 55 73 65 64 3b 0a 20 20 65 78  e3_memUsed;.  ex
1a340 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
1a350 5f 6d 61 6c 6c 6f 63 5f 69 64 3b 0a 20 20 65 78  _malloc_id;.  ex
1a360 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
1a370 5f 6d 65 6d 4d 61 78 3b 0a 20 20 65 78 74 65 72  _memMax;.  exter
1a380 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6c 69  n int sqlite3_li
1a390 6b 65 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65  ke_count;.  exte
1a3a0 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 74  rn int sqlite3_t
1a3b0 73 64 5f 63 6f 75 6e 74 3b 0a 23 69 66 20 4f 53  sd_count;.#if OS
1a3c0 5f 55 4e 49 58 20 26 26 20 64 65 66 69 6e 65 64  _UNIX && defined
1a3d0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26  (SQLITE_TEST) &&
1a3e0 20 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53   defined(THREADS
1a3f0 41 46 45 29 20 26 26 20 54 48 52 45 41 44 53 41  AFE) && THREADSA
1a400 46 45 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  FE.  extern int 
1a410 74 68 72 65 61 64 73 4f 76 65 72 72 69 64 65 45  threadsOverrideE
1a420 61 63 68 4f 74 68 65 72 73 4c 6f 63 6b 73 3b 0a  achOthersLocks;.
1a430 23 65 6e 64 69 66 0a 23 69 66 20 4f 53 5f 57 49  #endif.#if OS_WI
1a440 4e 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  N.  extern int s
1a450 71 6c 69 74 65 33 5f 6f 73 5f 74 79 70 65 3b 0a  qlite3_os_type;.
1a460 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
1a470 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 65 78 74  LITE_DEBUG.  ext
1a480 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
1a490 76 64 62 65 5f 61 64 64 6f 70 5f 74 72 61 63 65  vdbe_addop_trace
1a4a0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
1a4b0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 65 78  SQLITE_TEST.  ex
1a4c0 74 65 72 6e 20 63 68 61 72 20 73 71 6c 69 74 65  tern char sqlite
1a4d0 33 5f 71 75 65 72 79 5f 70 6c 61 6e 5b 5d 3b 0a  3_query_plan[];.
1a4e0 20 20 73 74 61 74 69 63 20 63 68 61 72 20 2a 71    static char *q
1a4f0 75 65 72 79 5f 70 6c 61 6e 20 3d 20 73 71 6c 69  uery_plan = sqli
1a500 74 65 33 5f 71 75 65 72 79 5f 70 6c 61 6e 3b 0a  te3_query_plan;.
1a510 23 65 6e 64 69 66 0a 0a 20 20 66 6f 72 28 69 3d  #endif..  for(i=
1a520 30 3b 20 69 3c 73 69 7a 65 6f 66 28 61 43 6d 64  0; i<sizeof(aCmd
1a530 29 2f 73 69 7a 65 6f 66 28 61 43 6d 64 5b 30 5d  )/sizeof(aCmd[0]
1a540 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c  ); i++){.    Tcl
1a550 5f 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 69  _CreateCommand(i
1a560 6e 74 65 72 70 2c 20 61 43 6d 64 5b 69 5d 2e 7a  nterp, aCmd[i].z
1a570 4e 61 6d 65 2c 20 61 43 6d 64 5b 69 5d 2e 78 50  Name, aCmd[i].xP
1a580 72 6f 63 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a  roc, 0, 0);.  }.
1a590 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a    for(i=0; i<siz
1a5a0 65 6f 66 28 61 4f 62 6a 43 6d 64 29 2f 73 69 7a  eof(aObjCmd)/siz
1a5b0 65 6f 66 28 61 4f 62 6a 43 6d 64 5b 30 5d 29 3b  eof(aObjCmd[0]);
1a5c0 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f 43   i++){.    Tcl_C
1a5d0 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28  reateObjCommand(
1a5e0 69 6e 74 65 72 70 2c 20 61 4f 62 6a 43 6d 64 5b  interp, aObjCmd[
1a5f0 69 5d 2e 7a 4e 61 6d 65 2c 20 0a 20 20 20 20 20  i].zName, .     
1a600 20 20 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 78 50     aObjCmd[i].xP
1a610 72 6f 63 2c 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e  roc, aObjCmd[i].
1a620 63 6c 69 65 6e 74 44 61 74 61 2c 20 30 29 3b 0a  clientData, 0);.
1a630 20 20 7d 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61    }.  Tcl_LinkVa
1a640 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
1a650 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 22 2c  e_search_count",
1a660 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26   .      (char*)&
1a670 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
1a680 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  ount, TCL_LINK_I
1a690 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
1a6a0 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1a6b0 74 65 5f 73 6f 72 74 5f 63 6f 75 6e 74 22 2c 20  te_sort_count", 
1a6c0 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1a6d0 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
1a6e0 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
1a6f0 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
1a700 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1a710 6c 69 6b 65 5f 63 6f 75 6e 74 22 2c 20 0a 20 20  like_count", .  
1a720 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
1a730 74 65 33 5f 6c 69 6b 65 5f 63 6f 75 6e 74 2c 20  te3_like_count, 
1a740 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20  TCL_LINK_INT);. 
1a750 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1a760 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 69 6e 74  erp, "sqlite_int
1a770 65 72 72 75 70 74 5f 63 6f 75 6e 74 22 2c 20 0a  errupt_count", .
1a780 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
1a790 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
1a7a0 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
1a7b0 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
1a7c0 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
1a7d0 69 74 65 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f  ite_open_file_co
1a7e0 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68  unt", .      (ch
1a7f0 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 70 65  ar*)&sqlite3_ope
1a800 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 2c 20 54 43  n_file_count, TC
1a810 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54  L_LINK_INT);.  T
1a820 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
1a830 70 2c 20 22 73 71 6c 69 74 65 5f 63 75 72 72 65  p, "sqlite_curre
1a840 6e 74 5f 74 69 6d 65 22 2c 20 0a 20 20 20 20 20  nt_time", .     
1a850 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
1a860 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65 2c 20 54  _current_time, T
1a870 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
1a880 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1a890 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 73 5f 74  rp, "sqlite_os_t
1a8a0 72 61 63 65 22 2c 0a 20 20 20 20 20 20 28 63 68  race",.      (ch
1a8b0 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 73 5f  ar*)&sqlite3_os_
1a8c0 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  trace, TCL_LINK_
1a8d0 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
1a8e0 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
1a8f0 69 74 65 33 5f 74 73 64 5f 63 6f 75 6e 74 22 2c  ite3_tsd_count",
1a900 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1a910 71 6c 69 74 65 33 5f 74 73 64 5f 63 6f 75 6e 74  qlite3_tsd_count
1a920 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
1a930 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1a940 6e 74 65 72 70 2c 20 22 75 6e 61 6c 69 67 6e 65  nterp, "unaligne
1a950 64 5f 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72  d_string_counter
1a960 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
1a970 26 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e  &unaligned_strin
1a980 67 5f 63 6f 75 6e 74 65 72 2c 20 54 43 4c 5f 4c  g_counter, TCL_L
1a990 49 4e 4b 5f 49 4e 54 29 3b 0a 23 69 66 20 4f 53  INK_INT);.#if OS
1a9a0 5f 55 4e 49 58 20 26 26 20 64 65 66 69 6e 65 64  _UNIX && defined
1a9b0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26  (SQLITE_TEST) &&
1a9c0 20 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53   defined(THREADS
1a9d0 41 46 45 29 20 26 26 20 54 48 52 45 41 44 53 41  AFE) && THREADSA
1a9e0 46 45 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  FE.  Tcl_LinkVar
1a9f0 28 69 6e 74 65 72 70 2c 20 22 74 68 72 65 61 64  (interp, "thread
1aa00 73 4f 76 65 72 72 69 64 65 45 61 63 68 4f 74 68  sOverrideEachOth
1aa10 65 72 73 4c 6f 63 6b 73 22 2c 0a 20 20 20 20 20  ersLocks",.     
1aa20 20 28 63 68 61 72 2a 29 26 74 68 72 65 61 64 73   (char*)&threads
1aa30 4f 76 65 72 72 69 64 65 45 61 63 68 4f 74 68 65  OverrideEachOthe
1aa40 72 73 4c 6f 63 6b 73 2c 20 54 43 4c 5f 4c 49 4e  rsLocks, TCL_LIN
1aa50 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23  K_INT);.#endif.#
1aa60 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1aa70 49 54 5f 55 54 46 31 36 0a 20 20 54 63 6c 5f 4c  IT_UTF16.  Tcl_L
1aa80 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
1aa90 73 71 6c 69 74 65 5f 6c 61 73 74 5f 6e 65 65 64  sqlite_last_need
1aaa0 65 64 5f 63 6f 6c 6c 61 74 69 6f 6e 22 2c 0a 20  ed_collation",. 
1aab0 20 20 20 20 20 28 63 68 61 72 2a 29 26 70 7a 4e       (char*)&pzN
1aac0 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 2c 20  eededCollation, 
1aad0 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 7c  TCL_LINK_STRING|
1aae0 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e  TCL_LINK_READ_ON
1aaf0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  LY);.#endif.#ifd
1ab00 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
1ab10 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  UG.  Tcl_LinkVar
1ab20 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1ab30 5f 6d 61 6c 6c 6f 63 5f 69 64 22 2c 0a 20 20 20  _malloc_id",.   
1ab40 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
1ab50 65 33 5f 6d 61 6c 6c 6f 63 5f 69 64 2c 20 54 43  e3_malloc_id, TC
1ab60 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a  L_LINK_STRING);.
1ab70 23 65 6e 64 69 66 0a 23 69 66 20 4f 53 5f 57 49  #endif.#if OS_WI
1ab80 4e 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  N.  Tcl_LinkVar(
1ab90 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1aba0 6f 73 5f 74 79 70 65 22 2c 0a 20 20 20 20 20 20  os_type",.      
1abb0 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
1abc0 6f 73 5f 74 79 70 65 2c 20 54 43 4c 5f 4c 49 4e  os_type, TCL_LIN
1abd0 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23  K_INT);.#endif.#
1abe0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
1abf0 54 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  T.  Tcl_LinkVar(
1ac00 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1ac10 71 75 65 72 79 5f 70 6c 61 6e 22 2c 0a 20 20 20  query_plan",.   
1ac20 20 20 20 28 63 68 61 72 2a 29 26 71 75 65 72 79     (char*)&query
1ac30 5f 70 6c 61 6e 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  _plan, TCL_LINK_
1ac40 53 54 52 49 4e 47 7c 54 43 4c 5f 4c 49 4e 4b 5f  STRING|TCL_LINK_
1ac50 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  READ_ONLY);.#end
1ac60 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
1ac70 5f 44 45 42 55 47 0a 20 20 54 63 6c 5f 4c 69 6e  _DEBUG.  Tcl_Lin
1ac80 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1ac90 6c 69 74 65 5f 61 64 64 6f 70 5f 74 72 61 63 65  lite_addop_trace
1aca0 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
1acb0 26 73 71 6c 69 74 65 33 5f 76 64 62 65 5f 61 64  &sqlite3_vdbe_ad
1acc0 64 6f 70 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c  dop_trace, TCL_L
1acd0 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
1ace0 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
1acf0 22 73 71 6c 69 74 65 5f 77 68 65 72 65 5f 74 72  "sqlite_where_tr
1ad00 61 63 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61  ace",.      (cha
1ad10 72 2a 29 26 73 71 6c 69 74 65 33 5f 77 68 65 72  r*)&sqlite3_wher
1ad20 65 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e  e_trace, TCL_LIN
1ad30 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23  K_INT);.#endif.#
1ad40 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
1ad50 44 45 42 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b  DEBUG.  Tcl_Link
1ad60 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
1ad70 69 74 65 5f 6d 65 6d 75 73 65 64 22 2c 0a 20 20  ite_memused",.  
1ad80 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
1ad90 74 65 33 5f 6d 65 6d 55 73 65 64 2c 20 54 43 4c  te3_memUsed, TCL
1ada0 5f 4c 49 4e 4b 5f 49 4e 54 20 7c 20 54 43 4c 5f  _LINK_INT | TCL_
1adb0 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b  LINK_READ_ONLY);
1adc0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1add0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d  nterp, "sqlite_m
1ade0 65 6d 6d 61 78 22 2c 0a 20 20 20 20 20 20 28 63  emmax",.      (c
1adf0 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d 65  har*)&sqlite3_me
1ae00 6d 4d 61 78 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  mMax, TCL_LINK_I
1ae10 4e 54 20 7c 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45  NT | TCL_LINK_RE
1ae20 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AD_ONLY);.#endif
1ae30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1ae40 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 20 20 54 63  OMIT_DISKIO.  Tc
1ae50 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
1ae60 2c 20 22 73 71 6c 69 74 65 5f 6f 70 65 6e 74 65  , "sqlite_opente
1ae70 6d 70 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20  mp_count",.     
1ae80 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
1ae90 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 2c  _opentemp_count,
1aea0 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
1aeb0 23 65 6e 64 69 66 0a 20 20 54 63 6c 5f 4c 69 6e  #endif.  Tcl_Lin
1aec0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1aed0 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64  lite_static_bind
1aee0 5f 76 61 6c 75 65 22 2c 0a 20 20 20 20 20 20 28  _value",.      (
1aef0 63 68 61 72 2a 29 26 73 71 6c 69 74 65 5f 73 74  char*)&sqlite_st
1af00 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 2c  atic_bind_value,
1af10 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47   TCL_LINK_STRING
1af20 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
1af30 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1af40 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 22  _temp_directory"
1af50 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
1af60 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72  sqlite3_temp_dir
1af70 65 63 74 6f 72 79 2c 20 54 43 4c 5f 4c 49 4e 4b  ectory, TCL_LINK
1af80 5f 53 54 52 49 4e 47 29 3b 0a 20 20 54 63 6c 5f  _STRING);.  Tcl_
1af90 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
1afa0 22 62 69 74 6d 61 73 6b 5f 73 69 7a 65 22 2c 0a  "bitmask_size",.
1afb0 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 62 69        (char*)&bi
1afc0 74 6d 61 73 6b 5f 73 69 7a 65 2c 20 54 43 4c 5f  tmask_size, TCL_
1afd0 4c 49 4e 4b 5f 49 4e 54 7c 54 43 4c 5f 4c 49 4e  LINK_INT|TCL_LIN
1afe0 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23 69  K_READ_ONLY);.#i
1aff0 66 20 4f 53 5f 55 4e 49 58 0a 20 20 54 63 6c 5f  f OS_UNIX.  Tcl_
1b000 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
1b010 22 73 71 6c 69 74 65 5f 73 79 6e 63 5f 63 6f 75  "sqlite_sync_cou
1b020 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  nt",.      (char
1b030 2a 29 26 73 71 6c 69 74 65 33 5f 73 79 6e 63 5f  *)&sqlite3_sync_
1b040 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
1b050 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
1b060 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
1b070 69 74 65 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f 75  ite_fullsync_cou
1b080 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  nt",.      (char
1b090 2a 29 26 73 71 6c 69 74 65 33 5f 66 75 6c 6c 73  *)&sqlite3_fulls
1b0a0 79 6e 63 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c  ync_count, TCL_L
1b0b0 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66  INK_INT);.#endif
1b0c0 20 2f 2a 20 4f 53 5f 55 4e 49 58 20 2a 2f 0a 20   /* OS_UNIX */. 
1b0d0 20 73 65 74 5f 6f 70 74 69 6f 6e 73 28 69 6e 74   set_options(int
1b0e0 65 72 70 29 3b 0a 0a 20 20 7b 0a 23 69 66 64 65  erp);..  {.#ifde
1b0f0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1b100 20 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71     extern int sq
1b110 6c 69 74 65 33 5f 73 68 61 72 65 64 5f 63 61 63  lite3_shared_cac
1b120 68 65 5f 72 65 70 6f 72 74 28 76 6f 69 64 20 2a  he_report(void *
1b130 2c 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 2c 0a  , Tcl_Interp *,.
1b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b160 20 20 20 20 69 6e 74 2c 20 54 63 6c 5f 4f 62 6a      int, Tcl_Obj
1b170 20 2a 43 4f 4e 53 54 5b 5d 29 3b 0a 20 20 20 20   *CONST[]);.    
1b180 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
1b190 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 73 71  mand(interp, "sq
1b1a0 6c 69 74 65 5f 73 68 61 72 65 64 5f 63 61 63 68  lite_shared_cach
1b1b0 65 5f 72 65 70 6f 72 74 22 2c 20 0a 20 20 20 20  e_report", .    
1b1c0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 68 61 72      sqlite3_shar
1b1d0 65 64 5f 63 61 63 68 65 5f 72 65 70 6f 72 74 2c  ed_cache_report,
1b1e0 20 30 2c 20 30 29 3b 0a 23 65 6e 64 69 66 0a 20   0, 0);.#endif. 
1b1f0 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f   }.  return TCL_
1b200 4f 4b 3b 0a 7d 0a                                OK;.}.