/ Hex Artifact Content
Login

Artifact 47f1d62d90fbf131dc5bbcd1b1aa18791fa3bc79:


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 32 32 20 32 30 30 36 2f 30 39 2f 31   1.222 2006/09/1
0240: 35 20 30 37 3a 32 38 3a 35 31 20 64 72 68 20 45  5 07:28:51 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 26 20  .  switch( rc & 
0760: 30 78 66 66 20 29 7b 0a 20 20 20 20 63 61 73 65  0xff ){.    case
0770: 20 53 51 4c 49 54 45 5f 4f 4b 3a 20 20 20 20 20   SQLITE_OK:     
0780: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
0790: 49 54 45 5f 4f 4b 22 3b 20 20 20 20 20 20 20 20  ITE_OK";        
07a0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
07b0: 65 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3a 20  e SQLITE_ERROR: 
07c0: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
07d0: 4c 49 54 45 5f 45 52 52 4f 52 22 3b 20 20 20 20  LITE_ERROR";    
07e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
07f0: 73 65 20 53 51 4c 49 54 45 5f 50 45 52 4d 3a 20  se SQLITE_PERM: 
0800: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
0810: 51 4c 49 54 45 5f 50 45 52 4d 22 3b 20 20 20 20  QLITE_PERM";    
0820: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
0830: 61 73 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  ase SQLITE_ABORT
0840: 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22  :      zName = "
0850: 53 51 4c 49 54 45 5f 41 42 4f 52 54 22 3b 20 20  SQLITE_ABORT";  
0860: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
0870: 63 61 73 65 20 53 51 4c 49 54 45 5f 42 55 53 59  case SQLITE_BUSY
0880: 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  :       zName = 
0890: 22 53 51 4c 49 54 45 5f 42 55 53 59 22 3b 20 20  "SQLITE_BUSY";  
08a0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
08b0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43   case SQLITE_LOC
08c0: 4b 45 44 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d  KED:     zName =
08d0: 20 22 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 22   "SQLITE_LOCKED"
08e0: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
08f0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f    case SQLITE_NO
0900: 4d 45 4d 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20  MEM:      zName 
0910: 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 22  = "SQLITE_NOMEM"
0920: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
0930: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52     case SQLITE_R
0940: 45 41 44 4f 4e 4c 59 3a 20 20 20 7a 4e 61 6d 65  EADONLY:   zName
0950: 20 3d 20 22 53 51 4c 49 54 45 5f 52 45 41 44 4f   = "SQLITE_READO
0960: 4e 4c 59 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a  NLY";    break;.
0970: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
0980: 49 4e 54 45 52 52 55 50 54 3a 20 20 7a 4e 61 6d  INTERRUPT:  zNam
0990: 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4e 54 45  e = "SQLITE_INTE
09a0: 52 52 55 50 54 22 3b 20 20 20 62 72 65 61 6b 3b  RRUPT";   break;
09b0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
09c0: 5f 49 4f 45 52 52 3a 20 20 20 20 20 20 7a 4e 61  _IOERR:      zNa
09d0: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45  me = "SQLITE_IOE
09e0: 52 52 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  RR";       break
09f0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0a00: 45 5f 43 4f 52 52 55 50 54 3a 20 20 20 20 7a 4e  E_CORRUPT:    zN
0a10: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f  ame = "SQLITE_CO
0a20: 52 52 55 50 54 22 3b 20 20 20 20 20 62 72 65 61  RRUPT";     brea
0a30: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
0a40: 54 45 5f 46 55 4c 4c 3a 20 20 20 20 20 20 20 7a  TE_FULL:       z
0a50: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 46  Name = "SQLITE_F
0a60: 55 4c 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65  ULL";        bre
0a70: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
0a80: 49 54 45 5f 43 41 4e 54 4f 50 45 4e 3a 20 20 20  ITE_CANTOPEN:   
0a90: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
0aa0: 43 41 4e 54 4f 50 45 4e 22 3b 20 20 20 20 62 72  CANTOPEN";    br
0ab0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0ac0: 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20  LITE_PROTOCOL:  
0ad0: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0ae0: 5f 50 52 4f 54 4f 43 4f 4c 22 3b 20 20 20 20 62  _PROTOCOL";    b
0af0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
0b00: 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20 20 20 20  QLITE_EMPTY:    
0b10: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
0b20: 45 5f 45 4d 50 54 59 22 3b 20 20 20 20 20 20 20  E_EMPTY";       
0b30: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0b40: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3a 20 20  SQLITE_SCHEMA:  
0b50: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0b60: 54 45 5f 53 43 48 45 4d 41 22 3b 20 20 20 20 20  TE_SCHEMA";     
0b70: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
0b80: 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
0b90: 4e 54 3a 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c  NT: zName = "SQL
0ba0: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 22 3b  ITE_CONSTRAINT";
0bb0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0bc0: 65 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  e SQLITE_MISMATC
0bd0: 48 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51  H:   zName = "SQ
0be0: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 22 3b 20  LITE_MISMATCH"; 
0bf0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
0c00: 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  se SQLITE_MISUSE
0c10: 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53  :     zName = "S
0c20: 51 4c 49 54 45 5f 4d 49 53 55 53 45 22 3b 20 20  QLITE_MISUSE";  
0c30: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
0c40: 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4c 46 53  ase SQLITE_NOLFS
0c50: 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22  :      zName = "
0c60: 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 22 3b 20 20  SQLITE_NOLFS";  
0c70: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
0c80: 63 61 73 65 20 53 51 4c 49 54 45 5f 41 55 54 48  case SQLITE_AUTH
0c90: 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  :       zName = 
0ca0: 22 53 51 4c 49 54 45 5f 41 55 54 48 22 3b 20 20  "SQLITE_AUTH";  
0cb0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
0cc0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4f 52   case SQLITE_FOR
0cd0: 4d 41 54 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d  MAT:     zName =
0ce0: 20 22 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 22   "SQLITE_FORMAT"
0cf0: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
0d00: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 41    case SQLITE_RA
0d10: 4e 47 45 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20  NGE:      zName 
0d20: 3d 20 22 53 51 4c 49 54 45 5f 52 41 4e 47 45 22  = "SQLITE_RANGE"
0d30: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
0d40: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52     case SQLITE_R
0d50: 4f 57 3a 20 20 20 20 20 20 20 20 7a 4e 61 6d 65  OW:        zName
0d60: 20 3d 20 22 53 51 4c 49 54 45 5f 52 4f 57 22 3b   = "SQLITE_ROW";
0d70: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
0d80: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
0d90: 44 4f 4e 45 3a 20 20 20 20 20 20 20 7a 4e 61 6d  DONE:       zNam
0da0: 65 20 3d 20 22 53 51 4c 49 54 45 5f 44 4f 4e 45  e = "SQLITE_DONE
0db0: 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ";        break;
0dc0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0dd0: 5f 4e 4f 54 41 44 42 3a 20 20 20 20 20 7a 4e 61  _NOTADB:     zNa
0de0: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 54  me = "SQLITE_NOT
0df0: 41 44 42 22 3b 20 20 20 20 20 20 62 72 65 61 6b  ADB";      break
0e00: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
0e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0e20: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 55 6e  ame = "SQLITE_Un
0e30: 6b 6e 6f 77 6e 22 3b 20 20 20 20 20 62 72 65 61  known";     brea
0e40: 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  k;.  }.  return 
0e50: 7a 4e 61 6d 65 3b 0a 7d 0a 23 64 65 66 69 6e 65  zName;.}.#define
0e60: 20 65 72 72 6f 72 4e 61 6d 65 20 73 71 6c 69 74   errorName sqlit
0e70: 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65 0a  e3TestErrorName.
0e80: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61  ./*.** Convert a
0e90: 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 20  n sqlite3_stmt* 
0ea0: 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2a  into an sqlite3*
0eb0: 2e 20 20 54 68 69 73 20 64 65 70 65 6e 64 73 20  .  This depends 
0ec0: 6f 6e 20 74 68 65 0a 2a 2a 20 66 61 63 74 20 74  on the.** fact t
0ed0: 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33 2a  hat the sqlite3*
0ee0: 20 69 73 20 74 68 65 20 66 69 72 73 74 20 66 69   is the first fi
0ef0: 65 6c 64 20 69 6e 20 74 68 65 20 56 64 62 65 20  eld in the Vdbe 
0f00: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 23 64  structure..*/.#d
0f10: 65 66 69 6e 65 20 53 74 6d 74 54 6f 44 62 28 58  efine StmtToDb(X
0f20: 29 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 68  )   sqlite3_db_h
0f30: 61 6e 64 6c 65 28 58 29 0a 0a 2f 2a 0a 2a 2a 20  andle(X)../*.** 
0f40: 43 68 65 63 6b 20 61 20 72 65 74 75 72 6e 20 76  Check a return v
0f50: 61 6c 75 65 20 74 6f 20 6d 61 6b 65 20 73 75 72  alue to make sur
0f60: 65 20 69 74 20 61 67 72 65 65 73 20 77 69 74 68  e it agrees with
0f70: 20 74 68 65 20 72 65 73 75 6c 74 73 0a 2a 2a 20   the results.** 
0f80: 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 65 72 72  from sqlite3_err
0f90: 63 6f 64 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  code..*/.int sql
0fa0: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
0fb0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
0fc0: 72 70 2c 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  rp, sqlite3 *db,
0fd0: 20 69 6e 74 20 72 63 29 7b 0a 20 20 69 66 28 20   int rc){.  if( 
0fe0: 72 63 21 3d 53 51 4c 49 54 45 5f 4d 49 53 55 53  rc!=SQLITE_MISUS
0ff0: 45 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f  E && rc!=SQLITE_
1000: 4f 4b 20 26 26 20 73 71 6c 69 74 65 33 5f 65 72  OK && sqlite3_er
1010: 72 63 6f 64 65 28 64 62 29 21 3d 72 63 20 29 7b  rcode(db)!=rc ){
1020: 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32  .    char zBuf[2
1030: 30 30 5d 3b 0a 20 20 20 20 69 6e 74 20 72 32 20  00];.    int r2 
1040: 3d 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  = sqlite3_errcod
1050: 65 28 64 62 29 3b 0a 20 20 20 20 73 70 72 69 6e  e(db);.    sprin
1060: 74 66 28 7a 42 75 66 2c 20 22 65 72 72 6f 72 20  tf(zBuf, "error 
1070: 63 6f 64 65 20 25 73 20 28 25 64 29 20 64 6f 65  code %s (%d) doe
1080: 73 20 6e 6f 74 20 6d 61 74 63 68 20 73 71 6c 69  s not match sqli
1090: 74 65 33 5f 65 72 72 63 6f 64 65 20 25 73 20 28  te3_errcode %s (
10a0: 25 64 29 22 2c 0a 20 20 20 20 20 20 20 65 72 72  %d)",.       err
10b0: 6f 72 4e 61 6d 65 28 72 63 29 2c 20 72 63 2c 20  orName(rc), rc, 
10c0: 65 72 72 6f 72 4e 61 6d 65 28 72 32 29 2c 20 72  errorName(r2), r
10d0: 32 29 3b 0a 20 20 20 20 54 63 6c 5f 52 65 73 65  2);.    Tcl_Rese
10e0: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b  tResult(interp);
10f0: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
1100: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42  esult(interp, zB
1110: 75 66 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  uf, 0);.    retu
1120: 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75  rn 1;.  }.  retu
1130: 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44  rn 0;.}../*.** D
1140: 65 63 6f 64 65 20 61 20 70 6f 69 6e 74 65 72 20  ecode a pointer 
1150: 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 20 6f 62  to an sqlite3 ob
1160: 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ject..*/.static 
1170: 69 6e 74 20 67 65 74 44 62 50 6f 69 6e 74 65 72  int getDbPointer
1180: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Tcl_Interp *int
1190: 65 72 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  erp, const char 
11a0: 2a 7a 41 2c 20 73 71 6c 69 74 65 33 20 2a 2a 70  *zA, sqlite3 **p
11b0: 70 44 62 29 7b 0a 20 20 2a 70 70 44 62 20 3d 20  pDb){.  *ppDb = 
11c0: 28 73 71 6c 69 74 65 33 2a 29 73 71 6c 69 74 65  (sqlite3*)sqlite
11d0: 33 54 65 78 74 54 6f 50 74 72 28 7a 41 29 3b 0a  3TextToPtr(zA);.
11e0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
11f0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6f 64 65  .}../*.** Decode
1200: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
1210: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 6f 62   sqlite3_stmt ob
1220: 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ject..*/.static 
1230: 69 6e 74 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  int getStmtPoint
1240: 65 72 28 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  er(.  Tcl_Interp
1250: 20 2a 69 6e 74 65 72 70 2c 20 0a 20 20 63 6f 6e   *interp, .  con
1260: 73 74 20 63 68 61 72 20 2a 7a 41 72 67 2c 20 20  st char *zArg,  
1270: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
1280: 2a 2a 70 70 53 74 6d 74 0a 29 7b 0a 20 20 2a 70  **ppStmt.){.  *p
1290: 70 53 74 6d 74 20 3d 20 28 73 71 6c 69 74 65 33  pStmt = (sqlite3
12a0: 5f 73 74 6d 74 2a 29 73 71 6c 69 74 65 33 54 65  _stmt*)sqlite3Te
12b0: 78 74 54 6f 50 74 72 28 7a 41 72 67 29 3b 0a 20  xtToPtr(zArg);. 
12c0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
12d0: 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6f 64 65 20  }../*.** Decode 
12e0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  a pointer to an 
12f0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 6f 62 6a  sqlite3_stmt obj
1300: 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ect..*/.static i
1310: 6e 74 20 67 65 74 46 69 6c 65 50 6f 69 6e 74 65  nt getFilePointe
1320: 72 28 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  r(.  Tcl_Interp 
1330: 2a 69 6e 74 65 72 70 2c 20 0a 20 20 63 6f 6e 73  *interp, .  cons
1340: 74 20 63 68 61 72 20 2a 7a 41 72 67 2c 20 20 0a  t char *zArg,  .
1350: 20 20 4f 73 46 69 6c 65 20 2a 2a 70 70 46 69 6c    OsFile **ppFil
1360: 65 0a 29 7b 0a 20 20 2a 70 70 46 69 6c 65 20 3d  e.){.  *ppFile =
1370: 20 28 4f 73 46 69 6c 65 2a 29 73 71 6c 69 74 65   (OsFile*)sqlite
1380: 33 54 65 78 74 54 6f 50 74 72 28 7a 41 72 67 29  3TextToPtr(zArg)
1390: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
13a0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65  K;.}../*.** Gene
13b0: 72 61 74 65 20 61 20 74 65 78 74 20 72 65 70 72  rate a text repr
13c0: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20  esentation of a 
13d0: 70 6f 69 6e 74 65 72 20 74 68 61 74 20 63 61 6e  pointer that can
13e0: 20 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 0a 2a   be understood.*
13f0: 2a 20 62 79 20 74 68 65 20 67 65 74 44 62 50 6f  * by the getDbPo
1400: 69 6e 74 65 72 20 61 6e 64 20 67 65 74 56 6d 50  inter and getVmP
1410: 6f 69 6e 74 65 72 20 72 6f 75 74 69 6e 65 73 20  ointer routines 
1420: 61 62 6f 76 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  above..**.** The
1430: 20 70 72 6f 62 6c 65 6d 20 69 73 2c 20 6f 6e 20   problem is, on 
1440: 73 6f 6d 65 20 6d 61 63 68 69 6e 65 73 20 28 53  some machines (S
1450: 6f 6c 61 72 69 73 29 20 69 66 20 79 6f 75 20 64  olaris) if you d
1460: 6f 20 61 20 70 72 69 6e 74 66 20 77 69 74 68 0a  o a printf with.
1470: 2a 2a 20 22 25 70 22 20 79 6f 75 20 63 61 6e 6e  ** "%p" you cann
1480: 6f 74 20 74 75 72 6e 20 61 72 6f 75 6e 64 20 61  ot turn around a
1490: 6e 64 20 64 6f 20 61 20 73 63 61 6e 66 20 77 69  nd do a scanf wi
14a0: 74 68 20 74 68 65 20 73 61 6d 65 20 22 25 70 22  th the same "%p"
14b0: 20 61 6e 64 0a 2a 2a 20 67 65 74 20 79 6f 75 72   and.** get your
14c0: 20 70 6f 69 6e 74 65 72 20 62 61 63 6b 2e 20 20   pointer back.  
14d0: 59 6f 75 20 68 61 76 65 20 74 6f 20 70 72 65 70  You have to prep
14e0: 65 6e 64 20 61 20 22 30 78 22 20 62 65 66 6f 72  end a "0x" befor
14f0: 65 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 77 6f 72  e it will.** wor
1500: 6b 2e 20 20 4f 72 20 61 74 20 6c 65 61 73 74 20  k.  Or at least 
1510: 74 68 61 74 20 69 73 20 77 68 61 74 20 69 73 20  that is what is 
1520: 72 65 70 6f 72 74 65 64 20 74 6f 20 6d 65 20 28  reported to me (
1530: 64 72 68 29 2e 20 20 42 75 74 20 74 68 69 73 0a  drh).  But this.
1540: 2a 2a 20 62 65 68 61 76 69 6f 72 20 76 61 72 69  ** behavior vari
1550: 65 73 20 66 72 6f 6d 20 6d 61 63 68 69 6e 65 20  es from machine 
1560: 74 6f 20 6d 61 63 68 69 6e 65 2e 20 20 54 68 65  to machine.  The
1570: 20 73 6f 6c 75 74 69 6f 6e 20 75 73 65 64 20 68   solution used h
1580: 65 72 20 69 73 0a 2a 2a 20 74 6f 20 74 65 73 74  er is.** to test
1590: 20 74 68 65 20 73 74 72 69 6e 67 20 72 69 67 68   the string righ
15a0: 74 20 61 66 74 65 72 20 69 74 20 69 73 20 67 65  t after it is ge
15b0: 6e 65 72 61 74 65 64 20 74 6f 20 73 65 65 20 69  nerated to see i
15c0: 66 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20 75  f it can be.** u
15d0: 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 73 63 61  nderstood by sca
15e0: 6e 66 2c 20 61 6e 64 20 69 66 20 6e 6f 74 2c 20  nf, and if not, 
15f0: 74 72 79 20 70 72 65 70 65 6e 64 69 6e 67 20 61  try prepending a
1600: 6e 20 22 30 78 22 20 74 6f 20 73 65 65 20 69 66  n "0x" to see if
1610: 0a 2a 2a 20 74 68 61 74 20 68 65 6c 70 73 2e 20  .** that helps. 
1620: 20 49 66 20 6e 6f 74 68 69 6e 67 20 77 6f 72 6b   If nothing work
1630: 73 2c 20 61 20 66 61 74 61 6c 20 65 72 72 6f 72  s, a fatal error
1640: 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 0a 2a   is generated..*
1650: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 73  /.int sqlite3Tes
1660: 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28  tMakePointerStr(
1670: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
1680: 72 70 2c 20 63 68 61 72 20 2a 7a 50 74 72 2c 20  rp, char *zPtr, 
1690: 76 6f 69 64 20 2a 70 29 7b 0a 20 20 73 71 6c 69  void *p){.  sqli
16a0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
16b0: 2c 20 7a 50 74 72 2c 20 22 25 70 22 2c 20 70 29  , zPtr, "%p", p)
16c0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
16d0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  K;.}../*.** The 
16e0: 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e 65  callback routine
16f0: 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 65 78 65   for sqlite3_exe
1700: 63 5f 70 72 69 6e 74 66 28 29 2e 0a 2a 2f 0a 73  c_printf()..*/.s
1710: 74 61 74 69 63 20 69 6e 74 20 65 78 65 63 5f 70  tatic int exec_p
1720: 72 69 6e 74 66 5f 63 62 28 76 6f 69 64 20 2a 70  rintf_cb(void *p
1730: 41 72 67 2c 20 69 6e 74 20 61 72 67 63 2c 20 63  Arg, int argc, c
1740: 68 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61 72  har **argv, char
1750: 20 2a 2a 6e 61 6d 65 29 7b 0a 20 20 54 63 6c 5f   **name){.  Tcl_
1760: 44 53 74 72 69 6e 67 20 2a 73 74 72 20 3d 20 28  DString *str = (
1770: 54 63 6c 5f 44 53 74 72 69 6e 67 2a 29 70 41 72  Tcl_DString*)pAr
1780: 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 69  g;.  int i;..  i
1790: 66 28 20 54 63 6c 5f 44 53 74 72 69 6e 67 4c 65  f( Tcl_DStringLe
17a0: 6e 67 74 68 28 73 74 72 29 3d 3d 30 20 29 7b 0a  ngth(str)==0 ){.
17b0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61      for(i=0; i<a
17c0: 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  rgc; i++){.     
17d0: 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 70 65   Tcl_DStringAppe
17e0: 6e 64 45 6c 65 6d 65 6e 74 28 73 74 72 2c 20 6e  ndElement(str, n
17f0: 61 6d 65 5b 69 5d 20 3f 20 6e 61 6d 65 5b 69 5d  ame[i] ? name[i]
1800: 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20 20 20   : "NULL");.    
1810: 7d 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b  }.  }.  for(i=0;
1820: 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20   i<argc; i++){. 
1830: 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 70     Tcl_DStringAp
1840: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 73 74 72 2c  pendElement(str,
1850: 20 61 72 67 76 5b 69 5d 20 3f 20 61 72 67 76 5b   argv[i] ? argv[
1860: 69 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20  i] : "NULL");.  
1870: 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a  }.  return 0;.}.
1880: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
1890: 71 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e  qlite3_exec_prin
18a0: 74 66 20 20 44 42 20 20 46 4f 52 4d 41 54 20 20  tf  DB  FORMAT  
18b0: 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 49 6e 76  STRING.**.** Inv
18c0: 6f 6b 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f  oke the sqlite3_
18d0: 65 78 65 63 5f 70 72 69 6e 74 66 28 29 20 69 6e  exec_printf() in
18e0: 74 65 72 66 61 63 65 20 75 73 69 6e 67 20 74 68  terface using th
18f0: 65 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 0a  e open database.
1900: 2a 2a 20 44 42 2e 20 20 54 68 65 20 53 51 4c 20  ** DB.  The SQL 
1910: 69 73 20 74 68 65 20 73 74 72 69 6e 67 20 46 4f  is the string FO
1920: 52 4d 41 54 2e 20 20 54 68 65 20 66 6f 72 6d 61  RMAT.  The forma
1930: 74 20 73 74 72 69 6e 67 20 73 68 6f 75 6c 64 20  t string should 
1940: 63 6f 6e 74 61 69 6e 0a 2a 2a 20 6f 6e 65 20 25  contain.** one %
1950: 73 20 6f 72 20 25 71 2e 20 20 53 54 52 49 4e 47  s or %q.  STRING
1960: 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 69 6e   is the value in
1970: 73 65 72 74 65 64 20 69 6e 74 6f 20 25 73 20 6f  serted into %s o
1980: 72 20 25 71 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  r %q..*/.static 
1990: 69 6e 74 20 74 65 73 74 5f 65 78 65 63 5f 70 72  int test_exec_pr
19a0: 69 6e 74 66 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  intf(.  void *No
19b0: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
19c0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
19d0: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
19e0: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
19f0: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
1a00: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a20: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
1a30: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
1a40: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
1a50: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
1a60: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
1a70: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
1a80: 54 63 6c 5f 44 53 74 72 69 6e 67 20 73 74 72 3b  Tcl_DString str;
1a90: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61  .  int rc;.  cha
1aa0: 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 63  r *zErr = 0;.  c
1ab0: 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 63 68 61  har *zSql;.  cha
1ac0: 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 69 66  r zBuf[30];.  if
1ad0: 28 20 61 72 67 63 21 3d 34 20 29 7b 0a 20 20 20  ( argc!=4 ){.   
1ae0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
1af0: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
1b00: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
1b10: 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
1b20: 20 0a 20 20 20 20 20 20 20 22 20 44 42 20 46 4f   .       " DB FO
1b30: 52 4d 41 54 20 53 54 52 49 4e 47 22 2c 20 30 29  RMAT STRING", 0)
1b40: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
1b50: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
1b60: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
1b70: 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
1b80: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
1b90: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 44  L_ERROR;.  Tcl_D
1ba0: 53 74 72 69 6e 67 49 6e 69 74 28 26 73 74 72 29  StringInit(&str)
1bb0: 3b 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74  ;.  zSql = sqlit
1bc0: 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b  e3_mprintf(argv[
1bd0: 32 5d 2c 20 61 72 67 76 5b 33 5d 29 3b 0a 20 20  2], argv[3]);.  
1be0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
1bf0: 63 28 64 62 2c 20 7a 53 71 6c 2c 20 65 78 65 63  c(db, zSql, exec
1c00: 5f 70 72 69 6e 74 66 5f 63 62 2c 20 26 73 74 72  _printf_cb, &str
1c10: 2c 20 26 7a 45 72 72 29 3b 0a 20 20 73 71 6c 69  , &zErr);.  sqli
1c20: 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a  te3_free(zSql);.
1c30: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
1c40: 22 25 64 22 2c 20 72 63 29 3b 0a 20 20 54 63 6c  "%d", rc);.  Tcl
1c50: 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  _AppendElement(i
1c60: 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20  nterp, zBuf);.  
1c70: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
1c80: 74 28 69 6e 74 65 72 70 2c 20 72 63 3d 3d 53 51  t(interp, rc==SQ
1c90: 4c 49 54 45 5f 4f 4b 20 3f 20 54 63 6c 5f 44 53  LITE_OK ? Tcl_DS
1ca0: 74 72 69 6e 67 56 61 6c 75 65 28 26 73 74 72 29  tringValue(&str)
1cb0: 20 3a 20 7a 45 72 72 29 3b 0a 20 20 54 63 6c 5f   : zErr);.  Tcl_
1cc0: 44 53 74 72 69 6e 67 46 72 65 65 28 26 73 74 72  DStringFree(&str
1cd0: 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29 20  );.  if( zErr ) 
1ce0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72  sqlite3_free(zEr
1cf0: 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  r);.  if( sqlite
1d00: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
1d10: 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72  erp, db, rc) ) r
1d20: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1d30: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
1d40: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
1d50: 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  :  sqlite3_mprin
1d60: 74 66 5f 7a 5f 74 65 73 74 20 20 53 45 50 41 52  tf_z_test  SEPAR
1d70: 41 54 4f 52 20 20 41 52 47 30 20 20 41 52 47 31  ATOR  ARG0  ARG1
1d80: 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20   ....**.** Test 
1d90: 74 68 65 20 25 7a 20 66 6f 72 6d 61 74 20 6f 66  the %z format of
1da0: 20 73 71 6c 69 74 65 4d 50 72 69 6e 74 66 28 29   sqliteMPrintf()
1db0: 2e 20 20 55 73 65 20 6d 75 6c 74 69 70 6c 65 20  .  Use multiple 
1dc0: 6d 70 72 69 6e 74 66 28 29 20 63 61 6c 6c 73 20  mprintf() calls 
1dd0: 74 6f 20 0a 2a 2a 20 63 6f 6e 63 61 74 65 6e 61  to .** concatena
1de0: 74 65 20 61 72 67 30 20 74 68 72 6f 75 67 68 20  te arg0 through 
1df0: 61 72 67 6e 20 75 73 69 6e 67 20 73 65 70 61 72  argn using separ
1e00: 61 74 6f 72 20 61 73 20 74 68 65 20 73 65 70 61  ator as the sepa
1e10: 72 61 74 6f 72 2e 0a 2a 2a 20 52 65 74 75 72 6e  rator..** Return
1e20: 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a   the result..*/.
1e30: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
1e40: 6d 70 72 69 6e 74 66 5f 7a 28 0a 20 20 76 6f 69  mprintf_z(.  voi
1e50: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
1e60: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
1e70: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
1e80: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
1e90: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
1ea0: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
1eb0: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
1ec0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
1ed0: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
1ee0: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
1ef0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
1f00: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
1f10: 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 52 65 73  .){.  char *zRes
1f20: 75 6c 74 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69  ult = 0;.  int i
1f30: 3b 0a 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c  ;..  for(i=2; i<
1f40: 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  argc; i++){.    
1f50: 7a 52 65 73 75 6c 74 20 3d 20 73 71 6c 69 74 65  zResult = sqlite
1f60: 33 4d 50 72 69 6e 74 66 28 22 25 7a 25 73 25 73  3MPrintf("%z%s%s
1f70: 22 2c 20 7a 52 65 73 75 6c 74 2c 20 61 72 67 76  ", zResult, argv
1f80: 5b 31 5d 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20  [1], argv[i]);. 
1f90: 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52   }.  Tcl_AppendR
1fa0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 52  esult(interp, zR
1fb0: 65 73 75 6c 74 2c 20 30 29 3b 0a 20 20 73 71 6c  esult, 0);.  sql
1fc0: 69 74 65 46 72 65 65 28 7a 52 65 73 75 6c 74 29  iteFree(zResult)
1fd0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
1fe0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
1ff0: 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e:  sqlite3_mpri
2000: 6e 74 66 5f 6e 5f 74 65 73 74 20 20 53 54 52 49  ntf_n_test  STRI
2010: 4e 47 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  NG.**.** Test th
2020: 65 20 25 6e 20 66 6f 72 6d 61 74 20 6f 66 20 73  e %n format of s
2030: 71 6c 69 74 65 4d 50 72 69 6e 74 66 28 29 2e 20  qliteMPrintf(). 
2040: 20 52 65 74 75 72 6e 20 74 68 65 20 6c 65 6e 67   Return the leng
2050: 74 68 20 6f 66 20 74 68 65 0a 2a 2a 20 69 6e 70  th of the.** inp
2060: 75 74 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74  ut string..*/.st
2070: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6d 70  atic int test_mp
2080: 72 69 6e 74 66 5f 6e 28 0a 20 20 76 6f 69 64 20  rintf_n(.  void 
2090: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
20a0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
20b0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
20c0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
20d0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
20e0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
20f0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
2100: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
2110: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
2120: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
2130: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
2140: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
2150: 7b 0a 20 20 63 68 61 72 20 2a 7a 53 74 72 3b 0a  {.  char *zStr;.
2160: 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 7a    int n = 0;.  z
2170: 53 74 72 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Str = sqlite3MPr
2180: 69 6e 74 66 28 22 25 73 25 6e 22 2c 20 61 72 67  intf("%s%n", arg
2190: 76 5b 31 5d 2c 20 26 6e 29 3b 0a 20 20 73 71 6c  v[1], &n);.  sql
21a0: 69 74 65 46 72 65 65 28 7a 53 74 72 29 3b 0a 20  iteFree(zStr);. 
21b0: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
21c0: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
21d0: 77 49 6e 74 4f 62 6a 28 6e 29 29 3b 0a 20 20 72  wIntObj(n));.  r
21e0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
21f0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
2200: 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65  qlite3_get_table
2210: 5f 70 72 69 6e 74 66 20 20 44 42 20 20 46 4f 52  _printf  DB  FOR
2220: 4d 41 54 20 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a  MAT  STRING.**.*
2230: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 73 71 6c  * Invoke the sql
2240: 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70  ite3_get_table_p
2250: 72 69 6e 74 66 28 29 20 69 6e 74 65 72 66 61 63  rintf() interfac
2260: 65 20 75 73 69 6e 67 20 74 68 65 20 6f 70 65 6e  e using the open
2270: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 44 42 2e   database.** DB.
2280: 20 20 54 68 65 20 53 51 4c 20 69 73 20 74 68 65    The SQL is the
2290: 20 73 74 72 69 6e 67 20 46 4f 52 4d 41 54 2e 20   string FORMAT. 
22a0: 20 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69   The format stri
22b0: 6e 67 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69  ng should contai
22c0: 6e 0a 2a 2a 20 6f 6e 65 20 25 73 20 6f 72 20 25  n.** one %s or %
22d0: 71 2e 20 20 53 54 52 49 4e 47 20 69 73 20 74 68  q.  STRING is th
22e0: 65 20 76 61 6c 75 65 20 69 6e 73 65 72 74 65 64  e value inserted
22f0: 20 69 6e 74 6f 20 25 73 20 6f 72 20 25 71 2e 0a   into %s or %q..
2300: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
2310: 73 74 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69  st_get_table_pri
2320: 6e 74 66 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  ntf(.  void *Not
2330: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
2340: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
2350: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
2360: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
2370: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
2380: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
2390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
23a0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
23b0: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
23c0: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
23d0: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
23e0: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
23f0: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 54  sqlite3 *db;.  T
2400: 63 6c 5f 44 53 74 72 69 6e 67 20 73 74 72 3b 0a  cl_DString str;.
2410: 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72    int rc;.  char
2420: 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 69 6e   *zErr = 0;.  in
2430: 74 20 6e 52 6f 77 2c 20 6e 43 6f 6c 3b 0a 20 20  t nRow, nCol;.  
2440: 63 68 61 72 20 2a 2a 61 52 65 73 75 6c 74 3b 0a  char **aResult;.
2450: 20 20 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20    int i;.  char 
2460: 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 63 68 61 72  zBuf[30];.  char
2470: 20 2a 7a 53 71 6c 3b 0a 20 20 69 66 28 20 61 72   *zSql;.  if( ar
2480: 67 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=4 ){.    Tcl
2490: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
24a0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
24b0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
24c0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20  "", argv[0], .  
24d0: 20 20 20 20 20 22 20 44 42 20 46 4f 52 4d 41 54       " DB FORMAT
24e0: 20 53 54 52 49 4e 47 22 2c 20 30 29 3b 0a 20 20   STRING", 0);.  
24f0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
2500: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
2510: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
2520: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
2530: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
2540: 52 4f 52 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69  ROR;.  Tcl_DStri
2550: 6e 67 49 6e 69 74 28 26 73 74 72 29 3b 0a 20 20  ngInit(&str);.  
2560: 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d  zSql = sqlite3_m
2570: 70 72 69 6e 74 66 28 61 72 67 76 5b 32 5d 2c 61  printf(argv[2],a
2580: 72 67 76 5b 33 5d 29 3b 0a 20 20 72 63 20 3d 20  rgv[3]);.  rc = 
2590: 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c  sqlite3_get_tabl
25a0: 65 28 64 62 2c 20 7a 53 71 6c 2c 20 26 61 52 65  e(db, zSql, &aRe
25b0: 73 75 6c 74 2c 20 26 6e 52 6f 77 2c 20 26 6e 43  sult, &nRow, &nC
25c0: 6f 6c 2c 20 26 7a 45 72 72 29 3b 0a 20 20 73 71  ol, &zErr);.  sq
25d0: 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29  lite3_free(zSql)
25e0: 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66  ;.  sprintf(zBuf
25f0: 2c 20 22 25 64 22 2c 20 72 63 29 3b 0a 20 20 54  , "%d", rc);.  T
2600: 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  cl_AppendElement
2610: 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a  (interp, zBuf);.
2620: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2630: 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 70 72 69 6e  _OK ){.    sprin
2640: 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 6e  tf(zBuf, "%d", n
2650: 52 6f 77 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70  Row);.    Tcl_Ap
2660: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
2670: 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 73  rp, zBuf);.    s
2680: 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64  printf(zBuf, "%d
2690: 22 2c 20 6e 43 6f 6c 29 3b 0a 20 20 20 20 54 63  ", nCol);.    Tc
26a0: 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  l_AppendElement(
26b0: 69 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20  interp, zBuf);. 
26c0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 28 6e     for(i=0; i<(n
26d0: 52 6f 77 2b 31 29 2a 6e 43 6f 6c 3b 20 69 2b 2b  Row+1)*nCol; i++
26e0: 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41 70 70  ){.      Tcl_App
26f0: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
2700: 70 2c 20 61 52 65 73 75 6c 74 5b 69 5d 20 3f 20  p, aResult[i] ? 
2710: 61 52 65 73 75 6c 74 5b 69 5d 20 3a 20 22 4e 55  aResult[i] : "NU
2720: 4c 4c 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  LL");.    }.  }e
2730: 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  lse{.    Tcl_App
2740: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
2750: 70 2c 20 7a 45 72 72 29 3b 0a 20 20 7d 0a 20 20  p, zErr);.  }.  
2760: 73 71 6c 69 74 65 33 5f 66 72 65 65 5f 74 61 62  sqlite3_free_tab
2770: 6c 65 28 61 52 65 73 75 6c 74 29 3b 0a 20 20 69  le(aResult);.  i
2780: 66 28 20 7a 45 72 72 20 29 20 73 71 6c 69 74 65  f( zErr ) sqlite
2790: 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20  3_free(zErr);.  
27a0: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
27b0: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
27c0: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
27d0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74  TCL_ERROR;.  ret
27e0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a  urn TCL_OK;.}...
27f0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
2800: 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
2810: 74 5f 72 6f 77 69 64 20 44 42 0a 2a 2a 0a 2a 2a  t_rowid DB.**.**
2820: 20 52 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74   Returns the int
2830: 65 67 65 72 20 52 4f 57 49 44 20 6f 66 20 74 68  eger ROWID of th
2840: 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e  e most recent in
2850: 73 65 72 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  sert..*/.static 
2860: 69 6e 74 20 74 65 73 74 5f 6c 61 73 74 5f 72 6f  int test_last_ro
2870: 77 69 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  wid(.  void *Not
2880: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
2890: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
28a0: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
28b0: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
28c0: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
28d0: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
28f0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
2900: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
2910: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
2920: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
2930: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
2940: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63  sqlite3 *db;.  c
2950: 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 0a 20  har zBuf[30];.. 
2960: 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a   if( argc!=2 ){.
2970: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
2980: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
2990: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
29a0: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
29b0: 30 5d 2c 20 22 20 44 42 5c 22 22 2c 20 30 29 3b  0], " DB\"", 0);
29c0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
29d0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
29e0: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
29f0: 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
2a00: 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
2a10: 5f 45 52 52 4f 52 3b 0a 20 20 73 70 72 69 6e 74  _ERROR;.  sprint
2a20: 66 28 7a 42 75 66 2c 20 22 25 6c 6c 64 22 2c 20  f(zBuf, "%lld", 
2a30: 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
2a40: 65 72 74 5f 72 6f 77 69 64 28 64 62 29 29 3b 0a  ert_rowid(db));.
2a50: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
2a60: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
2a70: 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 53 51   0);.  return SQ
2a80: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a  LITE_OK;.}../*.*
2a90: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
2aa0: 33 5f 6b 65 79 20 44 42 20 4b 45 59 0a 2a 2a 0a  3_key DB KEY.**.
2ab0: 2a 2a 20 53 65 74 20 74 68 65 20 63 6f 64 65 63  ** Set the codec
2ac0: 20 6b 65 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   key..*/.static 
2ad0: 69 6e 74 20 74 65 73 74 5f 6b 65 79 28 0a 20 20  int test_key(.  
2ae0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
2af0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
2b00: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
2b10: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
2b20: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
2b30: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
2b40: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
2b50: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2b60: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
2b70: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
2b80: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
2b90: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
2ba0: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
2bb0: 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   *db;.  const ch
2bc0: 61 72 20 2a 7a 4b 65 79 3b 0a 20 20 69 6e 74 20  ar *zKey;.  int 
2bd0: 6e 4b 65 79 3b 0a 20 20 69 66 28 20 61 72 67 63  nKey;.  if( argc
2be0: 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
2bf0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
2c00: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
2c10: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
2c20: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
2c30: 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c    " FILENAME\"",
2c40: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
2c50: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
2c60: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
2c70: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
2c80: 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
2c90: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 4b   TCL_ERROR;.  zK
2ca0: 65 79 20 3d 20 61 72 67 76 5b 32 5d 3b 0a 20 20  ey = argv[2];.  
2cb0: 6e 4b 65 79 20 3d 20 73 74 72 6c 65 6e 28 7a 4b  nKey = strlen(zK
2cc0: 65 79 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ey);.#ifdef SQLI
2cd0: 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 73  TE_HAS_CODEC.  s
2ce0: 71 6c 69 74 65 33 5f 6b 65 79 28 64 62 2c 20 7a  qlite3_key(db, z
2cf0: 4b 65 79 2c 20 6e 4b 65 79 29 3b 0a 23 65 6e 64  Key, nKey);.#end
2d00: 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  if.  return TCL_
2d10: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
2d20: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 72 65 6b  ge:  sqlite3_rek
2d30: 65 79 20 44 42 20 4b 45 59 0a 2a 2a 0a 2a 2a 20  ey DB KEY.**.** 
2d40: 43 68 61 6e 67 65 20 74 68 65 20 63 6f 64 65 63  Change the codec
2d50: 20 6b 65 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   key..*/.static 
2d60: 69 6e 74 20 74 65 73 74 5f 72 65 6b 65 79 28 0a  int test_rekey(.
2d70: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
2d80: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
2d90: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
2da0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
2db0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
2dc0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
2dd0: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
2de0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
2df0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
2e00: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
2e10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
2e20: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
2e30: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  nt */.){.  sqlit
2e40: 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20  e3 *db;.  const 
2e50: 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 20 20 69 6e  char *zKey;.  in
2e60: 74 20 6e 4b 65 79 3b 0a 20 20 69 66 28 20 61 72  t nKey;.  if( ar
2e70: 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
2e80: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
2e90: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
2ea0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
2eb0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
2ec0: 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22      " FILENAME\"
2ed0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
2ee0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
2ef0: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
2f00: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
2f10: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
2f20: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
2f30: 7a 4b 65 79 20 3d 20 61 72 67 76 5b 32 5d 3b 0a  zKey = argv[2];.
2f40: 20 20 6e 4b 65 79 20 3d 20 73 74 72 6c 65 6e 28    nKey = strlen(
2f50: 7a 4b 65 79 29 3b 0a 23 69 66 64 65 66 20 53 51  zKey);.#ifdef SQ
2f60: 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
2f70: 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 28 64   sqlite3_rekey(d
2f80: 62 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 29 3b 0a  b, zKey, nKey);.
2f90: 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20  #endif.  return 
2fa0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
2fb0: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
2fc0: 5f 63 6c 6f 73 65 20 44 42 0a 2a 2a 0a 2a 2a 20  _close DB.**.** 
2fd0: 43 6c 6f 73 65 73 20 74 68 65 20 64 61 74 61 62  Closes the datab
2fe0: 61 73 65 20 6f 70 65 6e 65 64 20 62 79 20 73 71  ase opened by sq
2ff0: 6c 69 74 65 33 5f 6f 70 65 6e 2e 0a 2a 2f 0a 73  lite3_open..*/.s
3000: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
3010: 5f 74 65 73 74 5f 63 6c 6f 73 65 28 0a 20 20 76  _test_close(.  v
3020: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
3030: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
3040: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
3050: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
3060: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
3070: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
3080: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
3090: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
30a0: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
30b0: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
30c0: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
30d0: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
30e0: 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  */.){.  sqlite3 
30f0: 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *db;.  int rc;. 
3100: 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a   if( argc!=2 ){.
3110: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
3120: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
3130: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
3140: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
3150: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c  0],.       " FIL
3160: 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20  ENAME\"", 0);.  
3170: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
3180: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
3190: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
31a0: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
31b0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
31c0: 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
31d0: 74 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b 0a 20  te3_close(db);. 
31e0: 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
31f0: 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65  nterp, (char *)e
3200: 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43  rrorName(rc), TC
3210: 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 72 65 74  L_STATIC);.  ret
3220: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
3230: 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74  *.** Implementat
3240: 69 6f 6e 20 6f 66 20 74 68 65 20 78 5f 63 6f 61  ion of the x_coa
3250: 6c 65 73 63 65 28 29 20 66 75 6e 63 74 69 6f 6e  lesce() function
3260: 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  ..** Return the 
3270: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 6e  first argument n
3280: 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e 74  on-NULL argument
3290: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
32a0: 20 69 66 6e 75 6c 6c 46 75 6e 63 28 73 71 6c 69   ifnullFunc(sqli
32b0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
32c0: 74 65 78 74 2c 20 69 6e 74 20 61 72 67 63 2c 20  text, int argc, 
32d0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
32e0: 61 72 67 76 29 7b 0a 20 20 69 6e 74 20 69 3b 0a  argv){.  int i;.
32f0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67    for(i=0; i<arg
3300: 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  c; i++){.    if(
3310: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d 73 71   SQLITE_NULL!=sq
3320: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
3330: 28 61 72 67 76 5b 69 5d 29 20 29 7b 0a 20 20 20  (argv[i]) ){.   
3340: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
3350: 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20  t_text(context, 
3360: 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76  (char*)sqlite3_v
3370: 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 69  alue_text(argv[i
3380: 5d 29 2c 0a 20 20 20 20 20 20 20 20 20 20 73 71  ]),.          sq
3390: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65  lite3_value_byte
33a0: 73 28 61 72 67 76 5b 69 5d 29 2c 20 53 51 4c 49  s(argv[i]), SQLI
33b0: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
33c0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
33d0: 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  }.  }.}../*.** T
33e0: 68 65 73 65 20 61 72 65 20 74 65 73 74 20 66 75  hese are test fu
33f0: 6e 63 74 69 6f 6e 73 2e 20 20 20 20 68 65 78 38  nctions.    hex8
3400: 28 29 20 69 6e 74 65 72 70 72 65 74 73 20 69 74  () interprets it
3410: 73 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a  s argument as.**
3420: 20 55 54 46 38 20 61 6e 64 20 72 65 74 75 72 6e   UTF8 and return
3430: 73 20 61 20 68 65 78 20 65 6e 63 6f 64 69 6e 67  s a hex encoding
3440: 2e 20 20 68 65 78 31 36 6c 65 28 29 20 69 6e 74  .  hex16le() int
3450: 65 72 70 72 65 74 73 20 69 74 73 20 61 72 67 75  erprets its argu
3460: 6d 65 6e 74 0a 2a 2a 20 61 73 20 55 54 46 31 36  ment.** as UTF16
3470: 6c 65 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  le and returns a
3480: 20 68 65 78 20 65 6e 63 6f 64 69 6e 67 2e 0a 2a   hex encoding..*
3490: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 68 65  /.static void he
34a0: 78 38 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63  x8Func(sqlite3_c
34b0: 6f 6e 74 65 78 74 20 2a 70 2c 20 69 6e 74 20 61  ontext *p, int a
34c0: 72 67 63 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  rgc, sqlite3_val
34d0: 75 65 20 2a 2a 61 72 67 76 29 7b 0a 20 20 63 6f  ue **argv){.  co
34e0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
34f0: 72 20 2a 7a 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  r *z;.  int i;. 
3500: 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b   char zBuf[200];
3510: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76  .  z = sqlite3_v
3520: 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30  alue_text(argv[0
3530: 5d 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  ]);.  for(i=0; i
3540: 3c 73 69 7a 65 6f 66 28 7a 42 75 66 29 2f 32 20  <sizeof(zBuf)/2 
3550: 2d 20 32 20 26 26 20 7a 5b 69 5d 3b 20 69 2b 2b  - 2 && z[i]; i++
3560: 29 7b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 26  ){.    sprintf(&
3570: 7a 42 75 66 5b 69 2a 32 5d 2c 20 22 25 30 32 78  zBuf[i*2], "%02x
3580: 22 2c 20 7a 5b 69 5d 26 30 78 66 66 29 3b 0a 20  ", z[i]&0xff);. 
3590: 20 7d 0a 20 20 7a 42 75 66 5b 69 2a 32 5d 20 3d   }.  zBuf[i*2] =
35a0: 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65   0;.  sqlite3_re
35b0: 73 75 6c 74 5f 74 65 78 74 28 70 2c 20 28 63 68  sult_text(p, (ch
35c0: 61 72 2a 29 7a 42 75 66 2c 20 2d 31 2c 20 53 51  ar*)zBuf, -1, SQ
35d0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
35e0: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 68  .}.static void h
35f0: 65 78 31 36 46 75 6e 63 28 73 71 6c 69 74 65 33  ex16Func(sqlite3
3600: 5f 63 6f 6e 74 65 78 74 20 2a 70 2c 20 69 6e 74  _context *p, int
3610: 20 61 72 67 63 2c 20 73 71 6c 69 74 65 33 5f 76   argc, sqlite3_v
3620: 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a 20 20  alue **argv){.  
3630: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 73  const unsigned s
3640: 68 6f 72 74 20 69 6e 74 20 2a 7a 3b 0a 20 20 69  hort int *z;.  i
3650: 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 7a 42 75  nt i;.  char zBu
3660: 66 5b 34 30 30 5d 3b 0a 20 20 7a 20 3d 20 73 71  f[400];.  z = sq
3670: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
3680: 31 36 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 66  16(argv[0]);.  f
3690: 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66  or(i=0; i<sizeof
36a0: 28 7a 42 75 66 29 2f 34 20 2d 20 34 20 26 26 20  (zBuf)/4 - 4 && 
36b0: 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  z[i]; i++){.    
36c0: 73 70 72 69 6e 74 66 28 26 7a 42 75 66 5b 69 2a  sprintf(&zBuf[i*
36d0: 34 5d 2c 20 22 25 30 34 78 22 2c 20 7a 5b 69 5d  4], "%04x", z[i]
36e0: 26 30 78 66 66 29 3b 0a 20 20 7d 0a 20 20 7a 42  &0xff);.  }.  zB
36f0: 75 66 5b 69 2a 34 5d 20 3d 20 30 3b 0a 20 20 73  uf[i*4] = 0;.  s
3700: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
3710: 78 74 28 70 2c 20 28 63 68 61 72 2a 29 7a 42 75  xt(p, (char*)zBu
3720: 66 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52  f, -1, SQLITE_TR
3730: 41 4e 53 49 45 4e 54 29 3b 0a 7d 0a 0a 2f 2a 0a  ANSIENT);.}../*.
3740: 2a 2a 20 41 20 73 74 72 75 63 74 75 72 65 20 69  ** A structure i
3750: 6e 74 6f 20 77 68 69 63 68 20 74 6f 20 61 63 63  nto which to acc
3760: 75 6d 75 6c 61 74 65 20 74 65 78 74 2e 0a 2a 2f  umulate text..*/
3770: 0a 73 74 72 75 63 74 20 64 73 74 72 20 7b 0a 20  .struct dstr {. 
3780: 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 2f 2a   int nAlloc;  /*
3790: 20 53 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   Space allocated
37a0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b   */.  int nUsed;
37b0: 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
37c0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20   */.  char *z;  
37d0: 20 20 20 2f 2a 20 54 68 65 20 73 70 61 63 65 20     /* The space 
37e0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 70 70  */.};../*.** App
37f0: 65 6e 64 20 74 65 78 74 20 74 6f 20 61 20 64 73  end text to a ds
3800: 74 72 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  tr.*/.static voi
3810: 64 20 64 73 74 72 41 70 70 65 6e 64 28 73 74 72  d dstrAppend(str
3820: 75 63 74 20 64 73 74 72 20 2a 70 2c 20 63 6f 6e  uct dstr *p, con
3830: 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
3840: 64 69 76 69 64 65 72 29 7b 0a 20 20 69 6e 74 20  divider){.  int 
3850: 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20  n = strlen(z);. 
3860: 20 69 66 28 20 70 2d 3e 6e 55 73 65 64 20 2b 20   if( p->nUsed + 
3870: 6e 20 2b 20 32 20 3e 20 70 2d 3e 6e 41 6c 6c 6f  n + 2 > p->nAllo
3880: 63 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  c ){.    char *z
3890: 4e 65 77 3b 0a 20 20 20 20 70 2d 3e 6e 41 6c 6c  New;.    p->nAll
38a0: 6f 63 20 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 2a 32  oc = p->nAlloc*2
38b0: 20 2b 20 6e 20 2b 20 32 30 30 3b 0a 20 20 20 20   + n + 200;.    
38c0: 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65 52 65 61  zNew = sqliteRea
38d0: 6c 6c 6f 63 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41  lloc(p->z, p->nA
38e0: 6c 6c 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 7a  lloc);.    if( z
38f0: 4e 65 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  New==0 ){.      
3900: 73 71 6c 69 74 65 46 72 65 65 28 70 2d 3e 7a 29  sqliteFree(p->z)
3910: 3b 0a 20 20 20 20 20 20 6d 65 6d 73 65 74 28 70  ;.      memset(p
3920: 2c 20 30 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29  , 0, sizeof(*p))
3930: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a  ;.      return;.
3940: 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 7a 20 3d      }.    p->z =
3950: 20 7a 4e 65 77 3b 0a 20 20 7d 0a 20 20 69 66 28   zNew;.  }.  if(
3960: 20 64 69 76 69 64 65 72 20 26 26 20 70 2d 3e 6e   divider && p->n
3970: 55 73 65 64 3e 30 20 29 7b 0a 20 20 20 20 70 2d  Used>0 ){.    p-
3980: 3e 7a 5b 70 2d 3e 6e 55 73 65 64 2b 2b 5d 20 3d  >z[p->nUsed++] =
3990: 20 64 69 76 69 64 65 72 3b 0a 20 20 7d 0a 20 20   divider;.  }.  
39a0: 6d 65 6d 63 70 79 28 26 70 2d 3e 7a 5b 70 2d 3e  memcpy(&p->z[p->
39b0: 6e 55 73 65 64 5d 2c 20 7a 2c 20 6e 2b 31 29 3b  nUsed], z, n+1);
39c0: 0a 20 20 70 2d 3e 6e 55 73 65 64 20 2b 3d 20 6e  .  p->nUsed += n
39d0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b  ;.}../*.** Invok
39e0: 65 64 20 66 6f 72 20 65 61 63 68 20 63 61 6c 6c  ed for each call
39f0: 62 61 63 6b 20 66 72 6f 6d 20 73 71 6c 69 74 65  back from sqlite
3a00: 33 45 78 65 63 46 75 6e 63 0a 2a 2f 0a 73 74 61  3ExecFunc.*/.sta
3a10: 74 69 63 20 69 6e 74 20 65 78 65 63 46 75 6e 63  tic int execFunc
3a20: 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70  Callback(void *p
3a30: 44 61 74 61 2c 20 69 6e 74 20 61 72 67 63 2c 20  Data, int argc, 
3a40: 63 68 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61  char **argv, cha
3a50: 72 20 2a 2a 4e 6f 74 55 73 65 64 29 7b 0a 20 20  r **NotUsed){.  
3a60: 73 74 72 75 63 74 20 64 73 74 72 20 2a 70 20 3d  struct dstr *p =
3a70: 20 28 73 74 72 75 63 74 20 64 73 74 72 2a 29 70   (struct dstr*)p
3a80: 44 61 74 61 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  Data;.  int i;. 
3a90: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63   for(i=0; i<argc
3aa0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
3ab0: 61 72 67 76 5b 69 5d 3d 3d 30 20 29 7b 0a 20 20  argv[i]==0 ){.  
3ac0: 20 20 20 20 64 73 74 72 41 70 70 65 6e 64 28 70      dstrAppend(p
3ad0: 2c 20 22 4e 55 4c 4c 22 2c 20 27 20 27 29 3b 0a  , "NULL", ' ');.
3ae0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3af0: 20 64 73 74 72 41 70 70 65 6e 64 28 70 2c 20 61   dstrAppend(p, a
3b00: 72 67 76 5b 69 5d 2c 20 27 20 27 29 3b 0a 20 20  rgv[i], ' ');.  
3b10: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
3b20: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70   0;.}../*.** Imp
3b30: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
3b40: 68 65 20 78 5f 73 71 6c 69 74 65 5f 65 78 65 63  he x_sqlite_exec
3b50: 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  () function.  Th
3b60: 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65  is function take
3b70: 73 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 61 72  s.** a single ar
3b80: 67 75 6d 65 6e 74 20 61 6e 64 20 61 74 74 65 6d  gument and attem
3b90: 70 74 73 20 74 6f 20 65 78 65 63 75 74 65 20 74  pts to execute t
3ba0: 68 61 74 20 61 72 67 75 6d 65 6e 74 20 61 73 20  hat argument as 
3bb0: 53 51 4c 20 63 6f 64 65 2e 0a 2a 2a 20 54 68 69  SQL code..** Thi
3bc0: 73 20 69 73 20 69 6c 6c 65 67 61 6c 20 61 6e 64  s is illegal and
3bd0: 20 73 68 6f 75 6c 64 20 73 65 74 20 74 68 65 20   should set the 
3be0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 66 6c  SQLITE_MISUSE fl
3bf0: 61 67 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ag on the databa
3c00: 73 65 2e 0a 2a 2a 0a 2a 2a 20 32 30 30 34 2d 4a  se..**.** 2004-J
3c10: 61 6e 2d 30 37 3a 20 20 57 65 20 68 61 76 65 20  an-07:  We have 
3c20: 63 68 61 6e 67 65 64 20 74 68 69 73 20 74 6f 20  changed this to 
3c30: 6d 61 6b 65 20 69 74 20 6c 65 67 61 6c 20 74 6f  make it legal to
3c40: 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 78   call sqlite3_ex
3c50: 65 63 28 29 0a 2a 2a 20 66 72 6f 6d 20 77 69 74  ec().** from wit
3c60: 68 69 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 63  hin a function c
3c70: 61 6c 6c 2e 20 20 0a 2a 2a 20 0a 2a 2a 20 54 68  all.  .** .** Th
3c80: 69 73 20 72 6f 75 74 69 6e 65 20 73 69 6d 75 6c  is routine simul
3c90: 61 74 65 73 20 74 68 65 20 65 66 66 65 63 74 20  ates the effect 
3ca0: 6f 66 20 68 61 76 69 6e 67 20 74 77 6f 20 74 68  of having two th
3cb0: 72 65 61 64 73 20 61 74 74 65 6d 70 74 20 74 6f  reads attempt to
3cc0: 0a 2a 2a 20 75 73 65 20 74 68 65 20 73 61 6d 65  .** use the same
3cd0: 20 64 61 74 61 62 61 73 65 20 61 74 20 74 68 65   database at the
3ce0: 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2f 0a 73   same time..*/.s
3cf0: 74 61 74 69 63 20 76 6f 69 64 20 73 71 6c 69 74  tatic void sqlit
3d00: 65 33 45 78 65 63 46 75 6e 63 28 0a 20 20 73 71  e3ExecFunc(.  sq
3d10: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
3d20: 6f 6e 74 65 78 74 2c 20 0a 20 20 69 6e 74 20 61  ontext, .  int a
3d30: 72 67 63 2c 20 20 0a 20 20 73 71 6c 69 74 65 33  rgc,  .  sqlite3
3d40: 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b  _value **argv.){
3d50: 0a 20 20 73 74 72 75 63 74 20 64 73 74 72 20 78  .  struct dstr x
3d60: 3b 0a 20 20 6d 65 6d 73 65 74 28 26 78 2c 20 30  ;.  memset(&x, 0
3d70: 2c 20 73 69 7a 65 6f 66 28 78 29 29 3b 0a 20 20  , sizeof(x));.  
3d80: 28 76 6f 69 64 29 73 71 6c 69 74 65 33 5f 65 78  (void)sqlite3_ex
3d90: 65 63 28 28 73 71 6c 69 74 65 33 2a 29 73 71 6c  ec((sqlite3*)sql
3da0: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 63  ite3_user_data(c
3db0: 6f 6e 74 65 78 74 29 2c 0a 20 20 20 20 20 20 28  ontext),.      (
3dc0: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
3dd0: 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d  lue_text(argv[0]
3de0: 29 2c 0a 20 20 20 20 20 20 65 78 65 63 46 75 6e  ),.      execFun
3df0: 63 43 61 6c 6c 62 61 63 6b 2c 20 26 78 2c 20 30  cCallback, &x, 0
3e00: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73  );.  sqlite3_res
3e10: 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74  ult_text(context
3e20: 2c 20 78 2e 7a 2c 20 78 2e 6e 55 73 65 64 2c 20  , x.z, x.nUsed, 
3e30: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
3e40: 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28  );.  sqliteFree(
3e50: 78 2e 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  x.z);.}../*.** U
3e60: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 74 65  sage:  sqlite_te
3e70: 73 74 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  st_create_functi
3e80: 6f 6e 20 44 42 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c  on DB.**.** Call
3e90: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72 65   the sqlite3_cre
3ea0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 41 50 49  ate_function API
3eb0: 20 6f 6e 20 74 68 65 20 67 69 76 65 6e 20 64 61   on the given da
3ec0: 74 61 62 61 73 65 20 69 6e 20 6f 72 64 65 72 0a  tabase in order.
3ed0: 2a 2a 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ** to create a f
3ee0: 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22 78  unction named "x
3ef0: 5f 63 6f 61 6c 65 73 63 65 22 2e 20 20 54 68 69  _coalesce".  Thi
3f00: 73 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20  s function does 
3f10: 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 0a 2a  the same thing.*
3f20: 2a 20 61 73 20 74 68 65 20 22 63 6f 61 6c 65 73  * as the "coales
3f30: 63 65 22 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  ce" function.  T
3f40: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73  his function als
3f50: 6f 20 72 65 67 69 73 74 65 72 73 20 61 6e 20 53  o registers an S
3f60: 51 4c 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6e  QL function.** n
3f70: 61 6d 65 64 20 22 78 5f 73 71 6c 69 74 65 5f 65  amed "x_sqlite_e
3f80: 78 65 63 22 20 74 68 61 74 20 69 6e 76 6f 6b 65  xec" that invoke
3f90: 73 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  s sqlite3_exec()
3fa0: 2e 20 20 49 6e 76 6f 6b 69 6e 67 20 73 71 6c 69  .  Invoking sqli
3fb0: 74 65 33 5f 65 78 65 63 28 29 0a 2a 2a 20 69 6e  te3_exec().** in
3fc0: 20 74 68 69 73 20 77 61 79 20 69 73 20 69 6c 6c   this way is ill
3fd0: 65 67 61 6c 20 72 65 63 75 72 73 69 6f 6e 20 61  egal recursion a
3fe0: 6e 64 20 73 68 6f 75 6c 64 20 72 61 69 73 65 20  nd should raise 
3ff0: 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  an SQLITE_MISUSE
4000: 20 65 72 72 6f 72 2e 0a 2a 2a 20 54 68 65 20 65   error..** The e
4010: 66 66 65 63 74 20 69 73 20 73 69 6d 69 6c 61 72  ffect is similar
4020: 20 74 6f 20 74 72 79 69 6e 67 20 74 6f 20 75 73   to trying to us
4030: 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  e the same datab
4040: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  ase connection f
4050: 72 6f 6d 0a 2a 2a 20 74 77 6f 20 74 68 72 65 61  rom.** two threa
4060: 64 73 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  ds at the same t
4070: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6f  ime..**.** The o
4080: 72 69 67 69 6e 61 6c 20 6d 6f 74 69 76 61 74 69  riginal motivati
4090: 6f 6e 20 66 6f 72 20 74 68 69 73 20 72 6f 75 74  on for this rout
40a0: 69 6e 65 20 77 61 73 20 74 6f 20 62 65 20 61 62  ine was to be ab
40b0: 6c 65 20 74 6f 20 63 61 6c 6c 20 74 68 65 0a 2a  le to call the.*
40c0: 2a 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  * sqlite3_create
40d0: 5f 66 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69  _function functi
40e0: 6f 6e 20 77 68 69 6c 65 20 61 20 71 75 65 72 79  on while a query
40f0: 20 69 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20   is in progress 
4100: 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 74  in order.** to t
4110: 65 73 74 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  est the SQLITE_M
4120: 49 53 55 53 45 20 64 65 74 65 63 74 69 6f 6e 20  ISUSE detection 
4130: 6c 6f 67 69 63 2e 0a 2a 2f 0a 73 74 61 74 69 63  logic..*/.static
4140: 20 69 6e 74 20 74 65 73 74 5f 63 72 65 61 74 65   int test_create
4150: 5f 66 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69  _function(.  voi
4160: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
4170: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
4180: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
4190: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
41a0: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
41b0: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
41c0: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
41d0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
41e0: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
41f0: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
4200: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
4210: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
4220: 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  .){.  int rc;.  
4230: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 65  sqlite3 *db;.  e
4240: 78 74 65 72 6e 20 76 6f 69 64 20 4d 64 35 5f 52  xtern void Md5_R
4250: 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a  egister(sqlite3*
4260: 29 3b 0a 0a 20 20 69 66 28 20 61 72 67 63 21 3d  );..  if( argc!=
4270: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
4280: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
4290: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
42a0: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
42b0: 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
42c0: 22 20 44 42 5c 22 22 2c 20 30 29 3b 0a 20 20 20  " DB\"", 0);.   
42d0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
42e0: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
42f0: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
4300: 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20  , argv[1], &db) 
4310: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
4320: 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  OR;.  rc = sqlit
4330: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
4340: 6f 6e 28 64 62 2c 20 22 78 5f 63 6f 61 6c 65 73  on(db, "x_coales
4350: 63 65 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  ce", -1, SQLITE_
4360: 41 4e 59 2c 20 30 2c 20 0a 20 20 20 20 20 20 20  ANY, 0, .       
4370: 20 69 66 6e 75 6c 6c 46 75 6e 63 2c 20 30 2c 20   ifnullFunc, 0, 
4380: 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  0);.  if( rc==SQ
4390: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
43a0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
43b0: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
43c0: 22 68 65 78 38 22 2c 20 31 2c 20 53 51 4c 49 54  "hex8", 1, SQLIT
43d0: 45 5f 41 4e 59 2c 20 30 2c 20 0a 20 20 20 20 20  E_ANY, 0, .     
43e0: 20 20 20 20 20 68 65 78 38 46 75 6e 63 2c 20 30       hex8Func, 0
43f0: 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  , 0);.  }.  if( 
4400: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
4410: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
4420: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
4430: 6e 28 64 62 2c 20 22 68 65 78 31 36 22 2c 20 31  n(db, "hex16", 1
4440: 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c  , SQLITE_ANY, 0,
4450: 20 0a 20 20 20 20 20 20 20 20 20 20 68 65 78 31   .          hex1
4460: 36 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20  6Func, 0, 0);.  
4470: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
4480: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f  E_OMIT_UTF16.  /
4490: 2a 20 55 73 65 20 74 68 65 20 73 71 6c 69 74 65  * Use the sqlite
44a0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
44b0: 6e 31 36 28 29 20 41 50 49 20 68 65 72 65 2e 20  n16() API here. 
44c0: 4d 61 69 6e 6c 79 20 66 6f 72 20 66 75 6e 2c 20  Mainly for fun, 
44d0: 62 75 74 20 61 6c 73 6f 20 0a 20 20 2a 2a 20 62  but also .  ** b
44e0: 65 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f 74  ecause it is not
44f0: 20 74 65 73 74 65 64 20 61 6e 79 77 68 65 72 65   tested anywhere
4500: 20 65 6c 73 65 2e 20 2a 2f 0a 20 20 69 66 28 20   else. */.  if( 
4510: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
4520: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  .    sqlite3_val
4530: 75 65 20 2a 70 56 61 6c 3b 0a 23 69 66 64 65 66  ue *pVal;.#ifdef
4540: 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
4550: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
4560: 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 3e 30 20 29  _iMallocFail>0 )
4570: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
4580: 69 4d 61 6c 6c 6f 63 46 61 69 6c 2b 2b 3b 0a 20  iMallocFail++;. 
4590: 20 20 20 7d 0a 23 65 6e 64 69 66 20 0a 20 20 20     }.#endif .   
45a0: 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56   pVal = sqlite3V
45b0: 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 20 20 73  alueNew();.    s
45c0: 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
45d0: 72 28 70 56 61 6c 2c 20 2d 31 2c 20 22 78 5f 73  r(pVal, -1, "x_s
45e0: 71 6c 69 74 65 5f 65 78 65 63 22 2c 20 53 51 4c  qlite_exec", SQL
45f0: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
4600: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 63  _STATIC);.    rc
4610: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
4620: 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28 64 62 2c  e_function16(db,
4630: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
4640: 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
4650: 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54  (pVal, SQLITE_UT
4660: 46 31 36 4e 41 54 49 56 45 29 2c 0a 20 20 20 20  F16NATIVE),.    
4670: 20 20 20 20 20 20 20 20 20 20 31 2c 20 53 51 4c            1, SQL
4680: 49 54 45 5f 55 54 46 31 36 2c 20 64 62 2c 20 73  ITE_UTF16, db, s
4690: 71 6c 69 74 65 33 45 78 65 63 46 75 6e 63 2c 20  qlite3ExecFunc, 
46a0: 30 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  0, 0);.    sqlit
46b0: 65 33 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c  e3ValueFree(pVal
46c0: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
46d0: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
46e0: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
46f0: 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
4700: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63   TCL_ERROR;.  Tc
4710: 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
4720: 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f  rp, (char *)erro
4730: 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20  rName(rc), 0);. 
4740: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
4750: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  }../*.** Routine
4760: 73 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  s to implement t
4770: 68 65 20 78 5f 63 6f 75 6e 74 28 29 20 61 67 67  he x_count() agg
4780: 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e  regate function.
4790: 0a 2a 2a 0a 2a 2a 20 78 5f 63 6f 75 6e 74 28 29  .**.** x_count()
47a0: 20 63 6f 75 6e 74 73 20 74 68 65 20 6e 75 6d 62   counts the numb
47b0: 65 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 20 61  er of non-null a
47c0: 72 67 75 6d 65 6e 74 73 2e 20 20 42 75 74 20 74  rguments.  But t
47d0: 68 65 72 65 20 61 72 65 0a 2a 2a 20 73 6f 6d 65  here are.** some
47e0: 20 74 77 69 73 74 73 20 66 6f 72 20 74 65 73 74   twists for test
47f0: 69 6e 67 20 70 75 72 70 6f 73 65 73 2e 0a 2a 2a  ing purposes..**
4800: 0a 2a 2a 20 49 66 20 74 68 65 20 61 72 67 75 6d  .** If the argum
4810: 65 6e 74 20 74 6f 20 78 5f 63 6f 75 6e 74 28 29  ent to x_count()
4820: 20 69 73 20 34 30 20 74 68 65 6e 20 61 20 55 54   is 40 then a UT
4830: 46 2d 38 20 65 72 72 6f 72 20 69 73 20 72 65 70  F-8 error is rep
4840: 6f 72 74 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20  orted.** on the 
4850: 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 20 20  step function.  
4860: 49 66 20 78 5f 63 6f 75 6e 74 28 34 31 29 20 69  If x_count(41) i
4870: 73 20 73 65 65 6e 2c 20 74 68 65 6e 20 61 20 55  s seen, then a U
4880: 54 46 2d 31 36 20 65 72 72 6f 72 0a 2a 2a 20 69  TF-16 error.** i
4890: 73 20 72 65 70 6f 72 74 65 64 20 6f 6e 20 74 68  s reported on th
48a0: 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e  e step function.
48b0: 20 20 49 66 20 74 68 65 20 74 6f 74 61 6c 20 63    If the total c
48c0: 6f 75 6e 74 20 69 73 20 34 32 2c 20 74 68 65 6e  ount is 42, then
48d0: 0a 2a 2a 20 61 20 55 54 46 2d 38 20 65 72 72 6f  .** a UTF-8 erro
48e0: 72 20 69 73 20 72 65 70 6f 72 74 65 64 20 6f 6e  r is reported on
48f0: 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 20 66 75   the finalize fu
4900: 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64  nction..*/.typed
4910: 65 66 20 73 74 72 75 63 74 20 43 6f 75 6e 74 43  ef struct CountC
4920: 74 78 20 43 6f 75 6e 74 43 74 78 3b 0a 73 74 72  tx CountCtx;.str
4930: 75 63 74 20 43 6f 75 6e 74 43 74 78 20 7b 0a 20  uct CountCtx {. 
4940: 20 69 6e 74 20 6e 3b 0a 7d 3b 0a 73 74 61 74 69   int n;.};.stati
4950: 63 20 76 6f 69 64 20 63 6f 75 6e 74 53 74 65 70  c void countStep
4960: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
4970: 20 2a 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 61   *context, int a
4980: 72 67 63 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  rgc, sqlite3_val
4990: 75 65 20 2a 2a 61 72 67 76 29 7b 0a 20 20 43 6f  ue **argv){.  Co
49a0: 75 6e 74 43 74 78 20 2a 70 3b 0a 20 20 70 20 3d  untCtx *p;.  p =
49b0: 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61   sqlite3_aggrega
49c0: 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65  te_context(conte
49d0: 78 74 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b  xt, sizeof(*p));
49e0: 0a 20 20 69 66 28 20 28 61 72 67 63 3d 3d 30 20  .  if( (argc==0 
49f0: 7c 7c 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d  || SQLITE_NULL!=
4a00: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
4a10: 70 65 28 61 72 67 76 5b 30 5d 29 20 29 20 26 26  pe(argv[0]) ) &&
4a20: 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 2b 2b   p ){.    p->n++
4a30: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 61 72 67 63  ;.  }.  if( argc
4a40: 3e 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 76 20  >0 ){.    int v 
4a50: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
4a60: 69 6e 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20  int(argv[0]);.  
4a70: 20 20 69 66 28 20 76 3d 3d 34 30 20 29 7b 0a 20    if( v==40 ){. 
4a80: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
4a90: 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78  ult_error(contex
4aa0: 74 2c 20 22 76 61 6c 75 65 20 6f 66 20 34 30 20  t, "value of 40 
4ab0: 68 61 6e 64 65 64 20 74 6f 20 78 5f 63 6f 75 6e  handed to x_coun
4ac0: 74 22 2c 20 2d 31 29 3b 0a 23 69 66 6e 64 65 66  t", -1);.#ifndef
4ad0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
4ae0: 31 36 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  16.    }else if(
4af0: 20 76 3d 3d 34 31 20 29 7b 0a 20 20 20 20 20 20   v==41 ){.      
4b00: 63 6f 6e 73 74 20 63 68 61 72 20 7a 55 74 66 31  const char zUtf1
4b10: 36 45 72 72 4d 73 67 5b 5d 20 3d 20 7b 20 30 2c  6ErrMsg[] = { 0,
4b20: 20 30 78 36 31 2c 20 30 2c 20 30 78 36 32 2c 20   0x61, 0, 0x62, 
4b30: 30 2c 20 30 78 36 33 2c 20 30 2c 20 30 2c 20 30  0, 0x63, 0, 0, 0
4b40: 7d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  };.      sqlite3
4b50: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 31 36 28  _result_error16(
4b60: 63 6f 6e 74 65 78 74 2c 20 26 7a 55 74 66 31 36  context, &zUtf16
4b70: 45 72 72 4d 73 67 5b 31 2d 53 51 4c 49 54 45 5f  ErrMsg[1-SQLITE_
4b80: 42 49 47 45 4e 44 49 41 4e 5d 2c 20 2d 31 29 3b  BIGENDIAN], -1);
4b90: 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20  .#endif.    }.  
4ba0: 7d 0a 7d 20 20 20 0a 73 74 61 74 69 63 20 76 6f  }.}   .static vo
4bb0: 69 64 20 63 6f 75 6e 74 46 69 6e 61 6c 69 7a 65  id countFinalize
4bc0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
4bd0: 20 2a 63 6f 6e 74 65 78 74 29 7b 0a 20 20 43 6f   *context){.  Co
4be0: 75 6e 74 43 74 78 20 2a 70 3b 0a 20 20 70 20 3d  untCtx *p;.  p =
4bf0: 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61   sqlite3_aggrega
4c00: 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65  te_context(conte
4c10: 78 74 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b  xt, sizeof(*p));
4c20: 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20 20 20  .  if( p ){.    
4c30: 69 66 28 20 70 2d 3e 6e 3d 3d 34 32 20 29 7b 0a  if( p->n==42 ){.
4c40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
4c50: 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65  sult_error(conte
4c60: 78 74 2c 20 22 78 5f 63 6f 75 6e 74 20 74 6f 74  xt, "x_count tot
4c70: 61 6c 73 20 74 6f 20 34 32 22 2c 20 2d 31 29 3b  als to 42", -1);
4c80: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
4c90: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
4ca0: 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 70 20  _int(context, p 
4cb0: 3f 20 70 2d 3e 6e 20 3a 20 30 29 3b 0a 20 20 20  ? p->n : 0);.   
4cc0: 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   }.  }.}../*.** 
4cd0: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 74  Usage:  sqlite_t
4ce0: 65 73 74 5f 63 72 65 61 74 65 5f 61 67 67 72 65  est_create_aggre
4cf0: 67 61 74 65 20 44 42 0a 2a 2a 0a 2a 2a 20 43 61  gate DB.**.** Ca
4d00: 6c 6c 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  ll the sqlite3_c
4d10: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 41  reate_function A
4d20: 50 49 20 6f 6e 20 74 68 65 20 67 69 76 65 6e 20  PI on the given 
4d30: 64 61 74 61 62 61 73 65 20 69 6e 20 6f 72 64 65  database in orde
4d40: 72 0a 2a 2a 20 74 6f 20 63 72 65 61 74 65 20 61  r.** to create a
4d50: 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20   function named 
4d60: 22 78 5f 63 6f 75 6e 74 22 2e 20 20 54 68 69 73  "x_count".  This
4d70: 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 74   function does t
4d80: 68 65 20 73 61 6d 65 20 74 68 69 6e 67 0a 2a 2a  he same thing.**
4d90: 20 61 73 20 74 68 65 20 22 6d 64 35 73 75 6d 22   as the "md5sum"
4da0: 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
4db0: 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f   The original mo
4dc0: 74 69 76 61 74 69 6f 6e 20 66 6f 72 20 74 68 69  tivation for thi
4dd0: 73 20 72 6f 75 74 69 6e 65 20 77 61 73 20 74 6f  s routine was to
4de0: 20 62 65 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c   be able to call
4df0: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
4e00: 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65  create_aggregate
4e10: 20 66 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20   function while 
4e20: 61 20 71 75 65 72 79 20 69 73 20 69 6e 20 70 72  a query is in pr
4e30: 6f 67 72 65 73 73 20 69 6e 20 6f 72 64 65 72 0a  ogress in order.
4e40: 2a 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20 53  ** to test the S
4e50: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 64 65 74  QLITE_MISUSE det
4e60: 65 63 74 69 6f 6e 20 6c 6f 67 69 63 2e 20 20 53  ection logic.  S
4e70: 65 65 20 6d 69 73 75 73 65 2e 74 65 73 74 2e 0a  ee misuse.test..
4e80: 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  **.** This routi
4e90: 6e 65 20 77 61 73 20 6c 61 74 65 72 20 65 78 74  ne was later ext
4ea0: 65 6e 64 65 64 20 74 6f 20 74 65 73 74 20 74 68  ended to test th
4eb0: 65 20 75 73 65 20 6f 66 20 73 71 6c 69 74 65 33  e use of sqlite3
4ec0: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 29 0a  _result_error().
4ed0: 2a 2a 20 77 69 74 68 69 6e 20 61 67 67 72 65 67  ** within aggreg
4ee0: 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  ate functions..*
4ef0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
4f00: 74 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61  t_create_aggrega
4f10: 74 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  te(.  void *NotU
4f20: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
4f30: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
4f40: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
4f50: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
4f60: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
4f70: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
4f80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
4f90: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
4fa0: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
4fb0: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
4fc0: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
4fd0: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73  gument */.){.  s
4fe0: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
4ff0: 74 20 72 63 3b 0a 20 20 69 66 28 20 61 72 67 63  t rc;.  if( argc
5000: 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
5010: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
5020: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
5030: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
5040: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
5050: 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c    " FILENAME\"",
5060: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
5070: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
5080: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
5090: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
50a0: 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
50b0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63   TCL_ERROR;.  rc
50c0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
50d0: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22  e_function(db, "
50e0: 78 5f 63 6f 75 6e 74 22 2c 20 30 2c 20 53 51 4c  x_count", 0, SQL
50f0: 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 2c 0a  ITE_UTF8, 0, 0,.
5100: 20 20 20 20 20 20 63 6f 75 6e 74 53 74 65 70 2c        countStep,
5110: 63 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 29 3b 0a  countFinalize);.
5120: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
5130: 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  _OK ){.    sqlit
5140: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
5150: 6f 6e 28 64 62 2c 20 22 78 5f 63 6f 75 6e 74 22  on(db, "x_count"
5160: 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  , 1, SQLITE_UTF8
5170: 2c 20 30 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 0, 0,.        
5180: 63 6f 75 6e 74 53 74 65 70 2c 63 6f 75 6e 74 46  countStep,countF
5190: 69 6e 61 6c 69 7a 65 29 3b 0a 20 20 7d 0a 20 20  inalize);.  }.  
51a0: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
51b0: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
51c0: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
51d0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74  TCL_ERROR;.  ret
51e0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a  urn TCL_OK;.}...
51f0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
5200: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69  qlite3_mprintf_i
5210: 6e 74 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45  nt FORMAT INTEGE
5220: 52 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45  R INTEGER INTEGE
5230: 52 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72  R.**.** Call mpr
5240: 69 6e 74 66 20 77 69 74 68 20 74 68 72 65 65 20  intf with three 
5250: 69 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74  integer argument
5260: 73 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  s.*/.static int 
5270: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
5280: 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  int(.  void *Not
5290: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
52a0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
52b0: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
52c0: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
52d0: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
52e0: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
52f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
5300: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
5310: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
5320: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
5330: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
5340: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
5350: 69 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 63  int a[3], i;.  c
5360: 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72  har *z;.  if( ar
5370: 67 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=5 ){.    Tcl
5380: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
5390: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
53a0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
53b0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
53c0: 20 20 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54      " FORMAT INT
53d0: 20 49 4e 54 20 49 4e 54 5c 22 22 2c 20 30 29 3b   INT INT\"", 0);
53e0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
53f0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72  ERROR;.  }.  for
5400: 28 69 3d 32 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b  (i=2; i<5; i++){
5410: 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74  .    if( Tcl_Get
5420: 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76  Int(interp, argv
5430: 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20  [i], &a[i-2]) ) 
5440: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
5450: 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69  ;.  }.  z = sqli
5460: 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76  te3_mprintf(argv
5470: 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c  [1], a[0], a[1],
5480: 20 61 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70   a[2]);.  Tcl_Ap
5490: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
54a0: 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69  p, z, 0);.  sqli
54b0: 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72  te3_free(z);.  r
54c0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
54d0: 0a 2f 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72  ./*.** If zNum r
54e0: 65 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74  epresents an int
54f0: 65 67 65 72 20 74 68 61 74 20 77 69 6c 6c 20 66  eger that will f
5500: 69 74 20 69 6e 20 36 34 2d 62 69 74 73 2c 20 74  it in 64-bits, t
5510: 68 65 6e 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c  hen set.** *pVal
5520: 75 65 20 74 6f 20 74 68 61 74 20 69 6e 74 65 67  ue to that integ
5530: 65 72 20 61 6e 64 20 72 65 74 75 72 6e 20 74 72  er and return tr
5540: 75 65 2e 20 20 4f 74 68 65 72 77 69 73 65 20 72  ue.  Otherwise r
5550: 65 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f 0a  eturn false..*/.
5560: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
5570: 65 33 47 65 74 49 6e 74 36 34 28 63 6f 6e 73 74  e3GetInt64(const
5580: 20 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 36 34   char *zNum, i64
5590: 20 2a 70 56 61 6c 75 65 29 7b 0a 20 20 69 66 28   *pValue){.  if(
55a0: 20 73 71 6c 69 74 65 33 46 69 74 73 49 6e 36 34   sqlite3FitsIn64
55b0: 42 69 74 73 28 7a 4e 75 6d 29 20 29 7b 0a 20 20  Bits(zNum) ){.  
55c0: 20 20 73 71 6c 69 74 65 33 61 74 6f 69 36 34 28    sqlite3atoi64(
55d0: 7a 4e 75 6d 2c 20 70 56 61 6c 75 65 29 3b 0a 20  zNum, pValue);. 
55e0: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
55f0: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
5600: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
5610: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
5620: 74 36 34 20 46 4f 52 4d 41 54 20 49 4e 54 45 47  t64 FORMAT INTEG
5630: 45 52 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47  ER INTEGER INTEG
5640: 45 52 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70  ER.**.** Call mp
5650: 72 69 6e 74 66 20 77 69 74 68 20 74 68 72 65 65  rintf with three
5660: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20   64-bit integer 
5670: 61 72 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61  arguments.*/.sta
5680: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  tic int sqlite3_
5690: 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34 28 0a 20  mprintf_int64(. 
56a0: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
56b0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
56c0: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
56d0: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
56e0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
56f0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
5700: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
5710: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
5720: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
5730: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
5740: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
5750: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
5760: 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b  t */.){.  int i;
5770: 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  .  sqlite_int64 
5780: 61 5b 33 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b  a[3];.  char *z;
5790: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 35 20 29  .  if( argc!=5 )
57a0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
57b0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
57c0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
57d0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
57e0: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
57f0: 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 49 4e  ORMAT INT INT IN
5800: 54 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  T\"", 0);.    re
5810: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
5820: 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69    }.  for(i=2; i
5830: 3c 35 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  <5; i++){.    if
5840: 28 20 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74  ( !sqlite3GetInt
5850: 36 34 28 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69  64(argv[i], &a[i
5860: 2d 32 5d 29 20 29 7b 0a 20 20 20 20 20 20 54 63  -2]) ){.      Tc
5870: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
5880: 6e 74 65 72 70 2c 20 22 61 72 67 75 6d 65 6e 74  nterp, "argument
5890: 20 69 73 20 6e 6f 74 20 61 20 76 61 6c 69 64 20   is not a valid 
58a0: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 22 2c  64-bit integer",
58b0: 20 30 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72   0);.      retur
58c0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
58d0: 20 7d 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c   }.  }.  z = sql
58e0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67  ite3_mprintf(arg
58f0: 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d  v[1], a[0], a[1]
5900: 2c 20 61 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41  , a[2]);.  Tcl_A
5910: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
5920: 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c  rp, z, 0);.  sql
5930: 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20  ite3_free(z);.  
5940: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
5950: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
5960: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
5970: 73 74 72 20 46 4f 52 4d 41 54 20 49 4e 54 45 47  str FORMAT INTEG
5980: 45 52 20 49 4e 54 45 47 45 52 20 53 54 52 49 4e  ER INTEGER STRIN
5990: 47 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72  G.**.** Call mpr
59a0: 69 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e  intf with two in
59b0: 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20  teger arguments 
59c0: 61 6e 64 20 6f 6e 65 20 73 74 72 69 6e 67 20 61  and one string a
59d0: 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69  rgument.*/.stati
59e0: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70  c int sqlite3_mp
59f0: 72 69 6e 74 66 5f 73 74 72 28 0a 20 20 76 6f 69  rintf_str(.  voi
5a00: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
5a10: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
5a20: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
5a30: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
5a40: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
5a50: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
5a60: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
5a70: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
5a80: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
5a90: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
5aa0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
5ab0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
5ac0: 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20  .){.  int a[3], 
5ad0: 69 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20  i;.  char *z;.  
5ae0: 69 66 28 20 61 72 67 63 3c 34 20 7c 7c 20 61 72  if( argc<4 || ar
5af0: 67 63 3e 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  gc>5 ){.    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 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
5b20: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
5b30: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
5b40: 20 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20     " FORMAT INT 
5b50: 49 4e 54 20 3f 53 54 52 49 4e 47 3f 5c 22 22 2c  INT ?STRING?\"",
5b60: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
5b70: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
5b80: 20 66 6f 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69   for(i=2; i<4; i
5b90: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c  ++){.    if( Tcl
5ba0: 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20  _GetInt(interp, 
5bb0: 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d  argv[i], &a[i-2]
5bc0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
5bd0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20  RROR;.  }.  z = 
5be0: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
5bf0: 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61  argv[1], a[0], a
5c00: 5b 31 5d 2c 20 61 72 67 63 3e 34 20 3f 20 61 72  [1], argc>4 ? ar
5c10: 67 76 5b 34 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 20  gv[4] : NULL);. 
5c20: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
5c30: 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b  t(interp, z, 0);
5c40: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
5c50: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  z);.  return TCL
5c60: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
5c70: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
5c80: 72 69 6e 74 66 5f 64 6f 75 62 6c 65 20 46 4f 52  rintf_double FOR
5c90: 4d 41 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45  MAT INTEGER INTE
5ca0: 47 45 52 20 44 4f 55 42 4c 45 0a 2a 2a 0a 2a 2a  GER DOUBLE.**.**
5cb0: 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69   Call mprintf wi
5cc0: 74 68 20 74 77 6f 20 69 6e 74 65 67 65 72 20 61  th two integer a
5cd0: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 6f 6e 65  rguments and one
5ce0: 20 64 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74   double argument
5cf0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
5d00: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64  qlite3_mprintf_d
5d10: 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a 4e  ouble(.  void *N
5d20: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
5d30: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
5d40: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
5d50: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
5d60: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
5d70: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
5d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5d90: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
5da0: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
5db0: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
5dc0: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
5dd0: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
5de0: 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a 20    int a[3], i;. 
5df0: 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20 63 68 61   double r;.  cha
5e00: 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63  r *z;.  if( argc
5e10: 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=5 ){.    Tcl_A
5e20: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
5e30: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
5e40: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
5e50: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
5e60: 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49    " FORMAT INT I
5e70: 4e 54 20 44 4f 55 42 4c 45 5c 22 22 2c 20 30 29  NT DOUBLE\"", 0)
5e80: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
5e90: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f  _ERROR;.  }.  fo
5ea0: 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b 29  r(i=2; i<4; i++)
5eb0: 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65  {.    if( Tcl_Ge
5ec0: 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67  tInt(interp, arg
5ed0: 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29  v[i], &a[i-2]) )
5ee0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
5ef0: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 63 6c  R;.  }.  if( Tcl
5f00: 5f 47 65 74 44 6f 75 62 6c 65 28 69 6e 74 65 72  _GetDouble(inter
5f10: 70 2c 20 61 72 67 76 5b 34 5d 2c 20 26 72 29 20  p, argv[4], &r) 
5f20: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
5f30: 4f 52 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65  OR;.  z = sqlite
5f40: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31  3_mprintf(argv[1
5f50: 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 72  ], a[0], a[1], r
5f60: 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  );.  Tcl_AppendR
5f70: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c  esult(interp, z,
5f80: 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66   0);.  sqlite3_f
5f90: 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  ree(z);.  return
5fa0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
5fb0: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
5fc0: 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65 64  3_mprintf_scaled
5fd0: 20 46 4f 52 4d 41 54 20 44 4f 55 42 4c 45 20 44   FORMAT DOUBLE D
5fe0: 4f 55 42 4c 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c  OUBLE.**.** Call
5ff0: 20 6d 70 72 69 6e 74 66 20 77 69 74 68 20 61 20   mprintf with a 
6000: 73 69 6e 67 6c 65 20 64 6f 75 62 6c 65 20 61 72  single double ar
6010: 67 75 6d 65 6e 74 20 77 68 69 63 68 20 69 73 20  gument which is 
6020: 74 68 65 20 70 72 6f 64 75 63 74 20 6f 66 20 74  the product of t
6030: 68 65 0a 2a 2a 20 74 77 6f 20 61 72 67 75 6d 65  he.** two argume
6040: 6e 74 73 20 67 69 76 65 6e 20 61 62 6f 76 65 2e  nts given above.
6050: 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74    This is used t
6060: 6f 20 67 65 6e 65 72 61 74 65 20 6f 76 65 72 66  o generate overf
6070: 6c 6f 77 20 61 6e 64 20 75 6e 64 65 72 66 6c 6f  low and underflo
6080: 77 0a 2a 2a 20 64 6f 75 62 6c 65 73 20 74 6f 20  w.** doubles to 
6090: 74 65 73 74 20 74 68 61 74 20 74 68 65 79 20 61  test that they a
60a0: 72 65 20 63 6f 6e 76 65 72 74 65 64 20 70 72 6f  re converted pro
60b0: 70 65 72 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  perly..*/.static
60c0: 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72   int sqlite3_mpr
60d0: 69 6e 74 66 5f 73 63 61 6c 65 64 28 0a 20 20 76  intf_scaled(.  v
60e0: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
60f0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
6100: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
6110: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
6120: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
6130: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
6140: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
6150: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
6160: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
6170: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
6180: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
6190: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
61a0: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  */.){.  int i;. 
61b0: 20 64 6f 75 62 6c 65 20 72 5b 32 5d 3b 0a 20 20   double r[2];.  
61c0: 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61  char *z;.  if( a
61d0: 72 67 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63  rgc!=4 ){.    Tc
61e0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
61f0: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
6200: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
6210: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
6220: 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20 44 4f       " FORMAT DO
6230: 55 42 4c 45 20 44 4f 55 42 4c 45 5c 22 22 2c 20  UBLE DOUBLE\"", 
6240: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
6250: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
6260: 66 6f 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b  for(i=2; i<4; i+
6270: 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f  +){.    if( Tcl_
6280: 47 65 74 44 6f 75 62 6c 65 28 69 6e 74 65 72 70  GetDouble(interp
6290: 2c 20 61 72 67 76 5b 69 5d 2c 20 26 72 5b 69 2d  , argv[i], &r[i-
62a0: 32 5d 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  2]) ) return TCL
62b0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20  _ERROR;.  }.  z 
62c0: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
62d0: 66 28 61 72 67 76 5b 31 5d 2c 20 72 5b 30 5d 2a  f(argv[1], r[0]*
62e0: 72 5b 31 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70  r[1]);.  Tcl_App
62f0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
6300: 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  , z, 0);.  sqlit
6310: 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65  e3_free(z);.  re
6320: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
6330: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
6340: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74  lite3_mprintf_st
6350: 72 6f 6e 6c 79 20 46 4f 52 4d 41 54 20 53 54 52  ronly FORMAT STR
6360: 49 4e 47 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d  ING.**.** Call m
6370: 70 72 69 6e 74 66 20 77 69 74 68 20 61 20 73 69  printf with a si
6380: 6e 67 6c 65 20 64 6f 75 62 6c 65 20 61 72 67 75  ngle double argu
6390: 6d 65 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  ment which is th
63a0: 65 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65  e product of the
63b0: 0a 2a 2a 20 74 77 6f 20 61 72 67 75 6d 65 6e 74  .** two argument
63c0: 73 20 67 69 76 65 6e 20 61 62 6f 76 65 2e 20 20  s given above.  
63d0: 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
63e0: 67 65 6e 65 72 61 74 65 20 6f 76 65 72 66 6c 6f  generate overflo
63f0: 77 20 61 6e 64 20 75 6e 64 65 72 66 6c 6f 77 0a  w and underflow.
6400: 2a 2a 20 64 6f 75 62 6c 65 73 20 74 6f 20 74 65  ** doubles to te
6410: 73 74 20 74 68 61 74 20 74 68 65 79 20 61 72 65  st that they are
6420: 20 63 6f 6e 76 65 72 74 65 64 20 70 72 6f 70 65   converted prope
6430: 72 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  rly..*/.static i
6440: 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  nt sqlite3_mprin
6450: 74 66 5f 73 74 72 6f 6e 6c 79 28 0a 20 20 76 6f  tf_stronly(.  vo
6460: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
6470: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
6480: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
6490: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
64a0: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
64b0: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
64c0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
64d0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
64e0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
64f0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
6500: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
6510: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
6520: 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  /.){.  char *z;.
6530: 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b    if( argc!=3 ){
6540: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
6550: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
6560: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
6570: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
6580: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f  [0],.       " FO
6590: 52 4d 41 54 20 53 54 52 49 4e 47 5c 22 22 2c 20  RMAT STRING\"", 
65a0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
65b0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
65c0: 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  z = sqlite3_mpri
65d0: 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 72 67  ntf(argv[1], arg
65e0: 76 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70  v[2]);.  Tcl_App
65f0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
6600: 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  , z, 0);.  sqlit
6610: 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65  e3_free(z);.  re
6620: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
6630: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
6640: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65  lite3_mprintf_he
6650: 78 64 6f 75 62 6c 65 20 46 4f 52 4d 41 54 20 48  xdouble FORMAT H
6660: 45 58 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70  EX.**.** Call mp
6670: 72 69 6e 74 66 20 77 69 74 68 20 61 20 73 69 6e  rintf with a sin
6680: 67 6c 65 20 64 6f 75 62 6c 65 20 61 72 67 75 6d  gle double argum
6690: 65 6e 74 20 77 68 69 63 68 20 69 73 20 64 65 72  ent which is der
66a0: 69 76 65 64 20 66 72 6f 6d 20 74 68 65 0a 2a 2a  ived from the.**
66b0: 20 68 65 78 61 64 65 63 69 6d 61 6c 20 65 6e 63   hexadecimal enc
66c0: 6f 64 69 6e 67 20 6f 66 20 61 6e 20 49 45 45 45  oding of an IEEE
66d0: 20 64 6f 75 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74   double..*/.stat
66e0: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d  ic int sqlite3_m
66f0: 70 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65  printf_hexdouble
6700: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
6710: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
6720: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
6730: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
6740: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
6750: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
6760: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
6770: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
6780: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
6790: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
67a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
67b0: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
67c0: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61  ment */.){.  cha
67d0: 72 20 2a 7a 3b 0a 20 20 64 6f 75 62 6c 65 20 72  r *z;.  double r
67e0: 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 20 78 31  ;.  unsigned  x1
67f0: 2c 20 78 32 3b 0a 20 20 6c 6f 6e 67 20 6c 6f 6e  , x2;.  long lon
6800: 67 20 75 6e 73 69 67 6e 65 64 20 64 3b 0a 20 20  g unsigned d;.  
6810: 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20  if( argc!=3 ){. 
6820: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
6830: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
6840: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
6850: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
6860: 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d  ],.       " FORM
6870: 41 54 20 53 54 52 49 4e 47 5c 22 22 2c 20 30 29  AT STRING\"", 0)
6880: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
6890: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
68a0: 28 20 73 73 63 61 6e 66 28 61 72 67 76 5b 32 5d  ( sscanf(argv[2]
68b0: 2c 20 22 25 30 38 78 25 30 38 78 22 2c 20 26 78  , "%08x%08x", &x
68c0: 32 2c 20 26 78 31 29 21 3d 32 20 29 7b 0a 20 20  2, &x1)!=2 ){.  
68d0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
68e0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 32 6e 64 20  lt(interp, "2nd 
68f0: 61 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64 20  argument should 
6900: 62 65 20 31 36 2d 63 68 61 72 61 63 74 65 72 73  be 16-characters
6910: 20 6f 66 20 68 65 78 22 2c 20 30 29 3b 0a 20 20   of hex", 0);.  
6920: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
6930: 4f 52 3b 0a 20 20 7d 0a 20 20 64 20 3d 20 78 32  OR;.  }.  d = x2
6940: 3b 0a 20 20 64 20 3d 20 28 64 3c 3c 33 32 29 20  ;.  d = (d<<32) 
6950: 2b 20 78 31 3b 0a 20 20 6d 65 6d 63 70 79 28 26  + x1;.  memcpy(&
6960: 72 2c 20 26 64 2c 20 73 69 7a 65 6f 66 28 72 29  r, &d, sizeof(r)
6970: 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
6980: 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d  _mprintf(argv[1]
6990: 2c 20 72 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  , r);.  Tcl_Appe
69a0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
69b0: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
69c0: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
69d0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
69e0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
69f0: 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 20 4e  te_malloc_fail N
6a00: 20 20 3f 52 45 50 45 41 54 2d 49 4e 54 45 52 56    ?REPEAT-INTERV
6a10: 41 4c 3f 0a 2a 2a 0a 2a 2a 20 52 69 67 20 73 71  AL?.**.** Rig sq
6a20: 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20 74 6f 20  liteMalloc() to 
6a30: 66 61 69 6c 20 6f 6e 20 74 68 65 20 4e 2d 74 68  fail on the N-th
6a40: 20 63 61 6c 6c 20 61 6e 64 20 65 76 65 72 79 20   call and every 
6a50: 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20  REPEAT-INTERVAL 
6a60: 63 61 6c 6c 0a 2a 2a 20 61 66 74 65 72 20 74 68  call.** after th
6a70: 61 74 2e 20 20 49 66 20 52 45 50 45 41 54 2d 49  at.  If REPEAT-I
6a80: 4e 54 45 52 56 41 4c 20 69 73 20 30 20 6f 72 20  NTERVAL is 0 or 
6a90: 69 73 20 6f 6d 69 74 74 65 64 2c 20 74 68 65 6e  is omitted, then
6aa0: 20 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 0a 2a   only a single.*
6ab0: 2a 20 6d 61 6c 6c 6f 63 20 77 69 6c 6c 20 66 61  * malloc will fa
6ac0: 69 6c 2e 20 20 49 66 20 52 45 50 45 41 54 2d 49  il.  If REPEAT-I
6ad0: 4e 54 45 52 56 41 4c 20 69 73 20 31 20 74 68 65  NTERVAL is 1 the
6ae0: 6e 20 61 6c 6c 20 6d 61 6c 6c 6f 63 73 20 61 66  n all mallocs af
6af0: 74 65 72 20 74 68 65 0a 2a 2a 20 66 69 72 73 74  ter the.** first
6b00: 20 66 61 69 6c 75 72 65 20 77 69 6c 6c 20 63 6f   failure will co
6b10: 6e 74 69 6e 75 65 20 74 6f 20 66 61 69 6c 20 6f  ntinue to fail o
6b20: 6e 20 65 76 65 72 79 20 63 61 6c 6c 2e 20 20 49  n every call.  I
6b30: 66 20 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41  f REPEAT-INTERVA
6b40: 4c 20 69 73 0a 2a 2a 20 32 20 74 68 65 6e 20 65  L is.** 2 then e
6b50: 76 65 72 79 20 6f 74 68 65 72 20 6d 61 6c 6c 6f  very other mallo
6b60: 63 20 77 69 6c 6c 20 66 61 69 6c 2e 20 20 41 6e  c will fail.  An
6b70: 64 20 73 6f 20 66 6f 72 74 68 2e 0a 2a 2a 0a 2a  d so forth..**.*
6b80: 2a 20 54 75 72 6e 20 6f 66 66 20 74 68 69 73 20  * Turn off this 
6b90: 6d 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 72 65  mechanism and re
6ba0: 73 65 74 20 74 68 65 20 73 71 6c 69 74 65 33 54  set the sqlite3T
6bb0: 68 72 65 61 64 44 61 74 61 28 29 2d 3e 6d 61 6c  hreadData()->mal
6bc0: 6c 6f 63 46 61 69 6c 65 64 20 0a 2a 2a 20 76 61  locFailed .** va
6bd0: 72 69 61 62 6c 65 20 69 66 20 4e 3d 3d 30 2e 0a  riable if N==0..
6be0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
6bf0: 5f 4d 45 4d 44 45 42 55 47 0a 73 74 61 74 69 63  _MEMDEBUG.static
6c00: 20 69 6e 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c   int sqlite_mall
6c10: 6f 63 5f 66 61 69 6c 28 0a 20 20 76 6f 69 64 20  oc_fail(.  void 
6c20: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
6c30: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
6c40: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
6c50: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
6c60: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
6c70: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
6c80: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
6c90: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
6ca0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
6cb0: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
6cc0: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
6cd0: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
6ce0: 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
6cf0: 20 72 65 70 3b 0a 20 20 69 66 28 20 61 72 67 63   rep;.  if( argc
6d00: 21 3d 32 20 26 26 20 61 72 67 63 21 3d 33 20 29  !=2 && argc!=3 )
6d10: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
6d20: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
6d30: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
6d40: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
6d50: 76 5b 30 5d 2c 20 22 20 4e 5c 22 22 2c 20 30 29  v[0], " N\"", 0)
6d60: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
6d70: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
6d80: 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74  ( Tcl_GetInt(int
6d90: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 6e  erp, argv[1], &n
6da0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
6db0: 52 52 4f 52 3b 0a 20 20 69 66 28 20 61 72 67 63  RROR;.  if( argc
6dc0: 3d 3d 33 20 29 7b 0a 20 20 20 20 69 66 28 20 54  ==3 ){.    if( T
6dd0: 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70  cl_GetInt(interp
6de0: 2c 20 61 72 67 76 5b 32 5d 2c 20 26 72 65 70 29  , argv[2], &rep)
6df0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
6e00: 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ROR;.  }else{.  
6e10: 20 20 72 65 70 20 3d 20 30 3b 0a 20 20 7d 0a 20    rep = 0;.  }. 
6e20: 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63   sqlite3_iMalloc
6e30: 46 61 69 6c 20 3d 20 6e 3b 0a 20 20 73 71 6c 69  Fail = n;.  sqli
6e40: 74 65 33 5f 69 4d 61 6c 6c 6f 63 52 65 73 65 74  te3_iMallocReset
6e50: 20 3d 20 72 65 70 3b 0a 20 20 72 65 74 75 72 6e   = rep;.  return
6e60: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69   TCL_OK;.}.#endi
6e70: 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  f../*.** Usage: 
6e80: 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74  sqlite_malloc_st
6e90: 61 74 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  at.**.** Return 
6ea0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 72  the number of pr
6eb0: 69 6f 72 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c  ior calls to sql
6ec0: 69 74 65 4d 61 6c 6c 6f 63 28 29 20 61 6e 64 20  iteMalloc() and 
6ed0: 73 71 6c 69 74 65 46 72 65 65 28 29 2e 0a 2a 2f  sqliteFree()..*/
6ee0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d  .#ifdef SQLITE_M
6ef0: 45 4d 44 45 42 55 47 0a 73 74 61 74 69 63 20 69  EMDEBUG.static i
6f00: 6e 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  nt sqlite_malloc
6f10: 5f 73 74 61 74 28 0a 20 20 76 6f 69 64 20 2a 4e  _stat(.  void *N
6f20: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
6f30: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
6f40: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
6f50: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
6f60: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
6f70: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
6f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6f90: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
6fa0: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
6fb0: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
6fc0: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
6fd0: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
6fe0: 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d    char zBuf[200]
6ff0: 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66  ;.  sprintf(zBuf
7000: 2c 20 22 25 64 20 25 64 20 25 64 22 2c 20 73 71  , "%d %d %d", sq
7010: 6c 69 74 65 33 5f 6e 4d 61 6c 6c 6f 63 2c 73 71  lite3_nMalloc,sq
7020: 6c 69 74 65 33 5f 6e 46 72 65 65 2c 73 71 6c 69  lite3_nFree,sqli
7030: 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 29  te3_iMallocFail)
7040: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  ;.  Tcl_AppendRe
7050: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
7060: 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  f, 0);.  return 
7070: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
7080: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   This function i
7090: 6d 70 6c 65 6d 65 6e 74 73 20 61 20 54 63 6c 20  mplements a Tcl 
70a0: 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 6d 61 79  command that may
70b0: 20 62 65 20 69 6e 76 6f 6b 65 64 20 75 73 69 6e   be invoked usin
70c0: 67 20 61 6e 79 20 6f 66 0a 2a 2a 20 74 68 65 20  g any of.** the 
70d0: 66 6f 75 72 20 66 6f 72 6d 73 20 65 6e 75 6d 65  four forms enume
70e0: 72 61 74 65 64 20 62 65 6c 6f 77 2e 0a 2a 2a 0a  rated below..**.
70f0: 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  ** sqlite_malloc
7100: 5f 6f 75 74 73 74 61 6e 64 69 6e 67 0a 2a 2a 20  _outstanding.** 
7110: 20 20 20 20 52 65 74 75 72 6e 20 61 20 73 75 6d      Return a sum
7120: 6d 61 72 79 20 6f 66 20 61 6c 6c 20 75 6e 66 72  mary of all unfr
7130: 65 65 64 20 62 6c 6f 63 6b 73 20 6f 66 20 6d 65  eed blocks of me
7140: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 65 64 20 62  mory allocated b
7150: 79 20 74 68 65 0a 2a 2a 20 20 20 20 20 63 75 72  y the.**     cur
7160: 72 65 6e 74 20 74 68 72 65 61 64 2e 20 53 65 65  rent thread. See
7170: 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20   comments above 
7180: 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  function sqlite3
7190: 4f 75 74 73 74 61 6e 64 69 6e 67 4d 61 6c 6c 6f  OutstandingMallo
71a0: 63 73 28 29 20 0a 2a 2a 20 20 20 20 20 69 6e 20  cs() .**     in 
71b0: 75 74 69 6c 2e 63 20 66 6f 72 20 61 20 64 65 73  util.c for a des
71c0: 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20  cription of the 
71d0: 72 65 74 75 72 6e 65 64 20 76 61 6c 75 65 2e 0a  returned value..
71e0: 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 6c  **.** sqlite_mal
71f0: 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20  loc_outstanding 
7200: 2d 62 79 74 65 73 0a 2a 2a 20 20 20 20 20 52 65  -bytes.**     Re
7210: 74 75 72 6e 20 74 68 65 20 74 6f 74 61 6c 20 61  turn the total a
7220: 6d 6f 75 6e 74 20 6f 66 20 75 6e 66 72 65 65 64  mount of unfreed
7230: 20 6d 65 6d 6f 72 79 20 28 69 6e 20 62 79 74 65   memory (in byte
7240: 73 29 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20  s) allocated by 
7250: 0a 2a 2a 20 20 20 20 20 74 68 69 73 20 74 68 72  .**     this thr
7260: 65 61 64 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  ead..**.** sqlit
7270: 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e  e_malloc_outstan
7280: 64 69 6e 67 20 2d 6d 61 78 62 79 74 65 73 0a 2a  ding -maxbytes.*
7290: 2a 20 20 20 20 20 52 65 74 75 72 6e 20 74 68 65  *     Return the
72a0: 20 6d 61 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20   maximum amount 
72b0: 6f 66 20 64 79 6e 61 6d 69 63 20 6d 65 6d 6f 72  of dynamic memor
72c0: 79 20 69 6e 20 75 73 65 20 61 74 20 6f 6e 65 20  y in use at one 
72d0: 74 69 6d 65 20 0a 2a 2a 20 20 20 20 20 62 79 20  time .**     by 
72e0: 74 68 69 73 20 74 68 72 65 61 64 2e 0a 2a 2a 0a  this thread..**.
72f0: 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  ** sqlite_malloc
7300: 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d 63 6c  _outstanding -cl
7310: 65 61 72 6d 61 78 62 79 74 65 73 0a 2a 2a 20 20  earmaxbytes.**  
7320: 20 20 20 53 65 74 20 74 68 65 20 76 61 6c 75 65     Set the value
7330: 20 72 65 74 75 72 6e 65 64 20 62 79 20 5b 73 71   returned by [sq
7340: 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73  lite_malloc_outs
7350: 74 61 6e 64 69 6e 67 20 2d 6d 61 78 62 79 74 65  tanding -maxbyte
7360: 73 5d 0a 2a 2a 20 20 20 20 20 74 6f 20 74 68 65  s].**     to the
7370: 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f   current value o
7380: 66 20 5b 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  f [sqlite_malloc
7390: 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d 62 79  _outstanding -by
73a0: 74 65 73 5d 2e 20 0a 2a 2f 0a 73 74 61 74 69 63  tes]. .*/.static
73b0: 20 69 6e 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c   int sqlite_mall
73c0: 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 28 0a  oc_outstanding(.
73d0: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69    ClientData cli
73e0: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
73f0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
7400: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
7410: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
7420: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
7430: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63  nd */.  int objc
7440: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
7450: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
7460: 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f  ments */.  Tcl_O
7470: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
7480: 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67    /* Command arg
7490: 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 65  uments */.){.  e
74a0: 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
74b0: 33 4f 75 74 73 74 61 6e 64 69 6e 67 4d 61 6c 6c  3OutstandingMall
74c0: 6f 63 73 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ocs(Tcl_Interp *
74d0: 69 6e 74 65 72 70 29 3b 0a 0a 23 69 66 20 64 65  interp);..#if de
74e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
74f0: 55 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  UG) && defined(S
7500: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 20  QLITE_MEMDEBUG) 
7510: 26 26 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  && SQLITE_MEMDEB
7520: 55 47 3e 31 0a 20 20 69 66 28 20 6f 62 6a 63 3d  UG>1.  if( objc=
7530: 3d 32 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20  =2 ){.    const 
7540: 63 68 61 72 20 2a 7a 41 72 67 20 3d 20 54 63 6c  char *zArg = Tcl
7550: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
7560: 31 5d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  1]);.#ifdef SQLI
7570: 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  TE_ENABLE_MEMORY
7580: 5f 4d 41 4e 41 47 45 4d 45 4e 54 0a 20 20 20 20  _MANAGEMENT.    
7590: 54 68 72 65 61 64 44 61 74 61 20 63 6f 6e 73 74  ThreadData const
75a0: 20 2a 70 54 64 20 3d 20 73 71 6c 69 74 65 33 54   *pTd = sqlite3T
75b0: 68 72 65 61 64 44 61 74 61 52 65 61 64 4f 6e 6c  hreadDataReadOnl
75c0: 79 28 29 3b 0a 20 20 20 20 69 66 28 20 30 3d 3d  y();.    if( 0==
75d0: 73 74 72 63 6d 70 28 7a 41 72 67 2c 20 22 2d 62  strcmp(zArg, "-b
75e0: 79 74 65 73 22 29 20 29 7b 0a 20 20 20 20 20 20  ytes") ){.      
75f0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
7600: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
7610: 49 6e 74 4f 62 6a 28 70 54 64 2d 3e 6e 41 6c 6c  IntObj(pTd->nAll
7620: 6f 63 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  oc));.    }else 
7630: 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 7a 41  if( 0==strcmp(zA
7640: 72 67 2c 20 22 2d 63 6c 65 61 72 6d 61 78 62 79  rg, "-clearmaxby
7650: 74 65 73 22 29 20 29 7b 0a 20 20 20 20 20 20 73  tes") ){.      s
7660: 71 6c 69 74 65 33 5f 6e 4d 61 78 41 6c 6c 6f 63  qlite3_nMaxAlloc
7670: 20 3d 20 70 54 64 2d 3e 6e 41 6c 6c 6f 63 3b 0a   = pTd->nAlloc;.
7680: 20 20 20 20 7d 65 6c 73 65 20 0a 23 65 6e 64 69      }else .#endi
7690: 66 0a 20 20 20 20 69 66 28 20 30 3d 3d 73 74 72  f.    if( 0==str
76a0: 63 6d 70 28 7a 41 72 67 2c 20 22 2d 6d 61 78 62  cmp(zArg, "-maxb
76b0: 79 74 65 73 22 29 20 29 7b 0a 20 20 20 20 20 20  ytes") ){.      
76c0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
76d0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
76e0: 57 69 64 65 49 6e 74 4f 62 6a 28 73 71 6c 69 74  WideIntObj(sqlit
76f0: 65 33 5f 6e 4d 61 78 41 6c 6c 6f 63 29 29 3b 0a  e3_nMaxAlloc));.
7700: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7710: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
7720: 74 28 69 6e 74 65 72 70 2c 20 22 62 61 64 20 6f  t(interp, "bad o
7730: 70 74 69 6f 6e 20 5c 22 22 2c 20 7a 41 72 67 2c  ption \"", zArg,
7740: 20 0a 20 20 20 20 20 20 20 20 22 5c 22 3a 20 6d   .        "\": m
7750: 75 73 74 20 62 65 20 2d 62 79 74 65 73 2c 20 2d  ust be -bytes, -
7760: 6d 61 78 62 79 74 65 73 20 6f 72 20 2d 63 6c 65  maxbytes or -cle
7770: 61 72 6d 61 78 62 79 74 65 73 22 2c 20 30 0a 20  armaxbytes", 0. 
7780: 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 65       );.      re
7790: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
77a0: 20 20 20 20 7d 0a 0a 20 20 20 20 72 65 74 75 72      }..    retur
77b0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 20 7d 0a 0a 20  n TCL_OK;.  }.. 
77c0: 20 69 66 28 20 6f 62 6a 63 21 3d 31 20 29 7b 0a   if( objc!=1 ){.
77d0: 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
77e0: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
77f0: 6f 62 6a 76 2c 20 22 3f 2d 62 79 74 65 73 3f 22  objv, "?-bytes?"
7800: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
7810: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
7820: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 4f 75  return sqlite3Ou
7830: 74 73 74 61 6e 64 69 6e 67 4d 61 6c 6c 6f 63 73  tstandingMallocs
7840: 28 69 6e 74 65 72 70 29 3b 0a 23 65 6c 73 65 0a  (interp);.#else.
7850: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
7860: 0a 23 65 6e 64 69 66 0a 7d 0a 23 65 6e 64 69 66  .#endif.}.#endif
7870: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
7880: 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68  qlite3_enable_sh
7890: 61 72 65 64 5f 63 61 63 68 65 20 20 20 20 20 20  ared_cache      
78a0: 42 4f 4f 4c 45 41 4e 0a 2a 2a 0a 2a 2f 0a 23 69  BOOLEAN.**.*/.#i
78b0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
78c0: 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
78d0: 43 48 45 29 0a 73 74 61 74 69 63 20 69 6e 74 20  CHE).static int 
78e0: 74 65 73 74 5f 65 6e 61 62 6c 65 5f 73 68 61 72  test_enable_shar
78f0: 65 64 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61  ed(.  ClientData
7900: 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20   clientData, /* 
7910: 50 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74  Pointer to sqlit
7920: 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75  e3_enable_XXX fu
7930: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f  nction */.  Tcl_
7940: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
7950: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
7960: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
7970: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
7980: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a  and */.  int obj
7990: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
79a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
79b0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f  uments */.  Tcl_
79c0: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
79d0: 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72  ]  /* Command ar
79e0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20  guments */.){.  
79f0: 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 65 6e  int rc;.  int en
7a00: 61 62 6c 65 3b 0a 20 20 69 6e 74 20 72 65 74 20  able;.  int ret 
7a10: 3d 20 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  = 0;..  if( objc
7a20: 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=2 ){.    Tcl_W
7a30: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
7a40: 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 42 4f  rp, 1, objv, "BO
7a50: 4f 4c 45 41 4e 22 29 3b 0a 20 20 20 20 72 65 74  OLEAN");.    ret
7a60: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
7a70: 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74   }.  if( Tcl_Get
7a80: 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69  BooleanFromObj(i
7a90: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20  nterp, objv[1], 
7aa0: 26 65 6e 61 62 6c 65 29 20 29 7b 0a 20 20 20 20  &enable) ){.    
7ab0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
7ac0: 3b 0a 20 20 7d 0a 20 20 72 65 74 20 3d 20 73 71  ;.  }.  ret = sq
7ad0: 6c 69 74 65 33 54 68 72 65 61 64 44 61 74 61 52  lite3ThreadDataR
7ae0: 65 61 64 4f 6e 6c 79 28 29 2d 3e 75 73 65 53 68  eadOnly()->useSh
7af0: 61 72 65 64 44 61 74 61 3b 0a 20 20 72 63 20 3d  aredData;.  rc =
7b00: 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f   sqlite3_enable_
7b10: 73 68 61 72 65 64 5f 63 61 63 68 65 28 65 6e 61  shared_cache(ena
7b20: 62 6c 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  ble);.  if( rc!=
7b30: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
7b40: 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
7b50: 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 73  nterp, (char *)s
7b60: 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
7b70: 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20  , TCL_STATIC);. 
7b80: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
7b90: 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53  ROR;.  }.  Tcl_S
7ba0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
7bb0: 72 70 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65  rp, Tcl_NewBoole
7bc0: 61 6e 4f 62 6a 28 72 65 74 29 29 3b 0a 20 20 72  anObj(ret));.  r
7bd0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
7be0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73  #endif../*.** Us
7bf0: 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 65 78 74  age: sqlite3_ext
7c00: 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64  ended_result_cod
7c10: 65 73 20 20 20 44 42 20 20 20 20 42 4f 4f 4c 45  es   DB    BOOLE
7c20: 41 4e 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 20  AN.**.*/.static 
7c30: 69 6e 74 20 74 65 73 74 5f 65 78 74 65 6e 64 65  int test_extende
7c40: 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28 0a  d_result_codes(.
7c50: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69    ClientData cli
7c60: 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e  entData, /* Poin
7c70: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65  ter to sqlite3_e
7c80: 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69  nable_XXX functi
7c90: 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  on */.  Tcl_Inte
7ca0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
7cb0: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
7cc0: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
7cd0: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
7ce0: 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20  */.  int objc,  
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7d00: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
7d10: 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20  ts */.  Tcl_Obj 
7d20: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f  *CONST objv[]  /
7d30: 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65  * Command argume
7d40: 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  nts */.){.  int 
7d50: 65 6e 61 62 6c 65 3b 0a 20 20 73 71 6c 69 74 65  enable;.  sqlite
7d60: 33 20 2a 64 62 3b 0a 0a 20 20 69 66 28 20 6f 62  3 *db;..  if( ob
7d70: 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
7d80: 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
7d90: 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
7da0: 44 42 20 42 4f 4f 4c 45 41 4e 22 29 3b 0a 20 20  DB BOOLEAN");.  
7db0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
7dc0: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
7dd0: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
7de0: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
7df0: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20  (objv[1]), &db) 
7e00: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
7e10: 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
7e20: 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28  tBooleanFromObj(
7e30: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
7e40: 20 26 65 6e 61 62 6c 65 29 20 29 20 72 65 74 75   &enable) ) retu
7e50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
7e60: 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64  sqlite3_extended
7e70: 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28 64 62  _result_codes(db
7e80: 2c 20 65 6e 61 62 6c 65 29 3b 0a 20 20 72 65 74  , enable);.  ret
7e90: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
7ea0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
7eb0: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e  te3_libversion_n
7ec0: 75 6d 62 65 72 0a 2a 2a 0a 2a 2f 0a 73 74 61 74  umber.**.*/.stat
7ed0: 69 63 20 69 6e 74 20 74 65 73 74 5f 6c 69 62 76  ic int test_libv
7ee0: 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 0a 20  ersion_number(. 
7ef0: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
7f00: 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74  ntData, /* Point
7f10: 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e  er to sqlite3_en
7f20: 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f  able_XXX functio
7f30: 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  n */.  Tcl_Inter
7f40: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
7f50: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
7f60: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
7f70: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
7f80: 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
7f90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
7fa0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
7fb0: 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
7fc0: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
7fd0: 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
7fe0: 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 53  ts */.){.  Tcl_S
7ff0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
8000: 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
8010: 6a 28 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72  j(sqlite3_libver
8020: 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 29 29 3b  sion_number()));
8030: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
8040: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
8050: 3a 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  : sqlite3_table_
8060: 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 20  column_metadata 
8070: 44 42 20 64 62 6e 61 6d 65 20 74 62 6c 6e 61 6d  DB dbname tblnam
8080: 65 20 63 6f 6c 6e 61 6d 65 0a 2a 2a 0a 2a 2f 0a  e colname.**.*/.
8090: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
80a0: 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41  ABLE_COLUMN_META
80b0: 44 41 54 41 0a 73 74 61 74 69 63 20 69 6e 74 20  DATA.static int 
80c0: 74 65 73 74 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d  test_table_colum
80d0: 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20 20 43 6c  n_metadata(.  Cl
80e0: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
80f0: 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20  ata, /* Pointer 
8100: 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  to sqlite3_enabl
8110: 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a  e_XXX function *
8120: 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
8130: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
8140: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
8150: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
8160: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
8170: 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20   int objc,      
8180: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
8190: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
81a0: 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  /.  Tcl_Obj *CON
81b0: 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f  ST objv[]  /* Co
81c0: 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20  mmand arguments 
81d0: 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  */.){.  sqlite3 
81e0: 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  *db;.  const cha
81f0: 72 20 2a 7a 44 62 3b 0a 20 20 63 6f 6e 73 74 20  r *zDb;.  const 
8200: 63 68 61 72 20 2a 7a 54 62 6c 3b 0a 20 20 63 6f  char *zTbl;.  co
8210: 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 0a  nst char *zCol;.
8220: 20 20 69 6e 74 20 72 63 3b 0a 20 20 54 63 6c 5f    int rc;.  Tcl_
8230: 4f 62 6a 20 2a 70 52 65 74 3b 0a 0a 20 20 63 6f  Obj *pRet;..  co
8240: 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 61 74  nst char *zDatat
8250: 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  ype;.  const cha
8260: 72 20 2a 7a 43 6f 6c 6c 73 65 71 3b 0a 20 20 69  r *zCollseq;.  i
8270: 6e 74 20 6e 6f 74 6e 75 6c 6c 3b 0a 20 20 69 6e  nt notnull;.  in
8280: 74 20 70 72 69 6d 61 72 79 6b 65 79 3b 0a 20 20  t primarykey;.  
8290: 69 6e 74 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  int autoincremen
82a0: 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  t;..  if( objc!=
82b0: 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  5 ){.    Tcl_Wro
82c0: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
82d0: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42 20 64  , 1, objv, "DB d
82e0: 62 6e 61 6d 65 20 74 62 6c 6e 61 6d 65 20 63 6f  bname tblname co
82f0: 6c 6e 61 6d 65 22 29 3b 0a 20 20 20 20 72 65 74  lname");.    ret
8300: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
8310: 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
8320: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
8330: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
8340: 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
8350: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
8360: 20 7a 44 62 20 3d 20 54 63 6c 5f 47 65 74 53 74   zDb = Tcl_GetSt
8370: 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20  ring(objv[2]);. 
8380: 20 7a 54 62 6c 20 3d 20 54 63 6c 5f 47 65 74 53   zTbl = Tcl_GetS
8390: 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a  tring(objv[3]);.
83a0: 20 20 7a 43 6f 6c 20 3d 20 54 63 6c 5f 47 65 74    zCol = Tcl_Get
83b0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 34 5d 29 3b  String(objv[4]);
83c0: 0a 0a 20 20 69 66 28 20 73 74 72 6c 65 6e 28 7a  ..  if( strlen(z
83d0: 44 62 29 3d 3d 30 20 29 20 7a 44 62 20 3d 20 30  Db)==0 ) zDb = 0
83e0: 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
83f0: 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d  3_table_column_m
8400: 65 74 61 64 61 74 61 28 64 62 2c 20 7a 44 62 2c  etadata(db, zDb,
8410: 20 7a 54 62 6c 2c 20 7a 43 6f 6c 2c 20 0a 20 20   zTbl, zCol, .  
8420: 20 20 20 20 26 7a 44 61 74 61 74 79 70 65 2c 20      &zDatatype, 
8430: 26 7a 43 6f 6c 6c 73 65 71 2c 20 26 6e 6f 74 6e  &zCollseq, &notn
8440: 75 6c 6c 2c 20 26 70 72 69 6d 61 72 79 6b 65 79  ull, &primarykey
8450: 2c 20 26 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  , &autoincrement
8460: 29 3b 0a 0a 20 20 69 66 28 20 72 63 21 3d 53 51  );..  if( rc!=SQ
8470: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54  LITE_OK ){.    T
8480: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
8490: 69 6e 74 65 72 70 2c 20 73 71 6c 69 74 65 33 5f  interp, sqlite3_
84a0: 65 72 72 6d 73 67 28 64 62 29 2c 20 30 29 3b 0a  errmsg(db), 0);.
84b0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
84c0: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 70 52 65  RROR;.  }..  pRe
84d0: 74 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29  t = Tcl_NewObj()
84e0: 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
84f0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20  ppendElement(0, 
8500: 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72  pRet, Tcl_NewStr
8510: 69 6e 67 4f 62 6a 28 7a 44 61 74 61 74 79 70 65  ingObj(zDatatype
8520: 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69  , -1));.  Tcl_Li
8530: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
8540: 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63 6c 5f  nt(0, pRet, Tcl_
8550: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 43 6f  NewStringObj(zCo
8560: 6c 6c 73 65 71 2c 20 2d 31 29 29 3b 0a 20 20 54  llseq, -1));.  T
8570: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
8580: 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c  Element(0, pRet,
8590: 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e   Tcl_NewIntObj(n
85a0: 6f 74 6e 75 6c 6c 29 29 3b 0a 20 20 54 63 6c 5f  otnull));.  Tcl_
85b0: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
85c0: 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63  ment(0, pRet, Tc
85d0: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 70 72 69 6d  l_NewIntObj(prim
85e0: 61 72 79 6b 65 79 29 29 3b 0a 20 20 54 63 6c 5f  arykey));.  Tcl_
85f0: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
8600: 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63  ment(0, pRet, Tc
8610: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 75 74 6f  l_NewIntObj(auto
8620: 69 6e 63 72 65 6d 65 6e 74 29 29 3b 0a 20 20 54  increment));.  T
8630: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
8640: 69 6e 74 65 72 70 2c 20 70 52 65 74 29 3b 0a 0a  interp, pRet);..
8650: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
8660: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  .}.#endif.../*.*
8670: 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
8680: 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20  _load_extension 
8690: 44 42 2d 48 41 4e 44 4c 45 20 46 49 4c 45 20 3f  DB-HANDLE FILE ?
86a0: 50 52 4f 43 3f 0a 2a 2f 0a 73 74 61 74 69 63 20  PROC?.*/.static 
86b0: 69 6e 74 20 74 65 73 74 5f 6c 6f 61 64 5f 65 78  int test_load_ex
86c0: 74 65 6e 73 69 6f 6e 28 0a 20 20 43 6c 69 65 6e  tension(.  Clien
86d0: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
86e0: 2c 20 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f  , /* Not used */
86f0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
8700: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
8710: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
8720: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
8730: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
8740: 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
8750: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
8760: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
8770: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
8780: 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
8790: 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
87a0: 2f 0a 29 7b 0a 20 20 54 63 6c 5f 43 6d 64 49 6e  /.){.  Tcl_CmdIn
87b0: 66 6f 20 63 6d 64 49 6e 66 6f 3b 0a 20 20 73 71  fo cmdInfo;.  sq
87c0: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74  lite3 *db;.  int
87d0: 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 44 62   rc;.  char *zDb
87e0: 3b 0a 20 20 63 68 61 72 20 2a 7a 46 69 6c 65 3b  ;.  char *zFile;
87f0: 0a 20 20 63 68 61 72 20 2a 7a 50 72 6f 63 20 3d  .  char *zProc =
8800: 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72   0;.  char *zErr
8810: 20 3d 20 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a   = 0;..  if( obj
8820: 63 21 3d 34 20 26 26 20 6f 62 6a 63 21 3d 33 20  c!=4 && objc!=3 
8830: 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
8840: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
8850: 31 2c 20 6f 62 6a 76 2c 20 22 44 42 2d 48 41 4e  1, objv, "DB-HAN
8860: 44 4c 45 20 46 49 4c 45 20 3f 50 52 4f 43 3f 22  DLE FILE ?PROC?"
8870: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
8880: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a  L_ERROR;.  }.  z
8890: 44 62 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  Db = Tcl_GetStri
88a0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20 20 7a  ng(objv[1]);.  z
88b0: 46 69 6c 65 20 3d 20 54 63 6c 5f 47 65 74 53 74  File = Tcl_GetSt
88c0: 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20  ring(objv[2]);. 
88d0: 20 69 66 28 20 6f 62 6a 63 3d 3d 34 20 29 7b 0a   if( objc==4 ){.
88e0: 20 20 20 20 7a 50 72 6f 63 20 3d 20 54 63 6c 5f      zProc = Tcl_
88f0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33  GetString(objv[3
8900: 5d 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78  ]);.  }..  /* Ex
8910: 74 72 61 63 74 20 74 68 65 20 43 20 64 61 74 61  tract the C data
8920: 62 61 73 65 20 68 61 6e 64 6c 65 20 66 72 6f 6d  base handle from
8930: 20 74 68 65 20 54 63 6c 20 63 6f 6d 6d 61 6e 64   the Tcl command
8940: 20 6e 61 6d 65 20 2a 2f 0a 20 20 69 66 28 20 21   name */.  if( !
8950: 54 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64 49 6e  Tcl_GetCommandIn
8960: 66 6f 28 69 6e 74 65 72 70 2c 20 7a 44 62 2c 20  fo(interp, zDb, 
8970: 26 63 6d 64 49 6e 66 6f 29 20 29 7b 0a 20 20 20  &cmdInfo) ){.   
8980: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
8990: 74 28 69 6e 74 65 72 70 2c 20 22 63 6f 6d 6d 61  t(interp, "comma
89a0: 6e 64 20 6e 6f 74 20 66 6f 75 6e 64 3a 20 22 2c  nd not found: ",
89b0: 20 7a 44 62 2c 20 28 63 68 61 72 2a 29 30 29 3b   zDb, (char*)0);
89c0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
89d0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 64 62 20  ERROR;.  }.  db 
89e0: 3d 20 28 28 73 74 72 75 63 74 20 53 71 6c 69 74  = ((struct Sqlit
89f0: 65 44 62 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62 6a  eDb*)cmdInfo.obj
8a00: 43 6c 69 65 6e 74 44 61 74 61 29 2d 3e 64 62 3b  ClientData)->db;
8a10: 0a 20 20 61 73 73 65 72 74 28 64 62 29 3b 0a 0a  .  assert(db);..
8a20: 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 75 6e    /* Call the un
8a30: 64 65 72 6c 79 69 6e 67 20 43 20 66 75 6e 63 74  derlying C funct
8a40: 69 6f 6e 2e 20 49 66 20 61 6e 20 65 72 72 6f 72  ion. If an error
8a50: 20 6f 63 63 75 72 73 2c 20 73 65 74 20 72 63 20   occurs, set rc 
8a60: 74 6f 20 0a 20 20 2a 2a 20 54 43 4c 5f 45 52 52  to .  ** TCL_ERR
8a70: 4f 52 20 61 6e 64 20 6c 6f 61 64 20 61 6e 79 20  OR and load any 
8a80: 65 72 72 6f 72 20 73 74 72 69 6e 67 20 69 6e 74  error string int
8a90: 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65  o the interprete
8aa0: 72 2e 20 49 66 20 6e 6f 20 0a 20 20 2a 2a 20 65  r. If no .  ** e
8ab0: 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 73 65 74  rror occurs, set
8ac0: 20 72 63 20 74 6f 20 54 43 4c 5f 4f 4b 2e 0a 20   rc to TCL_OK.. 
8ad0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
8ae0: 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
8af0: 4e 53 49 4f 4e 0a 20 20 72 63 20 3d 20 53 51 4c  NSION.  rc = SQL
8b00: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7a 45 72  ITE_ERROR;.  zEr
8b10: 72 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  r = sqlite3_mpri
8b20: 6e 74 66 28 22 74 68 69 73 20 62 75 69 6c 64 20  ntf("this build 
8b30: 6f 6d 69 74 73 20 73 71 6c 69 74 65 33 5f 6c 6f  omits sqlite3_lo
8b40: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 22 29  ad_extension()")
8b50: 3b 0a 23 65 6c 73 65 0a 20 20 72 63 20 3d 20 73  ;.#else.  rc = s
8b60: 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65  qlite3_load_exte
8b70: 6e 73 69 6f 6e 28 64 62 2c 20 7a 46 69 6c 65 2c  nsion(db, zFile,
8b80: 20 7a 50 72 6f 63 2c 20 26 7a 45 72 72 29 3b 0a   zProc, &zErr);.
8b90: 23 65 6e 64 69 66 0a 20 20 69 66 28 20 72 63 21  #endif.  if( rc!
8ba0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
8bb0: 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
8bc0: 69 6e 74 65 72 70 2c 20 7a 45 72 72 20 3f 20 7a  interp, zErr ? z
8bd0: 45 72 72 20 3a 20 22 22 2c 20 54 43 4c 5f 56 4f  Err : "", TCL_VO
8be0: 4c 41 54 49 4c 45 29 3b 0a 20 20 20 20 72 63 20  LATILE);.    rc 
8bf0: 3d 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  = TCL_ERROR;.  }
8c00: 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 54  else{.    rc = T
8c10: 43 4c 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 73 71 6c  CL_OK;.  }.  sql
8c20: 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b  ite3_free(zErr);
8c30: 0a 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ..  return rc;.}
8c40: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
8c50: 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f  qlite3_enable_lo
8c60: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 44 42 2d  ad_extension DB-
8c70: 48 41 4e 44 4c 45 20 4f 4e 4f 46 46 0a 2a 2f 0a  HANDLE ONOFF.*/.
8c80: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
8c90: 65 6e 61 62 6c 65 5f 6c 6f 61 64 28 0a 20 20 43  enable_load(.  C
8ca0: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
8cb0: 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75 73 65  Data, /* Not use
8cc0: 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  d */.  Tcl_Inter
8cd0: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
8ce0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
8cf0: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
8d00: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
8d10: 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
8d20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
8d30: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
8d40: 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
8d50: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
8d60: 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
8d70: 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 43  ts */.){.  Tcl_C
8d80: 6d 64 49 6e 66 6f 20 63 6d 64 49 6e 66 6f 3b 0a  mdInfo cmdInfo;.
8d90: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
8da0: 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 69 6e   char *zDb;.  in
8db0: 74 20 6f 6e 6f 66 66 3b 0a 0a 20 20 69 66 28 20  t onoff;..  if( 
8dc0: 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
8dd0: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
8de0: 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
8df0: 20 22 44 42 2d 48 41 4e 44 4c 45 20 4f 4e 4f 46   "DB-HANDLE ONOF
8e00: 46 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  F");.    return 
8e10: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
8e20: 20 7a 44 62 20 3d 20 54 63 6c 5f 47 65 74 53 74   zDb = Tcl_GetSt
8e30: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 0a  ring(objv[1]);..
8e40: 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65    /* Extract the
8e50: 20 43 20 64 61 74 61 62 61 73 65 20 68 61 6e 64   C database hand
8e60: 6c 65 20 66 72 6f 6d 20 74 68 65 20 54 63 6c 20  le from the Tcl 
8e70: 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 20 2a 2f 0a  command name */.
8e80: 20 20 69 66 28 20 21 54 63 6c 5f 47 65 74 43 6f    if( !Tcl_GetCo
8e90: 6d 6d 61 6e 64 49 6e 66 6f 28 69 6e 74 65 72 70  mmandInfo(interp
8ea0: 2c 20 7a 44 62 2c 20 26 63 6d 64 49 6e 66 6f 29  , zDb, &cmdInfo)
8eb0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
8ec0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
8ed0: 20 22 63 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f   "command not fo
8ee0: 75 6e 64 3a 20 22 2c 20 7a 44 62 2c 20 28 63 68  und: ", zDb, (ch
8ef0: 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 65 74 75  ar*)0);.    retu
8f00: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
8f10: 7d 0a 20 20 64 62 20 3d 20 28 28 73 74 72 75 63  }.  db = ((struc
8f20: 74 20 53 71 6c 69 74 65 44 62 2a 29 63 6d 64 49  t SqliteDb*)cmdI
8f30: 6e 66 6f 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74  nfo.objClientDat
8f40: 61 29 2d 3e 64 62 3b 0a 20 20 61 73 73 65 72 74  a)->db;.  assert
8f50: 28 64 62 29 3b 0a 0a 20 20 2f 2a 20 47 65 74 20  (db);..  /* Get 
8f60: 74 68 65 20 6f 6e 6f 66 66 20 70 61 72 61 6d 65  the onoff parame
8f70: 74 65 72 20 2a 2f 0a 20 20 69 66 28 20 54 63 6c  ter */.  if( Tcl
8f80: 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f  _GetBooleanFromO
8f90: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
8fa0: 32 5d 2c 20 26 6f 6e 6f 66 66 29 20 29 7b 0a 20  2], &onoff) ){. 
8fb0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
8fc0: 52 4f 52 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66  ROR;.  }..#ifdef
8fd0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
8fe0: 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 54 63  D_EXTENSION.  Tc
8ff0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
9000: 6e 74 65 72 70 2c 20 22 74 68 69 73 20 62 75 69  nterp, "this bui
9010: 6c 64 20 6f 6d 69 74 73 20 73 71 6c 69 74 65 33  ld omits sqlite3
9020: 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  _load_extension(
9030: 29 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  )");.  return TC
9040: 4c 5f 45 52 52 4f 52 3b 0a 23 65 6c 73 65 0a 20  L_ERROR;.#else. 
9050: 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f   sqlite3_enable_
9060: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 64  load_extension(d
9070: 62 2c 20 6f 6e 6f 66 66 29 3b 0a 20 20 72 65 74  b, onoff);.  ret
9080: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 23 65 6e 64  urn TCL_OK;.#end
9090: 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  if.}../*.** Usag
90a0: 65 3a 20 20 73 71 6c 69 74 65 5f 61 62 6f 72 74  e:  sqlite_abort
90b0: 0a 2a 2a 0a 2a 2a 20 53 68 75 74 64 6f 77 6e 20  .**.** Shutdown 
90c0: 74 68 65 20 70 72 6f 63 65 73 73 20 69 6d 6d 65  the process imme
90d0: 64 69 61 74 65 6c 79 2e 20 20 54 68 69 73 20 69  diately.  This i
90e0: 73 20 6e 6f 74 20 61 20 63 6c 65 61 6e 20 73 68  s not a clean sh
90f0: 75 74 64 6f 77 6e 2e 0a 2a 2a 20 54 68 69 73 20  utdown..** This 
9100: 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20  command is used 
9110: 74 6f 20 74 65 73 74 20 74 68 65 20 72 65 63 6f  to test the reco
9120: 76 65 72 61 62 69 6c 69 74 79 20 6f 66 20 61 20  verability of a 
9130: 64 61 74 61 62 61 73 65 20 69 6e 0a 2a 2a 20 74  database in.** t
9140: 68 65 20 65 76 65 6e 74 20 6f 66 20 61 20 70 72  he event of a pr
9150: 6f 67 72 61 6d 20 63 72 61 73 68 2e 0a 2a 2f 0a  ogram crash..*/.
9160: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
9170: 65 5f 61 62 6f 72 74 28 0a 20 20 76 6f 69 64 20  e_abort(.  void 
9180: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
9190: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
91a0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
91b0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
91c0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
91d0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
91e0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
91f0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
9200: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
9210: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
9220: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
9230: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
9240: 7b 0a 20 20 61 73 73 65 72 74 28 20 69 6e 74 65  {.  assert( inte
9250: 72 70 3d 3d 30 20 29 3b 20 20 20 2f 2a 20 54 68  rp==0 );   /* Th
9260: 69 73 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 66  is will always f
9270: 61 69 6c 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20  ail */.  return 
9280: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
9290: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   The following r
92a0: 6f 75 74 69 6e 65 20 69 73 20 61 20 75 73 65 72  outine is a user
92b0: 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e  -defined SQL fun
92c0: 63 74 69 6f 6e 20 77 68 6f 73 65 20 70 75 72 70  ction whose purp
92d0: 6f 73 65 0a 2a 2a 20 69 73 20 74 6f 20 74 65 73  ose.** is to tes
92e0: 74 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 74  t the sqlite_set
92f0: 5f 72 65 73 75 6c 74 28 29 20 41 50 49 2e 0a 2a  _result() API..*
9300: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 65  /.static void te
9310: 73 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63  stFunc(sqlite3_c
9320: 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c  ontext *context,
9330: 20 69 6e 74 20 61 72 67 63 2c 20 73 71 6c 69 74   int argc, sqlit
9340: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 29  e3_value **argv)
9350: 7b 0a 20 20 77 68 69 6c 65 28 20 61 72 67 63 3e  {.  while( argc>
9360: 3d 32 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20  =2 ){.    const 
9370: 63 68 61 72 20 2a 7a 41 72 67 30 20 3d 20 28 63  char *zArg0 = (c
9380: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
9390: 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29  ue_text(argv[0])
93a0: 3b 0a 20 20 20 20 69 66 28 20 7a 41 72 67 30 20  ;.    if( zArg0 
93b0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 30 3d 3d  ){.      if( 0==
93c0: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
93d0: 41 72 67 30 2c 20 22 69 6e 74 22 29 20 29 7b 0a  Arg0, "int") ){.
93e0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
93f0: 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65  result_int(conte
9400: 78 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  xt, sqlite3_valu
9410: 65 5f 69 6e 74 28 61 72 67 76 5b 31 5d 29 29 3b  e_int(argv[1]));
9420: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
9430: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
9440: 7a 41 72 67 30 2c 22 69 6e 74 36 34 22 29 3d 3d  zArg0,"int64")==
9450: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
9460: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36  ite3_result_int6
9470: 34 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69 74  4(context, sqlit
9480: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 61  e3_value_int64(a
9490: 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20  rgv[1]));.      
94a0: 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
94b0: 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22  3StrICmp(zArg0,"
94c0: 73 74 72 69 6e 67 22 29 3d 3d 30 20 29 7b 0a 20  string")==0 ){. 
94d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
94e0: 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65  esult_text(conte
94f0: 78 74 2c 20 28 63 68 61 72 2a 29 73 71 6c 69 74  xt, (char*)sqlit
9500: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72  e3_value_text(ar
9510: 67 76 5b 31 5d 29 2c 20 2d 31 2c 0a 20 20 20 20  gv[1]), -1,.    
9520: 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54          SQLITE_T
9530: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20  RANSIENT);.     
9540: 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
9550: 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c  e3StrICmp(zArg0,
9560: 22 64 6f 75 62 6c 65 22 29 3d 3d 30 20 29 7b 0a  "double")==0 ){.
9570: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
9580: 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f  result_double(co
9590: 6e 74 65 78 74 2c 20 73 71 6c 69 74 65 33 5f 76  ntext, sqlite3_v
95a0: 61 6c 75 65 5f 64 6f 75 62 6c 65 28 61 72 67 76  alue_double(argv
95b0: 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c  [1]));.      }el
95c0: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
95d0: 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 6e 75 6c  rICmp(zArg0,"nul
95e0: 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  l")==0 ){.      
95f0: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
9600: 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0a  _null(context);.
9610: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
9620: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
9630: 41 72 67 30 2c 22 76 61 6c 75 65 22 29 3d 3d 30  Arg0,"value")==0
9640: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
9650: 74 65 33 5f 72 65 73 75 6c 74 5f 76 61 6c 75 65  te3_result_value
9660: 28 63 6f 6e 74 65 78 74 2c 20 61 72 67 76 5b 73  (context, argv[s
9670: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
9680: 28 61 72 67 76 5b 31 5d 29 5d 29 3b 0a 20 20 20  (argv[1])]);.   
9690: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
96a0: 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74    goto error_out
96b0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
96c0: 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  lse{.      goto 
96d0: 65 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 7d  error_out;.    }
96e0: 0a 20 20 20 20 61 72 67 63 20 2d 3d 20 32 3b 0a  .    argc -= 2;.
96f0: 20 20 20 20 61 72 67 76 20 2b 3d 20 32 3b 0a 20      argv += 2;. 
9700: 20 7d 0a 20 20 72 65 74 75 72 6e 3b 0a 0a 65 72   }.  return;..er
9710: 72 6f 72 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74  ror_out:.  sqlit
9720: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
9730: 63 6f 6e 74 65 78 74 2c 22 66 69 72 73 74 20 61  context,"first a
9740: 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64 20 62  rgument should b
9750: 65 20 6f 6e 65 20 6f 66 3a 20 22 0a 20 20 20 20  e one of: ".    
9760: 20 20 22 69 6e 74 20 69 6e 74 36 34 20 73 74 72    "int int64 str
9770: 69 6e 67 20 64 6f 75 62 6c 65 20 6e 75 6c 6c 20  ing double null 
9780: 76 61 6c 75 65 22 2c 20 2d 31 29 3b 0a 7d 0a 0a  value", -1);.}..
9790: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73  /*.** Usage:   s
97a0: 71 6c 69 74 65 5f 72 65 67 69 73 74 65 72 5f 74  qlite_register_t
97b0: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 20 44 42  est_function  DB
97c0: 20 20 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 67    NAME.**.** Reg
97d0: 69 73 74 65 72 20 74 68 65 20 74 65 73 74 20 53  ister the test S
97e0: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 6e 20 74  QL function on t
97f0: 68 65 20 64 61 74 61 62 61 73 65 20 44 42 20 75  he database DB u
9800: 6e 64 65 72 20 74 68 65 20 6e 61 6d 65 20 4e 41  nder the name NA
9810: 4d 45 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ME..*/.static in
9820: 74 20 74 65 73 74 5f 72 65 67 69 73 74 65 72 5f  t test_register_
9830: 66 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  func(.  void *No
9840: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
9850: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
9860: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
9870: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
9880: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
9890: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
98b0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
98c0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
98d0: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
98e0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
98f0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
9900: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
9910: 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 61 72  int rc;.  if( ar
9920: 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
9930: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
9940: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
9950: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
9960: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20  "", argv[0], .  
9970: 20 20 20 20 20 22 20 44 42 20 46 55 4e 43 54 49       " DB FUNCTI
9980: 4f 4e 2d 4e 41 4d 45 22 2c 20 30 29 3b 0a 20 20  ON-NAME", 0);.  
9990: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
99a0: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
99b0: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
99c0: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
99d0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
99e0: 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
99f0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
9a00: 69 6f 6e 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c  ion(db, argv[2],
9a10: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38   -1, SQLITE_UTF8
9a20: 2c 20 30 2c 20 0a 20 20 20 20 20 20 74 65 73 74  , 0, .      test
9a30: 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20 69  Func, 0, 0);.  i
9a40: 66 28 20 72 63 21 3d 30 20 29 7b 0a 20 20 20 20  f( rc!=0 ){.    
9a50: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
9a60: 28 69 6e 74 65 72 70 2c 20 73 71 6c 69 74 65 33  (interp, sqlite3
9a70: 45 72 72 53 74 72 28 72 63 29 2c 20 30 29 3b 0a  ErrStr(rc), 0);.
9a80: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
9a90: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
9aa0: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
9ab0: 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
9ac0: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
9ad0: 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20  ERROR;.  return 
9ae0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
9af0: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
9b00: 5f 66 69 6e 61 6c 69 7a 65 20 20 53 54 4d 54 20  _finalize  STMT 
9b10: 0a 2a 2a 0a 2a 2a 20 46 69 6e 61 6c 69 7a 65 20  .**.** Finalize 
9b20: 61 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e 64  a statement hand
9b30: 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  le..*/.static in
9b40: 74 20 74 65 73 74 5f 66 69 6e 61 6c 69 7a 65 28  t test_finalize(
9b50: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
9b60: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
9b70: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
9b80: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
9b90: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
9ba0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
9bb0: 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
9bc0: 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  rc;.  sqlite3 *d
9bd0: 62 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  b;..  if( objc!=
9be0: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
9bf0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
9c00: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
9c10: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
9c20: 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53          Tcl_GetS
9c30: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
9c40: 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54 4d  v[0], 0), " <STM
9c50: 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  T>", 0);.    ret
9c60: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
9c70: 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
9c80: 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
9c90: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
9ca0: 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
9cb0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
9cc0: 52 4f 52 3b 0a 0a 20 20 69 66 28 20 70 53 74 6d  ROR;..  if( pStm
9cd0: 74 20 29 7b 0a 20 20 20 20 64 62 20 3d 20 53 74  t ){.    db = St
9ce0: 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 3b 0a 20  mtToDb(pStmt);. 
9cf0: 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
9d00: 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
9d10: 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75  );.  Tcl_SetResu
9d20: 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72  lt(interp, (char
9d30: 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29   *)errorName(rc)
9d40: 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20  , TCL_STATIC);. 
9d50: 20 69 66 28 20 64 62 20 26 26 20 73 71 6c 69 74   if( db && sqlit
9d60: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
9d70: 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20  terp, db, rc) ) 
9d80: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
9d90: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
9da0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
9db0: 65 3a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65  e:  sqlite3_rese
9dc0: 74 20 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52  t  STMT .**.** R
9dd0: 65 73 65 74 20 61 20 73 74 61 74 65 6d 65 6e 74  eset a statement
9de0: 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74   handle..*/.stat
9df0: 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65 73 65  ic int test_rese
9e00: 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  t(.  void * clie
9e10: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
9e20: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
9e30: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
9e40: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
9e50: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
9e60: 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
9e70: 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
9e80: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
9e90: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
9ea0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
9eb0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
9ec0: 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
9ed0: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
9ee0: 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c  objv[0], 0), " <
9ef0: 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20  STMT>", 0);.    
9f00: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
9f10: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
9f20: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
9f30: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
9f40: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
9f50: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
9f60: 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
9f70: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70 53  sqlite3_reset(pS
9f80: 74 6d 74 29 3b 0a 20 20 69 66 28 20 70 53 74 6d  tmt);.  if( pStm
9f90: 74 20 26 26 20 73 71 6c 69 74 65 33 54 65 73 74  t && sqlite3Test
9fa0: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
9fb0: 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c  StmtToDb(pStmt),
9fc0: 20 72 63 29 20 29 7b 0a 20 20 20 20 72 65 74 75   rc) ){.    retu
9fd0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
9fe0: 7d 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c  }.  Tcl_SetResul
9ff0: 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
a000: 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
a010: 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 2f 2a   TCL_STATIC);./*
a020: 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
a030: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
a040: 52 3b 0a 20 20 7d 0a 2a 2f 0a 20 20 72 65 74 75  R;.  }.*/.  retu
a050: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
a060: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
a070: 74 65 33 5f 65 78 70 69 72 65 64 20 53 54 4d 54  te3_expired STMT
a080: 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54   .**.** Return T
a090: 52 55 45 20 69 66 20 61 20 72 65 63 6f 6d 70 69  RUE if a recompi
a0a0: 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74  lation of the st
a0b0: 61 74 65 6d 65 6e 74 20 69 73 20 72 65 63 6f 6d  atement is recom
a0c0: 6d 65 6e 64 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  mended..*/.stati
a0d0: 63 20 69 6e 74 20 74 65 73 74 5f 65 78 70 69 72  c int test_expir
a0e0: 65 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  ed(.  void * cli
a0f0: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
a100: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
a110: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
a120: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
a130: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
a140: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
a150: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
a160: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
a170: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
a180: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
a190: 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
a1a0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
a1b0: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
a1c0: 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29  ), " <STMT>", 0)
a1d0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
a1e0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
a1f0: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
a200: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
a210: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
a220: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
a230: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
a240: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
a250: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42  interp, Tcl_NewB
a260: 6f 6f 6c 65 61 6e 4f 62 6a 28 73 71 6c 69 74 65  ooleanObj(sqlite
a270: 33 5f 65 78 70 69 72 65 64 28 70 53 74 6d 74 29  3_expired(pStmt)
a280: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
a290: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
a2a0: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 74 72  age:  sqlite3_tr
a2b0: 61 6e 73 66 65 72 5f 62 69 6e 64 69 6e 67 73 20  ansfer_bindings 
a2c0: 46 52 4f 4d 53 54 4d 54 20 54 4f 53 54 4d 54 0a  FROMSTMT TOSTMT.
a2d0: 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 61  **.** Transfer a
a2e0: 6c 6c 20 62 69 6e 64 69 6e 67 73 20 66 72 6f 6d  ll bindings from
a2f0: 20 46 52 4f 4d 53 54 4d 54 20 6f 76 65 72 20 74   FROMSTMT over t
a300: 6f 20 54 4f 53 54 4d 54 0a 2a 2f 0a 73 74 61 74  o TOSTMT.*/.stat
a310: 69 63 20 69 6e 74 20 74 65 73 74 5f 74 72 61 6e  ic int test_tran
a320: 73 66 65 72 5f 62 69 6e 64 28 0a 20 20 76 6f 69  sfer_bind(.  voi
a330: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
a340: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
a350: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
a360: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
a370: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
a380: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
a390: 6d 74 31 2c 20 2a 70 53 74 6d 74 32 3b 0a 20 20  mt1, *pStmt2;.  
a3a0: 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
a3b0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
a3c0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
a3d0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
a3e0: 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
a3f0: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
a400: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
a410: 30 29 2c 20 22 20 46 52 4f 4d 2d 53 54 4d 54 20  0), " FROM-STMT 
a420: 54 4f 2d 53 54 4d 54 22 2c 20 30 29 3b 0a 20 20  TO-STMT", 0);.  
a430: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
a440: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
a450: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
a460: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
a470: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
a480: 74 6d 74 31 29 29 20 72 65 74 75 72 6e 20 54 43  tmt1)) return TC
a490: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 67  L_ERROR;.  if( g
a4a0: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
a4b0: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
a4c0: 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 2c 20 26 70  ing(objv[2]), &p
a4d0: 53 74 6d 74 32 29 29 20 72 65 74 75 72 6e 20 54  Stmt2)) return T
a4e0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
a4f0: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
a500: 65 72 70 2c 20 0a 20 20 20 20 20 54 63 6c 5f 4e  erp, .     Tcl_N
a510: 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
a520: 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 69 6e  _transfer_bindin
a530: 67 73 28 70 53 74 6d 74 31 2c 70 53 74 6d 74 32  gs(pStmt1,pStmt2
a540: 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  )));.  return TC
a550: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
a560: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 63  sage:  sqlite3_c
a570: 68 61 6e 67 65 73 20 44 42 0a 2a 2a 0a 2a 2a 20  hanges DB.**.** 
a580: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
a590: 72 20 6f 66 20 63 68 61 6e 67 65 73 20 6d 61 64  r of changes mad
a5a0: 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  e to the databas
a5b0: 65 20 62 79 20 74 68 65 20 6c 61 73 74 20 53 51  e by the last SQ
a5c0: 4c 0a 2a 2a 20 65 78 65 63 75 74 69 6f 6e 2e 0a  L.** execution..
a5d0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
a5e0: 73 74 5f 63 68 61 6e 67 65 73 28 0a 20 20 76 6f  st_changes(.  vo
a5f0: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
a600: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
a610: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
a620: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
a630: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
a640: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
a650: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
a660: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
a670: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
a680: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
a690: 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
a6a0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
a6b0: 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30  jv[0]), " DB", 0
a6c0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
a6d0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
a6e0: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
a6f0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
a700: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
a710: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
a720: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53  L_ERROR;.  Tcl_S
a730: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
a740: 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
a750: 6a 28 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  j(sqlite3_change
a760: 73 28 64 62 29 29 29 3b 0a 20 20 72 65 74 75 72  s(db)));.  retur
a770: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
a780: 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 22  ** This is the "
a790: 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75  static_bind_valu
a7a0: 65 22 20 74 68 61 74 20 76 61 72 69 61 62 6c 65  e" that variable
a7b0: 73 20 61 72 65 20 62 6f 75 6e 64 20 74 6f 20 77  s are bound to w
a7c0: 68 65 6e 0a 2a 2a 20 74 68 65 20 46 4c 41 47 20  hen.** the FLAG 
a7d0: 6f 70 74 69 6f 6e 20 6f 66 20 73 71 6c 69 74 65  option of sqlite
a7e0: 33 5f 62 69 6e 64 20 69 73 20 22 73 74 61 74 69  3_bind is "stati
a7f0: 63 22 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61  c".*/.static cha
a800: 72 20 2a 73 71 6c 69 74 65 5f 73 74 61 74 69 63  r *sqlite_static
a810: 5f 62 69 6e 64 5f 76 61 6c 75 65 20 3d 20 30 3b  _bind_value = 0;
a820: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
a830: 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 6e  te_static_bind_n
a840: 62 79 74 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a  byte = 0;../*.**
a850: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
a860: 5f 62 69 6e 64 20 20 56 4d 20 20 49 44 58 20 20  _bind  VM  IDX  
a870: 56 41 4c 55 45 20 20 46 4c 41 47 53 0a 2a 2a 0a  VALUE  FLAGS.**.
a880: 2a 2a 20 53 65 74 73 20 74 68 65 20 76 61 6c 75  ** Sets the valu
a890: 65 20 6f 66 20 74 68 65 20 49 44 58 2d 74 68 20  e of the IDX-th 
a8a0: 6f 63 63 75 72 61 6e 63 65 20 6f 66 20 22 3f 22  occurance of "?"
a8b0: 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
a8c0: 20 53 51 4c 0a 2a 2a 20 73 74 72 69 6e 67 2e 20   SQL.** string. 
a8d0: 20 56 41 4c 55 45 20 69 73 20 74 68 65 20 6e 65   VALUE is the ne
a8e0: 77 20 76 61 6c 75 65 2e 20 20 49 66 20 46 4c 41  w value.  If FLA
a8f0: 47 53 3d 3d 22 6e 75 6c 6c 22 20 74 68 65 6e 20  GS=="null" then 
a900: 56 41 4c 55 45 20 69 73 0a 2a 2a 20 69 67 6e 6f  VALUE is.** igno
a910: 72 65 64 20 61 6e 64 20 74 68 65 20 76 61 6c 75  red and the valu
a920: 65 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  e is set to NULL
a930: 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 73 74  .  If FLAGS=="st
a940: 61 74 69 63 22 20 74 68 65 6e 0a 2a 2a 20 74 68  atic" then.** th
a950: 65 20 76 61 6c 75 65 20 69 73 20 73 65 74 20 74  e value is set t
a960: 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61  o the value of a
a970: 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65   static variable
a980: 20 6e 61 6d 65 64 0a 2a 2a 20 22 73 71 6c 69 74   named.** "sqlit
a990: 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61  e_static_bind_va
a9a0: 6c 75 65 22 2e 20 20 49 66 20 46 4c 41 47 53 3d  lue".  If FLAGS=
a9b0: 3d 22 6e 6f 72 6d 61 6c 22 20 74 68 65 6e 20 61  ="normal" then a
a9c0: 20 63 6f 70 79 0a 2a 2a 20 6f 66 20 74 68 65 20   copy.** of the 
a9d0: 56 41 4c 55 45 20 69 73 20 6d 61 64 65 2e 20 20  VALUE is made.  
a9e0: 49 66 20 46 4c 41 47 53 3d 3d 22 62 6c 6f 62 31  If FLAGS=="blob1
a9f0: 30 22 20 74 68 65 6e 20 61 20 56 41 4c 55 45 20  0" then a VALUE 
aa00: 69 73 20 69 67 6e 6f 72 65 64 0a 2a 2a 20 61 6e  is ignored.** an
aa10: 20 61 20 31 30 2d 62 79 74 65 20 62 6c 6f 62 20   a 10-byte blob 
aa20: 22 61 62 63 5c 30 30 30 78 79 7a 5c 30 30 30 70  "abc\000xyz\000p
aa30: 71 22 20 69 73 20 69 6e 73 65 72 74 65 64 2e 0a  q" is inserted..
aa40: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
aa50: 73 74 5f 62 69 6e 64 28 0a 20 20 76 6f 69 64 20  st_bind(.  void 
aa60: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
aa70: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
aa80: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
aa90: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
aaa0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
aab0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
aac0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
aad0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
aae0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
aaf0: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
ab00: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
ab10: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
ab20: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
ab30: 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72   *pStmt;.  int r
ab40: 63 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  c;.  int idx;.  
ab50: 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20  if( argc!=5 ){. 
ab60: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
ab70: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
ab80: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
ab90: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
aba0: 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 56 4d 20  ], .       " VM 
abb0: 49 44 58 20 56 41 4c 55 45 20 28 6e 75 6c 6c 7c  IDX VALUE (null|
abc0: 73 74 61 74 69 63 7c 6e 6f 72 6d 61 6c 29 5c 22  static|normal)\"
abd0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
abe0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
abf0: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
ac00: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
ac10: 67 76 5b 31 5d 2c 20 26 70 53 74 6d 74 29 20 29  gv[1], &pStmt) )
ac20: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
ac30: 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
ac40: 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76  Int(interp, argv
ac50: 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74  [2], &idx) ) ret
ac60: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
ac70: 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76   if( strcmp(argv
ac80: 5b 34 5d 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29  [4],"null")==0 )
ac90: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
aca0: 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53 74  e3_bind_null(pSt
acb0: 6d 74 2c 20 69 64 78 29 3b 0a 20 20 7d 65 6c 73  mt, idx);.  }els
acc0: 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67  e if( strcmp(arg
acd0: 76 5b 34 5d 2c 22 73 74 61 74 69 63 22 29 3d 3d  v[4],"static")==
ace0: 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
acf0: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
ad00: 70 53 74 6d 74 2c 20 69 64 78 2c 20 73 71 6c 69  pStmt, idx, sqli
ad10: 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76  te_static_bind_v
ad20: 61 6c 75 65 2c 20 2d 31 2c 20 30 29 3b 0a 20 20  alue, -1, 0);.  
ad30: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
ad40: 28 61 72 67 76 5b 34 5d 2c 22 73 74 61 74 69 63  (argv[4],"static
ad50: 2d 6e 62 79 74 65 73 22 29 3d 3d 30 20 29 7b 0a  -nbytes")==0 ){.
ad60: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
ad70: 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74  _bind_text(pStmt
ad80: 2c 20 69 64 78 2c 20 73 71 6c 69 74 65 5f 73 74  , idx, sqlite_st
ad90: 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 2c  atic_bind_value,
ada0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
adb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
adc0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 5f 73          sqlite_s
add0: 74 61 74 69 63 5f 62 69 6e 64 5f 6e 62 79 74 65  tatic_bind_nbyte
ade0: 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  , 0);.  }else if
adf0: 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b 34 5d  ( strcmp(argv[4]
ae00: 2c 22 6e 6f 72 6d 61 6c 22 29 3d 3d 30 20 29 7b  ,"normal")==0 ){
ae10: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
ae20: 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d  3_bind_text(pStm
ae30: 74 2c 20 69 64 78 2c 20 61 72 67 76 5b 33 5d 2c  t, idx, argv[3],
ae40: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e   -1, SQLITE_TRAN
ae50: 53 49 45 4e 54 29 3b 0a 20 20 7d 65 6c 73 65 20  SIENT);.  }else 
ae60: 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b  if( strcmp(argv[
ae70: 34 5d 2c 22 62 6c 6f 62 31 30 22 29 3d 3d 30 20  4],"blob10")==0 
ae80: 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
ae90: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53  te3_bind_text(pS
aea0: 74 6d 74 2c 20 69 64 78 2c 20 22 61 62 63 5c 30  tmt, idx, "abc\0
aeb0: 30 30 78 79 7a 5c 30 30 30 70 71 22 2c 20 31 30  00xyz\000pq", 10
aec0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
aed0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 54  ;.  }else{.    T
aee0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
aef0: 69 6e 74 65 72 70 2c 20 22 34 74 68 20 61 72 67  interp, "4th arg
af00: 75 6d 65 6e 74 20 73 68 6f 75 6c 64 20 62 65 20  ument should be 
af10: 22 0a 20 20 20 20 20 20 20 20 22 5c 22 6e 75 6c  ".        "\"nul
af20: 6c 5c 22 20 6f 72 20 5c 22 73 74 61 74 69 63 5c  l\" or \"static\
af30: 22 20 6f 72 20 5c 22 6e 6f 72 6d 61 6c 5c 22 22  " or \"normal\""
af40: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
af50: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
af60: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
af70: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
af80: 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29   StmtToDb(pStmt)
af90: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
afa0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
afb0: 72 63 20 29 7b 0a 20 20 20 20 63 68 61 72 20 7a  rc ){.    char z
afc0: 42 75 66 5b 35 30 5d 3b 0a 20 20 20 20 73 70 72  Buf[50];.    spr
afd0: 69 6e 74 66 28 7a 42 75 66 2c 20 22 28 25 64 29  intf(zBuf, "(%d)
afe0: 20 22 2c 20 72 63 29 3b 0a 20 20 20 20 54 63 6c   ", rc);.    Tcl
aff0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
b000: 74 65 72 70 2c 20 7a 42 75 66 2c 20 73 71 6c 69  terp, zBuf, sqli
b010: 74 65 33 45 72 72 53 74 72 28 72 63 29 2c 20 30  te3ErrStr(rc), 0
b020: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
b030: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
b040: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
b050: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
b060: 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a  OMIT_UTF16./*.**
b070: 20 55 73 61 67 65 3a 20 61 64 64 5f 74 65 73 74   Usage: add_test
b080: 5f 63 6f 6c 6c 61 74 65 20 3c 64 62 20 70 74 72  _collate <db ptr
b090: 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c  > <utf8> <utf16l
b0a0: 65 3e 20 3c 75 74 66 31 36 62 65 3e 0a 2a 2a 0a  e> <utf16be>.**.
b0b0: 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
b0c0: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
b0d0: 20 74 68 61 74 20 53 51 4c 69 74 65 20 73 65 6c   that SQLite sel
b0e0: 65 63 74 73 20 74 68 65 20 63 6f 72 72 65 63 74  ects the correct
b0f0: 20 63 6f 6c 6c 61 74 69 6f 6e 0a 2a 2a 20 73 65   collation.** se
b100: 71 75 65 6e 63 65 20 63 61 6c 6c 62 61 63 6b 20  quence callback 
b110: 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 76 65  when multiple ve
b120: 72 73 69 6f 6e 73 20 28 66 6f 72 20 64 69 66 66  rsions (for diff
b130: 65 72 65 6e 74 20 74 65 78 74 20 65 6e 63 6f 64  erent text encod
b140: 69 6e 67 73 29 0a 2a 2a 20 61 72 65 20 61 76 61  ings).** are ava
b150: 69 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 43 61  ilable..**.** Ca
b160: 6c 6c 69 6e 67 20 74 68 69 73 20 72 6f 75 74 69  lling this routi
b170: 6e 65 20 72 65 67 69 73 74 65 72 73 20 74 68 65  ne registers the
b180: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
b190: 6e 63 65 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74  nce "test_collat
b1a0: 65 22 0a 2a 2a 20 77 69 74 68 20 64 61 74 61 62  e".** with datab
b1b0: 61 73 65 20 68 61 6e 64 6c 65 20 3c 64 62 3e 2e  ase handle <db>.
b1c0: 20 54 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75   The second argu
b1d0: 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 61 20 6c  ment must be a l
b1e0: 69 73 74 20 6f 66 20 74 68 72 65 65 0a 2a 2a 20  ist of three.** 
b1f0: 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 73 2e 20  boolean values. 
b200: 49 66 20 74 68 65 20 66 69 72 73 74 20 69 73 20  If the first is 
b210: 74 72 75 65 2c 20 74 68 65 6e 20 61 20 76 65 72  true, then a ver
b220: 73 69 6f 6e 20 6f 66 20 74 65 73 74 5f 63 6f 6c  sion of test_col
b230: 6c 61 74 65 20 69 73 0a 2a 2a 20 72 65 67 69 73  late is.** regis
b240: 74 65 72 65 64 20 66 6f 72 20 55 54 46 2d 38 2c  tered for UTF-8,
b250: 20 69 66 20 74 68 65 20 73 65 63 6f 6e 64 20 69   if the second i
b260: 73 20 74 72 75 65 2c 20 61 20 76 65 72 73 69 6f  s true, a versio
b270: 6e 20 69 73 20 72 65 67 69 73 74 65 72 65 64 20  n is registered 
b280: 66 6f 72 0a 2a 2a 20 55 54 46 2d 31 36 6c 65 2c  for.** UTF-16le,
b290: 20 69 66 20 74 68 65 20 74 68 69 72 64 20 69 73   if the third is
b2a0: 20 74 72 75 65 2c 20 61 20 55 54 46 2d 31 36 62   true, a UTF-16b
b2b0: 65 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76 61  e version is ava
b2c0: 69 6c 61 62 6c 65 2e 0a 2a 2a 20 50 72 65 76 69  ilable..** Previ
b2d0: 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ous versions of 
b2e0: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 61 72 65  test_collate are
b2f0: 20 64 65 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20   deleted..**.** 
b300: 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  The collation se
b310: 71 75 65 6e 63 65 20 74 65 73 74 5f 63 6f 6c 6c  quence test_coll
b320: 61 74 65 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  ate is implement
b330: 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68  ed by calling th
b340: 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 54  e.** following T
b350: 43 4c 20 73 63 72 69 70 74 3a 0a 2a 2a 0a 2a 2a  CL script:.**.**
b360: 20 20 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65     "test_collate
b370: 20 3c 65 6e 63 3e 20 3c 6c 68 73 3e 20 3c 72 68   <enc> <lhs> <rh
b380: 73 3e 22 0a 2a 2a 0a 2a 2a 20 54 68 65 20 3c 6c  s>".**.** The <l
b390: 68 73 3e 20 61 6e 64 20 3c 72 68 73 3e 20 61 72  hs> and <rhs> ar
b3a0: 65 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73  e the two values
b3b0: 20 62 65 69 6e 67 20 63 6f 6d 70 61 72 65 64 2c   being compared,
b3c0: 20 65 6e 63 6f 64 65 64 20 69 6e 20 55 54 46 2d   encoded in UTF-
b3d0: 38 2e 0a 2a 2a 20 54 68 65 20 3c 65 6e 63 3e 20  8..** The <enc> 
b3e0: 70 61 72 61 6d 65 74 65 72 20 69 73 20 74 68 65  parameter is the
b3f0: 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65   encoding of the
b400: 20 63 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 74   collation funct
b410: 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 53 51 4c 69  ion that.** SQLi
b420: 74 65 20 73 65 6c 65 63 74 65 64 20 74 6f 20 63  te selected to c
b430: 61 6c 6c 2e 20 54 68 65 20 54 43 4c 20 74 65 73  all. The TCL tes
b440: 74 20 73 63 72 69 70 74 20 69 6d 70 6c 65 6d 65  t script impleme
b450: 6e 74 73 20 74 68 65 0a 2a 2a 20 22 74 65 73 74  nts the.** "test
b460: 5f 63 6f 6c 6c 61 74 65 22 20 70 72 6f 63 2e 0a  _collate" proc..
b470: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  **.** Note that 
b480: 74 68 69 73 20 77 69 6c 6c 20 6f 6e 6c 79 20 77  this will only w
b490: 6f 72 6b 20 77 69 74 68 20 6f 6e 65 20 69 6e 74  ork with one int
b4a0: 65 70 72 65 74 65 72 20 61 74 20 61 20 74 69 6d  epreter at a tim
b4b0: 65 2c 20 61 73 20 74 68 65 0a 2a 2a 20 69 6e 74  e, as the.** int
b4c0: 65 72 70 20 70 6f 69 6e 74 65 72 20 74 6f 20 75  erp pointer to u
b4d0: 73 65 20 77 68 65 6e 20 65 76 61 6c 75 61 74 69  se when evaluati
b4e0: 6e 67 20 74 68 65 20 54 43 4c 20 73 63 72 69 70  ng the TCL scrip
b4f0: 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e 0a 2a  t is stored in.*
b500: 2a 20 70 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e  * pTestCollateIn
b510: 74 65 72 70 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  terp..*/.static 
b520: 54 63 6c 5f 49 6e 74 65 72 70 2a 20 70 54 65 73  Tcl_Interp* pTes
b530: 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 3b 0a  tCollateInterp;.
b540: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
b550: 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 28 0a 20 20  collate_func(.  
b560: 76 6f 69 64 20 2a 70 43 74 78 2c 20 0a 20 20 69  void *pCtx, .  i
b570: 6e 74 20 6e 41 2c 20 63 6f 6e 73 74 20 76 6f 69  nt nA, const voi
b580: 64 20 2a 7a 41 2c 0a 20 20 69 6e 74 20 6e 42 2c  d *zA,.  int nB,
b590: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 42 0a   const void *zB.
b5a0: 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  ){.  Tcl_Interp 
b5b0: 2a 69 20 3d 20 70 54 65 73 74 43 6f 6c 6c 61 74  *i = pTestCollat
b5c0: 65 49 6e 74 65 72 70 3b 0a 20 20 69 6e 74 20 65  eInterp;.  int e
b5d0: 6e 63 69 6e 20 3d 20 28 69 6e 74 29 70 43 74 78  ncin = (int)pCtx
b5e0: 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  ;.  int res;.  i
b5f0: 6e 74 20 6e 3b 0a 0a 20 20 73 71 6c 69 74 65 33  nt n;..  sqlite3
b600: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20  _value *pVal;.  
b610: 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 0a 20 20  Tcl_Obj *pX;..  
b620: 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69  pX = Tcl_NewStri
b630: 6e 67 4f 62 6a 28 22 74 65 73 74 5f 63 6f 6c 6c  ngObj("test_coll
b640: 61 74 65 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c  ate", -1);.  Tcl
b650: 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 58  _IncrRefCount(pX
b660: 29 3b 0a 0a 20 20 73 77 69 74 63 68 28 20 65 6e  );..  switch( en
b670: 63 69 6e 20 29 7b 0a 20 20 20 20 63 61 73 65 20  cin ){.    case 
b680: 53 51 4c 49 54 45 5f 55 54 46 38 3a 0a 20 20 20  SQLITE_UTF8:.   
b690: 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70     Tcl_ListObjAp
b6a0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58  pendElement(i,pX
b6b0: 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62  ,Tcl_NewStringOb
b6c0: 6a 28 22 55 54 46 2d 38 22 2c 2d 31 29 29 3b 0a  j("UTF-8",-1));.
b6d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
b6e0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 55 54 46   case SQLITE_UTF
b6f0: 31 36 4c 45 3a 0a 20 20 20 20 20 20 54 63 6c 5f  16LE:.      Tcl_
b700: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
b710: 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e 65  ment(i,pX,Tcl_Ne
b720: 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d  wStringObj("UTF-
b730: 31 36 4c 45 22 2c 2d 31 29 29 3b 0a 20 20 20 20  16LE",-1));.    
b740: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
b750: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  e SQLITE_UTF16BE
b760: 3a 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69 73 74  :.      Tcl_List
b770: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
b780: 28 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72  (i,pX,Tcl_NewStr
b790: 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 42 45  ingObj("UTF-16BE
b7a0: 22 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20 62 72  ",-1));.      br
b7b0: 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
b7c0: 3a 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 30  :.      assert(0
b7d0: 29 3b 0a 20 20 7d 0a 0a 20 20 70 56 61 6c 20 3d  );.  }..  pVal =
b7e0: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77   sqlite3ValueNew
b7f0: 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c  ();.  sqlite3Val
b800: 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 6e  ueSetStr(pVal, n
b810: 41 2c 20 7a 41 2c 20 65 6e 63 69 6e 2c 20 53 51  A, zA, encin, SQ
b820: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
b830: 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  n = sqlite3_valu
b840: 65 5f 62 79 74 65 73 28 70 56 61 6c 29 3b 0a 20  e_bytes(pVal);. 
b850: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
b860: 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 0a  ndElement(i,pX,.
b870: 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72        Tcl_NewStr
b880: 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73 71  ingObj((char*)sq
b890: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
b8a0: 28 70 56 61 6c 29 2c 6e 29 29 3b 0a 20 20 73 71  (pVal),n));.  sq
b8b0: 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72  lite3ValueSetStr
b8c0: 28 70 56 61 6c 2c 20 6e 42 2c 20 7a 42 2c 20 65  (pVal, nB, zB, e
b8d0: 6e 63 69 6e 2c 20 53 51 4c 49 54 45 5f 53 54 41  ncin, SQLITE_STA
b8e0: 54 49 43 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69  TIC);.  n = sqli
b8f0: 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28  te3_value_bytes(
b900: 70 56 61 6c 29 3b 0a 20 20 54 63 6c 5f 4c 69 73  pVal);.  Tcl_Lis
b910: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
b920: 74 28 69 2c 70 58 2c 0a 20 20 20 20 20 20 54 63  t(i,pX,.      Tc
b930: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28  l_NewStringObj((
b940: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
b950: 6c 75 65 5f 74 65 78 74 28 70 56 61 6c 29 2c 6e  lue_text(pVal),n
b960: 29 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c  ));.  sqlite3Val
b970: 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 0a 20  ueFree(pVal);.. 
b980: 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69   Tcl_EvalObjEx(i
b990: 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54 63 6c 5f  , pX, 0);.  Tcl_
b9a0: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29  DecrRefCount(pX)
b9b0: 3b 0a 20 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  ;.  Tcl_GetIntFr
b9c0: 6f 6d 4f 62 6a 28 69 2c 20 54 63 6c 5f 47 65 74  omObj(i, Tcl_Get
b9d0: 4f 62 6a 52 65 73 75 6c 74 28 69 29 2c 20 26 72  ObjResult(i), &r
b9e0: 65 73 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 65  es);.  return re
b9f0: 73 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e 74 20  s;.}.static int 
ba00: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 28 0a 20 20  test_collate(.  
ba10: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
ba20: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
ba30: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
ba40: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
ba50: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
ba60: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
ba70: 20 69 6e 74 20 76 61 6c 3b 0a 20 20 73 71 6c 69   int val;.  sqli
ba80: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b  te3_value *pVal;
ba90: 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
baa0: 28 20 6f 62 6a 63 21 3d 35 20 29 20 67 6f 74 6f  ( objc!=5 ) goto
bab0: 20 62 61 64 5f 61 72 67 73 3b 0a 20 20 70 54 65   bad_args;.  pTe
bac0: 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 20  stCollateInterp 
bad0: 3d 20 69 6e 74 65 72 70 3b 0a 20 20 69 66 28 20  = interp;.  if( 
bae0: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
baf0: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
bb00: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
bb10: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
bb20: 52 52 4f 52 3b 0a 0a 20 20 69 66 28 20 54 43 4c  RROR;..  if( TCL
bb30: 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c  _OK!=Tcl_GetBool
bb40: 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  eanFromObj(inter
bb50: 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 76 61 6c  p, objv[2], &val
bb60: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
bb70: 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c  RROR;.  rc = sql
bb80: 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
bb90: 61 74 69 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f  ation(db, "test_
bba0: 63 6f 6c 6c 61 74 65 22 2c 20 53 51 4c 49 54 45  collate", SQLITE
bbb0: 5f 55 54 46 38 2c 20 0a 20 20 20 20 20 20 20 20  _UTF8, .        
bbc0: 20 20 28 76 6f 69 64 20 2a 29 53 51 4c 49 54 45    (void *)SQLITE
bbd0: 5f 55 54 46 38 2c 20 76 61 6c 3f 74 65 73 74 5f  _UTF8, val?test_
bbe0: 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b  collate_func:0);
bbf0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
bc00: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20  E_OK ){.    if( 
bc10: 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42  TCL_OK!=Tcl_GetB
bc20: 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e  ooleanFromObj(in
bc30: 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26  terp, objv[3], &
bc40: 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  val) ) return TC
bc50: 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 72 63 20  L_ERROR;.    rc 
bc60: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
bc70: 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22  _collation(db, "
bc80: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 53  test_collate", S
bc90: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c 20 0a  QLITE_UTF16LE, .
bca0: 20 20 20 20 20 20 20 20 20 20 20 20 28 76 6f 69              (voi
bcb0: 64 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 31 36  d *)SQLITE_UTF16
bcc0: 4c 45 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f 6c  LE, val?test_col
bcd0: 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20 20  late_func:0);.  
bce0: 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63    if( TCL_OK!=Tc
bcf0: 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d  l_GetBooleanFrom
bd00: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
bd10: 5b 34 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74  [4], &val) ) ret
bd20: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
bd30: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
bd40: 4d 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 73  MDEBUG.    if( s
bd50: 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61  qlite3_iMallocFa
bd60: 69 6c 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  il>0 ){.      sq
bd70: 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69  lite3_iMallocFai
bd80: 6c 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  l++;.    }.#endi
bd90: 66 0a 20 20 20 20 70 56 61 6c 20 3d 20 73 71 6c  f.    pVal = sql
bda0: 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a  ite3ValueNew();.
bdb0: 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65      sqlite3Value
bdc0: 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c  SetStr(pVal, -1,
bdd0: 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c   "test_collate",
bde0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
bdf0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
be00: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
be10: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 31  reate_collation1
be20: 36 28 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20  6(db, .         
be30: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78   sqlite3ValueTex
be40: 74 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55  t(pVal, SQLITE_U
be50: 54 46 31 36 4e 41 54 49 56 45 29 2c 20 53 51 4c  TF16NATIVE), SQL
be60: 49 54 45 5f 55 54 46 31 36 42 45 2c 20 0a 20 20  ITE_UTF16BE, .  
be70: 20 20 20 20 20 20 20 20 28 76 6f 69 64 20 2a 29          (void *)
be80: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20  SQLITE_UTF16BE, 
be90: 76 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61 74 65  val?test_collate
bea0: 5f 66 75 6e 63 3a 30 29 3b 0a 20 20 20 20 73 71  _func:0);.    sq
beb0: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
bec0: 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  Val);.  }.  if( 
bed0: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
bee0: 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
bef0: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
bf00: 45 52 52 4f 52 3b 0a 20 20 0a 20 20 69 66 28 20  ERROR;.  .  if( 
bf10: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
bf20: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
bf30: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71  esult(interp, sq
bf40: 6c 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61  lite3TestErrorNa
bf50: 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20  me(rc), 0);.    
bf60: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
bf70: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54  ;.  }.  return T
bf80: 43 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f 61 72 67 73  CL_OK;..bad_args
bf90: 3a 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  :.  Tcl_AppendRe
bfa0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
bfb0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
bfc0: 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
bfd0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
bfe0: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
bff0: 29 2c 20 22 20 3c 44 42 3e 20 3c 75 74 66 38 3e  ), " <DB> <utf8>
c000: 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66 31   <utf16le> <utf1
c010: 36 62 65 3e 22 2c 20 30 29 3b 0a 20 20 72 65 74  6be>", 0);.  ret
c020: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d  urn TCL_ERROR;.}
c030: 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 65  ../*.** When the
c040: 20 63 6f 6c 6c 61 74 69 6f 6e 20 6e 65 65 64 65   collation neede
c050: 64 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e  d callback is in
c060: 76 6f 6b 65 64 2c 20 72 65 63 6f 72 64 20 74 68  voked, record th
c070: 65 20 6e 61 6d 65 20 6f 66 20 0a 2a 2a 20 74 68  e name of .** th
c080: 65 20 72 65 71 75 65 73 74 65 64 20 63 6f 6c 6c  e requested coll
c090: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 68  ating function h
c0a0: 65 72 65 2e 20 20 54 68 65 20 72 65 63 6f 72 64  ere.  The record
c0b0: 65 64 20 6e 61 6d 65 20 69 73 20 6c 69 6e 6b 65  ed name is linke
c0c0: 64 0a 2a 2a 20 74 6f 20 61 20 54 43 4c 20 76 61  d.** to a TCL va
c0d0: 72 69 61 62 6c 65 20 61 6e 64 20 75 73 65 64 20  riable and used 
c0e0: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  to make sure tha
c0f0: 74 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20  t the requested 
c100: 63 6f 6c 6c 61 74 69 6f 6e 0a 2a 2a 20 6e 61 6d  collation.** nam
c110: 65 20 69 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2f  e is correct..*/
c120: 0a 73 74 61 74 69 63 20 63 68 61 72 20 7a 4e 65  .static char zNe
c130: 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b 32 30  ededCollation[20
c140: 30 5d 3b 0a 73 74 61 74 69 63 20 63 68 61 72 20  0];.static char 
c150: 2a 70 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69  *pzNeededCollati
c160: 6f 6e 20 3d 20 7a 4e 65 65 64 65 64 43 6f 6c 6c  on = zNeededColl
c170: 61 74 69 6f 6e 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 43  ation;.../*.** C
c180: 61 6c 6c 65 64 20 77 68 65 6e 20 61 20 63 6f 6c  alled when a col
c190: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
c1a0: 69 73 20 6e 65 65 64 65 64 2e 20 20 52 65 67 69  is needed.  Regi
c1b0: 73 74 65 72 65 64 20 75 73 69 6e 67 0a 2a 2a 20  stered using.** 
c1c0: 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f  sqlite3_collatio
c1d0: 6e 5f 6e 65 65 64 65 64 31 36 28 29 2e 0a 2a 2f  n_needed16()..*/
c1e0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 65 73  .static void tes
c1f0: 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64  t_collate_needed
c200: 5f 63 62 28 0a 20 20 76 6f 69 64 20 2a 70 43 74  _cb(.  void *pCt
c210: 78 2c 20 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  x, .  sqlite3 *d
c220: 62 2c 0a 20 20 69 6e 74 20 65 54 65 78 74 52 65  b,.  int eTextRe
c230: 70 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  p,.  const void 
c240: 2a 70 4e 61 6d 65 0a 29 7b 0a 20 20 69 6e 74 20  *pName.){.  int 
c250: 65 6e 63 20 3d 20 45 4e 43 28 64 62 29 3b 0a 20  enc = ENC(db);. 
c260: 20 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 2a   int i;.  char *
c270: 7a 3b 0a 20 20 66 6f 72 28 7a 20 3d 20 28 63 68  z;.  for(z = (ch
c280: 61 72 2a 29 70 4e 61 6d 65 2c 20 69 3d 30 3b 20  ar*)pName, i=0; 
c290: 2a 7a 20 7c 7c 20 7a 5b 31 5d 3b 20 7a 2b 2b 29  *z || z[1]; z++)
c2a0: 7b 0a 20 20 20 20 69 66 28 20 2a 7a 20 29 20 7a  {.    if( *z ) z
c2b0: 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b  NeededCollation[
c2c0: 69 2b 2b 5d 20 3d 20 2a 7a 3b 0a 20 20 7d 0a 20  i++] = *z;.  }. 
c2d0: 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f   zNeededCollatio
c2e0: 6e 5b 69 5d 20 3d 20 30 3b 0a 20 20 73 71 6c 69  n[i] = 0;.  sqli
c2f0: 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
c300: 74 69 6f 6e 28 0a 20 20 20 20 20 20 64 62 2c 20  tion(.      db, 
c310: 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20  "test_collate", 
c320: 45 4e 43 28 64 62 29 2c 20 28 76 6f 69 64 20 2a  ENC(db), (void *
c330: 29 65 6e 63 2c 20 74 65 73 74 5f 63 6f 6c 6c 61  )enc, test_colla
c340: 74 65 5f 66 75 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a  te_func);.}../*.
c350: 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74 65  ** Usage: add_te
c360: 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65  st_collate_neede
c370: 64 20 44 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69  d DB.*/.static i
c380: 6e 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f  nt test_collate_
c390: 6e 65 65 64 65 64 28 0a 20 20 76 6f 69 64 20 2a  needed(.  void *
c3a0: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
c3b0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
c3c0: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
c3d0: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
c3e0: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
c3f0: 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  te3 *db;.  int r
c400: 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
c410: 32 20 29 20 67 6f 74 6f 20 62 61 64 5f 61 72 67  2 ) goto bad_arg
c420: 73 3b 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f  s;.  if( getDbPo
c430: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
c440: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
c450: 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
c460: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
c470: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f   rc = sqlite3_co
c480: 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31 36  llation_needed16
c490: 28 64 62 2c 20 30 2c 20 74 65 73 74 5f 63 6f 6c  (db, 0, test_col
c4a0: 6c 61 74 65 5f 6e 65 65 64 65 64 5f 63 62 29 3b  late_needed_cb);
c4b0: 0a 20 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74  .  zNeededCollat
c4c0: 69 6f 6e 5b 30 5d 20 3d 20 30 3b 0a 20 20 69 66  ion[0] = 0;.  if
c4d0: 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
c4e0: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c  Code(interp, db,
c4f0: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
c500: 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72  L_ERROR;.  retur
c510: 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f 61  n TCL_OK;..bad_a
c520: 72 67 73 3a 0a 20 20 54 63 6c 5f 57 72 6f 6e 67  rgs:.  Tcl_Wrong
c530: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
c540: 31 2c 20 6f 62 6a 76 2c 20 22 44 42 22 29 3b 0a  1, objv, "DB");.
c550: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
c560: 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c  OR;.}../*.** tcl
c570: 63 6d 64 3a 20 20 20 61 64 64 5f 61 6c 69 67 6e  cmd:   add_align
c580: 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61 74  ment_test_collat
c590: 69 6f 6e 73 20 20 44 42 0a 2a 2a 0a 2a 2a 20 41  ions  DB.**.** A
c5a0: 64 64 20 74 77 6f 20 6e 65 77 20 63 6f 6c 6c 61  dd two new colla
c5b0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 74  ting sequences t
c5c0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 44  o the database D
c5d0: 42 0a 2a 2a 0a 2a 2a 20 20 20 20 20 75 74 66 31  B.**.**     utf1
c5e0: 36 5f 61 6c 69 67 6e 65 64 0a 2a 2a 20 20 20 20  6_aligned.**    
c5f0: 20 75 74 66 31 36 5f 75 6e 61 6c 69 67 6e 65 64   utf16_unaligned
c600: 0a 2a 2a 0a 2a 2a 20 42 6f 74 68 20 63 6f 6c 6c  .**.** Both coll
c610: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
c620: 75 73 65 20 74 68 65 20 73 61 6d 65 20 73 6f 72  use the same sor
c630: 74 20 6f 72 64 65 72 20 61 73 20 42 49 4e 41 52  t order as BINAR
c640: 59 2e 0a 2a 2a 20 54 68 65 20 6f 6e 6c 79 20 64  Y..** The only d
c650: 69 66 66 65 72 65 6e 63 65 20 69 73 20 74 68 61  ifference is tha
c660: 74 20 74 68 65 20 75 74 66 31 36 5f 61 6c 69 67  t the utf16_alig
c670: 6e 65 64 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a  ned collating.**
c680: 20 73 65 71 75 65 6e 63 65 20 69 73 20 64 65 63   sequence is dec
c690: 6c 61 72 65 64 20 77 69 74 68 20 74 68 65 20 53  lared with the S
c6a0: 51 4c 49 54 45 5f 55 54 46 31 36 5f 41 4c 49 47  QLITE_UTF16_ALIG
c6b0: 4e 45 44 20 66 6c 61 67 2e 0a 2a 2a 20 42 6f 74  NED flag..** Bot
c6c0: 68 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  h collating func
c6d0: 74 69 6f 6e 73 20 69 6e 63 72 65 6d 65 6e 74 20  tions increment 
c6e0: 74 68 65 20 75 6e 61 6c 69 67 6e 65 64 20 75 74  the unaligned ut
c6f0: 66 31 36 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 77  f16 counter.** w
c700: 68 65 6e 65 76 65 72 20 74 68 65 79 20 73 65 65  henever they see
c710: 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 62   a string that b
c720: 65 67 69 6e 73 20 6f 6e 20 61 6e 20 6f 64 64 20  egins on an odd 
c730: 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 0a 2a  byte boundary..*
c740: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 75 6e 61  /.static int una
c750: 6c 69 67 6e 65 64 5f 73 74 72 69 6e 67 5f 63 6f  ligned_string_co
c760: 75 6e 74 65 72 20 3d 20 30 3b 0a 73 74 61 74 69  unter = 0;.stati
c770: 63 20 69 6e 74 20 61 6c 69 67 6e 6d 65 6e 74 43  c int alignmentC
c780: 6f 6c 6c 46 75 6e 63 28 0a 20 20 76 6f 69 64 20  ollFunc(.  void 
c790: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20  *NotUsed,.  int 
c7a0: 6e 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69  nKey1, const voi
c7b0: 64 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20  d *pKey1,.  int 
c7c0: 6e 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69  nKey2, const voi
c7d0: 64 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e  d *pKey2.){.  in
c7e0: 74 20 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e  t rc, n;.  n = n
c7f0: 4b 65 79 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65  Key1<nKey2 ? nKe
c800: 79 31 20 3a 20 6e 4b 65 79 32 3b 0a 20 20 69 66  y1 : nKey2;.  if
c810: 28 20 6e 4b 65 79 31 3e 30 20 26 26 20 31 3d 3d  ( nKey1>0 && 1==
c820: 28 31 26 28 69 6e 74 29 70 4b 65 79 31 29 20 29  (1&(int)pKey1) )
c830: 20 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e   unaligned_strin
c840: 67 5f 63 6f 75 6e 74 65 72 2b 2b 3b 0a 20 20 69  g_counter++;.  i
c850: 66 28 20 6e 4b 65 79 32 3e 30 20 26 26 20 31 3d  f( nKey2>0 && 1=
c860: 3d 28 31 26 28 69 6e 74 29 70 4b 65 79 32 29 20  =(1&(int)pKey2) 
c870: 29 20 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69  ) unaligned_stri
c880: 6e 67 5f 63 6f 75 6e 74 65 72 2b 2b 3b 0a 20 20  ng_counter++;.  
c890: 72 63 20 3d 20 6d 65 6d 63 6d 70 28 70 4b 65 79  rc = memcmp(pKey
c8a0: 31 2c 20 70 4b 65 79 32 2c 20 6e 29 3b 0a 20 20  1, pKey2, n);.  
c8b0: 69 66 28 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20  if( rc==0 ){.   
c8c0: 20 72 63 20 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b   rc = nKey1 - nK
c8d0: 65 79 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ey2;.  }.  retur
c8e0: 6e 20 72 63 3b 0a 7d 0a 73 74 61 74 69 63 20 69  n rc;.}.static i
c8f0: 6e 74 20 61 64 64 5f 61 6c 69 67 6e 6d 65 6e 74  nt add_alignment
c900: 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 69 6f 6e 73  _test_collations
c910: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
c920: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
c930: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
c940: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
c950: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
c960: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
c970: 62 3b 0a 20 20 69 66 28 20 6f 62 6a 63 3e 3d 32  b;.  if( objc>=2
c980: 20 29 7b 0a 20 20 20 20 69 66 28 20 67 65 74 44   ){.    if( getD
c990: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
c9a0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
c9b0: 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20  bjv[1]), &db) ) 
c9c0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
c9d0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72  ;.    sqlite3_cr
c9e0: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64  eate_collation(d
c9f0: 62 2c 20 22 75 74 66 31 36 5f 75 6e 61 6c 69 67  b, "utf16_unalig
ca00: 6e 65 64 22 2c 0a 20 20 20 20 20 20 20 20 53 51  ned",.        SQ
ca10: 4c 49 54 45 5f 55 54 46 31 36 2c 20 0a 20 20 20  LITE_UTF16, .   
ca20: 20 20 20 20 20 30 2c 20 61 6c 69 67 6e 6d 65 6e       0, alignmen
ca30: 74 43 6f 6c 6c 46 75 6e 63 29 3b 0a 20 20 20 20  tCollFunc);.    
ca40: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
ca50: 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 75 74  ollation(db, "ut
ca60: 66 31 36 5f 61 6c 69 67 6e 65 64 22 2c 0a 20 20  f16_aligned",.  
ca70: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46        SQLITE_UTF
ca80: 31 36 20 7c 20 53 51 4c 49 54 45 5f 55 54 46 31  16 | SQLITE_UTF1
ca90: 36 5f 41 4c 49 47 4e 45 44 2c 20 0a 20 20 20 20  6_ALIGNED, .    
caa0: 20 20 20 20 30 2c 20 61 6c 69 67 6e 6d 65 6e 74      0, alignment
cab0: 43 6f 6c 6c 46 75 6e 63 29 3b 0a 20 20 7d 0a 20  CollFunc);.  }. 
cac0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
cad0: 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21  K;.}.#endif /* !
cae0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
caf0: 4d 49 54 5f 55 54 46 31 36 29 20 2a 2f 0a 0a 2f  MIT_UTF16) */../
cb00: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f  *.** Usage: add_
cb10: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 3c 64  test_function <d
cb20: 62 20 70 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75  b ptr> <utf8> <u
cb30: 74 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65  tf16le> <utf16be
cb40: 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  >.**.** This fun
cb50: 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
cb60: 20 74 65 73 74 20 74 68 61 74 20 53 51 4c 69 74   test that SQLit
cb70: 65 20 73 65 6c 65 63 74 73 20 74 68 65 20 63 6f  e selects the co
cb80: 72 72 65 63 74 20 75 73 65 72 0a 2a 2a 20 66 75  rrect user.** fu
cb90: 6e 63 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20  nction callback 
cba0: 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 76 65  when multiple ve
cbb0: 72 73 69 6f 6e 73 20 28 66 6f 72 20 64 69 66 66  rsions (for diff
cbc0: 65 72 65 6e 74 20 74 65 78 74 20 65 6e 63 6f 64  erent text encod
cbd0: 69 6e 67 73 29 0a 2a 2a 20 61 72 65 20 61 76 61  ings).** are ava
cbe0: 69 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 43 61  ilable..**.** Ca
cbf0: 6c 6c 69 6e 67 20 74 68 69 73 20 72 6f 75 74 69  lling this routi
cc00: 6e 65 20 72 65 67 69 73 74 65 72 73 20 75 70 20  ne registers up 
cc10: 74 6f 20 74 68 72 65 65 20 76 65 72 73 69 6f 6e  to three version
cc20: 73 20 6f 66 20 74 68 65 20 75 73 65 72 20 66 75  s of the user fu
cc30: 6e 63 74 69 6f 6e 0a 2a 2a 20 22 74 65 73 74 5f  nction.** "test_
cc40: 66 75 6e 63 74 69 6f 6e 22 20 77 69 74 68 20 64  function" with d
cc50: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c  atabase handle <
cc60: 64 62 3e 2e 20 20 49 66 20 74 68 65 20 73 65 63  db>.  If the sec
cc70: 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 69 73 0a  ond argument is.
cc80: 2a 2a 20 74 72 75 65 2c 20 74 68 65 6e 20 61 20  ** true, then a 
cc90: 76 65 72 73 69 6f 6e 20 6f 66 20 74 65 73 74 5f  version of test_
cca0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 72 65 67 69  function is regi
ccb0: 73 74 65 72 65 64 20 66 6f 72 20 55 54 46 2d 38  stered for UTF-8
ccc0: 2c 20 69 66 20 74 68 65 0a 2a 2a 20 74 68 69 72  , if the.** thir
ccd0: 64 20 69 73 20 74 72 75 65 2c 20 61 20 76 65 72  d is true, a ver
cce0: 73 69 6f 6e 20 69 73 20 72 65 67 69 73 74 65 72  sion is register
ccf0: 65 64 20 66 6f 72 20 55 54 46 2d 31 36 6c 65 2c  ed for UTF-16le,
cd00: 20 69 66 20 74 68 65 20 66 6f 75 72 74 68 20 69   if the fourth i
cd10: 73 0a 2a 2a 20 74 72 75 65 2c 20 61 20 55 54 46  s.** true, a UTF
cd20: 2d 31 36 62 65 20 76 65 72 73 69 6f 6e 20 69 73  -16be version is
cd30: 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 50 72 65   available.  Pre
cd40: 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
cd50: 66 0a 2a 2a 20 74 65 73 74 5f 66 75 6e 63 74 69  f.** test_functi
cd60: 6f 6e 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a  on are deleted..
cd70: 2a 2a 0a 2a 2a 20 54 68 65 20 75 73 65 72 20 66  **.** The user f
cd80: 75 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65  unction is imple
cd90: 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e  mented by callin
cda0: 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  g the following 
cdb0: 54 43 4c 20 73 63 72 69 70 74 3a 0a 2a 2a 0a 2a  TCL script:.**.*
cdc0: 2a 20 20 20 22 74 65 73 74 5f 66 75 6e 63 74 69  *   "test_functi
cdd0: 6f 6e 20 3c 65 6e 63 3e 20 3c 61 72 67 3e 22 0a  on <enc> <arg>".
cde0: 2a 2a 0a 2a 2a 20 57 68 65 72 65 20 3c 65 6e 63  **.** Where <enc
cdf0: 3e 20 69 73 20 6f 6e 65 20 6f 66 20 55 54 46 2d  > is one of UTF-
ce00: 38 2c 20 55 54 46 2d 31 36 4c 45 20 6f 72 20 55  8, UTF-16LE or U
ce10: 54 46 31 36 42 45 2c 20 61 6e 64 20 3c 61 72 67  TF16BE, and <arg
ce20: 3e 20 69 73 20 74 68 65 0a 2a 2a 20 73 69 6e 67  > is the.** sing
ce30: 6c 65 20 61 72 67 75 6d 65 6e 74 20 70 61 73 73  le argument pass
ce40: 65 64 20 74 6f 20 74 68 65 20 53 51 4c 20 66 75  ed to the SQL fu
ce50: 6e 63 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75  nction. The valu
ce60: 65 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a  e returned by.**
ce70: 20 74 68 65 20 54 43 4c 20 73 63 72 69 70 74 20   the TCL script 
ce80: 69 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72  is used as the r
ce90: 65 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 74  eturn value of t
cea0: 68 65 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e  he SQL function.
ceb0: 20 49 74 0a 2a 2a 20 69 73 20 70 61 73 73 65 64   It.** is passed
cec0: 20 74 6f 20 53 51 4c 69 74 65 20 75 73 69 6e 67   to SQLite using
ced0: 20 55 54 46 2d 31 36 42 45 20 66 6f 72 20 61 20   UTF-16BE for a 
cee0: 55 54 46 2d 38 20 74 65 73 74 5f 66 75 6e 63 74  UTF-8 test_funct
cef0: 69 6f 6e 28 29 2c 20 55 54 46 2d 38 0a 2a 2a 20  ion(), UTF-8.** 
cf00: 66 6f 72 20 61 20 55 54 46 2d 31 36 4c 45 20 74  for a UTF-16LE t
cf10: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20  est_function(), 
cf20: 61 6e 64 20 55 54 46 2d 31 36 4c 45 20 66 6f 72  and UTF-16LE for
cf30: 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69   an implementati
cf40: 6f 6e 20 74 68 61 74 0a 2a 2a 20 70 72 65 66 65  on that.** prefe
cf50: 72 73 20 55 54 46 2d 31 36 42 45 2e 0a 2a 2f 0a  rs UTF-16BE..*/.
cf60: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
cf70: 4d 49 54 5f 55 54 46 31 36 0a 73 74 61 74 69 63  MIT_UTF16.static
cf80: 20 76 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74   void test_funct
cf90: 69 6f 6e 5f 75 74 66 38 28 0a 20 20 73 71 6c 69  ion_utf8(.  sqli
cfa0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
cfb0: 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a  x, .  int nArg,.
cfc0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
cfd0: 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f  **argv.){.  Tcl_
cfe0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a  Interp *interp;.
cff0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20    Tcl_Obj *pX;. 
d000: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
d010: 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d  pVal;.  interp =
d020: 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73   (Tcl_Interp *)s
d030: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
d040: 28 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20 54  (pCtx);.  pX = T
d050: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
d060: 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c  "test_function",
d070: 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72   -1);.  Tcl_Incr
d080: 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20  RefCount(pX);.  
d090: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
d0a0: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
d0b0: 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69   pX, Tcl_NewStri
d0c0: 6e 67 4f 62 6a 28 22 55 54 46 2d 38 22 2c 20 2d  ngObj("UTF-8", -
d0d0: 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  1));.  Tcl_ListO
d0e0: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
d0f0: 69 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20  interp, pX, .   
d100: 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67     Tcl_NewString
d110: 4f 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74  Obj((char*)sqlit
d120: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72  e3_value_text(ar
d130: 67 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20  gv[0]), -1));.  
d140: 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e  Tcl_EvalObjEx(in
d150: 74 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20  terp, pX, 0);.  
d160: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
d170: 28 70 58 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  (pX);.  sqlite3_
d180: 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78  result_text(pCtx
d190: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52  , Tcl_GetStringR
d1a0: 65 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 2d  esult(interp), -
d1b0: 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  1, SQLITE_TRANSI
d1c0: 45 4e 54 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73  ENT);.  pVal = s
d1d0: 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29  qlite3ValueNew()
d1e0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ;.  sqlite3Value
d1f0: 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c  SetStr(pVal, -1,
d200: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65   Tcl_GetStringRe
d210: 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20  sult(interp), . 
d220: 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38       SQLITE_UTF8
d230: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d240: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75  ;.  sqlite3_resu
d250: 6c 74 5f 74 65 78 74 31 36 62 65 28 70 43 74 78  lt_text16be(pCtx
d260: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
d270: 74 65 78 74 31 36 62 65 28 70 56 61 6c 29 2c 0a  text16be(pVal),.
d280: 20 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45        -1, SQLITE
d290: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73  _TRANSIENT);.  s
d2a0: 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
d2b0: 70 56 61 6c 29 3b 0a 7d 0a 73 74 61 74 69 63 20  pVal);.}.static 
d2c0: 76 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69  void test_functi
d2d0: 6f 6e 5f 75 74 66 31 36 6c 65 28 0a 20 20 73 71  on_utf16le(.  sq
d2e0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
d2f0: 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67  Ctx, .  int nArg
d300: 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ,.  sqlite3_valu
d310: 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63  e **argv.){.  Tc
d320: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
d330: 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b  ;.  Tcl_Obj *pX;
d340: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
d350: 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70   *pVal;.  interp
d360: 20 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a   = (Tcl_Interp *
d370: 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  )sqlite3_user_da
d380: 74 61 28 70 43 74 78 29 3b 0a 20 20 70 58 20 3d  ta(pCtx);.  pX =
d390: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
d3a0: 6a 28 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  j("test_function
d3b0: 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e  ", -1);.  Tcl_In
d3c0: 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a  crRefCount(pX);.
d3d0: 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70    Tcl_ListObjApp
d3e0: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
d3f0: 70 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74  p, pX, Tcl_NewSt
d400: 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 4c  ringObj("UTF-16L
d410: 45 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f  E", -1));.  Tcl_
d420: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
d430: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c  ment(interp, pX,
d440: 20 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53   .      Tcl_NewS
d450: 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29  tringObj((char*)
d460: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
d470: 78 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29  xt(argv[0]), -1)
d480: 29 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a  );.  Tcl_EvalObj
d490: 45 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30  Ex(interp, pX, 0
d4a0: 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66  );.  Tcl_DecrRef
d4b0: 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 70 56 61  Count(pX);.  pVa
d4c0: 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  l = sqlite3Value
d4d0: 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33  New();.  sqlite3
d4e0: 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c  ValueSetStr(pVal
d4f0: 2c 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72  , -1, Tcl_GetStr
d500: 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ingResult(interp
d510: 29 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45  ), .      SQLITE
d520: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
d530: 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33  ATIC);.  sqlite3
d540: 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74  _result_text(pCt
d550: 78 2c 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  x,(char*)sqlite3
d560: 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c  _value_text(pVal
d570: 29 2c 2d 31 2c 53 51 4c 49 54 45 5f 54 52 41 4e  ),-1,SQLITE_TRAN
d580: 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65  SIENT);.  sqlite
d590: 33 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29  3ValueFree(pVal)
d5a0: 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  ;.}.static void 
d5b0: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74  test_function_ut
d5c0: 66 31 36 62 65 28 0a 20 20 73 71 6c 69 74 65 33  f16be(.  sqlite3
d5d0: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
d5e0: 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73  .  int nArg,.  s
d5f0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
d600: 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74  rgv.){.  Tcl_Int
d610: 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54  erp *interp;.  T
d620: 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71  cl_Obj *pX;.  sq
d630: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
d640: 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20 28 54  l;.  interp = (T
d650: 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c 69  cl_Interp *)sqli
d660: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 70 43  te3_user_data(pC
d670: 74 78 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f  tx);.  pX = Tcl_
d680: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65  NewStringObj("te
d690: 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31  st_function", -1
d6a0: 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66  );.  Tcl_IncrRef
d6b0: 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c  Count(pX);.  Tcl
d6c0: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
d6d0: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58  ement(interp, pX
d6e0: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
d6f0: 62 6a 28 22 55 54 46 2d 31 36 42 45 22 2c 20 2d  bj("UTF-16BE", -
d700: 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  1));.  Tcl_ListO
d710: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
d720: 69 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20  interp, pX, .   
d730: 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67     Tcl_NewString
d740: 4f 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74  Obj((char*)sqlit
d750: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72  e3_value_text(ar
d760: 67 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20  gv[0]), -1));.  
d770: 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e  Tcl_EvalObjEx(in
d780: 74 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20  terp, pX, 0);.  
d790: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
d7a0: 28 70 58 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73  (pX);.  pVal = s
d7b0: 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29  qlite3ValueNew()
d7c0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ;.  sqlite3Value
d7d0: 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c  SetStr(pVal, -1,
d7e0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65   Tcl_GetStringRe
d7f0: 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20  sult(interp), . 
d800: 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38       SQLITE_UTF8
d810: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d820: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75  ;.  sqlite3_resu
d830: 6c 74 5f 74 65 78 74 31 36 6c 65 28 70 43 74 78  lt_text16le(pCtx
d840: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
d850: 74 65 78 74 31 36 6c 65 28 70 56 61 6c 29 2c 0a  text16le(pVal),.
d860: 20 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45        -1, SQLITE
d870: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73  _TRANSIENT);.  s
d880: 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
d890: 70 56 61 6c 29 3b 0a 7d 0a 23 65 6e 64 69 66 20  pVal);.}.#endif 
d8a0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
d8b0: 54 46 31 36 20 2a 2f 0a 73 74 61 74 69 63 20 69  TF16 */.static i
d8c0: 6e 74 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  nt test_function
d8d0: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
d8e0: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
d8f0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
d900: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
d910: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
d920: 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .){.#ifndef SQLI
d930: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
d940: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
d950: 6e 74 20 76 61 6c 3b 0a 0a 20 20 69 66 28 20 6f  nt val;..  if( o
d960: 62 6a 63 21 3d 35 20 29 20 67 6f 74 6f 20 62 61  bjc!=5 ) goto ba
d970: 64 5f 61 72 67 73 3b 0a 20 20 69 66 28 20 67 65  d_args;.  if( ge
d980: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
d990: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
d9a0: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20  (objv[1]), &db) 
d9b0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
d9c0: 4f 52 3b 0a 0a 20 20 69 66 28 20 54 43 4c 5f 4f  OR;..  if( TCL_O
d9d0: 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61  K!=Tcl_GetBoolea
d9e0: 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  nFromObj(interp,
d9f0: 20 6f 62 6a 76 5b 32 5d 2c 20 26 76 61 6c 29 20   objv[2], &val) 
da00: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
da10: 4f 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29 7b  OR;.  if( val ){
da20: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65  .    sqlite3_cre
da30: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
da40: 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22   "test_function"
da50: 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  , 1, SQLITE_UTF8
da60: 2c 20 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  , .        inter
da70: 70 2c 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  p, test_function
da80: 5f 75 74 66 38 2c 20 30 2c 20 30 29 3b 0a 20 20  _utf8, 0, 0);.  
da90: 7d 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d  }.  if( TCL_OK!=
daa0: 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72  Tcl_GetBooleanFr
dab0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
dac0: 6a 76 5b 33 5d 2c 20 26 76 61 6c 29 20 29 20 72  jv[3], &val) ) r
dad0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
dae0: 0a 20 20 69 66 28 20 76 61 6c 20 29 7b 0a 20 20  .  if( val ){.  
daf0: 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65    sqlite3_create
db00: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 74  _function(db, "t
db10: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 31  est_function", 1
db20: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
db30: 2c 20 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  , .        inter
db40: 70 2c 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  p, test_function
db50: 5f 75 74 66 31 36 6c 65 2c 20 30 2c 20 30 29 3b  _utf16le, 0, 0);
db60: 0a 20 20 7d 0a 20 20 69 66 28 20 54 43 4c 5f 4f  .  }.  if( TCL_O
db70: 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61  K!=Tcl_GetBoolea
db80: 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  nFromObj(interp,
db90: 20 6f 62 6a 76 5b 34 5d 2c 20 26 76 61 6c 29 20   objv[4], &val) 
dba0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
dbb0: 4f 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29 7b  OR;.  if( val ){
dbc0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65  .    sqlite3_cre
dbd0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
dbe0: 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22   "test_function"
dbf0: 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  , 1, SQLITE_UTF1
dc00: 36 42 45 2c 20 0a 20 20 20 20 20 20 20 20 69 6e  6BE, .        in
dc10: 74 65 72 70 2c 20 74 65 73 74 5f 66 75 6e 63 74  terp, test_funct
dc20: 69 6f 6e 5f 75 74 66 31 36 62 65 2c 20 30 2c 20  ion_utf16be, 0, 
dc30: 30 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  0);.  }..  retur
dc40: 6e 20 54 43 4c 5f 4f 4b 3b 0a 62 61 64 5f 61 72  n TCL_OK;.bad_ar
dc50: 67 73 3a 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  gs:.  Tcl_Append
dc60: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
dc70: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
dc80: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
dc90: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
dca0: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
dcb0: 20 30 29 2c 20 22 20 3c 44 42 3e 20 3c 75 74 66   0), " <DB> <utf
dcc0: 38 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74  8> <utf16le> <ut
dcd0: 66 31 36 62 65 3e 22 2c 20 30 29 3b 0a 23 65 6e  f16be>", 0);.#en
dce0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
dcf0: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65  IT_UTF16 */.  re
dd00: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
dd10: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
dd20: 20 20 20 20 20 20 20 20 74 65 73 74 5f 65 72 72          test_err
dd30: 73 74 72 20 3c 65 72 72 20 63 6f 64 65 3e 0a 2a  str <err code>.*
dd40: 2a 0a 2a 2a 20 54 65 73 74 20 74 68 61 74 20 74  *.** Test that t
dd50: 68 65 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75  he english langu
dd60: 61 67 65 20 73 74 72 69 6e 67 20 65 71 75 69 76  age string equiv
dd70: 61 6c 65 6e 74 73 20 66 6f 72 20 73 71 6c 69 74  alents for sqlit
dd80: 65 20 65 72 72 6f 72 20 63 6f 64 65 73 0a 2a 2a  e error codes.**
dd90: 20 61 72 65 20 73 61 6e 65 2e 20 54 68 65 20 70   are sane. The p
dda0: 61 72 61 6d 65 74 65 72 20 69 73 20 61 6e 20 69  arameter is an i
ddb0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
ddc0: 69 6e 67 20 61 6e 20 73 71 6c 69 74 65 20 65 72  ing an sqlite er
ddd0: 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 20 54 68 65  ror code..** The
dde0: 20 72 65 73 75 6c 74 20 69 73 20 61 20 6c 69 73   result is a lis
ddf0: 74 20 6f 66 20 74 77 6f 20 65 6c 65 6d 65 6e 74  t of two element
de00: 73 2c 20 74 68 65 20 73 74 72 69 6e 67 20 72 65  s, the string re
de10: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
de20: 74 68 65 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64  the.** error cod
de30: 65 20 61 6e 64 20 74 68 65 20 65 6e 67 6c 69 73  e and the englis
de40: 68 20 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61  h language expla
de50: 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69  nation..*/.stati
de60: 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72 73 74  c int test_errst
de70: 72 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  r(.  void * clie
de80: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
de90: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
dea0: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
deb0: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
dec0: 5d 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 6f  ].){.  char *zCo
ded0: 64 65 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69  de;.  int i;.  i
dee0: 66 28 20 6f 62 6a 63 21 3d 31 20 29 7b 0a 20 20  f( objc!=1 ){.  
def0: 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
df00: 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
df10: 6a 76 2c 20 22 3c 65 72 72 6f 72 20 63 6f 64 65  jv, "<error code
df20: 3e 22 29 3b 0a 20 20 7d 0a 0a 20 20 7a 43 6f 64  >");.  }..  zCod
df30: 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  e = Tcl_GetStrin
df40: 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20 20 66 6f  g(objv[1]);.  fo
df50: 72 28 69 3d 30 3b 20 69 3c 32 30 30 3b 20 69 2b  r(i=0; i<200; i+
df60: 2b 29 7b 0a 20 20 20 20 69 66 28 20 30 3d 3d 73  +){.    if( 0==s
df70: 74 72 63 6d 70 28 65 72 72 6f 72 4e 61 6d 65 28  trcmp(errorName(
df80: 69 29 2c 20 7a 43 6f 64 65 29 20 29 20 62 72 65  i), zCode) ) bre
df90: 61 6b 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65  ak;.  }.  Tcl_Se
dfa0: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
dfb0: 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45  (char *)sqlite3E
dfc0: 72 72 53 74 72 28 69 29 2c 20 30 29 3b 0a 20 20  rrStr(i), 0);.  
dfd0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
dfe0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
dff0: 20 20 62 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a 0a    breakpoint.**.
e000: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
e010: 65 78 69 73 74 73 20 66 6f 72 20 6f 6e 65 20 70  exists for one p
e020: 75 72 70 6f 73 65 20 2d 20 74 6f 20 70 72 6f 76  urpose - to prov
e030: 69 64 65 20 61 20 70 6c 61 63 65 20 74 6f 20 70  ide a place to p
e040: 75 74 20 61 0a 2a 2a 20 62 72 65 61 6b 70 6f 69  ut a.** breakpoi
e050: 6e 74 20 77 69 74 68 20 47 44 42 20 74 68 61 74  nt with GDB that
e060: 20 63 61 6e 20 62 65 20 74 72 69 67 67 65 72 65   can be triggere
e070: 64 20 75 73 69 6e 67 20 54 43 4c 20 63 6f 64 65  d using TCL code
e080: 2e 20 20 54 68 65 20 75 73 65 0a 2a 2a 20 66 6f  .  The use.** fo
e090: 72 20 74 68 69 73 20 69 73 20 77 68 65 6e 20 61  r this is when a
e0a0: 20 70 61 72 74 69 63 75 6c 61 72 20 74 65 73 74   particular test
e0b0: 20 66 61 69 6c 73 20 6f 6e 20 28 73 61 79 29 20   fails on (say) 
e0c0: 74 68 65 20 31 34 38 35 74 68 20 69 74 65 72 61  the 1485th itera
e0d0: 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 74 68 65 20  tion..** In the 
e0e0: 54 43 4c 20 74 65 73 74 20 73 63 72 69 70 74 2c  TCL test script,
e0f0: 20 77 65 20 63 61 6e 20 61 64 64 20 63 6f 64 65   we can add code
e100: 20 6c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   like this:.**.*
e110: 2a 20 20 20 20 20 69 66 20 7b 24 69 3d 3d 31 34  *     if {$i==14
e120: 38 35 7d 20 62 72 65 61 6b 70 6f 69 6e 74 0a 2a  85} breakpoint.*
e130: 2a 0a 2a 2a 20 54 68 65 6e 20 72 75 6e 20 74 65  *.** Then run te
e140: 73 74 66 69 78 74 75 72 65 20 69 6e 20 74 68 65  stfixture in the
e150: 20 64 65 62 75 67 67 65 72 20 61 6e 64 20 77 61   debugger and wa
e160: 69 74 20 66 6f 72 20 74 68 65 20 62 72 65 61 6b  it for the break
e170: 70 6f 69 6e 74 20 74 6f 0a 2a 2a 20 66 69 72 65  point to.** fire
e180: 2e 20 20 54 68 65 6e 20 61 64 64 69 74 69 6f 6e  .  Then addition
e190: 61 6c 20 62 72 65 61 6b 70 6f 69 6e 74 73 20 63  al breakpoints c
e1a0: 61 6e 20 62 65 20 73 65 74 20 74 6f 20 74 72 61  an be set to tra
e1b0: 63 65 20 64 6f 77 6e 20 74 68 65 20 62 75 67 2e  ce down the bug.
e1c0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
e1d0: 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28 0a  est_breakpoint(.
e1e0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
e1f0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
e200: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
e210: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
e220: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
e230: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
e240: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
e250: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
e260: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
e270: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
e280: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
e290: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
e2a0: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 72 65 74 75 72  nt */.){.  retur
e2b0: 6e 20 54 43 4c 5f 4f 4b 3b 20 20 20 20 20 20 20  n TCL_OK;       
e2c0: 20 20 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20    /* Do nothing 
e2d0: 2a 2f 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  */.}../*.** Usag
e2e0: 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  e:   sqlite3_bin
e2f0: 64 5f 69 6e 74 20 20 53 54 4d 54 20 4e 20 56 41  d_int  STMT N VA
e300: 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74  LUE.**.** Test t
e310: 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  he sqlite3_bind_
e320: 69 6e 74 20 69 6e 74 65 72 66 61 63 65 2e 20 20  int interface.  
e330: 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72  STMT is a prepar
e340: 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  ed statement..**
e350: 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78 20   N is the index 
e360: 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e  of a wildcard in
e370: 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
e380: 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63  atement.  This c
e390: 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20  ommand.** binds 
e3a0: 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  a 32-bit integer
e3b0: 20 56 41 4c 55 45 20 74 6f 20 74 68 61 74 20 77   VALUE to that w
e3c0: 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74  ildcard..*/.stat
e3d0: 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64  ic int test_bind
e3e0: 5f 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  _int(.  void * c
e3f0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
e400: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
e410: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
e420: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
e430: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
e440: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
e450: 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20   int idx;.  int 
e460: 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b  value;.  int rc;
e470: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20  ..  if( objc!=4 
e480: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
e490: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
e4a0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
e4b0: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
e4c0: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
e4d0: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
e4e0: 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e  0], 0), " STMT N
e4f0: 20 56 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20   VALUE", 0);.   
e500: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
e510: 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
e520: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
e530: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
e540: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
e550: 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
e560: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
e570: 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
e580: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
e590: 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e  , &idx) ) return
e5a0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
e5b0: 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
e5c0: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
e5d0: 5b 33 5d 2c 20 26 76 61 6c 75 65 29 20 29 20 72  [3], &value) ) r
e5e0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
e5f0: 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
e600: 5f 62 69 6e 64 5f 69 6e 74 28 70 53 74 6d 74 2c  _bind_int(pStmt,
e610: 20 69 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20   idx, value);.  
e620: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
e630: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53  rrCode(interp, S
e640: 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20  tmtToDb(pStmt), 
e650: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
e660: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63  _ERROR;.  if( rc
e670: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
e680: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
e690: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75  ROR;.  }..  retu
e6a0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f  rn TCL_OK;.}.../
e6b0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
e6c0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
e6d0: 20 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a    STMT N VALUE.*
e6e0: 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71  *.** Test the sq
e6f0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
e700: 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d   interface.  STM
e710: 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20  T is a prepared 
e720: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20  statement..** N 
e730: 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
e740: 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68  a wildcard in th
e750: 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
e760: 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d  ment.  This comm
e770: 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 36  and.** binds a 6
e780: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 56 41  4-bit integer VA
e790: 4c 55 45 20 74 6f 20 74 68 61 74 20 77 69 6c 64  LUE to that wild
e7a0: 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  card..*/.static 
e7b0: 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e  int test_bind_in
e7c0: 74 36 34 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  t64(.  void * cl
e7d0: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
e7e0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
e7f0: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
e800: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
e810: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
e820: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
e830: 69 6e 74 20 69 64 78 3b 0a 20 20 69 36 34 20 76  int idx;.  i64 v
e840: 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  alue;.  int rc;.
e850: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29  .  if( objc!=4 )
e860: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
e870: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
e880: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
e890: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
e8a0: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
e8b0: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
e8c0: 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20  ], 0), " STMT N 
e8d0: 56 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20  VALUE", 0);.    
e8e0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
e8f0: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
e900: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
e910: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
e920: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
e930: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
e940: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
e950: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
e960: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
e970: 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20   &idx) ) return 
e980: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
e990: 20 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46   Tcl_GetWideIntF
e9a0: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
e9b0: 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29 20  bjv[3], &value) 
e9c0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
e9d0: 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  OR;..  rc = sqli
e9e0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 70  te3_bind_int64(p
e9f0: 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65  Stmt, idx, value
ea00: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
ea10: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
ea20: 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
ea30: 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
ea40: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
ea50: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
ea60: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
ea70: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
ea80: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
ea90: 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  }.../*.** Usage:
eaa0: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
eab0: 64 6f 75 62 6c 65 20 20 53 54 4d 54 20 4e 20 56  double  STMT N V
eac0: 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20  ALUE.**.** Test 
ead0: 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  the sqlite3_bind
eae0: 5f 64 6f 75 62 6c 65 20 69 6e 74 65 72 66 61 63  _double interfac
eaf0: 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72  e.  STMT is a pr
eb00: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
eb10: 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e  ..** N is the in
eb20: 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72  dex of a wildcar
eb30: 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  d in the prepare
eb40: 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  d statement.  Th
eb50: 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69  is command.** bi
eb60: 6e 64 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74  nds a 64-bit int
eb70: 65 67 65 72 20 56 41 4c 55 45 20 74 6f 20 74 68  eger VALUE to th
eb80: 61 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a  at wildcard..*/.
eb90: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
eba0: 62 69 6e 64 5f 64 6f 75 62 6c 65 28 0a 20 20 76  bind_double(.  v
ebb0: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
ebc0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
ebd0: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
ebe0: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
ebf0: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
ec00: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
ec10: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b  Stmt;.  int idx;
ec20: 0a 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b  .  double value;
ec30: 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
ec40: 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20  ( objc!=4 ){.   
ec50: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
ec60: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
ec70: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
ec80: 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
ec90: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
eca0: 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
ecb0: 2c 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45  , " STMT N VALUE
ecc0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
ecd0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
ece0: 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
ecf0: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
ed00: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
ed10: 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
ed20: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
ed30: 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
ed40: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
ed50: 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78  p, objv[2], &idx
ed60: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
ed70: 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
ed80: 47 65 74 44 6f 75 62 6c 65 46 72 6f 6d 4f 62 6a  GetDoubleFromObj
ed90: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d  (interp, objv[3]
eda0: 2c 20 26 76 61 6c 75 65 29 20 29 20 72 65 74 75  , &value) ) retu
edb0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
edc0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69   rc = sqlite3_bi
edd0: 6e 64 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c  nd_double(pStmt,
ede0: 20 69 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20   idx, value);.  
edf0: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
ee00: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53  rrCode(interp, S
ee10: 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20  tmtToDb(pStmt), 
ee20: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
ee30: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63  _ERROR;.  if( rc
ee40: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
ee50: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
ee60: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75  ROR;.  }..  retu
ee70: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
ee80: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c  .** Usage:   sql
ee90: 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 20  ite3_bind_null  
eea0: 53 54 4d 54 20 4e 0a 2a 2a 0a 2a 2a 20 54 65 73  STMT N.**.** Tes
eeb0: 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69  t the sqlite3_bi
eec0: 6e 64 5f 6e 75 6c 6c 20 69 6e 74 65 72 66 61 63  nd_null interfac
eed0: 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72  e.  STMT is a pr
eee0: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
eef0: 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e  ..** N is the in
ef00: 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72  dex of a wildcar
ef10: 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  d in the prepare
ef20: 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  d statement.  Th
ef30: 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69  is command.** bi
ef40: 6e 64 73 20 61 20 4e 55 4c 4c 20 74 6f 20 74 68  nds a NULL to th
ef50: 65 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73  e wildcard..*/.s
ef60: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62  tatic int test_b
ef70: 69 6e 64 5f 6e 75 6c 6c 28 0a 20 20 76 6f 69 64  ind_null(.  void
ef80: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
ef90: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
efa0: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
efb0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
efc0: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
efd0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
efe0: 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  t;.  int idx;.  
eff0: 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
f000: 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
f010: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
f020: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
f030: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
f040: 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c  \"",.        Tcl
f050: 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
f060: 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
f070: 20 53 54 4d 54 20 4e 22 2c 20 30 29 3b 0a 20 20   STMT N", 0);.  
f080: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
f090: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
f0a0: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
f0b0: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
f0c0: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
f0d0: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
f0e0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
f0f0: 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
f100: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
f110: 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72  ], &idx) ) retur
f120: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
f130: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
f140: 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64  d_null(pStmt, id
f150: 78 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  x);.  if( sqlite
f160: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
f170: 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53  erp, StmtToDb(pS
f180: 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75  tmt), rc) ) retu
f190: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
f1a0: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
f1b0: 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
f1c0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
f1d0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
f1e0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
f1f0: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
f200: 74 65 78 74 20 20 53 54 4d 54 20 4e 20 53 54 52  text  STMT N STR
f210: 49 4e 47 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20  ING BYTES.**.** 
f220: 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33  Test the sqlite3
f230: 5f 62 69 6e 64 5f 74 65 78 74 20 69 6e 74 65 72  _bind_text inter
f240: 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61  face.  STMT is a
f250: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
f260: 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65  ent..** N is the
f270: 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64   index of a wild
f280: 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70  card in the prep
f290: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20  ared statement. 
f2a0: 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a   This command.**
f2b0: 20 62 69 6e 64 73 20 61 20 55 54 46 2d 38 20 73   binds a UTF-8 s
f2c0: 74 72 69 6e 67 20 53 54 52 49 4e 47 20 74 6f 20  tring STRING to 
f2d0: 74 68 65 20 77 69 6c 64 63 61 72 64 2e 20 20 54  the wildcard.  T
f2e0: 68 65 20 73 74 72 69 6e 67 20 69 73 20 42 59 54  he string is BYT
f2f0: 45 53 20 62 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67  ES bytes.** long
f300: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
f310: 74 65 73 74 5f 62 69 6e 64 5f 74 65 78 74 28 0a  test_bind_text(.
f320: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
f330: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
f340: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
f350: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
f360: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
f370: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
f380: 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69   *pStmt;.  int i
f390: 64 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b  dx;.  int bytes;
f3a0: 0a 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a  .  char *value;.
f3b0: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
f3c0: 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20   objc!=5 ){.    
f3d0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
f3e0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
f3f0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
f400: 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54  e \"",.        T
f410: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
f420: 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c  Obj(objv[0], 0),
f430: 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 20   " STMT N VALUE 
f440: 42 59 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20  BYTES", 0);.    
f450: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f460: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
f470: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
f480: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
f490: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
f4a0: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
f4b0: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
f4c0: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
f4d0: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
f4e0: 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20   &idx) ) return 
f4f0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c  TCL_ERROR;.  val
f500: 75 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  ue = Tcl_GetStri
f510: 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 69  ng(objv[3]);.  i
f520: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
f530: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
f540: 76 5b 34 5d 2c 20 26 62 79 74 65 73 29 20 29 20  v[4], &bytes) ) 
f550: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f560: 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
f570: 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d  3_bind_text(pStm
f580: 74 2c 20 69 64 78 2c 20 76 61 6c 75 65 2c 20 62  t, idx, value, b
f590: 79 74 65 73 2c 20 53 51 4c 49 54 45 5f 54 52 41  ytes, SQLITE_TRA
f5a0: 4e 53 49 45 4e 54 29 3b 0a 20 20 69 66 28 20 73  NSIENT);.  if( s
f5b0: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
f5c0: 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f  e(interp, StmtTo
f5d0: 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29  Db(pStmt), rc) )
f5e0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f5f0: 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  R;.  if( rc!=SQL
f600: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63  ITE_OK ){.    Tc
f610: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
f620: 6e 74 65 72 70 2c 20 73 71 6c 69 74 65 33 54 65  nterp, sqlite3Te
f630: 73 74 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  stErrorName(rc),
f640: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
f650: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
f660: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
f670: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
f680: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
f690: 74 65 78 74 31 36 20 3f 2d 73 74 61 74 69 63 3f  text16 ?-static?
f6a0: 20 53 54 4d 54 20 4e 20 53 54 52 49 4e 47 20 42   STMT N STRING B
f6b0: 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20  YTES.**.** Test 
f6c0: 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  the sqlite3_bind
f6d0: 5f 74 65 78 74 31 36 20 69 6e 74 65 72 66 61 63  _text16 interfac
f6e0: 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72  e.  STMT is a pr
f6f0: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
f700: 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e  ..** N is the in
f710: 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72  dex of a wildcar
f720: 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  d in the prepare
f730: 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  d statement.  Th
f740: 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69  is command.** bi
f750: 6e 64 73 20 61 20 55 54 46 2d 31 36 20 73 74 72  nds a UTF-16 str
f760: 69 6e 67 20 53 54 52 49 4e 47 20 74 6f 20 74 68  ing STRING to th
f770: 65 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65  e wildcard.  The
f780: 20 73 74 72 69 6e 67 20 69 73 20 42 59 54 45 53   string is BYTES
f790: 20 62 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e 0a   bytes.** long..
f7a0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
f7b0: 73 74 5f 62 69 6e 64 5f 74 65 78 74 31 36 28 0a  st_bind_text16(.
f7c0: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
f7d0: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
f7e0: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
f7f0: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
f800: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
f810: 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
f820: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71  _OMIT_UTF16.  sq
f830: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
f840: 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  t;.  int idx;.  
f850: 69 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 68 61  int bytes;.  cha
f860: 72 20 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20  r *value;.  int 
f870: 72 63 3b 0a 0a 20 20 76 6f 69 64 20 28 2a 78 44  rc;..  void (*xD
f880: 65 6c 29 28 29 20 3d 20 28 6f 62 6a 63 3d 3d 36  el)() = (objc==6
f890: 3f 53 51 4c 49 54 45 5f 53 54 41 54 49 43 3a 53  ?SQLITE_STATIC:S
f8a0: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
f8b0: 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 53 74  ;.  Tcl_Obj *oSt
f8c0: 6d 74 20 20 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a  mt    = objv[obj
f8d0: 63 2d 34 5d 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20  c-4];.  Tcl_Obj 
f8e0: 2a 6f 4e 20 20 20 20 20 20 20 3d 20 6f 62 6a 76  *oN       = objv
f8f0: 5b 6f 62 6a 63 2d 33 5d 3b 0a 20 20 54 63 6c 5f  [objc-3];.  Tcl_
f900: 4f 62 6a 20 2a 6f 53 74 72 69 6e 67 20 20 3d 20  Obj *oString  = 
f910: 6f 62 6a 76 5b 6f 62 6a 63 2d 32 5d 3b 0a 20 20  objv[objc-2];.  
f920: 54 63 6c 5f 4f 62 6a 20 2a 6f 42 79 74 65 73 20  Tcl_Obj *oBytes 
f930: 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 31 5d    = objv[objc-1]
f940: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35  ;..  if( objc!=5
f950: 20 26 26 20 6f 62 6a 63 21 3d 36 29 7b 0a 20 20   && objc!=6){.  
f960: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
f970: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
f980: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
f990: 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
f9a0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
f9b0: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
f9c0: 29 2c 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55  ), " STMT N VALU
f9d0: 45 20 42 59 54 45 53 22 2c 20 30 29 3b 0a 20 20  E BYTES", 0);.  
f9e0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
f9f0: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
fa00: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
fa10: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
fa20: 69 6e 67 28 6f 53 74 6d 74 29 2c 20 26 70 53 74  ing(oStmt), &pSt
fa30: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
fa40: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
fa50: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
fa60: 69 6e 74 65 72 70 2c 20 6f 4e 2c 20 26 69 64 78  interp, oN, &idx
fa70: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
fa80: 52 52 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d 20  RROR;.  value = 
fa90: 28 63 68 61 72 2a 29 54 63 6c 5f 47 65 74 42 79  (char*)Tcl_GetBy
faa0: 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f  teArrayFromObj(o
fab0: 53 74 72 69 6e 67 2c 20 30 29 3b 0a 20 20 69 66  String, 0);.  if
fac0: 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
fad0: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 42 79 74  Obj(interp, oByt
fae0: 65 73 2c 20 26 62 79 74 65 73 29 20 29 20 72 65  es, &bytes) ) re
faf0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
fb00: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
fb10: 62 69 6e 64 5f 74 65 78 74 31 36 28 70 53 74 6d  bind_text16(pStm
fb20: 74 2c 20 69 64 78 2c 20 28 76 6f 69 64 20 2a 29  t, idx, (void *)
fb30: 76 61 6c 75 65 2c 20 62 79 74 65 73 2c 20 78 44  value, bytes, xD
fb40: 65 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  el);.  if( sqlit
fb50: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
fb60: 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70  terp, StmtToDb(p
fb70: 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74  Stmt), rc) ) ret
fb80: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
fb90: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
fba0: 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  OK ){.    return
fbb0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
fbc0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
fbd0: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
fbe0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
fbf0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
fc00: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
fc10: 62 6c 6f 62 20 20 53 54 4d 54 20 4e 20 44 41 54  blob  STMT N DAT
fc20: 41 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65  A BYTES.**.** Te
fc30: 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62  st the sqlite3_b
fc40: 69 6e 64 5f 62 6c 6f 62 20 69 6e 74 65 72 66 61  ind_blob interfa
fc50: 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70  ce.  STMT is a p
fc60: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
fc70: 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69  t..** N is the i
fc80: 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61  ndex of a wildca
fc90: 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  rd in the prepar
fca0: 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  ed statement.  T
fcb0: 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62  his command.** b
fcc0: 69 6e 64 73 20 61 20 42 4c 4f 42 20 74 6f 20 74  inds a BLOB to t
fcd0: 68 65 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68  he wildcard.  Th
fce0: 65 20 42 4c 4f 42 20 69 73 20 42 59 54 45 53 20  e BLOB is BYTES 
fcf0: 62 79 74 65 73 20 69 6e 20 73 69 7a 65 2e 0a 2a  bytes in size..*
fd00: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
fd10: 74 5f 62 69 6e 64 5f 62 6c 6f 62 28 0a 20 20 76  t_bind_blob(.  v
fd20: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
fd30: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
fd40: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
fd50: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
fd60: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
fd70: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
fd80: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b  Stmt;.  int idx;
fd90: 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 20 20  .  int bytes;.  
fda0: 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20 69  char *value;.  i
fdb0: 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
fdc0: 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=5 ){.    Tcl
fdd0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
fde0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
fdf0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
fe00: 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  "",.        Tcl_
fe10: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
fe20: 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20  (objv[0], 0), " 
fe30: 53 54 4d 54 20 4e 20 44 41 54 41 20 42 59 54 45  STMT N DATA BYTE
fe40: 53 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  S", 0);.    retu
fe50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
fe60: 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
fe70: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
fe80: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
fe90: 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
fea0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
feb0: 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
fec0: 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
fed0: 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64  rp, objv[2], &id
fee0: 78 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  x) ) return TCL_
fef0: 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d  ERROR;.  value =
ff00: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
ff10: 62 6a 76 5b 33 5d 29 3b 0a 20 20 69 66 28 20 54  bjv[3]);.  if( T
ff20: 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
ff30: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d  (interp, objv[4]
ff40: 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74 75  , &bytes) ) retu
ff50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
ff60: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69   rc = sqlite3_bi
ff70: 6e 64 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 20 69  nd_blob(pStmt, i
ff80: 64 78 2c 20 76 61 6c 75 65 2c 20 62 79 74 65 73  dx, value, bytes
ff90: 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
ffa0: 4e 54 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  NT);.  if( sqlit
ffb0: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
ffc0: 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70  terp, StmtToDb(p
ffd0: 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74  Stmt), rc) ) ret
ffe0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
fff0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
10000 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  OK ){.    return
10010 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
10020 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
10030 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
10040 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
10050 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74  _parameter_count
10060 20 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 52 65 74    STMT.**.** Ret
10070 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
10080 66 20 77 69 6c 64 63 61 72 64 73 20 69 6e 20 74  f wildcards in t
10090 68 65 20 67 69 76 65 6e 20 73 74 61 74 65 6d 65  he given stateme
100a0 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nt..*/.static in
100b0 74 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61  t test_bind_para
100c0 6d 65 74 65 72 5f 63 6f 75 6e 74 28 0a 20 20 76  meter_count(.  v
100d0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
100e0 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
100f0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
10100 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
10110 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
10120 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
10130 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  Stmt;..  if( obj
10140 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
10150 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
10160 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53  erp, 1, objv, "S
10170 54 4d 54 22 29 3b 0a 20 20 20 20 72 65 74 75 72  TMT");.    retur
10180 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
10190 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
101a0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
101b0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
101c0 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
101d0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
101e0 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
101f0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
10200 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74  _NewIntObj(sqlit
10210 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
10220 72 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 29 29  r_count(pStmt)))
10230 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
10240 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
10250 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  e:   sqlite3_bin
10260 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
10270 20 20 53 54 4d 54 20 20 4e 0a 2a 2a 0a 2a 2a 20    STMT  N.**.** 
10280 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20  Return the name 
10290 6f 66 20 74 68 65 20 4e 74 68 20 77 69 6c 64 63  of the Nth wildc
102a0 61 72 64 2e 20 20 54 68 65 20 66 69 72 73 74 20  ard.  The first 
102b0 77 69 6c 64 63 61 72 64 20 69 73 20 31 2e 0a 2a  wildcard is 1..*
102c0 2a 20 41 6e 20 65 6d 70 74 79 20 73 74 72 69 6e  * An empty strin
102d0 67 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66  g is returned if
102e0 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e   N is out of ran
102f0 67 65 20 6f 72 20 69 66 20 74 68 65 20 77 69 6c  ge or if the wil
10300 64 63 61 72 64 0a 2a 2a 20 69 73 20 6e 61 6d 65  dcard.** is name
10310 6c 65 73 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  less..*/.static 
10320 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 70 61  int test_bind_pa
10330 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 0a 20 20  rameter_name(.  
10340 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
10350 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
10360 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
10370 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
10380 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
10390 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
103a0 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 3b 0a  pStmt;.  int i;.
103b0 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
103c0 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
103d0 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
103e0 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 20 4e 22  , objv, "STMT N"
103f0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
10400 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
10410 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
10420 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
10430 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
10440 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
10450 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
10460 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
10470 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
10480 6a 76 5b 32 5d 2c 20 26 69 29 20 29 20 72 65 74  jv[2], &i) ) ret
10490 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
104a0 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
104b0 74 28 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20  t(interp, .     
104c0 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
104d0 28 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  (sqlite3_bind_pa
104e0 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 70 53 74  rameter_name(pSt
104f0 6d 74 2c 69 29 2c 2d 31 29 0a 20 20 29 3b 0a 20  mt,i),-1).  );. 
10500 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
10510 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
10520 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
10530 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 20 20  arameter_index  
10540 53 54 4d 54 20 20 4e 41 4d 45 0a 2a 2a 0a 2a 2a  STMT  NAME.**.**
10550 20 52 65 74 75 72 6e 20 74 68 65 20 69 6e 64 65   Return the inde
10560 78 20 6f 66 20 74 68 65 20 77 69 6c 64 63 61 72  x of the wildcar
10570 64 20 63 61 6c 6c 65 64 20 4e 41 4d 45 2e 20 20  d called NAME.  
10580 52 65 74 75 72 6e 20 30 20 69 66 20 74 68 65 72  Return 0 if ther
10590 65 20 69 73 0a 2a 2a 20 6e 6f 20 73 75 63 68 20  e is.** no such 
105a0 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61  wildcard..*/.sta
105b0 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
105c0 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65  d_parameter_inde
105d0 78 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  x(.  void * clie
105e0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
105f0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
10600 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
10610 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
10620 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
10630 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69  tmt *pStmt;..  i
10640 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20  f( objc!=3 ){.  
10650 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
10660 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
10670 6a 76 2c 20 22 53 54 4d 54 20 4e 41 4d 45 22 29  jv, "STMT NAME")
10680 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
10690 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
106a0 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
106b0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
106c0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
106d0 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
106e0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
106f0 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
10700 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63  interp, .     Tc
10710 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 0a 20 20 20  l_NewIntObj(.   
10720 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64      sqlite3_bind
10730 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
10740 28 70 53 74 6d 74 2c 54 63 6c 5f 47 65 74 53 74  (pStmt,Tcl_GetSt
10750 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 0a 20  ring(objv[2])). 
10760 20 20 20 20 29 0a 20 20 29 3b 0a 20 20 72 65 74      ).  );.  ret
10770 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
10780 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
10790 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64  lite3_clear_bind
107a0 69 6e 67 73 20 53 54 4d 54 0a 2a 2a 0a 2a 2f 0a  ings STMT.**.*/.
107b0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
107c0 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 0a  clear_bindings(.
107d0 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
107e0 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
107f0 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
10800 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
10810 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
10820 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
10830 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20   *pStmt;..  if( 
10840 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
10850 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
10860 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
10870 20 22 53 54 4d 54 22 29 3b 0a 20 20 20 20 72 65   "STMT");.    re
10880 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10890 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d    }.  if( getStm
108a0 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
108b0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
108c0 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
108d0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
108e0 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62  ROR;.  Tcl_SetOb
108f0 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
10900 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71  Tcl_NewIntObj(sq
10910 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64  lite3_clear_bind
10920 69 6e 67 73 28 70 53 74 6d 74 29 29 29 3b 0a 20  ings(pStmt)));. 
10930 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
10940 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
10950 20 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20    sqlite3_sleep 
10960 4d 49 4c 4c 49 53 45 43 4f 4e 44 53 0a 2a 2f 0a  MILLISECONDS.*/.
10970 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
10980 73 6c 65 65 70 28 0a 20 20 76 6f 69 64 20 2a 20  sleep(.  void * 
10990 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
109a0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
109b0 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
109c0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
109d0 62 6a 76 5b 5d 0a 29 7b 0a 20 20 69 6e 74 20 6d  bjv[].){.  int m
109e0 73 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  s;..  if( objc!=
109f0 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  2 ){.    Tcl_Wro
10a00 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
10a10 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 4d 49 4c 4c  , 1, objv, "MILL
10a20 49 53 45 43 4f 4e 44 53 22 29 3b 0a 20 20 20 20  ISECONDS");.    
10a30 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
10a40 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f  ;.  }.  if( Tcl_
10a50 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
10a60 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26  terp, objv[1], &
10a70 6d 73 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ms) ){.    retur
10a80 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
10a90 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
10aa0 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
10ab0 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65  NewIntObj(sqlite
10ac0 33 5f 73 6c 65 65 70 28 6d 73 29 29 29 3b 0a 20  3_sleep(ms)));. 
10ad0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
10ae0 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
10af0 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20  sqlite3_errcode 
10b00 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  DB.**.** Return 
10b10 74 68 65 20 73 74 72 69 6e 67 20 72 65 70 72 65  the string repre
10b20 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
10b30 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71 6c   most recent sql
10b40 69 74 65 33 5f 2a 20 41 50 49 0a 2a 2a 20 65 72  ite3_* API.** er
10b50 72 6f 72 20 63 6f 64 65 2e 20 65 2e 67 2e 20 22  ror code. e.g. "
10b60 53 51 4c 49 54 45 5f 45 52 52 4f 52 22 2e 0a 2a  SQLITE_ERROR"..*
10b70 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
10b80 74 5f 65 72 72 63 6f 64 65 28 0a 20 20 76 6f 69  t_errcode(.  voi
10b90 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
10ba0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
10bb0 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
10bc0 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
10bd0 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
10be0 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
10bf0 74 20 72 63 3b 0a 20 20 63 68 61 72 20 7a 42 75  t rc;.  char zBu
10c00 66 5b 33 30 5d 3b 0a 0a 20 20 69 66 28 20 6f 62  f[30];..  if( ob
10c10 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
10c20 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
10c30 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
10c40 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
10c50 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
10c60 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
10c70 5d 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20  ]), " DB", 0);. 
10c80 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
10c90 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
10ca0 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
10cb0 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
10cc0 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29  g(objv[1]), &db)
10cd0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
10ce0 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
10cf0 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29 3b  te3_errcode(db);
10d00 0a 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29  .  if( (rc&0xff)
10d10 3d 3d 72 63 20 29 7b 0a 20 20 20 20 7a 42 75 66  ==rc ){.    zBuf
10d20 5b 30 5d 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  [0] = 0;.  }else
10d30 7b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42  {.    sprintf(zB
10d40 75 66 2c 22 2b 25 64 22 2c 20 72 63 3e 3e 38 29  uf,"+%d", rc>>8)
10d50 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65  ;.  }.  Tcl_Appe
10d60 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
10d70 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
10d80 6d 65 28 72 63 29 2c 20 7a 42 75 66 2c 20 30 29  me(rc), zBuf, 0)
10d90 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
10da0 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
10db0 65 3a 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67  e:   test_errmsg
10dc0 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e   DB.**.** Return
10dd0 73 20 74 68 65 20 55 54 46 2d 38 20 72 65 70 72  s the UTF-8 repr
10de0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
10df0 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
10e00 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 0a 2a  string for the.*
10e10 2a 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71  * most recent sq
10e20 6c 69 74 65 33 5f 2a 20 41 50 49 20 63 61 6c 6c  lite3_* API call
10e30 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
10e40 74 65 73 74 5f 65 72 72 6d 73 67 28 0a 20 20 76  test_errmsg(.  v
10e50 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
10e60 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
10e70 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
10e80 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
10e90 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
10ea0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
10eb0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72  const char *zErr
10ec0 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
10ed0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
10ee0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
10ef0 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
10f00 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
10f10 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
10f20 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
10f30 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   DB", 0);.    re
10f40 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10f50 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
10f60 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
10f70 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
10f80 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
10f90 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10fa0 0a 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65  .  zErr = sqlite
10fb0 33 5f 65 72 72 6d 73 67 28 64 62 29 3b 0a 20 20  3_errmsg(db);.  
10fc0 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
10fd0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
10fe0 53 74 72 69 6e 67 4f 62 6a 28 7a 45 72 72 2c 20  StringObj(zErr, 
10ff0 2d 31 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  -1));.  return T
11000 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
11010 55 73 61 67 65 3a 20 20 20 74 65 73 74 5f 65 72  Usage:   test_er
11020 72 6d 73 67 31 36 20 44 42 0a 2a 2a 0a 2a 2a 20  rmsg16 DB.**.** 
11030 52 65 74 75 72 6e 73 20 74 68 65 20 55 54 46 2d  Returns the UTF-
11040 31 36 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  16 representatio
11050 6e 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 6d  n of the error m
11060 65 73 73 61 67 65 20 73 74 72 69 6e 67 20 66 6f  essage string fo
11070 72 20 74 68 65 0a 2a 2a 20 6d 6f 73 74 20 72 65  r the.** most re
11080 63 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20 41  cent sqlite3_* A
11090 50 49 20 63 61 6c 6c 2e 20 54 68 69 73 20 69 73  PI call. This is
110a0 20 61 20 62 79 74 65 20 61 72 72 61 79 20 6f 62   a byte array ob
110b0 6a 65 63 74 20 61 74 20 74 68 65 20 54 43 4c 20  ject at the TCL 
110c0 0a 2a 2a 20 6c 65 76 65 6c 2c 20 61 6e 64 20 69  .** level, and i
110d0 74 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20 30  t includes the 0
110e0 78 30 30 20 30 78 30 30 20 74 65 72 6d 69 6e 61  x00 0x00 termina
110f0 74 6f 72 20 62 79 74 65 73 20 61 74 20 74 68 65  tor bytes at the
11100 20 65 6e 64 20 6f 66 20 74 68 65 0a 2a 2a 20 55   end of the.** U
11110 54 46 2d 31 36 20 73 74 72 69 6e 67 2e 0a 2a 2f  TF-16 string..*/
11120 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
11130 5f 65 72 72 6d 73 67 31 36 28 0a 20 20 76 6f 69  _errmsg16(.  voi
11140 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
11150 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
11160 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
11170 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
11180 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66  ST objv[].){.#if
11190 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
111a0 5f 55 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33  _UTF16.  sqlite3
111b0 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 76 6f   *db;.  const vo
111c0 69 64 20 2a 7a 45 72 72 3b 0a 20 20 69 6e 74 20  id *zErr;.  int 
111d0 62 79 74 65 73 20 3d 20 30 3b 0a 0a 20 20 69 66  bytes = 0;..  if
111e0 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
111f0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
11200 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
11210 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
11220 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
11230 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
11240 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30  jv[0]), " DB", 0
11250 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
11260 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
11270 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
11280 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
11290 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
112a0 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
112b0 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a 45 72 72  L_ERROR;..  zErr
112c0 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73   = sqlite3_errms
112d0 67 31 36 28 64 62 29 3b 0a 20 20 69 66 28 20 7a  g16(db);.  if( z
112e0 45 72 72 20 29 7b 0a 20 20 20 20 62 79 74 65 73  Err ){.    bytes
112f0 20 3d 20 73 71 6c 69 74 65 33 75 74 66 31 36 42   = sqlite3utf16B
11300 79 74 65 4c 65 6e 28 7a 45 72 72 2c 20 2d 31 29  yteLen(zErr, -1)
11310 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74 4f  ;.  }.  Tcl_SetO
11320 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
11330 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61   Tcl_NewByteArra
11340 79 4f 62 6a 28 7a 45 72 72 2c 20 62 79 74 65 73  yObj(zErr, bytes
11350 29 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ));.#endif /* SQ
11360 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
11370 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
11380 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
11390 67 65 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ge: sqlite3_prep
113a0 61 72 65 20 44 42 20 73 71 6c 20 62 79 74 65 73  are DB sql bytes
113b0 20 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43   tailvar.**.** C
113c0 6f 6d 70 69 6c 65 20 75 70 20 74 6f 20 3c 62 79  ompile up to <by
113d0 74 65 73 3e 20 62 79 74 65 73 20 6f 66 20 74 68  tes> bytes of th
113e0 65 20 73 75 70 70 6c 69 65 64 20 53 51 4c 20 73  e supplied SQL s
113f0 74 72 69 6e 67 20 3c 73 71 6c 3e 20 75 73 69 6e  tring <sql> usin
11400 67 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 68 61  g.** database ha
11410 6e 64 6c 65 20 3c 44 42 3e 2e 20 54 68 65 20 70  ndle <DB>. The p
11420 61 72 61 6d 65 74 65 72 20 3c 74 61 69 6c 76 61  arameter <tailva
11430 6c 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  l> is the name o
11440 66 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61  f a global.** va
11450 72 69 61 62 6c 65 20 74 68 61 74 20 69 73 20 73  riable that is s
11460 65 74 20 74 6f 20 74 68 65 20 75 6e 75 73 65 64  et to the unused
11470 20 70 6f 72 74 69 6f 6e 20 6f 66 20 3c 73 71 6c   portion of <sql
11480 3e 20 28 69 66 20 61 6e 79 29 2e 20 41 0a 2a 2a  > (if any). A.**
11490 20 53 54 4d 54 20 68 61 6e 64 6c 65 20 69 73 20   STMT handle is 
114a0 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61  returned..*/.sta
114b0 74 69 63 20 69 6e 74 20 74 65 73 74 5f 70 72 65  tic int test_pre
114c0 70 61 72 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  pare(.  void * c
114d0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
114e0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
114f0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
11500 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
11510 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
11520 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63  3 *db;.  const c
11530 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e 74  har *zSql;.  int
11540 20 62 79 74 65 73 3b 0a 20 20 63 6f 6e 73 74 20   bytes;.  const 
11550 63 68 61 72 20 2a 7a 54 61 69 6c 20 3d 20 30 3b  char *zTail = 0;
11560 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
11570 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68  *pStmt = 0;.  ch
11580 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20 69  ar zBuf[50];.  i
11590 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
115a0 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=5 ){.    Tcl
115b0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
115c0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
115d0 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
115e0 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
115f0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
11600 5d 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79 74  ]), " DB sql byt
11610 65 73 20 74 61 69 6c 76 61 72 22 2c 20 30 29 3b  es tailvar", 0);
11620 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
11630 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
11640 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
11650 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
11660 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
11670 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
11680 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d 20  ERROR;.  zSql = 
11690 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
116a0 6a 76 5b 32 5d 29 3b 0a 20 20 69 66 28 20 54 63  jv[2]);.  if( Tc
116b0 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
116c0 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c  interp, objv[3],
116d0 20 26 62 79 74 65 73 29 20 29 20 72 65 74 75 72   &bytes) ) retur
116e0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
116f0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
11700 70 61 72 65 28 64 62 2c 20 7a 53 71 6c 2c 20 62  pare(db, zSql, b
11710 79 74 65 73 2c 20 26 70 53 74 6d 74 2c 20 26 7a  ytes, &pStmt, &z
11720 54 61 69 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c  Tail);.  if( sql
11730 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
11740 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20  interp, db, rc) 
11750 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
11760 4f 52 3b 0a 20 20 69 66 28 20 7a 54 61 69 6c 20  OR;.  if( zTail 
11770 29 7b 0a 20 20 20 20 69 66 28 20 62 79 74 65 73  ){.    if( bytes
11780 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 79 74  >=0 ){.      byt
11790 65 73 20 3d 20 62 79 74 65 73 20 2d 20 28 7a 54  es = bytes - (zT
117a0 61 69 6c 2d 7a 53 71 6c 29 3b 0a 20 20 20 20 7d  ail-zSql);.    }
117b0 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56  .    Tcl_ObjSetV
117c0 61 72 32 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  ar2(interp, objv
117d0 5b 34 5d 2c 20 30 2c 20 54 63 6c 5f 4e 65 77 53  [4], 0, Tcl_NewS
117e0 74 72 69 6e 67 4f 62 6a 28 7a 54 61 69 6c 2c 20  tringObj(zTail, 
117f0 62 79 74 65 73 29 2c 20 30 29 3b 0a 20 20 7d 0a  bytes), 0);.  }.
11800 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
11810 5f 4f 4b 20 29 7b 0a 20 20 20 20 61 73 73 65 72  _OK ){.    asser
11820 74 28 20 70 53 74 6d 74 3d 3d 30 20 29 3b 0a 20  t( pStmt==0 );. 
11830 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c     sprintf(zBuf,
11840 20 22 28 25 64 29 20 22 2c 20 72 63 29 3b 0a 20   "(%d) ", rc);. 
11850 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
11860 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
11870 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
11880 28 64 62 29 2c 20 30 29 3b 0a 20 20 20 20 72 65  (db), 0);.    re
11890 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
118a0 20 20 7d 0a 0a 20 20 69 66 28 20 70 53 74 6d 74    }..  if( pStmt
118b0 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   ){.    if( sqli
118c0 74 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74  te3TestMakePoint
118d0 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42  erStr(interp, zB
118e0 75 66 2c 20 70 53 74 6d 74 29 20 29 20 72 65 74  uf, pStmt) ) ret
118f0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
11900 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
11910 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
11920 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  , 0);.  }.  retu
11930 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
11940 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
11950 65 33 5f 70 72 65 70 61 72 65 20 44 42 20 73 71  e3_prepare DB sq
11960 6c 20 62 79 74 65 73 20 74 61 69 6c 76 61 72 0a  l bytes tailvar.
11970 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 75 70  **.** Compile up
11980 20 74 6f 20 3c 62 79 74 65 73 3e 20 62 79 74 65   to <bytes> byte
11990 73 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65  s of the supplie
119a0 64 20 53 51 4c 20 73 74 72 69 6e 67 20 3c 73 71  d SQL string <sq
119b0 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20 64 61 74 61  l> using.** data
119c0 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 44 42 3e  base handle <DB>
119d0 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20  . The parameter 
119e0 3c 74 61 69 6c 76 61 6c 3e 20 69 73 20 74 68 65  <tailval> is the
119f0 20 6e 61 6d 65 20 6f 66 20 61 20 67 6c 6f 62 61   name of a globa
11a00 6c 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 74 68  l.** variable th
11a10 61 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  at is set to the
11a20 20 75 6e 75 73 65 64 20 70 6f 72 74 69 6f 6e 20   unused portion 
11a30 6f 66 20 3c 73 71 6c 3e 20 28 69 66 20 61 6e 79  of <sql> (if any
11a40 29 2e 20 41 0a 2a 2a 20 53 54 4d 54 20 68 61 6e  ). A.** STMT han
11a50 64 6c 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e  dle is returned.
11a60 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
11a70 65 73 74 5f 70 72 65 70 61 72 65 31 36 28 0a 20  est_prepare16(. 
11a80 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
11a90 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
11aa0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
11ab0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
11ac0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
11ad0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
11ae0 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c  OMIT_UTF16.  sql
11af0 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73  ite3 *db;.  cons
11b00 74 20 76 6f 69 64 20 2a 7a 53 71 6c 3b 0a 20 20  t void *zSql;.  
11b10 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 54 61 69  const void *zTai
11b20 6c 20 3d 20 30 3b 0a 20 20 54 63 6c 5f 4f 62 6a  l = 0;.  Tcl_Obj
11b30 20 2a 70 54 61 69 6c 20 3d 20 30 3b 0a 20 20 73   *pTail = 0;.  s
11b40 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
11b50 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a  mt = 0;.  char z
11b60 42 75 66 5b 35 30 5d 3b 20 0a 20 20 69 6e 74 20  Buf[50]; .  int 
11b70 72 63 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b  rc;.  int bytes;
11b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b90 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 73  /* The integer s
11ba0 70 65 63 69 66 69 65 64 20 61 73 20 61 72 67 20  pecified as arg 
11bb0 33 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 6c 65  3 */.  int objle
11bc0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
11bd0 20 2f 2a 20 54 68 65 20 62 79 74 65 2d 61 72 72   /* The byte-arr
11be0 61 79 20 6c 65 6e 67 74 68 20 6f 66 20 61 72 67  ay length of arg
11bf0 20 32 20 2a 2f 0a 0a 20 20 69 66 28 20 6f 62 6a   2 */..  if( obj
11c00 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=5 ){.    Tcl_
11c10 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
11c20 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
11c30 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
11c40 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
11c50 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
11c60 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79 74 65  ), " DB sql byte
11c70 73 20 74 61 69 6c 76 61 72 22 2c 20 30 29 3b 0a  s tailvar", 0);.
11c80 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
11c90 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
11ca0 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
11cb0 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
11cc0 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
11cd0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
11ce0 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d 20 54  RROR;.  zSql = T
11cf0 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79 46  cl_GetByteArrayF
11d00 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20  romObj(objv[2], 
11d10 26 6f 62 6a 6c 65 6e 29 3b 0a 20 20 69 66 28 20  &objlen);.  if( 
11d20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
11d30 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33  j(interp, objv[3
11d40 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74  ], &bytes) ) ret
11d50 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
11d60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
11d70 72 65 70 61 72 65 31 36 28 64 62 2c 20 7a 53 71  repare16(db, zSq
11d80 6c 2c 20 62 79 74 65 73 2c 20 26 70 53 74 6d 74  l, bytes, &pStmt
11d90 2c 20 26 7a 54 61 69 6c 29 3b 0a 20 20 69 66 28  , &zTail);.  if(
11da0 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
11db0 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
11dc0 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
11dd0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63  _ERROR;.  if( rc
11de0 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
11df0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
11e00 20 69 66 28 20 7a 54 61 69 6c 20 29 7b 0a 20 20   if( zTail ){.  
11e10 20 20 6f 62 6a 6c 65 6e 20 3d 20 6f 62 6a 6c 65    objlen = objle
11e20 6e 20 2d 20 28 28 75 38 20 2a 29 7a 54 61 69 6c  n - ((u8 *)zTail
11e30 2d 28 75 38 20 2a 29 7a 53 71 6c 29 3b 0a 20 20  -(u8 *)zSql);.  
11e40 7d 65 6c 73 65 7b 0a 20 20 20 20 6f 62 6a 6c 65  }else{.    objle
11e50 6e 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 54 61  n = 0;.  }.  pTa
11e60 69 6c 20 3d 20 54 63 6c 5f 4e 65 77 42 79 74 65  il = Tcl_NewByte
11e70 41 72 72 61 79 4f 62 6a 28 28 75 38 20 2a 29 7a  ArrayObj((u8 *)z
11e80 54 61 69 6c 2c 20 6f 62 6a 6c 65 6e 29 3b 0a 20  Tail, objlen);. 
11e90 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e   Tcl_IncrRefCoun
11ea0 74 28 70 54 61 69 6c 29 3b 0a 20 20 54 63 6c 5f  t(pTail);.  Tcl_
11eb0 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72  ObjSetVar2(inter
11ec0 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30 2c 20 70  p, objv[4], 0, p
11ed0 54 61 69 6c 2c 20 30 29 3b 0a 20 20 54 63 6c 5f  Tail, 0);.  Tcl_
11ee0 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 54 61  DecrRefCount(pTa
11ef0 69 6c 29 3b 0a 0a 20 20 69 66 28 20 70 53 74 6d  il);..  if( pStm
11f00 74 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c  t ){.    if( sql
11f10 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e  ite3TestMakePoin
11f20 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a  terStr(interp, z
11f30 42 75 66 2c 20 70 53 74 6d 74 29 20 29 20 72 65  Buf, pStmt) ) re
11f40 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
11f50 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64    }.  Tcl_Append
11f60 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
11f70 42 75 66 2c 20 30 29 3b 0a 23 65 6e 64 69 66 20  Buf, 0);.#endif 
11f80 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
11f90 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e  TF16 */.  return
11fa0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
11fb0 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
11fc0 5f 6f 70 65 6e 20 66 69 6c 65 6e 61 6d 65 20 3f  _open filename ?
11fd0 6f 70 74 69 6f 6e 73 2d 6c 69 73 74 3f 0a 2a 2f  options-list?.*/
11fe0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
11ff0 5f 6f 70 65 6e 28 0a 20 20 76 6f 69 64 20 2a 20  _open(.  void * 
12000 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
12010 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
12020 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
12030 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
12040 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 6f 6e 73 74  bjv[].){.  const
12050 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
12060 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  ;.  sqlite3 *db;
12070 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61  .  int rc;.  cha
12080 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a 0a 20 20  r zBuf[100];..  
12090 69 66 28 20 6f 62 6a 63 21 3d 33 20 26 26 20 6f  if( objc!=3 && o
120a0 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
120b0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
120c0 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
120d0 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
120e0 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
120f0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
12100 30 5d 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65 20  0]), " filename 
12110 6f 70 74 69 6f 6e 73 2d 6c 69 73 74 22 2c 20 30  options-list", 0
12120 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
12130 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
12140 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 54 63 6c 5f  zFilename = Tcl_
12150 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
12160 5d 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ]);.  rc = sqlit
12170 65 33 5f 6f 70 65 6e 28 7a 46 69 6c 65 6e 61 6d  e3_open(zFilenam
12180 65 2c 20 26 64 62 29 3b 0a 20 20 0a 20 20 69 66  e, &db);.  .  if
12190 28 20 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b  ( sqlite3TestMak
121a0 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65  ePointerStr(inte
121b0 72 70 2c 20 7a 42 75 66 2c 20 64 62 29 20 29 20  rp, zBuf, db) ) 
121c0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
121d0 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  ;.  Tcl_AppendRe
121e0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
121f0 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  f, 0);.  return 
12200 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
12210 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
12220 6f 70 65 6e 31 36 20 66 69 6c 65 6e 61 6d 65 20  open16 filename 
12230 6f 70 74 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74 69  options.*/.stati
12240 63 20 69 6e 74 20 74 65 73 74 5f 6f 70 65 6e 31  c int test_open1
12250 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  6(.  void * clie
12260 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
12270 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
12280 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
12290 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
122a0 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ].){.#ifndef SQL
122b0 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
122c0 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 69   const void *zFi
122d0 6c 65 6e 61 6d 65 3b 0a 20 20 73 71 6c 69 74 65  lename;.  sqlite
122e0 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
122f0 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30  .  char zBuf[100
12300 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  ];..  if( objc!=
12310 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
12320 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
12330 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
12340 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
12350 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
12360 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
12370 22 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f  " filename optio
12380 6e 73 2d 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20  ns-list", 0);.  
12390 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
123a0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65  OR;.  }..  zFile
123b0 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74 42 79  name = Tcl_GetBy
123c0 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f  teArrayFromObj(o
123d0 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a 20 20 72 63  bjv[1], 0);.  rc
123e0 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31   = sqlite3_open1
123f0 36 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 64 62  6(zFilename, &db
12400 29 3b 0a 20 20 0a 20 20 69 66 28 20 73 71 6c 69  );.  .  if( sqli
12410 74 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74  te3TestMakePoint
12420 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42  erStr(interp, zB
12430 75 66 2c 20 64 62 29 20 29 20 72 65 74 75 72 6e  uf, db) ) return
12440 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63   TCL_ERROR;.  Tc
12450 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
12460 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b  nterp, zBuf, 0);
12470 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
12480 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
12490 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
124a0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
124b0 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74   sqlite3_complet
124c0 65 31 36 20 3c 55 54 46 2d 31 36 20 73 74 72 69  e16 <UTF-16 stri
124d0 6e 67 3e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  ng>.**.** Return
124e0 20 31 20 69 66 20 74 68 65 20 73 75 70 70 6c 69   1 if the suppli
124f0 65 64 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  ed argument is a
12500 20 63 6f 6d 70 6c 65 74 65 20 53 51 4c 20 73 74   complete SQL st
12510 61 74 65 6d 65 6e 74 2c 20 6f 72 20 7a 65 72 6f  atement, or zero
12520 0a 2a 2a 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a  .** otherwise..*
12530 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
12540 74 5f 63 6f 6d 70 6c 65 74 65 31 36 28 0a 20 20  t_complete16(.  
12550 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
12560 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
12570 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
12580 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
12590 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
125a0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
125b0 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54  ITE_OMIT_COMPLET
125c0 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  E) && !defined(S
125d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
125e0 29 0a 20 20 63 68 61 72 20 2a 7a 42 75 66 3b 0a  ).  char *zBuf;.
125f0 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
12600 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
12610 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
12620 2c 20 6f 62 6a 76 2c 20 22 3c 75 74 66 2d 31 36  , objv, "<utf-16
12630 20 73 71 6c 3e 22 29 3b 0a 20 20 20 20 72 65 74   sql>");.    ret
12640 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
12650 20 7d 0a 0a 20 20 7a 42 75 66 20 3d 20 28 63 68   }..  zBuf = (ch
12660 61 72 2a 29 54 63 6c 5f 47 65 74 42 79 74 65 41  ar*)Tcl_GetByteA
12670 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  rrayFromObj(objv
12680 5b 31 5d 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 53  [1], 0);.  Tcl_S
12690 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
126a0 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
126b0 6a 28 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65  j(sqlite3_comple
126c0 74 65 31 36 28 7a 42 75 66 29 29 29 3b 0a 23 65  te16(zBuf)));.#e
126d0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
126e0 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 20 26 26 20  MIT_COMPLETE && 
126f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
12700 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43  6 */.  return TC
12710 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
12720 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 73 74  sage: sqlite3_st
12730 65 70 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 41 64  ep STMT.**.** Ad
12740 76 61 6e 63 65 20 74 68 65 20 73 74 61 74 65 6d  vance the statem
12750 65 6e 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ent to the next 
12760 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  row..*/.static i
12770 6e 74 20 74 65 73 74 5f 73 74 65 70 28 0a 20 20  nt test_step(.  
12780 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
12790 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
127a0 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
127b0 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
127c0 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
127d0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
127e0 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b  pStmt;.  int rc;
127f0 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
12800 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
12810 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
12820 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
12830 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
12840 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
12850 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
12860 53 54 4d 54 22 2c 20 30 29 3b 0a 20 20 20 20 72  STMT", 0);.    r
12870 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12880 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
12890 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
128a0 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
128b0 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
128c0 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
128d0 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71  ERROR;.  rc = sq
128e0 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74  lite3_step(pStmt
128f0 29 3b 0a 0a 20 20 2f 2a 20 69 66 28 20 72 63 21  );..  /* if( rc!
12900 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 26 26 20  =SQLITE_DONE && 
12910 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  rc!=SQLITE_ROW )
12920 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
12930 52 3b 20 2a 2f 0a 20 20 54 63 6c 5f 53 65 74 52  R; */.  Tcl_SetR
12940 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
12950 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28  har *)errorName(
12960 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  rc), 0);.  retur
12970 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
12980 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
12990 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 53  3_column_count S
129a0 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  TMT .**.** Retur
129b0 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
129c0 63 6f 6c 75 6d 6e 73 20 72 65 74 75 72 6e 65 64  columns returned
129d0 20 62 79 20 74 68 65 20 73 71 6c 20 73 74 61 74   by the sql stat
129e0 65 6d 65 6e 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73  ement STMT..*/.s
129f0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
12a00 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 0a 20 20 76  olumn_count(.  v
12a10 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
12a20 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
12a30 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
12a40 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
12a50 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
12a60 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
12a70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  Stmt;..  if( obj
12a80 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
12a90 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
12aa0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
12ab0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
12ac0 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
12ad0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
12ae0 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
12af0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
12b00 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
12b10 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
12b20 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
12b30 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
12b40 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
12b50 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
12b60 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  R;..  Tcl_SetObj
12b70 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
12b80 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
12b90 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
12ba0 74 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65  t(pStmt)));.  re
12bb0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
12bc0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
12bd0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  ite3_column_type
12be0 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a   STMT column.**.
12bf0 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 74 79  ** Return the ty
12c00 70 65 20 6f 66 20 74 68 65 20 64 61 74 61 20 69  pe of the data i
12c10 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e  n column 'column
12c20 27 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  ' of the current
12c30 20 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   row..*/.static 
12c40 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f  int test_column_
12c50 74 79 70 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  type(.  void * c
12c60 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
12c70 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
12c80 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
12c90 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
12ca0 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
12cb0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
12cc0 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 6e 74 20   int col;.  int 
12cd0 74 70 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  tp;..  if( objc!
12ce0 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
12cf0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
12d00 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
12d10 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
12d20 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
12d30 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
12d40 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
12d50 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
12d60 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
12d70 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
12d80 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
12d90 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
12da0 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
12db0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12dc0 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
12dd0 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
12de0 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
12df0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
12e00 4f 52 3b 0a 0a 20 20 74 70 20 3d 20 73 71 6c 69  OR;..  tp = sqli
12e10 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28  te3_column_type(
12e20 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 73  pStmt, col);.  s
12e30 77 69 74 63 68 28 20 74 70 20 29 7b 0a 20 20 20  witch( tp ){.   
12e40 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54   case SQLITE_INT
12e50 45 47 45 52 3a 20 0a 20 20 20 20 20 20 54 63 6c  EGER: .      Tcl
12e60 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
12e70 70 2c 20 22 49 4e 54 45 47 45 52 22 2c 20 54 43  p, "INTEGER", TC
12e80 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20  L_STATIC); .    
12e90 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
12ea0 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3a 0a 20  e SQLITE_NULL:. 
12eb0 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75       Tcl_SetResu
12ec0 6c 74 28 69 6e 74 65 72 70 2c 20 22 4e 55 4c 4c  lt(interp, "NULL
12ed0 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20  ", TCL_STATIC); 
12ee0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
12ef0 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4c    case SQLITE_FL
12f00 4f 41 54 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53  OAT:.      Tcl_S
12f10 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
12f20 20 22 46 4c 4f 41 54 22 2c 20 54 43 4c 5f 53 54   "FLOAT", TCL_ST
12f30 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72  ATIC); .      br
12f40 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
12f50 4c 49 54 45 5f 54 45 58 54 3a 0a 20 20 20 20 20  LITE_TEXT:.     
12f60 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
12f70 6e 74 65 72 70 2c 20 22 54 45 58 54 22 2c 20 54  nterp, "TEXT", T
12f80 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20  CL_STATIC); .   
12f90 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
12fa0 73 65 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3a 0a  se SQLITE_BLOB:.
12fb0 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73        Tcl_SetRes
12fc0 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 42 4c 4f  ult(interp, "BLO
12fd0 42 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  B", TCL_STATIC);
12fe0 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20   .      break;. 
12ff0 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
13000 20 20 61 73 73 65 72 74 28 30 29 3b 0a 20 20 7d    assert(0);.  }
13010 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ..  return TCL_O
13020 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
13030 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
13040 6e 5f 69 6e 74 36 34 20 53 54 4d 54 20 63 6f 6c  n_int64 STMT col
13050 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  umn.**.** Return
13060 20 74 68 65 20 64 61 74 61 20 69 6e 20 63 6f 6c   the data in col
13070 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20  umn 'column' of 
13080 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
13090 63 61 73 74 20 61 73 20 61 6e 0a 2a 2a 20 77 69  cast as an.** wi
130a0 64 65 20 28 36 34 2d 62 69 74 29 20 69 6e 74 65  de (64-bit) inte
130b0 67 65 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ger..*/.static i
130c0 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69  nt test_column_i
130d0 6e 74 36 34 28 0a 20 20 76 6f 69 64 20 2a 20 63  nt64(.  void * c
130e0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
130f0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
13100 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
13110 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
13120 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
13130 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
13140 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 36 34 20   int col;.  i64 
13150 69 56 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  iVal;..  if( obj
13160 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
13170 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
13180 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
13190 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
131a0 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
131b0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
131c0 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
131d0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
131e0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
131f0 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
13200 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
13210 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
13220 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
13230 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
13240 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
13250 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
13260 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
13270 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
13280 52 52 4f 52 3b 0a 0a 20 20 69 56 61 6c 20 3d 20  RROR;..  iVal = 
13290 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
132a0 6e 74 36 34 28 70 53 74 6d 74 2c 20 63 6f 6c 29  nt64(pStmt, col)
132b0 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
132c0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
132d0 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 69  _NewWideIntObj(i
132e0 56 61 6c 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  Val));.  return 
132f0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
13300 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
13310 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 53 54 4d 54  column_blob STMT
13320 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69   column.*/.stati
13330 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d  c int test_colum
13340 6e 5f 62 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a  n_blob(.  void *
13350 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
13360 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
13370 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
13380 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
13390 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
133a0 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
133b0 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 0a 20 20 69  .  int col;..  i
133c0 6e 74 20 6c 65 6e 3b 0a 20 20 63 6f 6e 73 74 20  nt len;.  const 
133d0 76 6f 69 64 20 2a 70 42 6c 6f 62 3b 0a 0a 20 20  void *pBlob;..  
133e0 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
133f0 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
13400 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
13410 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
13420 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
13430 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
13440 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
13450 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
13460 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
13470 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
13480 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
13490 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
134a0 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
134b0 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
134c0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
134d0 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
134e0 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
134f0 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72  ], &col) ) retur
13500 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
13510 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f  pBlob = sqlite3_
13520 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d  column_blob(pStm
13530 74 2c 20 63 6f 6c 29 3b 0a 20 20 6c 65 6e 20 3d  t, col);.  len =
13540 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
13550 62 79 74 65 73 28 70 53 74 6d 74 2c 20 63 6f 6c  bytes(pStmt, col
13560 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  );.  Tcl_SetObjR
13570 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
13580 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62  l_NewByteArrayOb
13590 6a 28 70 42 6c 6f 62 2c 20 6c 65 6e 29 29 3b 0a  j(pBlob, len));.
135a0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
135b0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
135c0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
135d0 64 6f 75 62 6c 65 20 53 54 4d 54 20 63 6f 6c 75  double STMT colu
135e0 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  mn.**.** Return 
135f0 74 68 65 20 64 61 74 61 20 69 6e 20 63 6f 6c 75  the data in colu
13600 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74  mn 'column' of t
13610 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 63  he current row c
13620 61 73 74 20 61 73 20 61 20 64 6f 75 62 6c 65 2e  ast as a double.
13630 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
13640 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  est_column_doubl
13650 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
13660 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
13670 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
13680 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
13690 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
136a0 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
136b0 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
136c0 74 20 63 6f 6c 3b 0a 20 20 64 6f 75 62 6c 65 20  t col;.  double 
136d0 72 56 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  rVal;..  if( obj
136e0 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
136f0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
13700 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
13710 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
13720 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
13730 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
13740 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
13750 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
13760 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
13770 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
13780 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
13790 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
137a0 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
137b0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
137c0 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
137d0 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
137e0 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
137f0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
13800 52 52 4f 52 3b 0a 0a 20 20 72 56 61 6c 20 3d 20  RROR;..  rVal = 
13810 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
13820 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20 63 6f 6c  ouble(pStmt, col
13830 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  );.  Tcl_SetObjR
13840 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
13850 6c 5f 4e 65 77 44 6f 75 62 6c 65 4f 62 6a 28 72  l_NewDoubleObj(r
13860 56 61 6c 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  Val));.  return 
13870 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
13880 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
13890 64 61 74 61 5f 63 6f 75 6e 74 20 53 54 4d 54 20  data_count STMT 
138a0 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
138b0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
138c0 6d 6e 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  mns returned by 
138d0 74 68 65 20 73 71 6c 20 73 74 61 74 65 6d 65 6e  the sql statemen
138e0 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69  t STMT..*/.stati
138f0 63 20 69 6e 74 20 74 65 73 74 5f 64 61 74 61 5f  c int test_data_
13900 63 6f 75 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20  count(.  void * 
13910 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
13920 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
13930 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
13940 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
13950 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
13960 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
13970 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
13980 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
13990 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
139a0 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
139b0 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
139c0 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
139d0 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53  ng(objv[0]), " S
139e0 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b  TMT column", 0);
139f0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
13a00 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
13a10 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
13a20 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
13a30 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
13a40 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
13a50 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
13a60 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
13a70 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
13a80 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 64  IntObj(sqlite3_d
13a90 61 74 61 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  ata_count(pStmt)
13aa0 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
13ab0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
13ac0 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
13ad0 75 6d 6e 5f 74 65 78 74 20 53 54 4d 54 20 63 6f  umn_text STMT co
13ae0 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65  lumn.**.** Usage
13af0 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
13b00 5f 64 65 63 6c 74 79 70 65 20 53 54 4d 54 20 63  _decltype STMT c
13b10 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67  olumn.**.** Usag
13b20 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
13b30 6e 5f 6e 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75  n_name STMT colu
13b40 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  mn.*/.static int
13b50 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 28   test_stmt_utf8(
13b60 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
13b70 44 61 74 61 2c 20 20 20 20 20 20 20 20 2f 2a 20  Data,        /* 
13b80 50 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c 69 74  Pointer to SQLit
13b90 65 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 74  e API function t
13ba0 6f 20 62 65 20 69 6e 76 6f 6b 65 20 2a 2f 0a 20  o be invoke */. 
13bb0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
13bc0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
13bd0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
13be0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
13bf0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
13c00 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20  t;.  int col;.  
13c10 63 6f 6e 73 74 20 63 68 61 72 20 2a 28 2a 78 46  const char *(*xF
13c20 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d  unc)(sqlite3_stm
13c30 74 2a 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e  t*, int) = clien
13c40 74 44 61 74 61 3b 0a 20 20 63 6f 6e 73 74 20 63  tData;.  const c
13c50 68 61 72 20 2a 7a 52 65 74 3b 0a 0a 20 20 69 66  har *zRet;..  if
13c60 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
13c70 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
13c80 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
13c90 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
13ca0 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
13cb0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
13cc0 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
13cd0 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
13ce0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13cf0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
13d00 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
13d10 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
13d20 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
13d30 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
13d40 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
13d50 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
13d60 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
13d70 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20   &col) ) return 
13d80 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 52 65  TCL_ERROR;.  zRe
13d90 74 20 3d 20 78 46 75 6e 63 28 70 53 74 6d 74 2c  t = xFunc(pStmt,
13da0 20 63 6f 6c 29 3b 0a 20 20 69 66 28 20 7a 52 65   col);.  if( zRe
13db0 74 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  t ){.    Tcl_Set
13dc0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
13dd0 63 68 61 72 20 2a 29 7a 52 65 74 2c 20 30 29 3b  char *)zRet, 0);
13de0 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
13df0 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  L_OK;.}..static 
13e00 69 6e 74 20 74 65 73 74 5f 67 6c 6f 62 61 6c 5f  int test_global_
13e10 72 65 63 6f 76 65 72 28 0a 20 20 76 6f 69 64 20  recover(.  void 
13e20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
13e30 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
13e40 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
13e50 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
13e60 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
13e70 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47  ef SQLITE_OMIT_G
13e80 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a 20 20 69  LOBALRECOVER.  i
13e90 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 6f 62 6a  nt rc;.  if( obj
13ea0 63 21 3d 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=1 ){.    Tcl_
13eb0 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
13ec0 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 22  erp, 1, objv, ""
13ed0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
13ee0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
13ef0 63 20 3d 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62  c = sqlite3_glob
13f00 61 6c 5f 72 65 63 6f 76 65 72 28 29 3b 0a 20 20  al_recover();.  
13f10 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
13f20 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72  terp, (char *)er
13f30 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
13f40 5f 53 54 41 54 49 43 29 3b 0a 23 65 6e 64 69 66  _STATIC);.#endif
13f50 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
13f60 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
13f70 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
13f80 5f 74 65 78 74 20 53 54 4d 54 20 63 6f 6c 75 6d  _text STMT colum
13f90 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  n.**.** Usage: s
13fa0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
13fb0 63 6c 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75  cltype STMT colu
13fc0 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  mn.**.** Usage: 
13fd0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
13fe0 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ame STMT column.
13ff0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
14000 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 28 0a 20  st_stmt_utf16(. 
14010 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
14020 74 61 2c 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ta,     /* Point
14030 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41 50 49  er to SQLite API
14040 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
14050 69 6e 76 6f 6b 65 64 20 2a 2f 0a 20 20 54 63 6c  invoked */.  Tcl
14060 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
14070 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
14080 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
14090 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
140a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
140b0 36 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  6.  sqlite3_stmt
140c0 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63   *pStmt;.  int c
140d0 6f 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  ol;.  Tcl_Obj *p
140e0 52 65 74 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  Ret;.  const voi
140f0 64 20 2a 7a 4e 61 6d 65 31 36 3b 0a 20 20 63 6f  d *zName16;.  co
14100 6e 73 74 20 76 6f 69 64 20 2a 28 2a 78 46 75 6e  nst void *(*xFun
14110 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a  c)(sqlite3_stmt*
14120 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44  , int) = clientD
14130 61 74 61 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  ata;..  if( objc
14140 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
14150 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
14160 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
14170 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
14180 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
14190 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
141a0 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22  , " STMT column"
141b0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
141c0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
141d0 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
141e0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
141f0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
14200 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
14210 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
14220 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
14230 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
14240 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29  , objv[2], &col)
14250 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
14260 52 4f 52 3b 0a 0a 20 20 7a 4e 61 6d 65 31 36 20  ROR;..  zName16 
14270 3d 20 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63  = xFunc(pStmt, c
14280 6f 6c 29 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65  ol);.  if( zName
14290 31 36 20 29 7b 0a 20 20 20 20 70 52 65 74 20 3d  16 ){.    pRet =
142a0 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61   Tcl_NewByteArra
142b0 79 4f 62 6a 28 7a 4e 61 6d 65 31 36 2c 20 73 71  yObj(zName16, sq
142c0 6c 69 74 65 33 75 74 66 31 36 42 79 74 65 4c 65  lite3utf16ByteLe
142d0 6e 28 7a 4e 61 6d 65 31 36 2c 20 2d 31 29 2b 32  n(zName16, -1)+2
142e0 29 3b 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62  );.    Tcl_SetOb
142f0 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
14300 70 52 65 74 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  pRet);.  }.#endi
14310 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
14320 5f 55 54 46 31 36 20 2a 2f 0a 0a 20 20 72 65 74  _UTF16 */..  ret
14330 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
14340 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
14350 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 53  te3_column_int S
14360 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a  TMT column.**.**
14370 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
14380 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 20 53 54 4d  column_bytes STM
14390 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55  T column.**.** U
143a0 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
143b0 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20 53 54 4d  lumn_bytes16 STM
143c0 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2f 0a 73  T column.**.*/.s
143d0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
143e0 74 6d 74 5f 69 6e 74 28 0a 20 20 76 6f 69 64 20  tmt_int(.  void 
143f0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20  * clientData,   
14400 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53   /* Pointer to S
14410 51 4c 69 74 65 20 41 50 49 20 66 75 6e 63 74 69  QLite API functi
14420 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  on to be invoked
14430 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
14440 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
14450 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
14460 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
14470 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
14480 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f  *pStmt;.  int co
14490 6c 3b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63  l;.  int (*xFunc
144a0 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c  )(sqlite3_stmt*,
144b0 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61   int) = clientDa
144c0 74 61 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  ta;..  if( objc!
144d0 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
144e0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
144f0 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
14500 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
14510 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
14520 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
14530 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
14540 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
14550 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
14560 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
14570 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
14580 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
14590 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
145a0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
145b0 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
145c0 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
145d0 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
145e0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
145f0 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62  OR;..  Tcl_SetOb
14600 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
14610 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 78 46  Tcl_NewIntObj(xF
14620 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c 29 29  unc(pStmt, col))
14630 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
14640 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  OK;.}..#ifndef S
14650 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49  QLITE_OMIT_DISKI
14660 4f 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  O./*.** Usage:  
14670 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61  sqlite3OsOpenRea
14680 64 57 72 69 74 65 20 3c 66 69 6c 65 6e 61 6d 65  dWrite <filename
14690 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  >.*/.static int 
146a0 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 4f 70  test_sqlite3OsOp
146b0 65 6e 52 65 61 64 57 72 69 74 65 28 0a 20 20 76  enReadWrite(.  v
146c0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
146d0 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
146e0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
146f0 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
14700 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
14710 20 4f 73 46 69 6c 65 20 2a 70 46 69 6c 65 3b 0a   OsFile *pFile;.
14720 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
14730 64 75 6d 6d 79 3b 0a 20 20 63 68 61 72 20 7a 42  dummy;.  char zB
14740 75 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20  uf[100];..  if( 
14750 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
14760 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
14770 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
14780 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
14790 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
147a0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
147b0 5b 30 5d 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65  [0]), " filename
147c0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
147d0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
147e0 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
147f0 4f 73 4f 70 65 6e 52 65 61 64 57 72 69 74 65 28  OsOpenReadWrite(
14800 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
14810 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65 2c 20  jv[1]), &pFile, 
14820 26 64 75 6d 6d 79 29 3b 0a 20 20 69 66 28 20 72  &dummy);.  if( r
14830 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
14840 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c      Tcl_SetResul
14850 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
14860 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
14870 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20   TCL_STATIC);.  
14880 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
14890 4f 52 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  OR;.  }.  sqlite
148a0 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72  3TestMakePointer
148b0 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  Str(interp, zBuf
148c0 2c 20 70 46 69 6c 65 29 3b 0a 20 20 54 63 6c 5f  , pFile);.  Tcl_
148d0 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
148e0 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65  , zBuf, 0);.  re
148f0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
14900 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
14910 20 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65 20   sqlite3OsClose 
14920 3c 66 69 6c 65 20 68 61 6e 64 6c 65 3e 0a 2a 2f  <file handle>.*/
14930 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
14940 5f 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65 28  _sqlite3OsClose(
14950 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
14960 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
14970 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
14980 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
14990 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
149a0 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a 70 46 69  ){.  OsFile *pFi
149b0 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  le;.  int rc;.. 
149c0 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
149d0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
149e0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
149f0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
14a00 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
14a10 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
14a20 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c  (objv[0]), " fil
14a30 65 68 61 6e 64 6c 65 22 2c 20 30 29 3b 0a 20 20  ehandle", 0);.  
14a40 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
14a50 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
14a60 65 74 46 69 6c 65 50 6f 69 6e 74 65 72 28 69 6e  etFilePointer(in
14a70 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
14a80 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
14a90 46 69 6c 65 29 20 29 7b 0a 20 20 20 20 72 65 74  File) ){.    ret
14aa0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
14ab0 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
14ac0 33 4f 73 43 6c 6f 73 65 28 26 70 46 69 6c 65 29  3OsClose(&pFile)
14ad0 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
14ae0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c  TE_OK ){.    Tcl
14af0 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
14b00 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72  p, (char *)error
14b10 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
14b20 41 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72  ATIC);.    retur
14b30 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
14b40 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
14b50 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
14b60 3a 20 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b  :  sqlite3OsLock
14b70 20 3c 66 69 6c 65 20 68 61 6e 64 6c 65 3e 20 3c   <file handle> <
14b80 6c 6f 63 6b 74 79 70 65 3e 0a 2a 2f 0a 73 74 61  locktype>.*/.sta
14b90 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 71 6c  tic int test_sql
14ba0 69 74 65 33 4f 73 4c 6f 63 6b 28 0a 20 20 76 6f  ite3OsLock(.  vo
14bb0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
14bc0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
14bd0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
14be0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
14bf0 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
14c00 4f 73 46 69 6c 65 20 2a 20 70 46 69 6c 65 3b 0a  OsFile * pFile;.
14c10 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
14c20 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20   objc!=3 ){.    
14c30 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
14c40 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
14c50 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
14c60 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 20  e \"", .        
14c70 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
14c80 6a 76 5b 30 5d 29 2c 20 0a 20 20 20 20 20 20 20  jv[0]), .       
14c90 20 22 20 66 69 6c 65 68 61 6e 64 6c 65 20 28 53   " filehandle (S
14ca0 48 41 52 45 44 7c 52 45 53 45 52 56 45 44 7c 50  HARED|RESERVED|P
14cb0 45 4e 44 49 4e 47 7c 45 58 43 4c 55 53 49 56 45  ENDING|EXCLUSIVE
14cc0 29 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  )", 0);.    retu
14cd0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
14ce0 7d 0a 0a 20 20 69 66 28 20 67 65 74 46 69 6c 65  }..  if( getFile
14cf0 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
14d00 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
14d10 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65 29 20  jv[1]), &pFile) 
14d20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
14d30 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
14d40 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 22 53  if( 0==strcmp("S
14d50 48 41 52 45 44 22 2c 20 54 63 6c 5f 47 65 74 53  HARED", Tcl_GetS
14d60 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20  tring(objv[2])) 
14d70 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
14d80 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c  te3OsLock(pFile,
14d90 20 53 48 41 52 45 44 5f 4c 4f 43 4b 29 3b 0a 20   SHARED_LOCK);. 
14da0 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 30 3d   }.  else if( 0=
14db0 3d 73 74 72 63 6d 70 28 22 52 45 53 45 52 56 45  =strcmp("RESERVE
14dc0 44 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  D", Tcl_GetStrin
14dd0 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20  g(objv[2])) ){. 
14de0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
14df0 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 52 45 53  sLock(pFile, RES
14e00 45 52 56 45 44 5f 4c 4f 43 4b 29 3b 0a 20 20 7d  ERVED_LOCK);.  }
14e10 0a 20 20 65 6c 73 65 20 69 66 28 20 30 3d 3d 73  .  else if( 0==s
14e20 74 72 63 6d 70 28 22 50 45 4e 44 49 4e 47 22 2c  trcmp("PENDING",
14e30 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
14e40 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20 20  bjv[2])) ){.    
14e50 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c 6f  rc = sqlite3OsLo
14e60 63 6b 28 70 46 69 6c 65 2c 20 50 45 4e 44 49 4e  ck(pFile, PENDIN
14e70 47 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20 65  G_LOCK);.  }.  e
14e80 6c 73 65 20 69 66 28 20 30 3d 3d 73 74 72 63 6d  lse if( 0==strcm
14e90 70 28 22 45 58 43 4c 55 53 49 56 45 22 2c 20 54  p("EXCLUSIVE", T
14ea0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
14eb0 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20 20 72 63  v[2])) ){.    rc
14ec0 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b   = sqlite3OsLock
14ed0 28 70 46 69 6c 65 2c 20 45 58 43 4c 55 53 49 56  (pFile, EXCLUSIV
14ee0 45 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 65 6c 73 65  E_LOCK);.  }else
14ef0 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
14f00 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
14f10 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
14f20 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
14f30 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
14f40 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 0a 20  ing(objv[0]), . 
14f50 20 20 20 20 20 20 20 22 20 66 69 6c 65 68 61 6e         " filehan
14f60 64 6c 65 20 28 53 48 41 52 45 44 7c 52 45 53 45  dle (SHARED|RESE
14f70 52 56 45 44 7c 50 45 4e 44 49 4e 47 7c 45 58 43  RVED|PENDING|EXC
14f80 4c 55 53 49 56 45 29 22 2c 20 30 29 3b 0a 20 20  LUSIVE)", 0);.  
14f90 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
14fa0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 72  OR;.  }..  if( r
14fb0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
14fc0 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c      Tcl_SetResul
14fd0 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
14fe0 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
14ff0 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20   TCL_STATIC);.  
15000 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
15010 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  OR;.  }.  return
15020 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
15030 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
15040 33 4f 73 55 6e 6c 6f 63 6b 20 3c 66 69 6c 65 20  3OsUnlock <file 
15050 68 61 6e 64 6c 65 3e 0a 2a 2f 0a 73 74 61 74 69  handle>.*/.stati
15060 63 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69 74  c int test_sqlit
15070 65 33 4f 73 55 6e 6c 6f 63 6b 28 0a 20 20 76 6f  e3OsUnlock(.  vo
15080 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
15090 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
150a0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
150b0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
150c0 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
150d0 4f 73 46 69 6c 65 20 2a 20 70 46 69 6c 65 3b 0a  OsFile * pFile;.
150e0 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
150f0 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20   objc!=2 ){.    
15100 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
15110 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
15120 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
15130 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
15140 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
15150 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65 68 61 6e  v[0]), " filehan
15160 64 6c 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  dle", 0);.    re
15170 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
15180 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 46 69    }..  if( getFi
15190 6c 65 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  lePointer(interp
151a0 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
151b0 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65  objv[1]), &pFile
151c0 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
151d0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
151e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 55   rc = sqlite3OsU
151f0 6e 6c 6f 63 6b 28 70 46 69 6c 65 2c 20 4e 4f 5f  nlock(pFile, NO_
15200 4c 4f 43 4b 29 3b 0a 20 20 69 66 28 20 72 63 21  LOCK);.  if( rc!
15210 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
15220 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
15230 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29  interp, (char *)
15240 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54  errorName(rc), T
15250 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  CL_STATIC);.    
15260 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
15270 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54  ;.  }.  return T
15280 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
15290 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f  Usage:  sqlite3O
152a0 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 0a 2a 2f  sTempFileName.*/
152b0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
152c0 5f 73 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69  _sqlite3OsTempFi
152d0 6c 65 4e 61 6d 65 28 0a 20 20 76 6f 69 64 20 2a  leName(.  void *
152e0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
152f0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
15300 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
15310 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
15320 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 68 61 72  objv[].){.  char
15330 20 7a 46 69 6c 65 5b 53 51 4c 49 54 45 5f 54 45   zFile[SQLITE_TE
15340 4d 50 4e 41 4d 45 5f 53 49 5a 45 5d 3b 0a 20 20  MPNAME_SIZE];.  
15350 69 6e 74 20 72 63 3b 0a 0a 20 20 72 63 20 3d 20  int rc;..  rc = 
15360 73 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c  sqlite3OsTempFil
15370 65 4e 61 6d 65 28 7a 46 69 6c 65 29 3b 0a 20 20  eName(zFile);.  
15380 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
15390 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  K ){.    Tcl_Set
153a0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
153b0 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65  char *)errorName
153c0 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43  (rc), TCL_STATIC
153d0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
153e0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54  L_ERROR;.  }.  T
153f0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
15400 69 6e 74 65 72 70 2c 20 7a 46 69 6c 65 2c 20 30  interp, zFile, 0
15410 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
15420 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OK;.}.#endif../*
15430 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
15440 74 65 5f 73 65 74 5f 6d 61 67 69 63 20 20 44 42  te_set_magic  DB
15450 20 20 4d 41 47 49 43 2d 4e 55 4d 42 45 52 0a 2a    MAGIC-NUMBER.*
15460 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 62 2d  *.** Set the db-
15470 3e 6d 61 67 69 63 20 76 61 6c 75 65 2e 20 20 54  >magic value.  T
15480 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 74  his is used to t
15490 65 73 74 20 65 72 72 6f 72 20 72 65 63 6f 76 65  est error recove
154a0 72 79 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73 74 61  ry logic..*/.sta
154b0 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 5f 73  tic int sqlite_s
154c0 65 74 5f 6d 61 67 69 63 28 0a 20 20 76 6f 69 64  et_magic(.  void
154d0 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
154e0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
154f0 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c  erp,.  int argc,
15500 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29  .  char **argv.)
15510 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
15520 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
15530 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
15540 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
15550 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
15560 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
15570 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 20 20 22  v[0],.         "
15580 20 44 42 20 4d 41 47 49 43 22 2c 20 30 29 3b 0a   DB MAGIC", 0);.
15590 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
155a0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
155b0 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
155c0 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
155d0 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
155e0 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 73 74 72  ERROR;.  if( str
155f0 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53 51  cmp(argv[2], "SQ
15600 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 22  LITE_MAGIC_OPEN"
15610 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e  )==0 ){.    db->
15620 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
15630 41 47 49 43 5f 4f 50 45 4e 3b 0a 20 20 7d 65 6c  AGIC_OPEN;.  }el
15640 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72  se if( strcmp(ar
15650 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d  gv[2], "SQLITE_M
15660 41 47 49 43 5f 43 4c 4f 53 45 44 22 29 3d 3d 30  AGIC_CLOSED")==0
15670 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69   ){.    db->magi
15680 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
15690 5f 43 4c 4f 53 45 44 3b 0a 20 20 7d 65 6c 73 65  _CLOSED;.  }else
156a0 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76   if( strcmp(argv
156b0 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41 47  [2], "SQLITE_MAG
156c0 49 43 5f 42 55 53 59 22 29 3d 3d 30 20 29 7b 0a  IC_BUSY")==0 ){.
156d0 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20      db->magic = 
156e0 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
156f0 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73  Y;.  }else if( s
15700 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22  trcmp(argv[2], "
15710 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
15720 4f 52 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64  OR")==0 ){.    d
15730 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
15740 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a 20  E_MAGIC_ERROR;. 
15750 20 7d 65 6c 73 65 20 69 66 28 20 54 63 6c 5f 47   }else if( Tcl_G
15760 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72  etInt(interp, ar
15770 67 76 5b 32 5d 2c 20 26 64 62 2d 3e 6d 61 67 69  gv[2], &db->magi
15780 63 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  c) ){.    return
15790 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
157a0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
157b0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
157c0 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
157d0 75 70 74 20 20 44 42 20 0a 2a 2a 0a 2a 2a 20 54  upt  DB .**.** T
157e0 72 69 67 67 65 72 20 61 6e 20 69 6e 74 65 72 72  rigger an interr
157f0 75 70 74 20 6f 6e 20 44 42 0a 2a 2f 0a 73 74 61  upt on DB.*/.sta
15800 74 69 63 20 69 6e 74 20 74 65 73 74 5f 69 6e 74  tic int test_int
15810 65 72 72 75 70 74 28 0a 20 20 76 6f 69 64 20 2a  errupt(.  void *
15820 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
15830 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
15840 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20  p,.  int argc,. 
15850 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a   char **argv.){.
15860 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
15870 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a   if( argc!=2 ){.
15880 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
15890 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
158a0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
158b0 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
158c0 30 5d 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20  0], " DB", 0);. 
158d0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
158e0 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
158f0 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
15900 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62  rp, argv[1], &db
15910 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
15920 52 52 4f 52 3b 0a 20 20 73 71 6c 69 74 65 33 5f  RROR;.  sqlite3_
15930 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
15940 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
15950 7d 0a 0a 73 74 61 74 69 63 20 75 38 20 2a 73 71  }..static u8 *sq
15960 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65  lite3_stack_base
15970 6c 69 6e 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a  line = 0;../*.**
15980 20 46 69 6c 6c 20 74 68 65 20 73 74 61 63 6b 20   Fill the stack 
15990 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20 62 69 74  with a known bit
159a0 70 61 74 74 65 72 6e 2e 0a 2a 2f 0a 73 74 61 74  pattern..*/.stat
159b0 69 63 20 76 6f 69 64 20 70 72 65 70 53 74 61 63  ic void prepStac
159c0 6b 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 69  k(void){.  int i
159d0 3b 0a 20 20 75 33 32 20 62 69 67 42 75 66 5b 36  ;.  u32 bigBuf[6
159e0 35 35 33 36 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  5536];.  for(i=0
159f0 3b 20 69 3c 73 69 7a 65 6f 66 28 62 69 67 42 75  ; i<sizeof(bigBu
15a00 66 29 3b 20 69 2b 2b 29 20 62 69 67 42 75 66 5b  f); i++) bigBuf[
15a10 69 5d 20 3d 20 30 78 64 65 61 64 62 65 65 66 3b  i] = 0xdeadbeef;
15a20 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 61 63 6b  .  sqlite3_stack
15a30 5f 62 61 73 65 6c 69 6e 65 20 3d 20 28 75 38 2a  _baseline = (u8*
15a40 29 26 62 69 67 42 75 66 5b 36 35 35 33 36 5d 3b  )&bigBuf[65536];
15a50 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 74 20 74 68  .}../*.** Get th
15a60 65 20 63 75 72 72 65 6e 74 20 73 74 61 63 6b 20  e current stack 
15a70 64 65 70 74 68 2e 20 20 55 73 65 64 20 66 6f 72  depth.  Used for
15a80 20 64 65 62 75 67 67 69 6e 67 20 6f 6e 6c 79 2e   debugging only.
15a90 0a 2a 2f 0a 75 36 34 20 73 71 6c 69 74 65 33 53  .*/.u64 sqlite3S
15aa0 74 61 63 6b 44 65 70 74 68 28 76 6f 69 64 29 7b  tackDepth(void){
15ab0 0a 20 20 75 38 20 78 3b 0a 20 20 72 65 74 75 72  .  u8 x;.  retur
15ac0 6e 20 28 75 36 34 29 28 73 71 6c 69 74 65 33 5f  n (u64)(sqlite3_
15ad0 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65 20 2d  stack_baseline -
15ae0 20 26 78 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55   &x);.}../*.** U
15af0 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 73  sage:  sqlite3_s
15b00 74 61 63 6b 5f 75 73 65 64 20 44 42 20 53 51 4c  tack_used DB SQL
15b10 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 6d 65  .**.** Try to me
15b20 61 73 75 72 65 20 74 68 65 20 61 6d 6f 75 6e 74  asure the amount
15b30 20 6f 66 20 73 74 61 63 6b 20 73 70 61 63 65 20   of stack space 
15b40 75 73 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74  used by a call t
15b50 6f 20 73 71 6c 69 74 65 33 5f 65 78 65 63 0a 2a  o sqlite3_exec.*
15b60 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
15b70 74 5f 73 74 61 63 6b 5f 75 73 65 64 28 0a 20 20  t_stack_used(.  
15b80 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
15b90 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
15ba0 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61  *interp,.  int a
15bb0 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72  rgc,.  char **ar
15bc0 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  gv.){.  sqlite3 
15bd0 2a 64 62 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  *db;.  int i;.  
15be0 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20  if( argc!=3 ){. 
15bf0 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
15c00 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
15c10 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
15c20 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
15c30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44 42  ], .        " DB
15c40 20 53 51 4c 22 2c 20 30 29 3b 0a 20 20 20 20 72   SQL", 0);.    r
15c50 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
15c60 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
15c70 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
15c80 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
15c90 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
15ca0 3b 0a 20 20 70 72 65 70 53 74 61 63 6b 28 29 3b  ;.  prepStack();
15cb0 0a 20 20 28 76 6f 69 64 29 73 71 6c 69 74 65 33  .  (void)sqlite3
15cc0 5f 65 78 65 63 28 64 62 2c 20 61 72 67 76 5b 32  _exec(db, argv[2
15cd0 5d 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 66  ], 0, 0, 0);.  f
15ce0 6f 72 28 69 3d 36 35 35 33 35 3b 20 69 3e 3d 30  or(i=65535; i>=0
15cf0 20 26 26 20 28 28 75 33 32 2a 29 73 71 6c 69 74   && ((u32*)sqlit
15d00 65 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e  e3_stack_baselin
15d10 65 29 5b 2d 69 5d 3d 3d 30 78 64 65 61 64 62 65  e)[-i]==0xdeadbe
15d20 65 66 3b 20 69 2d 2d 29 7b 7d 0a 20 20 54 63 6c  ef; i--){}.  Tcl
15d30 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
15d40 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
15d50 4f 62 6a 28 69 2a 34 29 29 3b 0a 20 20 72 65 74  Obj(i*4));.  ret
15d60 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
15d70 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
15d80 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e 63 74 69  te_delete_functi
15d90 6f 6e 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e  on DB function-n
15da0 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  ame.**.** Delete
15db0 20 74 68 65 20 75 73 65 72 20 66 75 6e 63 74 69   the user functi
15dc0 6f 6e 20 27 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d  on 'function-nam
15dd0 65 27 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65  e' from database
15de0 20 68 61 6e 64 6c 65 20 44 42 2e 20 49 74 0a 2a   handle DB. It.*
15df0 2a 20 69 73 20 61 73 73 75 6d 65 64 20 74 68 61  * is assumed tha
15e00 74 20 74 68 65 20 75 73 65 72 20 66 75 6e 63 74  t the user funct
15e10 69 6f 6e 20 77 61 73 20 63 72 65 61 74 65 64 20  ion was created 
15e20 61 73 20 55 54 46 38 2c 20 61 6e 79 20 6e 75 6d  as UTF8, any num
15e30 62 65 72 20 6f 66 0a 2a 2a 20 61 72 67 75 6d 65  ber of.** argume
15e40 6e 74 73 20 28 74 68 65 20 77 61 79 20 74 68 65  nts (the way the
15e50 20 54 43 4c 20 69 6e 74 65 72 66 61 63 65 20 64   TCL interface d
15e60 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a 73 74 61 74  oes it)..*/.stat
15e70 69 63 20 69 6e 74 20 64 65 6c 65 74 65 5f 66 75  ic int delete_fu
15e80 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a  nction(.  void *
15e90 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
15ea0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
15eb0 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20  p,.  int argc,. 
15ec0 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a   char **argv.){.
15ed0 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69    int rc;.  sqli
15ee0 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61  te3 *db;.  if( a
15ef0 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  rgc!=3 ){.    Tc
15f00 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
15f10 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
15f20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
15f30 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20  \"", argv[0], . 
15f40 20 20 20 20 20 20 20 22 20 44 42 20 66 75 6e 63         " DB func
15f50 74 69 6f 6e 2d 6e 61 6d 65 22 2c 20 30 29 3b 0a  tion-name", 0);.
15f60 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
15f70 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
15f80 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
15f90 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
15fa0 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
15fb0 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71  ERROR;.  rc = sq
15fc0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
15fd0 63 74 69 6f 6e 28 64 62 2c 20 61 72 67 76 5b 32  ction(db, argv[2
15fe0 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  ], -1, SQLITE_UT
15ff0 46 38 2c 20 30 2c 20 30 2c 20 30 2c 20 30 29 3b  F8, 0, 0, 0, 0);
16000 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
16010 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
16020 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  )errorName(rc), 
16030 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 72  TCL_STATIC);.  r
16040 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
16050 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
16060 6c 69 74 65 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c  lite_delete_coll
16070 61 74 69 6f 6e 20 44 42 20 63 6f 6c 6c 61 74 69  ation DB collati
16080 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65  on-name.**.** De
16090 6c 65 74 65 20 74 68 65 20 63 6f 6c 6c 61 74 69  lete the collati
160a0 6f 6e 20 73 65 71 75 65 6e 63 65 20 27 63 6f 6c  on sequence 'col
160b0 6c 61 74 69 6f 6e 2d 6e 61 6d 65 27 20 66 72 6f  lation-name' fro
160c0 6d 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  m database handl
160d0 65 20 0a 2a 2a 20 44 42 2e 20 49 74 20 69 73 20  e .** DB. It is 
160e0 61 73 73 75 6d 65 64 20 74 68 61 74 20 74 68 65  assumed that the
160f0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
16100 6e 63 65 20 77 61 73 20 63 72 65 61 74 65 64 20  nce was created 
16110 61 73 20 55 54 46 38 20 28 74 68 65 20 0a 2a 2a  as UTF8 (the .**
16120 20 77 61 79 20 74 68 65 20 54 43 4c 20 69 6e 74   way the TCL int
16130 65 72 66 61 63 65 20 64 6f 65 73 20 69 74 29 2e  erface does it).
16140 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 64  .*/.static int d
16150 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  elete_collation(
16160 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
16170 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
16180 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
16190 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
161a0 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20 72  *argv.){.  int r
161b0 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  c;.  sqlite3 *db
161c0 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20  ;.  if( argc!=3 
161d0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
161e0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
161f0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
16200 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
16210 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20  gv[0], .        
16220 22 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e 61  " DB function-na
16230 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  me", 0);.    ret
16240 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
16250 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
16260 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
16270 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
16280 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
16290 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
162a0 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
162b0 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 53 51 4c  db, argv[2], SQL
162c0 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 29 3b  ITE_UTF8, 0, 0);
162d0 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
162e0 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
162f0 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  )errorName(rc), 
16300 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 72  TCL_STATIC);.  r
16310 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
16320 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
16330 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
16340 6d 6d 69 74 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65  mmit DB.**.** Re
16350 74 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65  turn true if the
16360 20 64 61 74 61 62 61 73 65 20 44 42 20 69 73 20   database DB is 
16370 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 75 74  currently in aut
16380 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 0a 2a  o-commit mode..*
16390 2a 20 52 65 74 75 72 6e 20 66 61 6c 73 65 20 69  * Return false i
163a0 66 20 6e 6f 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  f not..*/.static
163b0 20 69 6e 74 20 67 65 74 5f 61 75 74 6f 63 6f 6d   int get_autocom
163c0 6d 69 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  mit(.  void * cl
163d0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
163e0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
163f0 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68    int argc,.  ch
16400 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 63  ar **argv.){.  c
16410 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20  har zBuf[30];.  
16420 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
16430 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20  f( argc!=2 ){.  
16440 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
16450 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
16460 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
16470 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
16480 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44 42 22  , .        " DB"
16490 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
164a0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
164b0 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
164c0 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
164d0 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
164e0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73  n TCL_ERROR;.  s
164f0 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64  printf(zBuf, "%d
16500 22 2c 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61  ", sqlite3_get_a
16510 75 74 6f 63 6f 6d 6d 69 74 28 64 62 29 29 3b 0a  utocommit(db));.
16520 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
16530 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
16540 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
16550 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
16560 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 62 75  sage: sqlite3_bu
16570 73 79 5f 74 69 6d 65 6f 75 74 20 44 42 20 4d 53  sy_timeout DB MS
16580 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 62  .**.** Set the b
16590 75 73 79 20 74 69 6d 65 6f 75 74 2e 20 20 54 68  usy timeout.  Th
165a0 69 73 20 69 73 20 6d 6f 72 65 20 65 61 73 69 6c  is is more easil
165b0 79 20 64 6f 6e 65 20 75 73 69 6e 67 20 74 68 65  y done using the
165c0 20 74 69 6d 65 6f 75 74 0a 2a 2a 20 6d 65 74 68   timeout.** meth
165d0 6f 64 20 6f 66 20 74 68 65 20 54 43 4c 20 69 6e  od of the TCL in
165e0 74 65 72 66 61 63 65 2e 20 20 42 75 74 20 77 65  terface.  But we
165f0 20 6e 65 65 64 20 61 20 77 61 79 20 74 6f 20 74   need a way to t
16600 65 73 74 20 74 68 65 20 63 61 73 65 0a 2a 2a 20  est the case.** 
16610 77 68 65 72 65 20 69 74 20 72 65 74 75 72 6e 73  where it returns
16620 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0a   SQLITE_MISUSE..
16630 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
16640 73 74 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  st_busy_timeout(
16650 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
16660 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
16670 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
16680 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
16690 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20 72  *argv.){.  int r
166a0 63 2c 20 6d 73 3b 0a 20 20 73 71 6c 69 74 65 33  c, ms;.  sqlite3
166b0 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63   *db;.  if( argc
166c0 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
166d0 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
166e0 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
166f0 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
16700 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20  , argv[0], .    
16710 20 20 20 20 22 20 44 42 22 2c 20 30 29 3b 0a 20      " DB", 0);. 
16720 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
16730 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
16740 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
16750 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62  rp, argv[1], &db
16760 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
16770 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
16780 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61  GetInt(interp, a
16790 72 67 76 5b 32 5d 2c 20 26 6d 73 29 20 29 20 72  rgv[2], &ms) ) r
167a0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
167b0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
167c0 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c  busy_timeout(db,
167d0 20 6d 73 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65   ms);.  Tcl_Appe
167e0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
167f0 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 6f   sqlite3TestErro
16800 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20  rName(rc), 0);. 
16810 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
16820 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
16830 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79   tcl_variable_ty
16840 70 65 20 56 41 52 49 41 42 4c 45 4e 41 4d 45 0a  pe VARIABLENAME.
16850 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
16860 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 69 6e 74   name of the int
16870 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
16880 74 69 6f 6e 20 66 6f 72 20 74 68 65 0a 2a 2a 20  tion for the.** 
16890 76 61 6c 75 65 20 6f 66 20 74 68 65 20 67 69 76  value of the giv
168a0 65 6e 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2f 0a  en variable..*/.
168b0 73 74 61 74 69 63 20 69 6e 74 20 74 63 6c 5f 76  static int tcl_v
168c0 61 72 69 61 62 6c 65 5f 74 79 70 65 28 0a 20 20  ariable_type(.  
168d0 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
168e0 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
168f0 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
16900 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
16910 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
16920 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 56 61 72 3b    Tcl_Obj *pVar;
16930 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
16940 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
16950 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
16960 2c 20 6f 62 6a 76 2c 20 22 56 41 52 49 41 42 4c  , objv, "VARIABL
16970 45 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  E");.    return 
16980 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
16990 20 70 56 61 72 20 3d 20 54 63 6c 5f 47 65 74 56   pVar = Tcl_GetV
169a0 61 72 32 45 78 28 69 6e 74 65 72 70 2c 20 54 63  ar2Ex(interp, Tc
169b0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
169c0 5b 31 5d 29 2c 20 30 2c 20 54 43 4c 5f 4c 45 41  [1]), 0, TCL_LEA
169d0 56 45 5f 45 52 52 5f 4d 53 47 29 3b 0a 20 20 69  VE_ERR_MSG);.  i
169e0 66 28 20 70 56 61 72 3d 3d 30 20 29 20 72 65 74  f( pVar==0 ) ret
169f0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
16a00 20 69 66 28 20 70 56 61 72 2d 3e 74 79 70 65 50   if( pVar->typeP
16a10 74 72 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65  tr ){.    Tcl_Se
16a20 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
16a30 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  p, Tcl_NewString
16a40 4f 62 6a 28 70 56 61 72 2d 3e 74 79 70 65 50 74  Obj(pVar->typePt
16a50 72 2d 3e 6e 61 6d 65 2c 20 2d 31 29 29 3b 0a 20  r->name, -1));. 
16a60 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f   }.  return TCL_
16a70 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
16a80 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 72 65 6c  ge:  sqlite3_rel
16a90 65 61 73 65 5f 6d 65 6d 6f 72 79 20 3f 4e 3f 0a  ease_memory ?N?.
16aa0 2a 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f  **.** Attempt to
16ab0 20 72 65 6c 65 61 73 65 20 6d 65 6d 6f 72 79 20   release memory 
16ac0 63 75 72 72 65 6e 74 6c 79 20 68 65 6c 64 20 62  currently held b
16ad0 75 74 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20  ut not actually 
16ae0 72 65 71 75 69 72 65 64 2e 0a 2a 2a 20 54 68 65  required..** The
16af0 20 69 6e 74 65 67 65 72 20 4e 20 69 73 20 74 68   integer N is th
16b00 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
16b10 73 20 77 65 20 61 72 65 20 74 72 79 69 6e 67 20  s we are trying 
16b20 74 6f 20 72 65 6c 65 61 73 65 2e 20 20 54 68 65  to release.  The
16b30 20 0a 2a 2a 20 72 65 74 75 72 6e 20 76 61 6c 75   .** return valu
16b40 65 20 69 73 20 74 68 65 20 61 6d 6f 75 6e 74 20  e is the amount 
16b50 6f 66 20 6d 65 6d 6f 72 79 20 61 63 74 75 61 6c  of memory actual
16b60 6c 79 20 72 65 6c 65 61 73 65 64 2e 0a 2a 2f 0a  ly released..*/.
16b70 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
16b80 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 0a  release_memory(.
16b90 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
16ba0 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
16bb0 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
16bc0 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
16bd0 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
16be0 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  {.#if defined(SQ
16bf0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f  LITE_ENABLE_MEMO
16c00 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 29 20 26  RY_MANAGEMENT) &
16c10 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
16c20 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 29 0a 20  E_OMIT_DISKIO). 
16c30 20 69 6e 74 20 4e 3b 0a 20 20 69 6e 74 20 61 6d   int N;.  int am
16c40 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 31  t;.  if( objc!=1
16c50 20 26 26 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20   && objc!=2 ){. 
16c60 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
16c70 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
16c80 62 6a 76 2c 20 22 3f 4e 3f 22 29 3b 0a 20 20 20  bjv, "?N?");.   
16c90 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
16ca0 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6f 62 6a  R;.  }.  if( obj
16cb0 63 3d 3d 32 20 29 7b 0a 20 20 20 20 69 66 28 20  c==2 ){.    if( 
16cc0 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
16cd0 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31  j(interp, objv[1
16ce0 5d 2c 20 26 4e 29 20 29 20 72 65 74 75 72 6e 20  ], &N) ) return 
16cf0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c  TCL_ERROR;.  }el
16d00 73 65 7b 0a 20 20 20 20 4e 20 3d 20 2d 31 3b 0a  se{.    N = -1;.
16d10 20 20 7d 0a 20 20 61 6d 74 20 3d 20 73 71 6c 69    }.  amt = sqli
16d20 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  te3_release_memo
16d30 72 79 28 4e 29 3b 0a 20 20 54 63 6c 5f 53 65 74  ry(N);.  Tcl_Set
16d40 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
16d50 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
16d60 61 6d 74 29 29 3b 0a 23 65 6e 64 69 66 0a 20 20  amt));.#endif.  
16d70 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
16d80 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
16d90 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61  sqlite3_soft_hea
16da0 70 5f 6c 69 6d 69 74 20 3f 4e 3f 0a 2a 2a 0a 2a  p_limit ?N?.**.*
16db0 2a 20 51 75 65 72 79 20 6f 72 20 73 65 74 20 74  * Query or set t
16dc0 68 65 20 73 6f 66 74 20 68 65 61 70 20 6c 69 6d  he soft heap lim
16dd0 69 74 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  it for the curre
16de0 6e 74 20 74 68 72 65 61 64 2e 20 20 54 68 65 0a  nt thread.  The.
16df0 2a 2a 20 6c 69 6d 69 74 20 69 73 20 6f 6e 6c 79  ** limit is only
16e00 20 63 68 61 6e 67 65 64 20 69 66 20 74 68 65 20   changed if the 
16e10 4e 20 69 73 20 70 72 65 73 65 6e 74 2e 20 20 54  N is present.  T
16e20 68 65 20 70 72 65 76 69 6f 75 73 20 6c 69 6d 69  he previous limi
16e30 74 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  t.** is returned
16e40 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
16e50 74 65 73 74 5f 73 6f 66 74 5f 68 65 61 70 5f 6c  test_soft_heap_l
16e60 69 6d 69 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  imit(.  void * c
16e70 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
16e80 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
16e90 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
16ea0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
16eb0 6a 76 5b 5d 0a 29 7b 0a 23 69 66 20 64 65 66 69  jv[].){.#if defi
16ec0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
16ed0 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d  E_MEMORY_MANAGEM
16ee0 45 4e 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  ENT) && !defined
16ef0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53  (SQLITE_OMIT_DIS
16f00 4b 49 4f 29 0a 20 20 69 6e 74 20 61 6d 74 3b 0a  KIO).  int amt;.
16f10 20 20 69 66 28 20 6f 62 6a 63 21 3d 31 20 26 26    if( objc!=1 &&
16f20 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20   objc!=2 ){.    
16f30 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
16f40 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
16f50 2c 20 22 3f 4e 3f 22 29 3b 0a 20 20 20 20 72 65  , "?N?");.    re
16f60 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
16f70 20 20 7d 0a 20 20 61 6d 74 20 3d 20 73 71 6c 69    }.  amt = sqli
16f80 74 65 33 54 68 72 65 61 64 44 61 74 61 52 65 61  te3ThreadDataRea
16f90 64 4f 6e 6c 79 28 29 2d 3e 6e 53 6f 66 74 48 65  dOnly()->nSoftHe
16fa0 61 70 4c 69 6d 69 74 3b 0a 20 20 69 66 28 20 6f  apLimit;.  if( o
16fb0 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20 20 69 6e  bjc==2 ){.    in
16fc0 74 20 4e 3b 0a 20 20 20 20 69 66 28 20 54 63 6c  t N;.    if( Tcl
16fd0 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
16fe0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20  nterp, objv[1], 
16ff0 26 4e 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  &N) ) return TCL
17000 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
17010 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69  te3_soft_heap_li
17020 6d 69 74 28 4e 29 3b 0a 20 20 7d 0a 20 20 54 63  mit(N);.  }.  Tc
17030 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
17040 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
17050 74 4f 62 6a 28 61 6d 74 29 29 3b 0a 23 65 6e 64  tObj(amt));.#end
17060 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  if.  return TCL_
17070 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
17080 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 63 6c  ge:   sqlite3_cl
17090 65 61 72 5f 74 73 64 5f 6d 65 6d 64 65 62 75 67  ear_tsd_memdebug
170a0 0a 2a 2a 0a 2a 2a 20 43 6c 65 61 72 20 61 6c 6c  .**.** Clear all
170b0 20 6f 66 20 74 68 65 20 4d 45 4d 44 45 42 55 47   of the MEMDEBUG
170c0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 75 74   information out
170d0 20 6f 66 20 74 68 72 65 61 64 2d 73 70 65 63 69   of thread-speci
170e0 66 69 63 20 64 61 74 61 2e 0a 2a 2a 20 54 68 69  fic data..** Thi
170f0 73 20 77 69 6c 6c 20 61 6c 6c 6f 77 20 69 74 20  s will allow it 
17100 74 6f 20 62 65 20 64 65 61 6c 6c 6f 63 61 74 65  to be deallocate
17110 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
17120 20 74 65 73 74 5f 63 6c 65 61 72 5f 74 73 64 5f   test_clear_tsd_
17130 6d 65 6d 64 65 62 75 67 28 0a 20 20 76 6f 69 64  memdebug(.  void
17140 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
17150 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
17160 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
17170 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
17180 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 72 65  T objv[].){.  re
17190 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
171a0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73  /*.** Usage:   s
171b0 71 6c 69 74 65 33 5f 74 73 64 5f 72 65 6c 65 61  qlite3_tsd_relea
171c0 73 65 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 73 71  se.**.** Call sq
171d0 6c 69 74 65 33 52 65 6c 65 61 73 65 54 68 72 65  lite3ReleaseThre
171e0 61 64 44 61 74 61 2e 0a 2a 2f 0a 73 74 61 74 69  adData..*/.stati
171f0 63 20 69 6e 74 20 74 65 73 74 5f 74 73 64 5f 72  c int test_tsd_r
17200 65 6c 65 61 73 65 28 0a 20 20 76 6f 69 64 20 2a  elease(.  void *
17210 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
17220 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
17230 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
17240 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
17250 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 20 64 65  objv[].){.#if de
17260 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
17270 44 45 42 55 47 29 0a 20 20 73 71 6c 69 74 65 33  DEBUG).  sqlite3
17280 52 65 6c 65 61 73 65 54 68 72 65 61 64 44 61 74  ReleaseThreadDat
17290 61 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65  a();.#endif.  re
172a0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
172b0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73  /*.** Usage:   s
172c0 71 6c 69 74 65 33 5f 74 68 72 65 61 64 5f 63 6c  qlite3_thread_cl
172d0 65 61 6e 75 70 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c  eanup.**.** Call
172e0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 68 72   the sqlite3_thr
172f0 65 61 64 5f 63 6c 65 61 6e 75 70 20 41 50 49 2e  ead_cleanup API.
17300 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
17310 65 73 74 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e  est_thread_clean
17320 75 70 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  up(.  void * cli
17330 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
17340 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
17350 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
17360 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
17370 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
17380 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 28 29  thread_cleanup()
17390 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
173a0 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  K;.}.../*.** Thi
173b0 73 20 72 6f 75 74 69 6e 65 20 73 65 74 73 20 65  s routine sets e
173c0 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 67 6c  ntries in the gl
173d0 6f 62 61 6c 20 3a 3a 73 71 6c 69 74 65 5f 6f 70  obal ::sqlite_op
173e0 74 69 6f 6e 73 28 29 20 61 72 72 61 79 20 76 61  tions() array va
173f0 72 69 61 62 6c 65 0a 2a 2a 20 61 63 63 6f 72 64  riable.** accord
17400 69 6e 67 20 74 6f 20 74 68 65 20 63 6f 6d 70 69  ing to the compi
17410 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
17420 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
17430 61 62 61 73 65 2e 20 20 54 65 73 74 0a 2a 2a 20  abase.  Test.** 
17440 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20 74  procedures use t
17450 68 69 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  his to determine
17460 20 77 68 65 6e 20 74 65 73 74 73 20 73 68 6f 75   when tests shou
17470 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 2e 0a 2a  ld be omitted..*
17480 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65  /.static void se
17490 74 5f 6f 70 74 69 6f 6e 73 28 54 63 6c 5f 49 6e  t_options(Tcl_In
174a0 74 65 72 70 20 2a 69 6e 74 65 72 70 29 7b 0a 23  terp *interp){.#
174b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42  ifdef SQLITE_32B
174c0 49 54 5f 52 4f 57 49 44 0a 20 20 54 63 6c 5f 53  IT_ROWID.  Tcl_S
174d0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
174e0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
174f0 20 22 72 6f 77 69 64 33 32 22 2c 20 22 31 22 2c   "rowid32", "1",
17500 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
17510 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
17520 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
17530 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
17540 20 22 72 6f 77 69 64 33 32 22 2c 20 22 30 22 2c   "rowid32", "0",
17550 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
17560 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
17570 66 20 53 51 4c 49 54 45 5f 43 41 53 45 5f 53 45  f SQLITE_CASE_SE
17580 4e 53 49 54 49 56 45 5f 4c 49 4b 45 0a 20 20 54  NSITIVE_LIKE.  T
17590 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
175a0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
175b0 6e 73 22 2c 22 63 61 73 65 73 65 6e 73 69 74 69  ns","casesensiti
175c0 76 65 6c 69 6b 65 22 2c 22 31 22 2c 54 43 4c 5f  velike","1",TCL_
175d0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
175e0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
175f0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
17600 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 63 61 73 65  e_options","case
17610 73 65 6e 73 69 74 69 76 65 6c 69 6b 65 22 2c 22  sensitivelike","
17620 30 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  0",TCL_GLOBAL_ON
17630 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
17640 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
17650 4c 45 5f 44 49 52 53 59 4e 43 0a 20 20 54 63 6c  LE_DIRSYNC.  Tcl
17660 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
17670 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
17680 22 2c 20 22 64 69 72 73 79 6e 63 22 2c 20 22 30  ", "dirsync", "0
17690 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
176a0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
176b0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
176c0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
176d0 22 2c 20 22 64 69 72 73 79 6e 63 22 2c 20 22 31  ", "dirsync", "1
176e0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
176f0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
17700 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
17710 4c 45 5f 4c 46 53 0a 20 20 54 63 6c 5f 53 65 74  LE_LFS.  Tcl_Set
17720 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
17730 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
17740 6c 66 73 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  lfs", "0", TCL_G
17750 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
17760 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
17770 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
17780 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6c 66 73 22  _options", "lfs"
17790 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
177a0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
177b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
177c0 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
177d0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
177e0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
177f0 69 6f 6e 73 22 2c 20 22 61 6c 74 65 72 74 61 62  ions", "altertab
17800 6c 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  le", "0", TCL_GL
17810 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
17820 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
17830 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17840 6f 70 74 69 6f 6e 73 22 2c 20 22 61 6c 74 65 72  options", "alter
17850 74 61 62 6c 65 22 2c 20 22 31 22 2c 20 54 43 4c  table", "1", TCL
17860 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
17870 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
17880 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
17890 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  E.  Tcl_SetVar2(
178a0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
178b0 6f 70 74 69 6f 6e 73 22 2c 20 22 61 6e 61 6c 79  options", "analy
178c0 7a 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ze", "0", TCL_GL
178d0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
178e0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
178f0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17900 6f 70 74 69 6f 6e 73 22 2c 20 22 61 6e 61 6c 79  options", "analy
17910 7a 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  ze", "1", TCL_GL
17920 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
17930 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
17940 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
17950 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61  TION.  Tcl_SetVa
17960 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
17970 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75  te_options", "au
17980 74 68 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  th", "0", TCL_GL
17990 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
179a0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
179b0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
179c0 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 68 22  options", "auth"
179d0 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
179e0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
179f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
17a00 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
17a10 54 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  T.  Tcl_SetVar2(
17a20 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17a30 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 69  options", "autoi
17a40 6e 63 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  nc", "0", TCL_GL
17a50 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
17a60 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
17a70 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17a80 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 69  options", "autoi
17a90 6e 63 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  nc", "1", TCL_GL
17aa0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
17ab0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
17ac0 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
17ad0 4d 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  M.  Tcl_SetVar2(
17ae0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17af0 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 76  options", "autov
17b00 61 63 75 75 6d 22 2c 20 22 30 22 2c 20 54 43 4c  acuum", "0", TCL
17b10 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
17b20 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
17b30 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
17b40 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75  te_options", "au
17b50 74 6f 76 61 63 75 75 6d 22 2c 20 22 31 22 2c 20  tovacuum", "1", 
17b60 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
17b70 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
17b80 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
17b90 55 4d 20 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  UM */.#if !defin
17ba0 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
17bb0 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 20 7c 7c  T_AUTOVACUUM) ||
17bc0 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
17bd0 41 55 54 4f 56 41 43 55 55 4d 3d 3d 30 0a 20 20  AUTOVACUUM==0.  
17be0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
17bf0 72 70 2c 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  rp,"sqlite_optio
17c00 6e 73 22 2c 22 64 65 66 61 75 6c 74 5f 61 75 74  ns","default_aut
17c10 6f 76 61 63 75 75 6d 22 2c 22 30 22 2c 54 43 4c  ovacuum","0",TCL
17c20 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
17c30 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
17c40 72 32 28 69 6e 74 65 72 70 2c 22 73 71 6c 69 74  r2(interp,"sqlit
17c50 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 64 65 66 61  e_options","defa
17c60 75 6c 74 5f 61 75 74 6f 76 61 63 75 75 6d 22 2c  ult_autovacuum",
17c70 22 31 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  "1",TCL_GLOBAL_O
17c80 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
17c90 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
17ca0 5f 42 45 54 57 45 45 4e 5f 4f 50 54 49 4d 49 5a  _BETWEEN_OPTIMIZ
17cb0 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74 56  ATION.  Tcl_SetV
17cc0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
17cd0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 62  ite_options", "b
17ce0 65 74 77 65 65 6e 5f 6f 70 74 22 2c 20 22 30 22  etween_opt", "0"
17cf0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
17d00 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
17d10 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
17d20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
17d30 2c 20 22 62 65 74 77 65 65 6e 5f 6f 70 74 22 2c  , "between_opt",
17d40 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
17d50 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
17d60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
17d70 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 0a  IT_BLOB_LITERAL.
17d80 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
17d90 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
17da0 74 69 6f 6e 73 22 2c 20 22 62 6c 6f 62 6c 69 74  tions", "bloblit
17db0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
17dc0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
17dd0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
17de0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
17df0 74 69 6f 6e 73 22 2c 20 22 62 6c 6f 62 6c 69 74  tions", "bloblit
17e00 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
17e10 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
17e20 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
17e30 4f 4d 49 54 5f 43 41 53 54 0a 20 20 54 63 6c 5f  OMIT_CAST.  Tcl_
17e40 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
17e50 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
17e60 2c 20 22 63 61 73 74 22 2c 20 22 30 22 2c 20 54  , "cast", "0", T
17e70 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
17e80 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
17e90 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
17ea0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
17eb0 63 61 73 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f  cast", "1", TCL_
17ec0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
17ed0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
17ee0 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20  ITE_OMIT_CHECK. 
17ef0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
17f00 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
17f10 69 6f 6e 73 22 2c 20 22 63 68 65 63 6b 22 2c 20  ions", "check", 
17f20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
17f30 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
17f40 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
17f50 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
17f60 6e 73 22 2c 20 22 63 68 65 63 6b 22 2c 20 22 31  ns", "check", "1
17f70 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
17f80 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
17f90 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
17fa0 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54  E_COLUMN_METADAT
17fb0 41 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  A.  Tcl_SetVar2(
17fc0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17fd0 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6c 75 6d  options", "colum
17fe0 6e 6d 65 74 61 64 61 74 61 22 2c 20 22 31 22 2c  nmetadata", "1",
17ff0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
18000 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
18010 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
18020 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
18030 20 22 63 6f 6c 75 6d 6e 6d 65 74 61 64 61 74 61   "columnmetadata
18040 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
18050 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
18060 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
18070 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 0a 20 20  OMIT_COMPLETE.  
18080 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
18090 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
180a0 6f 6e 73 22 2c 20 22 63 6f 6d 70 6c 65 74 65 22  ons", "complete"
180b0 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
180c0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
180d0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
180e0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
180f0 69 6f 6e 73 22 2c 20 22 63 6f 6d 70 6c 65 74 65  ions", "complete
18100 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
18110 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
18120 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
18130 4f 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45  OMIT_COMPOUND_SE
18140 4c 45 43 54 0a 20 20 54 63 6c 5f 53 65 74 56 61  LECT.  Tcl_SetVa
18150 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
18160 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f  te_options", "co
18170 6d 70 6f 75 6e 64 22 2c 20 22 30 22 2c 20 54 43  mpound", "0", TC
18180 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
18190 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
181a0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
181b0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63  ite_options", "c
181c0 6f 6d 70 6f 75 6e 64 22 2c 20 22 31 22 2c 20 54  ompound", "1", T
181d0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
181e0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
181f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4e 46  SQLITE_OMIT_CONF
18200 4c 49 43 54 5f 43 4c 41 55 53 45 0a 20 20 54 63  LICT_CLAUSE.  Tc
18210 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
18220 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
18230 73 22 2c 20 22 63 6f 6e 66 6c 69 63 74 22 2c 20  s", "conflict", 
18240 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
18250 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
18260 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
18270 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
18280 6e 73 22 2c 20 22 63 6f 6e 66 6c 69 63 74 22 2c  ns", "conflict",
18290 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
182a0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
182b0 23 69 66 20 4f 53 5f 55 4e 49 58 0a 20 20 54 63  #if OS_UNIX.  Tc
182c0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
182d0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
182e0 73 22 2c 20 22 63 72 61 73 68 74 65 73 74 22 2c  s", "crashtest",
182f0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
18300 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
18310 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
18320 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
18330 6f 6e 73 22 2c 20 22 63 72 61 73 68 74 65 73 74  ons", "crashtest
18340 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
18350 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
18360 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
18370 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55  OMIT_DATETIME_FU
18380 4e 43 53 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  NCS.  Tcl_SetVar
18390 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
183a0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 61 74  e_options", "dat
183b0 65 74 69 6d 65 22 2c 20 22 30 22 2c 20 54 43 4c  etime", "0", TCL
183c0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
183d0 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
183e0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
183f0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 61  te_options", "da
18400 74 65 74 69 6d 65 22 2c 20 22 31 22 2c 20 54 43  tetime", "1", TC
18410 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
18420 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
18430 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49  QLITE_OMIT_DISKI
18440 4f 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  O.  Tcl_SetVar2(
18450 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
18460 6f 70 74 69 6f 6e 73 22 2c 20 22 64 69 73 6b 69  options", "diski
18470 6f 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  o", "0", TCL_GLO
18480 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
18490 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
184a0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
184b0 70 74 69 6f 6e 73 22 2c 20 22 64 69 73 6b 69 6f  ptions", "diskio
184c0 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
184d0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
184e0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
184f0 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 54  OMIT_EXPLAIN.  T
18500 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
18510 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
18520 6e 73 22 2c 20 22 65 78 70 6c 61 69 6e 22 2c 20  ns", "explain", 
18530 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
18540 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
18550 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
18560 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
18570 6e 73 22 2c 20 22 65 78 70 6c 61 69 6e 22 2c 20  ns", "explain", 
18580 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
18590 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
185a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
185b0 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
185c0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
185d0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
185e0 70 74 69 6f 6e 73 22 2c 20 22 66 6c 6f 61 74 69  ptions", "floati
185f0 6e 67 70 6f 69 6e 74 22 2c 20 22 30 22 2c 20 54  ngpoint", "0", T
18600 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
18610 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
18620 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
18630 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
18640 66 6c 6f 61 74 69 6e 67 70 6f 69 6e 74 22 2c 20  floatingpoint", 
18650 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
18660 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
18670 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
18680 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20  T_FOREIGN_KEY.  
18690 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
186a0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
186b0 6f 6e 73 22 2c 20 22 66 6f 72 65 69 67 6e 6b 65  ons", "foreignke
186c0 79 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  y", "0", TCL_GLO
186d0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
186e0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
186f0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
18700 70 74 69 6f 6e 73 22 2c 20 22 66 6f 72 65 69 67  ptions", "foreig
18710 6e 6b 65 79 22 2c 20 22 31 22 2c 20 54 43 4c 5f  nkey", "1", TCL_
18720 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
18730 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
18740 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 31 0a  ITE_ENABLE_FTS1.
18750 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
18760 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
18770 74 69 6f 6e 73 22 2c 20 22 66 74 73 31 22 2c 20  tions", "fts1", 
18780 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
18790 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
187a0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
187b0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
187c0 6e 73 22 2c 20 22 66 74 73 31 22 2c 20 22 30 22  ns", "fts1", "0"
187d0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
187e0 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
187f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47  ef SQLITE_OMIT_G
18800 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a 20 20 54  LOBALRECOVER.  T
18810 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
18820 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
18830 6e 73 22 2c 20 22 67 6c 6f 62 61 6c 72 65 63 6f  ns", "globalreco
18840 76 65 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ver", "0", TCL_G
18850 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
18860 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
18870 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
18880 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 67 6c 6f 62  _options", "glob
18890 61 6c 72 65 63 6f 76 65 72 22 2c 20 22 31 22 2c  alrecover", "1",
188a0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
188b0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
188c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
188d0 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20  TEGRITY_CHECK.  
188e0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
188f0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
18900 6f 6e 73 22 2c 20 22 69 6e 74 65 67 72 69 74 79  ons", "integrity
18910 63 6b 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ck", "0", TCL_GL
18920 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
18930 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
18940 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
18950 6f 70 74 69 6f 6e 73 22 2c 20 22 69 6e 74 65 67  options", "integ
18960 72 69 74 79 63 6b 22 2c 20 22 31 22 2c 20 54 43  rityck", "1", TC
18970 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
18980 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
18990 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55  ned(SQLITE_DEFAU
189a0 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 29 20  LT_FILE_FORMAT) 
189b0 26 26 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  && SQLITE_DEFAUL
189c0 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 3d 3d 31  T_FILE_FORMAT==1
189d0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
189e0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
189f0 70 74 69 6f 6e 73 22 2c 20 22 6c 65 67 61 63 79  ptions", "legacy
18a00 66 6f 72 6d 61 74 22 2c 20 22 31 22 2c 20 54 43  format", "1", TC
18a10 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
18a20 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
18a30 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
18a40 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6c  ite_options", "l
18a50 65 67 61 63 79 66 6f 72 6d 61 74 22 2c 20 22 30  egacyformat", "0
18a60 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
18a70 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
18a80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
18a90 4c 49 4b 45 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  LIKE_OPTIMIZATIO
18aa0 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  N.  Tcl_SetVar2(
18ab0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
18ac0 6f 70 74 69 6f 6e 73 22 2c 20 22 6c 69 6b 65 5f  options", "like_
18ad0 6f 70 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  opt", "0", TCL_G
18ae0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
18af0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
18b00 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
18b10 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6c 69 6b 65  _options", "like
18b20 5f 6f 70 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f  _opt", "1", TCL_
18b30 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
18b40 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
18b50 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44  ITE_OMIT_MEMORYD
18b60 42 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  B.  Tcl_SetVar2(
18b70 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
18b80 6f 70 74 69 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72  options", "memor
18b90 79 64 62 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ydb", "0", TCL_G
18ba0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
18bb0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
18bc0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
18bd0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6d 65 6d 6f  _options", "memo
18be0 72 79 64 62 22 2c 20 22 31 22 2c 20 54 43 4c 5f  rydb", "1", TCL_
18bf0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
18c00 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
18c10 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52  ITE_ENABLE_MEMOR
18c20 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 0a 20 20 54  Y_MANAGEMENT.  T
18c30 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
18c40 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
18c50 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 6d 61 6e 61  ns", "memorymana
18c60 67 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  ge", "1", TCL_GL
18c70 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
18c80 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
18c90 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
18ca0 6f 70 74 69 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72  options", "memor
18cb0 79 6d 61 6e 61 67 65 22 2c 20 22 30 22 2c 20 54  ymanage", "0", T
18cc0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
18cd0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
18ce0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4f 52 5f 4f  SQLITE_OMIT_OR_O
18cf0 50 54 49 4d 49 5a 41 54 49 4f 4e 0a 20 20 54 63  PTIMIZATION.  Tc
18d00 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
18d10 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
18d20 73 22 2c 20 22 6f 72 5f 6f 70 74 22 2c 20 22 30  s", "or_opt", "0
18d30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
18d40 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
18d50 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
18d60 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
18d70 22 2c 20 22 6f 72 5f 6f 70 74 22 2c 20 22 31 22  ", "or_opt", "1"
18d80 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
18d90 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
18da0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
18db0 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20 54  AGER_PRAGMAS.  T
18dc0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
18dd0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
18de0 6e 73 22 2c 20 22 70 61 67 65 72 5f 70 72 61 67  ns", "pager_prag
18df0 6d 61 73 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  mas", "0", TCL_G
18e00 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
18e10 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
18e20 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
18e30 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 61 67 65  _options", "page
18e40 72 5f 70 72 61 67 6d 61 73 22 2c 20 22 31 22 2c  r_pragmas", "1",
18e50 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
18e60 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
18e70 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  f SQLITE_OMIT_PA
18e80 52 53 45 52 0a 20 20 54 63 6c 5f 53 65 74 56 61  RSER.  Tcl_SetVa
18e90 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
18ea0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 61  te_options", "pa
18eb0 72 73 65 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f  rser", "0", TCL_
18ec0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
18ed0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
18ee0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
18ef0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 61 72  e_options", "par
18f00 73 65 72 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  ser", "1", TCL_G
18f10 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
18f20 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
18f30 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41  (SQLITE_OMIT_PRA
18f40 47 4d 41 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  GMA) || defined(
18f50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
18f60 5f 50 52 41 47 4d 41 53 29 0a 20 20 54 63 6c 5f  _PRAGMAS).  Tcl_
18f70 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
18f80 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
18f90 2c 20 22 70 72 61 67 6d 61 22 2c 20 22 30 22 2c  , "pragma", "0",
18fa0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
18fb0 29 3b 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  );.  Tcl_SetVar2
18fc0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
18fd0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 69 6e 74 65  _options", "inte
18fe0 67 72 69 74 79 63 6b 22 2c 20 22 30 22 2c 20 54  grityck", "0", T
18ff0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
19000 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
19010 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
19020 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
19030 70 72 61 67 6d 61 22 2c 20 22 31 22 2c 20 54 43  pragma", "1", TC
19040 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
19050 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
19060 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
19070 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 54  ESS_CALLBACK.  T
19080 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
19090 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
190a0 6e 73 22 2c 20 22 70 72 6f 67 72 65 73 73 22 2c  ns", "progress",
190b0 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
190c0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
190d0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
190e0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
190f0 6f 6e 73 22 2c 20 22 70 72 6f 67 72 65 73 73 22  ons", "progress"
19100 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
19110 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
19120 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
19130 4e 41 42 4c 45 5f 52 45 44 45 46 5f 49 4f 0a 20  NABLE_REDEF_IO. 
19140 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
19150 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
19160 69 6f 6e 73 22 2c 20 22 72 65 64 65 66 69 6f 22  ions", "redefio"
19170 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
19180 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
19190 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
191a0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
191b0 69 6f 6e 73 22 2c 20 22 72 65 64 65 66 69 6f 22  ions", "redefio"
191c0 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
191d0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
191e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
191f0 4d 49 54 5f 52 45 49 4e 44 45 58 0a 20 20 54 63  MIT_REINDEX.  Tc
19200 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
19210 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
19220 73 22 2c 20 22 72 65 69 6e 64 65 78 22 2c 20 22  s", "reindex", "
19230 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
19240 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
19250 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
19260 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
19270 73 22 2c 20 22 72 65 69 6e 64 65 78 22 2c 20 22  s", "reindex", "
19280 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
19290 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
192a0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
192b0 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a  _SCHEMA_PRAGMAS.
192c0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
192d0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
192e0 74 69 6f 6e 73 22 2c 20 22 73 63 68 65 6d 61 5f  tions", "schema_
192f0 70 72 61 67 6d 61 73 22 2c 20 22 30 22 2c 20 54  pragmas", "0", T
19300 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
19310 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
19320 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
19330 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
19340 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 22 2c  schema_pragmas",
19350 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
19360 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
19370 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
19380 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  IT_SCHEMA_VERSIO
19390 4e 5f 50 52 41 47 4d 41 53 0a 20 20 54 63 6c 5f  N_PRAGMAS.  Tcl_
193a0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
193b0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
193c0 2c 20 22 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  , "schema_versio
193d0 6e 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  n", "0", TCL_GLO
193e0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
193f0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
19400 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
19410 70 74 69 6f 6e 73 22 2c 20 22 73 63 68 65 6d 61  ptions", "schema
19420 5f 76 65 72 73 69 6f 6e 22 2c 20 22 31 22 2c 20  _version", "1", 
19430 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
19440 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
19450 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
19460 52 45 44 5f 43 41 43 48 45 0a 20 20 54 63 6c 5f  RED_CACHE.  Tcl_
19470 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
19480 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
19490 2c 20 22 73 68 61 72 65 64 5f 63 61 63 68 65 22  , "shared_cache"
194a0 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
194b0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
194c0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
194d0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
194e0 69 6f 6e 73 22 2c 20 22 73 68 61 72 65 64 5f 63  ions", "shared_c
194f0 61 63 68 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f  ache", "1", TCL_
19500 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
19510 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
19520 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
19530 59 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  Y.  Tcl_SetVar2(
19540 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
19550 6f 70 74 69 6f 6e 73 22 2c 20 22 73 75 62 71 75  options", "subqu
19560 65 72 79 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ery", "0", TCL_G
19570 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
19580 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
19590 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
195a0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 75 62 71  _options", "subq
195b0 75 65 72 79 22 2c 20 22 31 22 2c 20 54 43 4c 5f  uery", "1", TCL_
195c0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
195d0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
195e0 49 54 45 5f 4f 4d 49 54 5f 54 43 4c 5f 56 41 52  ITE_OMIT_TCL_VAR
195f0 49 41 42 4c 45 0a 20 20 54 63 6c 5f 53 65 74 56  IABLE.  Tcl_SetV
19600 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
19610 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74  ite_options", "t
19620 63 6c 76 61 72 22 2c 20 22 30 22 2c 20 54 43 4c  clvar", "0", TCL
19630 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
19640 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
19650 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
19660 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 63  te_options", "tc
19670 6c 76 61 72 22 2c 20 22 31 22 2c 20 54 43 4c 5f  lvar", "1", TCL_
19680 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
19690 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
196a0 64 28 54 48 52 45 41 44 53 41 46 45 29 20 26 26  d(THREADSAFE) &&
196b0 20 54 48 52 45 41 44 53 41 46 45 0a 20 20 54 63   THREADSAFE.  Tc
196c0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
196d0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
196e0 73 22 2c 20 22 74 68 72 65 61 64 73 61 66 65 22  s", "threadsafe"
196f0 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
19700 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
19710 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
19720 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
19730 69 6f 6e 73 22 2c 20 22 74 68 72 65 61 64 73 61  ions", "threadsa
19740 66 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  fe", "0", TCL_GL
19750 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
19760 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
19770 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20 54  E_OMIT_TRACE.  T
19780 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
19790 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
197a0 6e 73 22 2c 20 22 74 72 61 63 65 22 2c 20 22 30  ns", "trace", "0
197b0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
197c0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
197d0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
197e0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
197f0 22 2c 20 22 74 72 61 63 65 22 2c 20 22 31 22 2c  ", "trace", "1",
19800 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
19810 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
19820 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
19830 49 47 47 45 52 0a 20 20 54 63 6c 5f 53 65 74 56  IGGER.  Tcl_SetV
19840 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
19850 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74  ite_options", "t
19860 72 69 67 67 65 72 22 2c 20 22 30 22 2c 20 54 43  rigger", "0", TC
19870 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
19880 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
19890 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
198a0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74  ite_options", "t
198b0 72 69 67 67 65 72 22 2c 20 22 31 22 2c 20 54 43  rigger", "1", TC
198c0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
198d0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
198e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44  QLITE_OMIT_TEMPD
198f0 42 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  B.  Tcl_SetVar2(
19900 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
19910 6f 70 74 69 6f 6e 73 22 2c 20 22 74 65 6d 70 64  options", "tempd
19920 62 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  b", "0", TCL_GLO
19930 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
19940 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
19950 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
19960 70 74 69 6f 6e 73 22 2c 20 22 74 65 6d 70 64 62  ptions", "tempdb
19970 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
19980 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
19990 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
199a0 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 54 63 6c  OMIT_UTF16.  Tcl
199b0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
199c0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
199d0 22 2c 20 22 75 74 66 31 36 22 2c 20 22 30 22 2c  ", "utf16", "0",
199e0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
199f0 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
19a00 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
19a10 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
19a20 20 22 75 74 66 31 36 22 2c 20 22 31 22 2c 20 54   "utf16", "1", T
19a30 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
19a40 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
19a50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55  SQLITE_OMIT_VACU
19a60 55 4d 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  UM.  Tcl_SetVar2
19a70 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
19a80 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76 61 63 75  _options", "vacu
19a90 75 6d 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  um", "0", TCL_GL
19aa0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
19ab0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
19ac0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
19ad0 6f 70 74 69 6f 6e 73 22 2c 20 22 76 61 63 75 75  options", "vacuu
19ae0 6d 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  m", "1", TCL_GLO
19af0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
19b00 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
19b10 5f 4f 4d 49 54 5f 56 49 45 57 0a 20 20 54 63 6c  _OMIT_VIEW.  Tcl
19b20 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
19b30 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
19b40 22 2c 20 22 76 69 65 77 22 2c 20 22 30 22 2c 20  ", "view", "0", 
19b50 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
19b60 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
19b70 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
19b80 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
19b90 22 76 69 65 77 22 2c 20 22 31 22 2c 20 54 43 4c  "view", "1", TCL
19ba0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
19bb0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
19bc0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
19bd0 4c 54 41 42 4c 45 0a 20 20 54 63 6c 5f 53 65 74  LTABLE.  Tcl_Set
19be0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
19bf0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
19c00 76 74 61 62 22 2c 20 22 30 22 2c 20 54 43 4c 5f  vtab", "0", TCL_
19c10 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
19c20 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
19c30 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
19c40 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76 74 61  e_options", "vta
19c50 62 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  b", "1", TCL_GLO
19c60 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
19c70 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d  f.}../*.** tclcm
19c80 64 3a 20 20 20 77 6f 72 6b 69 6e 67 5f 36 34 62  d:   working_64b
19c90 69 74 5f 69 6e 74 0a 2a 2a 0a 2a 2a 20 53 6f 6d  it_int.**.** Som
19ca0 65 20 54 43 4c 20 62 75 69 6c 64 73 20 28 65 78  e TCL builds (ex
19cb0 3a 20 63 79 67 77 69 6e 29 20 64 6f 20 6e 6f 74  : cygwin) do not
19cc0 20 73 75 70 70 6f 72 74 20 36 34 2d 62 69 74 20   support 64-bit 
19cd0 69 6e 74 65 67 65 72 73 2e 20 20 54 68 69 73 0a  integers.  This.
19ce0 2a 2a 20 6c 65 61 64 73 20 74 6f 20 61 20 6e 75  ** leads to a nu
19cf0 6d 62 65 72 20 6f 66 20 74 65 73 74 20 66 61 69  mber of test fai
19d00 6c 75 72 65 73 2e 20 20 54 68 65 20 70 72 65 73  lures.  The pres
19d10 65 6e 74 20 63 6f 6d 6d 61 6e 64 20 63 68 65 63  ent command chec
19d20 6b 73 20 74 68 65 0a 2a 2a 20 54 43 4c 20 62 75  ks the.** TCL bu
19d30 69 6c 64 20 74 6f 20 73 65 65 20 77 68 65 74 68  ild to see wheth
19d40 65 72 20 6f 72 20 6e 6f 74 20 69 74 20 73 75 70  er or not it sup
19d50 70 6f 72 74 73 20 36 34 2d 62 69 74 20 69 6e 74  ports 64-bit int
19d60 65 67 65 72 73 2e 20 20 49 74 0a 2a 2a 20 72 65  egers.  It.** re
19d70 74 75 72 6e 73 20 54 52 55 45 20 69 66 20 69 74  turns TRUE if it
19d80 20 64 6f 65 73 20 61 6e 64 20 46 41 4c 53 45 20   does and FALSE 
19d90 69 66 20 6e 6f 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  if not..**.** Th
19da0 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73  is command is us
19db0 65 64 20 74 6f 20 77 61 72 6e 20 75 73 65 72 73  ed to warn users
19dc0 20 74 68 61 74 20 74 68 65 69 72 20 54 43 4c 20   that their TCL 
19dd0 62 75 69 6c 64 20 69 73 20 64 65 66 65 63 74 69  build is defecti
19de0 76 65 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74  ve.** and that t
19df0 68 65 20 65 72 72 6f 72 73 20 74 68 65 79 20 61  he errors they a
19e00 72 65 20 73 65 65 69 6e 67 20 69 6e 20 74 68 65  re seeing in the
19e10 20 74 65 73 74 20 73 63 72 69 70 74 73 20 6d 69   test scripts mi
19e20 67 68 74 20 62 65 0a 2a 2a 20 61 20 72 65 73 75  ght be.** a resu
19e30 6c 74 20 6f 66 20 74 68 65 69 72 20 64 65 66 65  lt of their defe
19e40 63 74 69 76 65 20 54 43 4c 20 72 61 74 68 65 72  ctive TCL rather
19e50 20 74 68 61 6e 20 70 72 6f 62 6c 65 6d 73 20 69   than problems i
19e60 6e 20 53 51 4c 69 74 65 2e 0a 2a 2f 0a 73 74 61  n SQLite..*/.sta
19e70 74 69 63 20 69 6e 74 20 77 6f 72 6b 69 6e 67 5f  tic int working_
19e80 36 34 62 69 74 5f 69 6e 74 28 0a 20 20 43 6c 69  64bit_int(.  Cli
19e90 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
19ea0 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  ta, /* Pointer t
19eb0 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  o sqlite3_enable
19ec0 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  _XXX function */
19ed0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
19ee0 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
19ef0 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
19f00 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
19f10 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
19f20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
19f30 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
19f40 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
19f50 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
19f60 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
19f70 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
19f80 2f 0a 29 7b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  /.){.  Tcl_Obj *
19f90 70 54 65 73 74 4f 62 6a 3b 0a 20 20 69 6e 74 20  pTestObj;.  int 
19fa0 77 6f 72 6b 69 6e 67 20 3d 20 30 3b 0a 0a 20 20  working = 0;..  
19fb0 70 54 65 73 74 4f 62 6a 20 3d 20 54 63 6c 5f 4e  pTestObj = Tcl_N
19fc0 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 31 30 30  ewWideIntObj(100
19fd0 30 30 30 30 2a 28 69 36 34 29 31 32 33 34 35 36  0000*(i64)123456
19fe0 37 38 39 30 29 3b 0a 20 20 77 6f 72 6b 69 6e 67  7890);.  working
19ff0 20 3d 20 73 74 72 63 6d 70 28 54 63 6c 5f 47 65   = strcmp(Tcl_Ge
1a000 74 53 74 72 69 6e 67 28 70 54 65 73 74 4f 62 6a  tString(pTestObj
1a010 29 2c 20 22 31 32 33 34 35 36 37 38 39 30 30 30  ), "123456789000
1a020 30 30 30 30 22 29 3d 3d 30 3b 0a 20 20 54 63 6c  0000")==0;.  Tcl
1a030 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 54  _DecrRefCount(pT
1a040 65 73 74 4f 62 6a 29 3b 0a 20 20 54 63 6c 5f 53  estObj);.  Tcl_S
1a050 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
1a060 72 70 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65  rp, Tcl_NewBoole
1a070 61 6e 4f 62 6a 28 77 6f 72 6b 69 6e 67 29 29 3b  anObj(working));
1a080 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
1a090 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69  ;.}.../*.** Regi
1a0a0 73 74 65 72 20 63 6f 6d 6d 61 6e 64 73 20 77 69  ster commands wi
1a0b0 74 68 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72  th the TCL inter
1a0c0 70 72 65 74 65 72 2e 0a 2a 2f 0a 69 6e 74 20 53  preter..*/.int S
1a0d0 71 6c 69 74 65 74 65 73 74 31 5f 49 6e 69 74 28  qlitetest1_Init(
1a0e0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
1a0f0 72 70 29 7b 0a 20 20 65 78 74 65 72 6e 20 69 6e  rp){.  extern in
1a100 74 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68  t sqlite3_search
1a110 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e  _count;.  extern
1a120 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 69 6e 74   int sqlite3_int
1a130 65 72 72 75 70 74 5f 63 6f 75 6e 74 3b 0a 20 20  errupt_count;.  
1a140 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
1a150 65 33 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75  e3_open_file_cou
1a160 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  nt;.  extern int
1a170 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
1a180 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  unt;.  extern in
1a190 74 20 73 71 6c 69 74 65 33 5f 63 75 72 72 65 6e  t sqlite3_curren
1a1a0 74 5f 74 69 6d 65 3b 0a 20 20 73 74 61 74 69 63  t_time;.  static
1a1b0 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 63   struct {.     c
1a1c0 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20  har *zName;.    
1a1d0 20 54 63 6c 5f 43 6d 64 50 72 6f 63 20 2a 78 50   Tcl_CmdProc *xP
1a1e0 72 6f 63 3b 0a 20 20 7d 20 61 43 6d 64 5b 5d 20  roc;.  } aCmd[] 
1a1f0 3d 20 7b 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  = {.     { "sqli
1a200 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 22  te3_mprintf_int"
1a210 2c 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c  ,           (Tcl
1a220 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65  _CmdProc*)sqlite
1a230 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 20 20 20  3_mprintf_int   
1a240 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1a250 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36  te3_mprintf_int6
1a260 34 22 2c 20 20 20 20 20 20 20 20 20 28 54 63 6c  4",         (Tcl
1a270 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65  _CmdProc*)sqlite
1a280 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34 20  3_mprintf_int64 
1a290 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1a2a0 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 22  te3_mprintf_str"
1a2b0 2c 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c  ,           (Tcl
1a2c0 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65  _CmdProc*)sqlite
1a2d0 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 20 20 20  3_mprintf_str   
1a2e0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1a2f0 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f  te3_mprintf_stro
1a300 6e 6c 79 22 2c 20 20 20 20 20 20 20 28 54 63 6c  nly",       (Tcl
1a310 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65  _CmdProc*)sqlite
1a320 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c  3_mprintf_stronl
1a330 79 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  y},.     { "sqli
1a340 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62  te3_mprintf_doub
1a350 6c 65 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c  le",        (Tcl
1a360 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65  _CmdProc*)sqlite
1a370 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65  3_mprintf_double
1a380 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1a390 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c  te3_mprintf_scal
1a3a0 65 64 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c  ed",        (Tcl
1a3b0 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65  _CmdProc*)sqlite
1a3c0 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65 64  3_mprintf_scaled
1a3d0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1a3e0 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78 64  te3_mprintf_hexd
1a3f0 6f 75 62 6c 65 22 2c 20 20 20 28 54 63 6c 5f 43  ouble",   (Tcl_C
1a400 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f  mdProc*)sqlite3_
1a410 6d 70 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c  mprintf_hexdoubl
1a420 65 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  e},.     { "sqli
1a430 74 65 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f 74 65  te3_mprintf_z_te
1a440 73 74 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c  st",        (Tcl
1a450 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6d  _CmdProc*)test_m
1a460 70 72 69 6e 74 66 5f 7a 20 20 20 20 20 20 20 20  printf_z        
1a470 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1a480 65 33 5f 6d 70 72 69 6e 74 66 5f 6e 5f 74 65 73  e3_mprintf_n_tes
1a490 74 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  t",        (Tcl_
1a4a0 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6d 70  CmdProc*)test_mp
1a4b0 72 69 6e 74 66 5f 6e 20 20 20 20 20 20 20 20 7d  rintf_n        }
1a4c0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1a4d0 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
1a4e0 77 69 64 22 2c 20 20 20 20 20 28 54 63 6c 5f 43  wid",     (Tcl_C
1a4f0 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6c 61 73  mdProc*)test_las
1a500 74 5f 72 6f 77 69 64 20 20 20 20 20 20 20 7d 2c  t_rowid       },
1a510 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1a520 5f 65 78 65 63 5f 70 72 69 6e 74 66 22 2c 20 20  _exec_printf",  
1a530 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
1a540 64 50 72 6f 63 2a 29 74 65 73 74 5f 65 78 65 63  dProc*)test_exec
1a550 5f 70 72 69 6e 74 66 20 20 20 20 20 20 7d 2c 0a  _printf      },.
1a560 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1a570 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66  get_table_printf
1a580 22 2c 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64  ",      (Tcl_Cmd
1a590 50 72 6f 63 2a 29 74 65 73 74 5f 67 65 74 5f 74  Proc*)test_get_t
1a5a0 61 62 6c 65 5f 70 72 69 6e 74 66 20 7d 2c 0a 20  able_printf },. 
1a5b0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
1a5c0 6c 6f 73 65 22 2c 20 20 20 20 20 20 20 20 20 20  lose",          
1a5d0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
1a5e0 72 6f 63 2a 29 73 71 6c 69 74 65 5f 74 65 73 74  roc*)sqlite_test
1a5f0 5f 63 6c 6f 73 65 20 20 20 20 20 7d 2c 0a 20 20  _close     },.  
1a600 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72     { "sqlite3_cr
1a610 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  eate_function", 
1a620 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
1a630 6f 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65 5f  oc*)test_create_
1a640 66 75 6e 63 74 69 6f 6e 20 20 7d 2c 0a 20 20 20  function  },.   
1a650 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72 65    { "sqlite3_cre
1a660 61 74 65 5f 61 67 67 72 65 67 61 74 65 22 2c 20  ate_aggregate", 
1a670 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
1a680 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65 5f 61  c*)test_create_a
1a690 67 67 72 65 67 61 74 65 20 7d 2c 0a 20 20 20 20  ggregate },.    
1a6a0 20 7b 20 22 73 71 6c 69 74 65 5f 72 65 67 69 73   { "sqlite_regis
1a6b0 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  ter_test_functio
1a6c0 6e 22 2c 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63  n", (Tcl_CmdProc
1a6d0 2a 29 74 65 73 74 5f 72 65 67 69 73 74 65 72 5f  *)test_register_
1a6e0 66 75 6e 63 20 20 20 20 7d 2c 0a 20 20 20 20 20  func    },.     
1a6f0 7b 20 22 73 71 6c 69 74 65 5f 61 62 6f 72 74 22  { "sqlite_abort"
1a700 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1a710 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1a720 29 73 71 6c 69 74 65 5f 61 62 6f 72 74 20 20 20  )sqlite_abort   
1a730 20 20 20 20 20 20 20 7d 2c 0a 23 69 66 64 65 66         },.#ifdef
1a740 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
1a750 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f  .     { "sqlite_
1a760 6d 61 6c 6c 6f 63 5f 66 61 69 6c 22 2c 20 20 20  malloc_fail",   
1a770 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
1a780 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 6d 61  dProc*)sqlite_ma
1a790 6c 6c 6f 63 5f 66 61 69 6c 20 20 20 20 7d 2c 0a  lloc_fail    },.
1a7a0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 6d       { "sqlite_m
1a7b0 61 6c 6c 6f 63 5f 73 74 61 74 22 2c 20 20 20 20  alloc_stat",    
1a7c0 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
1a7d0 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 6d 61 6c  Proc*)sqlite_mal
1a7e0 6c 6f 63 5f 73 74 61 74 20 20 20 20 7d 2c 0a 23  loc_stat    },.#
1a7f0 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71  endif.     { "sq
1a800 6c 69 74 65 5f 62 69 6e 64 22 2c 20 20 20 20 20  lite_bind",     
1a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
1a820 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
1a830 5f 62 69 6e 64 20 20 20 20 20 20 20 20 20 20 20  _bind           
1a840 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 62 72 65    },.     { "bre
1a850 61 6b 70 6f 69 6e 74 22 2c 20 20 20 20 20 20 20  akpoint",       
1a860 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
1a870 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
1a880 62 72 65 61 6b 70 6f 69 6e 74 20 20 20 20 20 20  breakpoint      
1a890 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1a8a0 74 65 33 5f 6b 65 79 22 2c 20 20 20 20 20 20 20  te3_key",       
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
1a8c0 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6b  _CmdProc*)test_k
1a8d0 65 79 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ey              
1a8e0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1a8f0 65 33 5f 72 65 6b 65 79 22 2c 20 20 20 20 20 20  e3_rekey",      
1a900 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
1a910 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 72 65  CmdProc*)test_re
1a920 6b 65 79 20 20 20 20 20 20 20 20 20 20 20 20 7d  key            }
1a930 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1a940 5f 73 65 74 5f 6d 61 67 69 63 22 2c 20 20 20 20  _set_magic",    
1a950 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
1a960 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 73  mdProc*)sqlite_s
1a970 65 74 5f 6d 61 67 69 63 20 20 20 20 20 20 7d 2c  et_magic      },
1a980 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1a990 5f 69 6e 74 65 72 72 75 70 74 22 2c 20 20 20 20  _interrupt",    
1a9a0 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
1a9b0 64 50 72 6f 63 2a 29 74 65 73 74 5f 69 6e 74 65  dProc*)test_inte
1a9c0 72 72 75 70 74 20 20 20 20 20 20 20 20 7d 2c 0a  rrupt        },.
1a9d0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 64       { "sqlite_d
1a9e0 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 22 2c  elete_function",
1a9f0 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
1aa00 50 72 6f 63 2a 29 64 65 6c 65 74 65 5f 66 75 6e  Proc*)delete_fun
1aa10 63 74 69 6f 6e 20 20 20 20 20 20 20 7d 2c 0a 20  ction       },. 
1aa20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 64 65      { "sqlite_de
1aa30 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 22 2c  lete_collation",
1aa40 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
1aa50 72 6f 63 2a 29 64 65 6c 65 74 65 5f 63 6f 6c 6c  roc*)delete_coll
1aa60 61 74 69 6f 6e 20 20 20 20 20 20 7d 2c 0a 20 20  ation      },.  
1aa70 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 67 65     { "sqlite3_ge
1aa80 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 22 2c 20 20  t_autocommit",  
1aa90 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
1aaa0 6f 63 2a 29 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  oc*)get_autocomm
1aab0 69 74 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20  it        },.   
1aac0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 73 74 61    { "sqlite3_sta
1aad0 63 6b 5f 75 73 65 64 22 2c 20 20 20 20 20 20 20  ck_used",       
1aae0 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
1aaf0 63 2a 29 74 65 73 74 5f 73 74 61 63 6b 5f 75 73  c*)test_stack_us
1ab00 65 64 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  ed       },.    
1ab10 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 75 73 79   { "sqlite3_busy
1ab20 5f 74 69 6d 65 6f 75 74 22 2c 20 20 20 20 20 20  _timeout",      
1ab30 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
1ab40 2a 29 74 65 73 74 5f 62 75 73 79 5f 74 69 6d 65  *)test_busy_time
1ab50 6f 75 74 20 20 20 20 20 7d 2c 0a 20 20 7d 3b 0a  out     },.  };.
1ab60 20 20 73 74 61 74 69 63 20 73 74 72 75 63 74 20    static struct 
1ab70 7b 0a 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  {.     char *zNa
1ab80 6d 65 3b 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a  me;.     Tcl_Obj
1ab90 43 6d 64 50 72 6f 63 20 2a 78 50 72 6f 63 3b 0a  CmdProc *xProc;.
1aba0 20 20 20 20 20 76 6f 69 64 20 2a 63 6c 69 65 6e       void *clien
1abb0 74 44 61 74 61 3b 0a 20 20 7d 20 61 4f 62 6a 43  tData;.  } aObjC
1abc0 6d 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20  md[] = {.     { 
1abd0 22 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74  "sqlite3_connect
1abe0 69 6f 6e 5f 70 6f 69 6e 74 65 72 22 2c 20 20 20  ion_pointer",   
1abf0 20 67 65 74 5f 73 71 6c 69 74 65 5f 70 6f 69 6e   get_sqlite_poin
1ac00 74 65 72 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b  ter, 0 },.     {
1ac10 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69   "sqlite3_bind_i
1ac20 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  nt",            
1ac30 20 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 2c    test_bind_int,
1ac40 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 20 20 20        0 },.     
1ac50 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  { "sqlite3_bind_
1ac60 69 6e 74 36 34 22 2c 20 20 20 20 20 20 20 20 20  int64",         
1ac70 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74     test_bind_int
1ac80 36 34 2c 20 20 20 20 30 20 7d 2c 0a 20 20 20 20  64,    0 },.    
1ac90 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64   { "sqlite3_bind
1aca0 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20 20 20 20  _double",       
1acb0 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 64 6f      test_bind_do
1acc0 75 62 6c 65 2c 20 20 20 30 20 7d 2c 0a 20 20 20  uble,   0 },.   
1acd0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e    { "sqlite3_bin
1ace0 64 5f 6e 75 6c 6c 22 2c 20 20 20 20 20 20 20 20  d_null",        
1acf0 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 6e       test_bind_n
1ad00 75 6c 6c 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20  ull     ,0 },.  
1ad10 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
1ad20 6e 64 5f 74 65 78 74 22 2c 20 20 20 20 20 20 20  nd_text",       
1ad30 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f        test_bind_
1ad40 74 65 78 74 20 20 20 20 20 2c 30 20 7d 2c 0a 20  text     ,0 },. 
1ad50 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62      { "sqlite3_b
1ad60 69 6e 64 5f 74 65 78 74 31 36 22 2c 20 20 20 20  ind_text16",    
1ad70 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64         test_bind
1ad80 5f 74 65 78 74 31 36 20 20 20 2c 30 20 7d 2c 0a  _text16   ,0 },.
1ad90 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1ada0 62 69 6e 64 5f 62 6c 6f 62 22 2c 20 20 20 20 20  bind_blob",     
1adb0 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e          test_bin
1adc0 64 5f 62 6c 6f 62 20 20 20 20 20 2c 30 20 7d 2c  d_blob     ,0 },
1add0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1ade0 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
1adf0 63 6f 75 6e 74 22 2c 20 20 74 65 73 74 5f 62 69  count",  test_bi
1ae00 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75  nd_parameter_cou
1ae10 6e 74 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22  nt, 0},.     { "
1ae20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
1ae30 61 6d 65 74 65 72 5f 6e 61 6d 65 22 2c 20 20 20  ameter_name",   
1ae40 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65  test_bind_parame
1ae50 74 65 72 5f 6e 61 6d 65 2c 20 20 30 7d 2c 0a 20  ter_name,  0},. 
1ae60 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62      { "sqlite3_b
1ae70 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e  ind_parameter_in
1ae80 64 65 78 22 2c 20 20 74 65 73 74 5f 62 69 6e 64  dex",  test_bind
1ae90 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
1aea0 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  , 0},.     { "sq
1aeb0 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64  lite3_clear_bind
1aec0 69 6e 67 73 22 2c 20 20 20 20 20 20 20 20 74 65  ings",        te
1aed0 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67  st_clear_binding
1aee0 73 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73  s, 0},.     { "s
1aef0 71 6c 69 74 65 33 5f 73 6c 65 65 70 22 2c 20 20  qlite3_sleep",  
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1af10 65 73 74 5f 73 6c 65 65 70 2c 20 20 20 20 20 20  est_sleep,      
1af20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22      0},.     { "
1af30 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 22  sqlite3_errcode"
1af40 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1af50 74 65 73 74 5f 65 72 72 63 6f 64 65 20 20 20 20  test_errcode    
1af60 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
1af70 22 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 22  "sqlite3_errmsg"
1af80 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1af90 20 74 65 73 74 5f 65 72 72 6d 73 67 20 20 20 20   test_errmsg    
1afa0 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
1afb0 20 22 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67   "sqlite3_errmsg
1afc0 31 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  16",            
1afd0 20 20 74 65 73 74 5f 65 72 72 6d 73 67 31 36 20    test_errmsg16 
1afe0 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
1aff0 7b 20 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 22  { "sqlite3_open"
1b000 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1b010 20 20 20 74 65 73 74 5f 6f 70 65 6e 20 20 20 20     test_open    
1b020 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20        ,0 },.    
1b030 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e   { "sqlite3_open
1b040 31 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  16",            
1b050 20 20 20 20 74 65 73 74 5f 6f 70 65 6e 31 36 20      test_open16 
1b060 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
1b070 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6d    { "sqlite3_com
1b080 70 6c 65 74 65 31 36 22 2c 20 20 20 20 20 20 20  plete16",       
1b090 20 20 20 20 20 74 65 73 74 5f 63 6f 6d 70 6c 65       test_comple
1b0a0 74 65 31 36 20 20 20 20 2c 30 20 7d 2c 0a 0a 20  te16    ,0 },.. 
1b0b0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 70      { "sqlite3_p
1b0c0 72 65 70 61 72 65 22 2c 20 20 20 20 20 20 20 20  repare",        
1b0d0 20 20 20 20 20 20 20 74 65 73 74 5f 70 72 65 70         test_prep
1b0e0 61 72 65 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a  are       ,0 },.
1b0f0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1b100 70 72 65 70 61 72 65 31 36 22 2c 20 20 20 20 20  prepare16",     
1b110 20 20 20 20 20 20 20 20 74 65 73 74 5f 70 72 65          test_pre
1b120 70 61 72 65 31 36 20 20 20 20 20 2c 30 20 7d 2c  pare16     ,0 },
1b130 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1b140 5f 66 69 6e 61 6c 69 7a 65 22 2c 20 20 20 20 20  _finalize",     
1b150 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 66 69           test_fi
1b160 6e 61 6c 69 7a 65 20 20 20 20 20 20 2c 30 20 7d  nalize      ,0 }
1b170 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1b180 33 5f 72 65 73 65 74 22 2c 20 20 20 20 20 20 20  3_reset",       
1b190 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 72            test_r
1b1a0 65 73 65 74 20 20 20 20 20 20 20 20 20 2c 30 20  eset         ,0 
1b1b0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1b1c0 65 33 5f 65 78 70 69 72 65 64 22 2c 20 20 20 20  e3_expired",    
1b1d0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
1b1e0 65 78 70 69 72 65 64 20 20 20 20 20 20 20 2c 30  expired       ,0
1b1f0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1b200 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e  te3_transfer_bin
1b210 64 69 6e 67 73 22 2c 20 20 20 20 20 74 65 73 74  dings",     test
1b220 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 20 2c  _transfer_bind ,
1b230 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
1b240 69 74 65 33 5f 63 68 61 6e 67 65 73 22 2c 20 20  ite3_changes",  
1b250 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
1b260 74 5f 63 68 61 6e 67 65 73 20 20 20 20 20 20 20  t_changes       
1b270 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
1b280 6c 69 74 65 33 5f 73 74 65 70 22 2c 20 20 20 20  lite3_step",    
1b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
1b2a0 73 74 5f 73 74 65 70 20 20 20 20 20 20 20 20 20  st_step         
1b2b0 20 2c 30 20 7d 2c 0a 0a 20 20 20 20 20 7b 20 22   ,0 },..     { "
1b2c0 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f  sqlite3_release_
1b2d0 6d 65 6d 6f 72 79 22 2c 20 20 20 20 20 20 20 20  memory",        
1b2e0 74 65 73 74 5f 72 65 6c 65 61 73 65 5f 6d 65 6d  test_release_mem
1b2f0 6f 72 79 2c 20 20 20 20 20 30 7d 2c 0a 20 20 20  ory,     0},.   
1b300 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 73 6f 66    { "sqlite3_sof
1b310 74 5f 68 65 61 70 5f 6c 69 6d 69 74 22 2c 20 20  t_heap_limit",  
1b320 20 20 20 20 20 74 65 73 74 5f 73 6f 66 74 5f 68       test_soft_h
1b330 65 61 70 5f 6c 69 6d 69 74 2c 20 20 20 20 30 7d  eap_limit,    0}
1b340 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1b350 33 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65 6d 64  3_clear_tsd_memd
1b360 65 62 75 67 22 2c 20 20 20 20 74 65 73 74 5f 63  ebug",    test_c
1b370 6c 65 61 72 5f 74 73 64 5f 6d 65 6d 64 65 62 75  lear_tsd_memdebu
1b380 67 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73  g, 0},.     { "s
1b390 71 6c 69 74 65 33 5f 74 73 64 5f 72 65 6c 65 61  qlite3_tsd_relea
1b3a0 73 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 74  se",           t
1b3b0 65 73 74 5f 74 73 64 5f 72 65 6c 65 61 73 65 2c  est_tsd_release,
1b3c0 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
1b3d0 20 7b 20 22 73 71 6c 69 74 65 33 5f 74 68 72 65   { "sqlite3_thre
1b3e0 61 64 5f 63 6c 65 61 6e 75 70 22 2c 20 20 20 20  ad_cleanup",    
1b3f0 20 20 20 20 74 65 73 74 5f 74 68 72 65 61 64 5f      test_thread_
1b400 63 6c 65 61 6e 75 70 2c 20 20 20 20 20 30 7d 2c  cleanup,     0},
1b410 0a 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ..     { "sqlite
1b420 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  3_load_extension
1b430 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 6c  ",        test_l
1b440 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 2c 20 20  oad_extension,  
1b450 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73     0},.     { "s
1b460 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f  qlite3_enable_lo
1b470 61 64 5f 65 78 74 65 6e 73 69 6f 6e 22 2c 20 74  ad_extension", t
1b480 65 73 74 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 2c  est_enable_load,
1b490 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
1b4a0 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 78 74 65   { "sqlite3_exte
1b4b0 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65  nded_result_code
1b4c0 73 22 2c 20 74 65 73 74 5f 65 78 74 65 6e 64 65  s", test_extende
1b4d0 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 2c 20  d_result_codes, 
1b4e0 30 7d 2c 0a 0a 20 20 20 20 20 2f 2a 20 73 71 6c  0},..     /* sql
1b4f0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 2a 28 29 20  ite3_column_*() 
1b500 41 50 49 20 2a 2f 0a 20 20 20 20 20 7b 20 22 73  API */.     { "s
1b510 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
1b520 75 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 74  unt",          t
1b530 65 73 74 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  est_column_count
1b540 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
1b550 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75  sqlite3_data_cou
1b560 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  nt",            
1b570 74 65 73 74 5f 64 61 74 61 5f 63 6f 75 6e 74 20  test_data_count 
1b580 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
1b590 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
1b5a0 74 79 70 65 22 2c 20 20 20 20 20 20 20 20 20 20  type",          
1b5b0 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 74 79 70   test_column_typ
1b5c0 65 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b  e   ,0 },.     {
1b5d0 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
1b5e0 5f 62 6c 6f 62 22 2c 20 20 20 20 20 20 20 20 20  _blob",         
1b5f0 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 62 6c    test_column_bl
1b600 6f 62 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20  ob   ,0 },.     
1b610 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
1b620 6e 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20 20 20  n_double",      
1b630 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64     test_column_d
1b640 6f 75 62 6c 65 20 2c 30 20 7d 2c 0a 20 20 20 20  ouble ,0 },.    
1b650 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
1b660 6d 6e 5f 69 6e 74 36 34 22 2c 20 20 20 20 20 20  mn_int64",      
1b670 20 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f      test_column_
1b680 69 6e 74 36 34 20 20 2c 30 20 7d 2c 0a 20 20 20  int64  ,0 },.   
1b690 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
1b6a0 75 6d 6e 5f 74 65 78 74 22 2c 20 20 20 20 20 20  umn_text",      
1b6b0 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c   test_stmt_utf8,
1b6c0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
1b6d0 5f 74 65 78 74 20 20 20 20 20 20 7d 2c 0a 20 20  _text      },.  
1b6e0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
1b6f0 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 22 2c 20  lumn_decltype", 
1b700 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38    test_stmt_utf8
1b710 2c 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ,  sqlite3_colum
1b720 6e 5f 64 65 63 6c 74 79 70 65 20 20 7d 2c 0a 20  n_decltype  },. 
1b730 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
1b740 6f 6c 75 6d 6e 5f 6e 61 6d 65 22 2c 20 20 20 20  olumn_name",    
1b750 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66     test_stmt_utf
1b760 38 2c 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  8,  sqlite3_colu
1b770 6d 6e 5f 6e 61 6d 65 20 20 20 20 20 20 7d 2c 0a  mn_name      },.
1b780 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1b790 63 6f 6c 75 6d 6e 5f 69 6e 74 22 2c 20 20 20 20  column_int",    
1b7a0 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e      test_stmt_in
1b7b0 74 2c 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c  t,   sqlite3_col
1b7c0 75 6d 6e 5f 69 6e 74 20 20 20 20 20 20 20 7d 2c  umn_int       },
1b7d0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1b7e0 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 22 2c 20  _column_bytes", 
1b7f0 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 69       test_stmt_i
1b800 6e 74 2c 20 20 20 73 71 6c 69 74 65 33 5f 63 6f  nt,   sqlite3_co
1b810 6c 75 6d 6e 5f 62 79 74 65 73 20 20 20 20 20 7d  lumn_bytes     }
1b820 2c 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ,.#ifdef SQLITE_
1b830 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45  ENABLE_COLUMN_ME
1b840 54 41 44 41 54 41 0a 7b 20 22 73 71 6c 69 74 65  TADATA.{ "sqlite
1b850 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
1b860 65 5f 6e 61 6d 65 22 2c 20 74 65 73 74 5f 73 74  e_name", test_st
1b870 6d 74 5f 75 74 66 38 2c 20 73 71 6c 69 74 65 33  mt_utf8, sqlite3
1b880 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
1b890 5f 6e 61 6d 65 7d 2c 0a 7b 20 22 73 71 6c 69 74  _name},.{ "sqlit
1b8a0 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f  e3_column_table_
1b8b0 6e 61 6d 65 22 2c 20 74 65 73 74 5f 73 74 6d 74  name", test_stmt
1b8c0 5f 75 74 66 38 2c 20 73 71 6c 69 74 65 33 5f 63  _utf8, sqlite3_c
1b8d0 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
1b8e0 7d 2c 0a 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f  },.{ "sqlite3_co
1b8f0 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
1b900 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66  ", test_stmt_utf
1b910 38 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  8, sqlite3_colum
1b920 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 7d 2c 0a  n_origin_name},.
1b930 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
1b940 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
1b950 36 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  6.     { "sqlite
1b960 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36  3_column_bytes16
1b970 22 2c 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f  ",    test_stmt_
1b980 69 6e 74 2c 20 20 20 73 71 6c 69 74 65 33 5f 63  int,   sqlite3_c
1b990 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20 20 20  olumn_bytes16   
1b9a0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1b9b0 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36  e3_column_text16
1b9c0 22 2c 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74  ",     test_stmt
1b9d0 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65 33 5f  _utf16, sqlite3_
1b9e0 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 20 20 20  column_text16   
1b9f0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1ba00 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
1ba10 79 70 65 31 36 22 2c 20 74 65 73 74 5f 73 74 6d  ype16", test_stm
1ba20 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65 33  t_utf16, sqlite3
1ba30 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
1ba40 31 36 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  16},.     { "sql
1ba50 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
1ba60 31 36 22 2c 20 20 20 20 20 74 65 73 74 5f 73 74  16",     test_st
1ba70 6d 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65  mt_utf16, sqlite
1ba80 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20  3_column_name16 
1ba90 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61 64     },.     { "ad
1baa0 64 5f 61 6c 69 67 6e 6d 65 6e 74 5f 74 65 73 74  d_alignment_test
1bab0 5f 63 6f 6c 6c 61 74 69 6f 6e 73 22 2c 20 61 64  _collations", ad
1bac0 64 5f 61 6c 69 67 6e 6d 65 6e 74 5f 74 65 73 74  d_alignment_test
1bad0 5f 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 30 20 20  _collations, 0  
1bae0 20 20 20 20 7d 2c 0a 23 69 66 64 65 66 20 53 51      },.#ifdef SQ
1baf0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
1bb00 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 7b 22 73 71  MN_METADATA.{"sq
1bb10 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
1bb20 61 62 61 73 65 5f 6e 61 6d 65 31 36 22 2c 0a 20  abase_name16",. 
1bb30 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36   test_stmt_utf16
1bb40 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  , sqlite3_column
1bb50 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36  _database_name16
1bb60 7d 2c 0a 7b 22 73 71 6c 69 74 65 33 5f 63 6f 6c  },.{"sqlite3_col
1bb70 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36  umn_table_name16
1bb80 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66  ", test_stmt_utf
1bb90 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  16, sqlite3_colu
1bba0 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 7d  mn_table_name16}
1bbb0 2c 0a 7b 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ,.{"sqlite3_colu
1bbc0 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31 36  mn_origin_name16
1bbd0 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66  ", test_stmt_utf
1bbe0 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  16, sqlite3_colu
1bbf0 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31 36  mn_origin_name16
1bc00 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  },.#endif.#endif
1bc10 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1bc20 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 22  _global_recover"
1bc30 2c 20 20 20 20 74 65 73 74 5f 67 6c 6f 62 61 6c  ,    test_global
1bc40 5f 72 65 63 6f 76 65 72 2c 20 30 20 20 20 7d 2c  _recover, 0   },
1bc50 0a 20 20 20 20 20 7b 20 22 77 6f 72 6b 69 6e 67  .     { "working
1bc60 5f 36 34 62 69 74 5f 69 6e 74 22 2c 20 20 20 20  _64bit_int",    
1bc70 20 20 20 20 20 77 6f 72 6b 69 6e 67 5f 36 34 62       working_64b
1bc80 69 74 5f 69 6e 74 2c 20 20 20 30 20 20 20 7d 2c  it_int,   0   },
1bc90 0a 0a 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69  ..     /* Functi
1bca0 6f 6e 73 20 66 72 6f 6d 20 6f 73 2e 68 20 2a 2f  ons from os.h */
1bcb0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1bcc0 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 20 20 20 20  OMIT_DISKIO.    
1bcd0 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 4f 70 65   { "sqlite3OsOpe
1bce0 6e 52 65 61 64 57 72 69 74 65 22 2c 74 65 73 74  nReadWrite",test
1bcf0 5f 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65  _sqlite3OsOpenRe
1bd00 61 64 57 72 69 74 65 2c 20 30 20 7d 2c 0a 20 20  adWrite, 0 },.  
1bd10 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 43     { "sqlite3OsC
1bd20 6c 6f 73 65 22 2c 20 20 20 20 20 20 20 20 74 65  lose",        te
1bd30 73 74 5f 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73  st_sqlite3OsClos
1bd40 65 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22  e, 0 },.     { "
1bd50 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 22 2c 20  sqlite3OsLock", 
1bd60 20 20 20 20 20 20 20 20 74 65 73 74 5f 73 71 6c          test_sql
1bd70 69 74 65 33 4f 73 4c 6f 63 6b 2c 20 30 20 7d 2c  ite3OsLock, 0 },
1bd80 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1bd90 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 22 2c  OsTempFileName",
1bda0 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 54   test_sqlite3OsT
1bdb0 65 6d 70 46 69 6c 65 4e 61 6d 65 2c 20 30 20 7d  empFileName, 0 }
1bdc0 2c 0a 20 20 20 0a 20 20 20 20 20 2f 2a 20 43 75  ,.   .     /* Cu
1bdd0 73 74 6f 6d 20 74 65 73 74 20 69 6e 74 65 72 66  stom test interf
1bde0 61 63 65 73 20 2a 2f 0a 20 20 20 20 20 7b 20 22  aces */.     { "
1bdf0 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 22  sqlite3OsUnlock"
1be00 2c 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 73  ,         test_s
1be10 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 2c 20  qlite3OsUnlock, 
1be20 30 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  0    },.#endif.#
1be30 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1be40 49 54 5f 55 54 46 31 36 0a 20 20 20 20 20 7b 20  IT_UTF16.     { 
1be50 22 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74  "add_test_collat
1be60 65 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f  e",        test_
1be70 63 6f 6c 6c 61 74 65 2c 20 30 20 20 20 20 20 20  collate, 0      
1be80 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
1be90 22 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74  "add_test_collat
1bea0 65 5f 6e 65 65 64 65 64 22 2c 20 74 65 73 74 5f  e_needed", test_
1beb0 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 2c 20  collate_needed, 
1bec0 30 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20  0     },.     { 
1bed0 22 61 64 64 5f 74 65 73 74 5f 66 75 6e 63 74 69  "add_test_functi
1bee0 6f 6e 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f  on",       test_
1bef0 66 75 6e 63 74 69 6f 6e 2c 20 30 20 20 20 20 20  function, 0     
1bf00 20 20 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a        },.#endif.
1bf10 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
1bf20 4d 44 45 42 55 47 0a 20 20 20 20 20 7b 20 22 73  MDEBUG.     { "s
1bf30 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74  qlite_malloc_out
1bf40 73 74 61 6e 64 69 6e 67 22 2c 20 73 71 6c 69 74  standing", sqlit
1bf50 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e  e_malloc_outstan
1bf60 64 69 6e 67 2c 20 30 7d 2c 0a 23 65 6e 64 69 66  ding, 0},.#endif
1bf70 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1bf80 5f 74 65 73 74 5f 65 72 72 73 74 72 22 2c 20 20  _test_errstr",  
1bf90 20 20 20 74 65 73 74 5f 65 72 72 73 74 72 2c 20     test_errstr, 
1bfa0 30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c  0             },
1bfb0 0a 20 20 20 20 20 7b 20 22 74 63 6c 5f 76 61 72  .     { "tcl_var
1bfc0 69 61 62 6c 65 5f 74 79 70 65 22 2c 20 20 20 20  iable_type",    
1bfd0 20 20 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f     tcl_variable_
1bfe0 74 79 70 65 2c 20 30 20 20 20 20 20 20 20 7d 2c  type, 0       },
1bff0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1c000 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
1c010 45 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  E.     { "sqlite
1c020 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f  3_enable_shared_
1c030 63 61 63 68 65 22 2c 20 74 65 73 74 5f 65 6e 61  cache", test_ena
1c040 62 6c 65 5f 73 68 61 72 65 64 2c 20 30 20 20 7d  ble_shared, 0  }
1c050 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20  ,.#endif.     { 
1c060 22 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73  "sqlite3_libvers
1c070 69 6f 6e 5f 6e 75 6d 62 65 72 22 2c 20 74 65 73  ion_number", tes
1c080 74 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d  t_libversion_num
1c090 62 65 72 2c 20 30 20 20 7d 2c 0a 23 69 66 64 65  ber, 0  },.#ifde
1c0a0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1c0b0 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a  COLUMN_METADATA.
1c0c0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1c0d0 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74  table_column_met
1c0e0 61 64 61 74 61 22 2c 20 74 65 73 74 5f 74 61 62  adata", test_tab
1c0f0 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
1c100 74 61 2c 20 30 20 20 7d 2c 0a 23 65 6e 64 69 66  ta, 0  },.#endif
1c110 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69 63 20 69  .  };.  static i
1c120 6e 74 20 62 69 74 6d 61 73 6b 5f 73 69 7a 65 20  nt bitmask_size 
1c130 3d 20 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  = sizeof(Bitmask
1c140 29 2a 38 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  )*8;.  int i;.  
1c150 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
1c160 65 33 5f 6f 73 5f 74 72 61 63 65 3b 0a 20 20 65  e3_os_trace;.  e
1c170 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
1c180 33 5f 77 68 65 72 65 5f 74 72 61 63 65 3b 0a 20  3_where_trace;. 
1c190 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
1c1a0 74 65 33 5f 73 79 6e 63 5f 63 6f 75 6e 74 2c 20  te3_sync_count, 
1c1b0 73 71 6c 69 74 65 33 5f 66 75 6c 6c 73 79 6e 63  sqlite3_fullsync
1c1c0 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e  _count;.  extern
1c1d0 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65   int sqlite3_ope
1c1e0 6e 74 65 6d 70 5f 63 6f 75 6e 74 3b 0a 20 20 65  ntemp_count;.  e
1c1f0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
1c200 33 5f 6d 65 6d 55 73 65 64 3b 0a 20 20 65 78 74  3_memUsed;.  ext
1c210 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
1c220 6d 61 6c 6c 6f 63 5f 69 64 3b 0a 20 20 65 78 74  malloc_id;.  ext
1c230 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
1c240 6d 65 6d 4d 61 78 3b 0a 20 20 65 78 74 65 72 6e  memMax;.  extern
1c250 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6c 69 6b   int sqlite3_lik
1c260 65 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72  e_count;.  exter
1c270 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 74 73  n int sqlite3_ts
1c280 64 5f 63 6f 75 6e 74 3b 0a 23 69 66 20 4f 53 5f  d_count;.#if OS_
1c290 55 4e 49 58 20 26 26 20 64 65 66 69 6e 65 64 28  UNIX && defined(
1c2a0 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20  SQLITE_TEST) && 
1c2b0 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41  defined(THREADSA
1c2c0 46 45 29 20 26 26 20 54 48 52 45 41 44 53 41 46  FE) && THREADSAF
1c2d0 45 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 74  E.  extern int t
1c2e0 68 72 65 61 64 73 4f 76 65 72 72 69 64 65 45 61  hreadsOverrideEa
1c2f0 63 68 4f 74 68 65 72 73 4c 6f 63 6b 73 3b 0a 23  chOthersLocks;.#
1c300 65 6e 64 69 66 0a 23 69 66 20 4f 53 5f 57 49 4e  endif.#if OS_WIN
1c310 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
1c320 6c 69 74 65 33 5f 6f 73 5f 74 79 70 65 3b 0a 23  lite3_os_type;.#
1c330 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
1c340 49 54 45 5f 44 45 42 55 47 0a 20 20 65 78 74 65  ITE_DEBUG.  exte
1c350 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 76  rn int sqlite3_v
1c360 64 62 65 5f 61 64 64 6f 70 5f 74 72 61 63 65 3b  dbe_addop_trace;
1c370 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
1c380 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 65 78 74  QLITE_TEST.  ext
1c390 65 72 6e 20 63 68 61 72 20 73 71 6c 69 74 65 33  ern char sqlite3
1c3a0 5f 71 75 65 72 79 5f 70 6c 61 6e 5b 5d 3b 0a 20  _query_plan[];. 
1c3b0 20 73 74 61 74 69 63 20 63 68 61 72 20 2a 71 75   static char *qu
1c3c0 65 72 79 5f 70 6c 61 6e 20 3d 20 73 71 6c 69 74  ery_plan = sqlit
1c3d0 65 33 5f 71 75 65 72 79 5f 70 6c 61 6e 3b 0a 23  e3_query_plan;.#
1c3e0 65 6e 64 69 66 0a 0a 20 20 66 6f 72 28 69 3d 30  endif..  for(i=0
1c3f0 3b 20 69 3c 73 69 7a 65 6f 66 28 61 43 6d 64 29  ; i<sizeof(aCmd)
1c400 2f 73 69 7a 65 6f 66 28 61 43 6d 64 5b 30 5d 29  /sizeof(aCmd[0])
1c410 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f  ; i++){.    Tcl_
1c420 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 69 6e  CreateCommand(in
1c430 74 65 72 70 2c 20 61 43 6d 64 5b 69 5d 2e 7a 4e  terp, aCmd[i].zN
1c440 61 6d 65 2c 20 61 43 6d 64 5b 69 5d 2e 78 50 72  ame, aCmd[i].xPr
1c450 6f 63 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20  oc, 0, 0);.  }. 
1c460 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65   for(i=0; i<size
1c470 6f 66 28 61 4f 62 6a 43 6d 64 29 2f 73 69 7a 65  of(aObjCmd)/size
1c480 6f 66 28 61 4f 62 6a 43 6d 64 5b 30 5d 29 3b 20  of(aObjCmd[0]); 
1c490 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f 43 72  i++){.    Tcl_Cr
1c4a0 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69  eateObjCommand(i
1c4b0 6e 74 65 72 70 2c 20 61 4f 62 6a 43 6d 64 5b 69  nterp, aObjCmd[i
1c4c0 5d 2e 7a 4e 61 6d 65 2c 20 0a 20 20 20 20 20 20  ].zName, .      
1c4d0 20 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 78 50 72    aObjCmd[i].xPr
1c4e0 6f 63 2c 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 63  oc, aObjCmd[i].c
1c4f0 6c 69 65 6e 74 44 61 74 61 2c 20 30 29 3b 0a 20  lientData, 0);. 
1c500 20 7d 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72   }.  Tcl_LinkVar
1c510 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1c520 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 22 2c 20  _search_count", 
1c530 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1c540 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
1c550 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  unt, TCL_LINK_IN
1c560 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  T);.  Tcl_LinkVa
1c570 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
1c580 65 5f 73 6f 72 74 5f 63 6f 75 6e 74 22 2c 20 0a  e_sort_count", .
1c590 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
1c5a0 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
1c5b0 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
1c5c0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1c5d0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6c  nterp, "sqlite_l
1c5e0 69 6b 65 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20  ike_count", .   
1c5f0 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
1c600 65 33 5f 6c 69 6b 65 5f 63 6f 75 6e 74 2c 20 54  e3_like_count, T
1c610 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
1c620 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1c630 72 70 2c 20 22 73 71 6c 69 74 65 5f 69 6e 74 65  rp, "sqlite_inte
1c640 72 72 75 70 74 5f 63 6f 75 6e 74 22 2c 20 0a 20  rrupt_count", . 
1c650 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
1c660 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
1c670 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  ount, TCL_LINK_I
1c680 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
1c690 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1c6a0 74 65 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75  te_open_file_cou
1c6b0 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61  nt", .      (cha
1c6c0 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 70 65 6e  r*)&sqlite3_open
1c6d0 5f 66 69 6c 65 5f 63 6f 75 6e 74 2c 20 54 43 4c  _file_count, TCL
1c6e0 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63  _LINK_INT);.  Tc
1c6f0 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
1c700 2c 20 22 73 71 6c 69 74 65 5f 63 75 72 72 65 6e  , "sqlite_curren
1c710 74 5f 74 69 6d 65 22 2c 20 0a 20 20 20 20 20 20  t_time", .      
1c720 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
1c730 63 75 72 72 65 6e 74 5f 74 69 6d 65 2c 20 54 43  current_time, TC
1c740 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54  L_LINK_INT);.  T
1c750 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
1c760 70 2c 20 22 73 71 6c 69 74 65 5f 6f 73 5f 74 72  p, "sqlite_os_tr
1c770 61 63 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61  ace",.      (cha
1c780 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 73 5f 74  r*)&sqlite3_os_t
1c790 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  race, TCL_LINK_I
1c7a0 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
1c7b0 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1c7c0 74 65 33 5f 74 73 64 5f 63 6f 75 6e 74 22 2c 0a  te3_tsd_count",.
1c7d0 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
1c7e0 6c 69 74 65 33 5f 74 73 64 5f 63 6f 75 6e 74 2c  lite3_tsd_count,
1c7f0 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
1c800 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1c810 4d 49 54 5f 55 54 46 31 36 0a 20 20 54 63 6c 5f  MIT_UTF16.  Tcl_
1c820 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
1c830 22 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e  "unaligned_strin
1c840 67 5f 63 6f 75 6e 74 65 72 22 2c 0a 20 20 20 20  g_counter",.    
1c850 20 20 28 63 68 61 72 2a 29 26 75 6e 61 6c 69 67    (char*)&unalig
1c860 6e 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75 6e 74  ned_string_count
1c870 65 72 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  er, TCL_LINK_INT
1c880 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 4f 53  );.#endif.#if OS
1c890 5f 55 4e 49 58 20 26 26 20 64 65 66 69 6e 65 64  _UNIX && defined
1c8a0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26  (SQLITE_TEST) &&
1c8b0 20 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53   defined(THREADS
1c8c0 41 46 45 29 20 26 26 20 54 48 52 45 41 44 53 41  AFE) && THREADSA
1c8d0 46 45 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  FE.  Tcl_LinkVar
1c8e0 28 69 6e 74 65 72 70 2c 20 22 74 68 72 65 61 64  (interp, "thread
1c8f0 73 4f 76 65 72 72 69 64 65 45 61 63 68 4f 74 68  sOverrideEachOth
1c900 65 72 73 4c 6f 63 6b 73 22 2c 0a 20 20 20 20 20  ersLocks",.     
1c910 20 28 63 68 61 72 2a 29 26 74 68 72 65 61 64 73   (char*)&threads
1c920 4f 76 65 72 72 69 64 65 45 61 63 68 4f 74 68 65  OverrideEachOthe
1c930 72 73 4c 6f 63 6b 73 2c 20 54 43 4c 5f 4c 49 4e  rsLocks, TCL_LIN
1c940 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23  K_INT);.#endif.#
1c950 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1c960 49 54 5f 55 54 46 31 36 0a 20 20 54 63 6c 5f 4c  IT_UTF16.  Tcl_L
1c970 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
1c980 73 71 6c 69 74 65 5f 6c 61 73 74 5f 6e 65 65 64  sqlite_last_need
1c990 65 64 5f 63 6f 6c 6c 61 74 69 6f 6e 22 2c 0a 20  ed_collation",. 
1c9a0 20 20 20 20 20 28 63 68 61 72 2a 29 26 70 7a 4e       (char*)&pzN
1c9b0 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 2c 20  eededCollation, 
1c9c0 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 7c  TCL_LINK_STRING|
1c9d0 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e  TCL_LINK_READ_ON
1c9e0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  LY);.#endif.#ifd
1c9f0 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
1ca00 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  UG.  Tcl_LinkVar
1ca10 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1ca20 5f 6d 61 6c 6c 6f 63 5f 69 64 22 2c 0a 20 20 20  _malloc_id",.   
1ca30 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
1ca40 65 33 5f 6d 61 6c 6c 6f 63 5f 69 64 2c 20 54 43  e3_malloc_id, TC
1ca50 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a  L_LINK_STRING);.
1ca60 23 65 6e 64 69 66 0a 23 69 66 20 4f 53 5f 57 49  #endif.#if OS_WI
1ca70 4e 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  N.  Tcl_LinkVar(
1ca80 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1ca90 6f 73 5f 74 79 70 65 22 2c 0a 20 20 20 20 20 20  os_type",.      
1caa0 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
1cab0 6f 73 5f 74 79 70 65 2c 20 54 43 4c 5f 4c 49 4e  os_type, TCL_LIN
1cac0 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23  K_INT);.#endif.#
1cad0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
1cae0 54 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  T.  Tcl_LinkVar(
1caf0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1cb00 71 75 65 72 79 5f 70 6c 61 6e 22 2c 0a 20 20 20  query_plan",.   
1cb10 20 20 20 28 63 68 61 72 2a 29 26 71 75 65 72 79     (char*)&query
1cb20 5f 70 6c 61 6e 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  _plan, TCL_LINK_
1cb30 53 54 52 49 4e 47 7c 54 43 4c 5f 4c 49 4e 4b 5f  STRING|TCL_LINK_
1cb40 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  READ_ONLY);.#end
1cb50 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
1cb60 5f 44 45 42 55 47 0a 20 20 54 63 6c 5f 4c 69 6e  _DEBUG.  Tcl_Lin
1cb70 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1cb80 6c 69 74 65 5f 61 64 64 6f 70 5f 74 72 61 63 65  lite_addop_trace
1cb90 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
1cba0 26 73 71 6c 69 74 65 33 5f 76 64 62 65 5f 61 64  &sqlite3_vdbe_ad
1cbb0 64 6f 70 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c  dop_trace, TCL_L
1cbc0 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
1cbd0 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
1cbe0 22 73 71 6c 69 74 65 5f 77 68 65 72 65 5f 74 72  "sqlite_where_tr
1cbf0 61 63 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61  ace",.      (cha
1cc00 72 2a 29 26 73 71 6c 69 74 65 33 5f 77 68 65 72  r*)&sqlite3_wher
1cc10 65 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e  e_trace, TCL_LIN
1cc20 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23  K_INT);.#endif.#
1cc30 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
1cc40 44 45 42 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b  DEBUG.  Tcl_Link
1cc50 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
1cc60 69 74 65 5f 6d 65 6d 75 73 65 64 22 2c 0a 20 20  ite_memused",.  
1cc70 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
1cc80 74 65 33 5f 6d 65 6d 55 73 65 64 2c 20 54 43 4c  te3_memUsed, TCL
1cc90 5f 4c 49 4e 4b 5f 49 4e 54 20 7c 20 54 43 4c 5f  _LINK_INT | TCL_
1cca0 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b  LINK_READ_ONLY);
1ccb0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1ccc0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d  nterp, "sqlite_m
1ccd0 65 6d 6d 61 78 22 2c 0a 20 20 20 20 20 20 28 63  emmax",.      (c
1cce0 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d 65  har*)&sqlite3_me
1ccf0 6d 4d 61 78 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  mMax, TCL_LINK_I
1cd00 4e 54 20 7c 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45  NT | TCL_LINK_RE
1cd10 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AD_ONLY);.#endif
1cd20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1cd30 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 20 20 54 63  OMIT_DISKIO.  Tc
1cd40 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
1cd50 2c 20 22 73 71 6c 69 74 65 5f 6f 70 65 6e 74 65  , "sqlite_opente
1cd60 6d 70 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20  mp_count",.     
1cd70 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
1cd80 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 2c  _opentemp_count,
1cd90 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
1cda0 23 65 6e 64 69 66 0a 20 20 54 63 6c 5f 4c 69 6e  #endif.  Tcl_Lin
1cdb0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1cdc0 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64  lite_static_bind
1cdd0 5f 76 61 6c 75 65 22 2c 0a 20 20 20 20 20 20 28  _value",.      (
1cde0 63 68 61 72 2a 29 26 73 71 6c 69 74 65 5f 73 74  char*)&sqlite_st
1cdf0 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 2c  atic_bind_value,
1ce00 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47   TCL_LINK_STRING
1ce10 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
1ce20 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1ce30 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 6e 62 79  _static_bind_nby
1ce40 74 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  te",.      (char
1ce50 2a 29 26 73 71 6c 69 74 65 5f 73 74 61 74 69 63  *)&sqlite_static
1ce60 5f 62 69 6e 64 5f 6e 62 79 74 65 2c 20 54 43 4c  _bind_nbyte, TCL
1ce70 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63  _LINK_INT);.  Tc
1ce80 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
1ce90 2c 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 64  , "sqlite_temp_d
1cea0 69 72 65 63 74 6f 72 79 22 2c 0a 20 20 20 20 20  irectory",.     
1ceb0 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
1cec0 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 2c  _temp_directory,
1ced0 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47   TCL_LINK_STRING
1cee0 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
1cef0 28 69 6e 74 65 72 70 2c 20 22 62 69 74 6d 61 73  (interp, "bitmas
1cf00 6b 5f 73 69 7a 65 22 2c 0a 20 20 20 20 20 20 28  k_size",.      (
1cf10 63 68 61 72 2a 29 26 62 69 74 6d 61 73 6b 5f 73  char*)&bitmask_s
1cf20 69 7a 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  ize, TCL_LINK_IN
1cf30 54 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f  T|TCL_LINK_READ_
1cf40 4f 4e 4c 59 29 3b 0a 23 69 66 20 4f 53 5f 55 4e  ONLY);.#if OS_UN
1cf50 49 58 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  IX.  Tcl_LinkVar
1cf60 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1cf70 5f 73 79 6e 63 5f 63 6f 75 6e 74 22 2c 0a 20 20  _sync_count",.  
1cf80 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
1cf90 74 65 33 5f 73 79 6e 63 5f 63 6f 75 6e 74 2c 20  te3_sync_count, 
1cfa0 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20  TCL_LINK_INT);. 
1cfb0 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1cfc0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 66 75 6c  erp, "sqlite_ful
1cfd0 6c 73 79 6e 63 5f 63 6f 75 6e 74 22 2c 0a 20 20  lsync_count",.  
1cfe0 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
1cff0 74 65 33 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f 75  te3_fullsync_cou
1d000 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  nt, TCL_LINK_INT
1d010 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 4f 53 5f  );.#endif /* OS_
1d020 55 4e 49 58 20 2a 2f 0a 20 20 73 65 74 5f 6f 70  UNIX */.  set_op
1d030 74 69 6f 6e 73 28 69 6e 74 65 72 70 29 3b 0a 0a  tions(interp);..
1d040 20 20 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54    {.#ifdef SQLIT
1d050 45 5f 44 45 42 55 47 0a 20 20 20 20 65 78 74 65  E_DEBUG.    exte
1d060 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73  rn int sqlite3_s
1d070 68 61 72 65 64 5f 63 61 63 68 65 5f 72 65 70 6f  hared_cache_repo
1d080 72 74 28 76 6f 69 64 20 2a 2c 20 54 63 6c 5f 49  rt(void *, Tcl_I
1d090 6e 74 65 72 70 20 2a 2c 0a 20 20 20 20 20 20 20  nterp *,.       
1d0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
1d0c0 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54  , Tcl_Obj *CONST
1d0d0 5b 5d 29 3b 0a 20 20 20 20 54 63 6c 5f 43 72 65  []);.    Tcl_Cre
1d0e0 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e  ateObjCommand(in
1d0f0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 68  terp, "sqlite_sh
1d100 61 72 65 64 5f 63 61 63 68 65 5f 72 65 70 6f 72  ared_cache_repor
1d110 74 22 2c 20 0a 20 20 20 20 20 20 20 20 73 71 6c  t", .        sql
1d120 69 74 65 33 5f 73 68 61 72 65 64 5f 63 61 63 68  ite3_shared_cach
1d130 65 5f 72 65 70 6f 72 74 2c 20 30 2c 20 30 29 3b  e_report, 0, 0);
1d140 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 72 65  .#endif.  }.  re
1d150 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a     turn TCL_OK;.}.