/ Hex Artifact Content
Login

Artifact 535294d7f21a4127082c4f7a57f225482df9cc36:


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 31 37 20 32 30 30 36 2f 30 37 2f 30   1.217 2006/07/0
0240: 36 20 31 30 3a 35 39 3a 35 38 20 64 72 68 20 45  6 10:59:58 drh E
0250: 78 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  xp $.*/.#include
0260: 20 22 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23   "sqliteInt.h".#
0270: 69 6e 63 6c 75 64 65 20 22 74 63 6c 2e 68 22 0a  include "tcl.h".
0280: 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a  #include "os.h".
0290: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
02a0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
02b0: 72 69 6e 67 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 54  ring.h>../*.** T
02c0: 68 69 73 20 69 73 20 61 20 63 6f 70 79 20 6f 66  his is a copy of
02d0: 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
02e0: 6f 66 20 74 68 65 20 53 71 6c 69 74 65 44 62 20  of the SqliteDb 
02f0: 73 74 72 75 63 74 75 72 65 20 69 6e 20 0a 2a 2a  structure in .**
0300: 20 74 63 6c 73 71 6c 69 74 65 2e 63 2e 20 20 57   tclsqlite.c.  W
0310: 65 20 6e 65 65 64 20 69 74 20 68 65 72 65 20 73  e need it here s
0320: 6f 20 74 68 61 74 20 74 68 65 20 67 65 74 5f 73  o that the get_s
0330: 71 6c 69 74 65 5f 70 6f 69 6e 74 65 72 20 72 6f  qlite_pointer ro
0340: 75 74 69 6e 65 0a 2a 2a 20 63 61 6e 20 65 78 74  utine.** can ext
0350: 72 61 63 74 20 74 68 65 20 73 71 6c 69 74 65 33  ract the sqlite3
0360: 2a 20 70 6f 69 6e 74 65 72 20 66 72 6f 6d 20 61  * pointer from a
0370: 6e 20 65 78 69 73 74 69 6e 67 20 54 63 6c 20 53  n existing Tcl S
0380: 51 4c 69 74 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  QLite.** connect
0390: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
03a0: 71 6c 69 74 65 44 62 20 7b 0a 20 20 73 71 6c 69  qliteDb {.  sqli
03b0: 74 65 33 20 2a 64 62 3b 0a 7d 3b 0a 0a 2f 2a 0a  te3 *db;.};../*.
03c0: 2a 2a 20 41 20 54 43 4c 20 63 6f 6d 6d 61 6e 64  ** A TCL command
03d0: 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68   that returns th
03e0: 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
03f0: 20 73 71 6c 69 74 65 2a 20 70 6f 69 6e 74 65 72   sqlite* pointer
0400: 0a 2a 2a 20 66 6f 72 20 61 6e 20 73 71 6c 69 74  .** for an sqlit
0410: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 6e 73  e connection ins
0420: 74 61 6e 63 65 2e 20 20 42 61 64 20 74 68 69 6e  tance.  Bad thin
0430: 67 73 20 68 61 70 70 65 6e 20 69 66 20 74 68 65  gs happen if the
0440: 0a 2a 2a 20 69 6e 70 75 74 20 69 73 20 6e 6f 74  .** input is not
0450: 20 61 6e 20 73 71 6c 69 74 65 20 63 6f 6e 6e 65   an sqlite conne
0460: 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63  ction..*/.static
0470: 20 69 6e 74 20 67 65 74 5f 73 71 6c 69 74 65 5f   int get_sqlite_
0480: 70 6f 69 6e 74 65 72 28 0a 20 20 76 6f 69 64 20  pointer(.  void 
0490: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
04a0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
04b0: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
04c0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
04d0: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 74 72   objv[].){.  str
04e0: 75 63 74 20 53 71 6c 69 74 65 44 62 20 2a 70 3b  uct SqliteDb *p;
04f0: 0a 20 20 54 63 6c 5f 43 6d 64 49 6e 66 6f 20 63  .  Tcl_CmdInfo c
0500: 6d 64 49 6e 66 6f 3b 0a 20 20 63 68 61 72 20 7a  mdInfo;.  char z
0510: 42 75 66 5b 31 30 30 5d 3b 0a 20 20 69 66 28 20  Buf[100];.  if( 
0520: 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
0530: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
0540: 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
0550: 20 22 53 51 4c 49 54 45 2d 43 4f 4e 4e 45 43 54   "SQLITE-CONNECT
0560: 49 4f 4e 22 29 3b 0a 20 20 20 20 72 65 74 75 72  ION");.    retur
0570: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
0580: 0a 20 20 69 66 28 20 21 54 63 6c 5f 47 65 74 43  .  if( !Tcl_GetC
0590: 6f 6d 6d 61 6e 64 49 6e 66 6f 28 69 6e 74 65 72  ommandInfo(inter
05a0: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
05b0: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 63 6d 64 49  (objv[1]), &cmdI
05c0: 6e 66 6f 29 20 29 7b 0a 20 20 20 20 54 63 6c 5f  nfo) ){.    Tcl_
05d0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
05e0: 65 72 70 2c 20 22 63 6f 6d 6d 61 6e 64 20 6e 6f  erp, "command no
05f0: 74 20 66 6f 75 6e 64 3a 20 22 2c 0a 20 20 20 20  t found: ",.    
0600: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
0610: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 28  ring(objv[1]), (
0620: 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 65  char*)0);.    re
0630: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
0640: 20 20 7d 0a 20 20 70 20 3d 20 28 73 74 72 75 63    }.  p = (struc
0650: 74 20 53 71 6c 69 74 65 44 62 2a 29 63 6d 64 49  t SqliteDb*)cmdI
0660: 6e 66 6f 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74  nfo.objClientDat
0670: 61 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75  a;.  sprintf(zBu
0680: 66 2c 20 22 25 70 22 2c 20 70 2d 3e 64 62 29 3b  f, "%p", p->db);
0690: 0a 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28 7a  .  if( strncmp(z
06a0: 42 75 66 2c 22 30 78 22 2c 32 29 20 29 7b 0a 20  Buf,"0x",2) ){. 
06b0: 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c     sprintf(zBuf,
06c0: 20 22 30 78 25 70 22 2c 20 70 2d 3e 64 62 29 3b   "0x%p", p->db);
06d0: 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e  .  }.  Tcl_Appen
06e0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
06f0: 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75  zBuf, 0);.  retu
0700: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 63 6f  rn TCL_OK;.}..co
0710: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
0720: 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65 28 69  3TestErrorName(i
0730: 6e 74 20 72 63 29 7b 0a 20 20 63 6f 6e 73 74 20  nt rc){.  const 
0740: 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 30 3b  char *zName = 0;
0750: 0a 20 20 73 77 69 74 63 68 28 20 72 63 20 29 7b  .  switch( rc ){
0760: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0770: 5f 4f 4b 3a 20 20 20 20 20 20 20 20 20 7a 4e 61  _OK:         zNa
0780: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4f 4b 22  me = "SQLITE_OK"
0790: 3b 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  ;          break
07a0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
07b0: 45 5f 45 52 52 4f 52 3a 20 20 20 20 20 20 7a 4e  E_ERROR:      zN
07c0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 45 52  ame = "SQLITE_ER
07d0: 52 4f 52 22 3b 20 20 20 20 20 20 20 62 72 65 61  ROR";       brea
07e0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
07f0: 54 45 5f 50 45 52 4d 3a 20 20 20 20 20 20 20 7a  TE_PERM:       z
0800: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 50  Name = "SQLITE_P
0810: 45 52 4d 22 3b 20 20 20 20 20 20 20 20 62 72 65  ERM";        bre
0820: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
0830: 49 54 45 5f 41 42 4f 52 54 3a 20 20 20 20 20 20  ITE_ABORT:      
0840: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
0850: 41 42 4f 52 54 22 3b 20 20 20 20 20 20 20 62 72  ABORT";       br
0860: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0870: 4c 49 54 45 5f 42 55 53 59 3a 20 20 20 20 20 20  LITE_BUSY:      
0880: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0890: 5f 42 55 53 59 22 3b 20 20 20 20 20 20 20 20 62  _BUSY";        b
08a0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
08b0: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3a 20 20 20  QLITE_LOCKED:   
08c0: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
08d0: 45 5f 4c 4f 43 4b 45 44 22 3b 20 20 20 20 20 20  E_LOCKED";      
08e0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
08f0: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3a 20 20 20  SQLITE_NOMEM:   
0900: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0910: 54 45 5f 4e 4f 4d 45 4d 22 3b 20 20 20 20 20 20  TE_NOMEM";      
0920: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
0930: 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59   SQLITE_READONLY
0940: 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c  :   zName = "SQL
0950: 49 54 45 5f 52 45 41 44 4f 4e 4c 59 22 3b 20 20  ITE_READONLY";  
0960: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0970: 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  e SQLITE_INTERRU
0980: 50 54 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51  PT:  zName = "SQ
0990: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 22 3b  LITE_INTERRUPT";
09a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
09b0: 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 3a  se SQLITE_IOERR:
09c0: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
09d0: 51 4c 49 54 45 5f 49 4f 45 52 52 22 3b 20 20 20  QLITE_IOERR";   
09e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
09f0: 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ase SQLITE_CORRU
0a00: 50 54 3a 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22  PT:    zName = "
0a10: 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 22 3b  SQLITE_CORRUPT";
0a20: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
0a30: 63 61 73 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c  case SQLITE_FULL
0a40: 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  :       zName = 
0a50: 22 53 51 4c 49 54 45 5f 46 55 4c 4c 22 3b 20 20  "SQLITE_FULL";  
0a60: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
0a70: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 41 4e   case SQLITE_CAN
0a80: 54 4f 50 45 4e 3a 20 20 20 7a 4e 61 6d 65 20 3d  TOPEN:   zName =
0a90: 20 22 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45   "SQLITE_CANTOPE
0aa0: 4e 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  N";    break;.  
0ab0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 50 52    case SQLITE_PR
0ac0: 4f 54 4f 43 4f 4c 3a 20 20 20 7a 4e 61 6d 65 20  OTOCOL:   zName 
0ad0: 3d 20 22 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43  = "SQLITE_PROTOC
0ae0: 4f 4c 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20  OL";    break;. 
0af0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45     case SQLITE_E
0b00: 4d 50 54 59 3a 20 20 20 20 20 20 7a 4e 61 6d 65  MPTY:      zName
0b10: 20 3d 20 22 53 51 4c 49 54 45 5f 45 4d 50 54 59   = "SQLITE_EMPTY
0b20: 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ";       break;.
0b30: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
0b40: 53 43 48 45 4d 41 3a 20 20 20 20 20 7a 4e 61 6d  SCHEMA:     zNam
0b50: 65 20 3d 20 22 53 51 4c 49 54 45 5f 53 43 48 45  e = "SQLITE_SCHE
0b60: 4d 41 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  MA";      break;
0b70: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0b80: 5f 43 4f 4e 53 54 52 41 49 4e 54 3a 20 7a 4e 61  _CONSTRAINT: zNa
0b90: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 4e  me = "SQLITE_CON
0ba0: 53 54 52 41 49 4e 54 22 3b 20 20 62 72 65 61 6b  STRAINT";  break
0bb0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0bc0: 45 5f 4d 49 53 4d 41 54 43 48 3a 20 20 20 7a 4e  E_MISMATCH:   zN
0bd0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4d 49  ame = "SQLITE_MI
0be0: 53 4d 41 54 43 48 22 3b 20 20 20 20 62 72 65 61  SMATCH";    brea
0bf0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
0c00: 54 45 5f 4d 49 53 55 53 45 3a 20 20 20 20 20 7a  TE_MISUSE:     z
0c10: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4d  Name = "SQLITE_M
0c20: 49 53 55 53 45 22 3b 20 20 20 20 20 20 62 72 65  ISUSE";      bre
0c30: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
0c40: 49 54 45 5f 4e 4f 4c 46 53 3a 20 20 20 20 20 20  ITE_NOLFS:      
0c50: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
0c60: 4e 4f 4c 46 53 22 3b 20 20 20 20 20 20 20 62 72  NOLFS";       br
0c70: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0c80: 4c 49 54 45 5f 41 55 54 48 3a 20 20 20 20 20 20  LITE_AUTH:      
0c90: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0ca0: 5f 41 55 54 48 22 3b 20 20 20 20 20 20 20 20 62  _AUTH";        b
0cb0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
0cc0: 51 4c 49 54 45 5f 46 4f 52 4d 41 54 3a 20 20 20  QLITE_FORMAT:   
0cd0: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
0ce0: 45 5f 46 4f 52 4d 41 54 22 3b 20 20 20 20 20 20  E_FORMAT";      
0cf0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0d00: 53 51 4c 49 54 45 5f 52 41 4e 47 45 3a 20 20 20  SQLITE_RANGE:   
0d10: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0d20: 54 45 5f 52 41 4e 47 45 22 3b 20 20 20 20 20 20  TE_RANGE";      
0d30: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
0d40: 20 53 51 4c 49 54 45 5f 52 4f 57 3a 20 20 20 20   SQLITE_ROW:    
0d50: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
0d60: 49 54 45 5f 52 4f 57 22 3b 20 20 20 20 20 20 20  ITE_ROW";       
0d70: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0d80: 65 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3a 20 20  e SQLITE_DONE:  
0d90: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
0da0: 4c 49 54 45 5f 44 4f 4e 45 22 3b 20 20 20 20 20  LITE_DONE";     
0db0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
0dc0: 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42  se SQLITE_NOTADB
0dd0: 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53  :     zName = "S
0de0: 51 4c 49 54 45 5f 4e 4f 54 41 44 42 22 3b 20 20  QLITE_NOTADB";  
0df0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
0e00: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20  efault:         
0e10: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0e20: 53 51 4c 49 54 45 5f 55 6e 6b 6e 6f 77 6e 22 3b  SQLITE_Unknown";
0e30: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a       break;.  }.
0e40: 20 20 72 65 74 75 72 6e 20 7a 4e 61 6d 65 3b 0a    return zName;.
0e50: 7d 0a 23 64 65 66 69 6e 65 20 65 72 72 6f 72 4e  }.#define errorN
0e60: 61 6d 65 20 73 71 6c 69 74 65 33 54 65 73 74 45  ame sqlite3TestE
0e70: 72 72 6f 72 4e 61 6d 65 0a 0a 2f 2a 0a 2a 2a 20  rrorName../*.** 
0e80: 43 6f 6e 76 65 72 74 20 61 6e 20 73 71 6c 69 74  Convert an sqlit
0e90: 65 33 5f 73 74 6d 74 2a 20 69 6e 74 6f 20 61 6e  e3_stmt* into an
0ea0: 20 73 71 6c 69 74 65 33 2a 2e 20 20 54 68 69 73   sqlite3*.  This
0eb0: 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 0a   depends on the.
0ec0: 2a 2a 20 66 61 63 74 20 74 68 61 74 20 74 68 65  ** fact that the
0ed0: 20 73 71 6c 69 74 65 33 2a 20 69 73 20 74 68 65   sqlite3* is the
0ee0: 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e 20   first field in 
0ef0: 74 68 65 20 56 64 62 65 20 73 74 72 75 63 74 75  the Vdbe structu
0f00: 72 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  re..*/.#define S
0f10: 74 6d 74 54 6f 44 62 28 58 29 20 20 20 73 71 6c  tmtToDb(X)   sql
0f20: 69 74 65 33 5f 64 62 5f 68 61 6e 64 6c 65 28 58  ite3_db_handle(X
0f30: 29 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 61  )../*.** Check a
0f40: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 74 6f   return value to
0f50: 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 61 67   make sure it ag
0f60: 72 65 65 73 20 77 69 74 68 20 74 68 65 20 72 65  rees with the re
0f70: 73 75 6c 74 73 0a 2a 2a 20 66 72 6f 6d 20 73 71  sults.** from sq
0f80: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 2e 0a 2a  lite3_errcode..*
0f90: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 73  /.int sqlite3Tes
0fa0: 74 45 72 72 43 6f 64 65 28 54 63 6c 5f 49 6e 74  tErrCode(Tcl_Int
0fb0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 73 71 6c  erp *interp, sql
0fc0: 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 72 63  ite3 *db, int rc
0fd0: 29 7b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  ){.  if( rc!=SQL
0fe0: 49 54 45 5f 4d 49 53 55 53 45 20 26 26 20 72 63  ITE_MISUSE && rc
0ff0: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 73  !=SQLITE_OK && s
1000: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64  qlite3_errcode(d
1010: 62 29 21 3d 72 63 20 29 7b 0a 20 20 20 20 63 68  b)!=rc ){.    ch
1020: 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20  ar zBuf[200];.  
1030: 20 20 69 6e 74 20 72 32 20 3d 20 73 71 6c 69 74    int r2 = sqlit
1040: 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29 3b 0a  e3_errcode(db);.
1050: 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66      sprintf(zBuf
1060: 2c 20 22 65 72 72 6f 72 20 63 6f 64 65 20 25 73  , "error code %s
1070: 20 28 25 64 29 20 64 6f 65 73 20 6e 6f 74 20 6d   (%d) does not m
1080: 61 74 63 68 20 73 71 6c 69 74 65 33 5f 65 72 72  atch sqlite3_err
1090: 63 6f 64 65 20 25 73 20 28 25 64 29 22 2c 0a 20  code %s (%d)",. 
10a0: 20 20 20 20 20 20 65 72 72 6f 72 4e 61 6d 65 28        errorName(
10b0: 72 63 29 2c 20 72 63 2c 20 65 72 72 6f 72 4e 61  rc), rc, errorNa
10c0: 6d 65 28 72 32 29 2c 20 72 32 29 3b 0a 20 20 20  me(r2), r2);.   
10d0: 20 54 63 6c 5f 52 65 73 65 74 52 65 73 75 6c 74   Tcl_ResetResult
10e0: 28 69 6e 74 65 72 70 29 3b 0a 20 20 20 20 54 63  (interp);.    Tc
10f0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
1100: 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b  nterp, zBuf, 0);
1110: 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20  .    return 1;. 
1120: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d   }.  return 0;.}
1130: 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6f 64 65 20 61  ../*.** Decode a
1140: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
1150: 71 6c 69 74 65 33 20 6f 62 6a 65 63 74 2e 0a 2a  qlite3 object..*
1160: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74  /.static int get
1170: 44 62 50 6f 69 6e 74 65 72 28 54 63 6c 5f 49 6e  DbPointer(Tcl_In
1180: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 63 6f  terp *interp, co
1190: 6e 73 74 20 63 68 61 72 20 2a 7a 41 2c 20 73 71  nst char *zA, sq
11a0: 6c 69 74 65 33 20 2a 2a 70 70 44 62 29 7b 0a 20  lite3 **ppDb){. 
11b0: 20 2a 70 70 44 62 20 3d 20 28 73 71 6c 69 74 65   *ppDb = (sqlite
11c0: 33 2a 29 73 71 6c 69 74 65 33 54 65 78 74 54 6f  3*)sqlite3TextTo
11d0: 50 74 72 28 7a 41 29 3b 0a 20 20 72 65 74 75 72  Ptr(zA);.  retur
11e0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
11f0: 2a 2a 20 44 65 63 6f 64 65 20 61 20 70 6f 69 6e  ** Decode a poin
1200: 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
1210: 33 5f 73 74 6d 74 20 6f 62 6a 65 63 74 2e 0a 2a  3_stmt object..*
1220: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74  /.static int get
1230: 53 74 6d 74 50 6f 69 6e 74 65 72 28 0a 20 20 54  StmtPointer(.  T
1240: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1250: 70 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  p, .  const char
1260: 20 2a 7a 41 72 67 2c 20 20 0a 20 20 73 71 6c 69   *zArg,  .  sqli
1270: 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53 74 6d  te3_stmt **ppStm
1280: 74 0a 29 7b 0a 20 20 2a 70 70 53 74 6d 74 20 3d  t.){.  *ppStmt =
1290: 20 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29   (sqlite3_stmt*)
12a0: 73 71 6c 69 74 65 33 54 65 78 74 54 6f 50 74 72  sqlite3TextToPtr
12b0: 28 7a 41 72 67 29 3b 0a 20 20 72 65 74 75 72 6e  (zArg);.  return
12c0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
12d0: 2a 20 44 65 63 6f 64 65 20 61 20 70 6f 69 6e 74  * Decode a point
12e0: 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
12f0: 5f 73 74 6d 74 20 6f 62 6a 65 63 74 2e 0a 2a 2f  _stmt object..*/
1300: 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 46  .static int getF
1310: 69 6c 65 50 6f 69 6e 74 65 72 28 0a 20 20 54 63  ilePointer(.  Tc
1320: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
1330: 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  , .  const char 
1340: 2a 7a 41 72 67 2c 20 20 0a 20 20 4f 73 46 69 6c  *zArg,  .  OsFil
1350: 65 20 2a 2a 70 70 46 69 6c 65 0a 29 7b 0a 20 20  e **ppFile.){.  
1360: 2a 70 70 46 69 6c 65 20 3d 20 28 4f 73 46 69 6c  *ppFile = (OsFil
1370: 65 2a 29 73 71 6c 69 74 65 33 54 65 78 74 54 6f  e*)sqlite3TextTo
1380: 50 74 72 28 7a 41 72 67 29 3b 0a 20 20 72 65 74  Ptr(zArg);.  ret
1390: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
13a0: 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 20  *.** Generate a 
13b0: 74 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74  text representat
13c0: 69 6f 6e 20 6f 66 20 61 20 70 6f 69 6e 74 65 72  ion of a pointer
13d0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 6e 64   that can be und
13e0: 65 72 73 74 6f 6f 64 0a 2a 2a 20 62 79 20 74 68  erstood.** by th
13f0: 65 20 67 65 74 44 62 50 6f 69 6e 74 65 72 20 61  e getDbPointer a
1400: 6e 64 20 67 65 74 56 6d 50 6f 69 6e 74 65 72 20  nd getVmPointer 
1410: 72 6f 75 74 69 6e 65 73 20 61 62 6f 76 65 2e 0a  routines above..
1420: 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 6f 62 6c 65  **.** The proble
1430: 6d 20 69 73 2c 20 6f 6e 20 73 6f 6d 65 20 6d 61  m is, on some ma
1440: 63 68 69 6e 65 73 20 28 53 6f 6c 61 72 69 73 29  chines (Solaris)
1450: 20 69 66 20 79 6f 75 20 64 6f 20 61 20 70 72 69   if you do a pri
1460: 6e 74 66 20 77 69 74 68 0a 2a 2a 20 22 25 70 22  ntf with.** "%p"
1470: 20 79 6f 75 20 63 61 6e 6e 6f 74 20 74 75 72 6e   you cannot turn
1480: 20 61 72 6f 75 6e 64 20 61 6e 64 20 64 6f 20 61   around and do a
1490: 20 73 63 61 6e 66 20 77 69 74 68 20 74 68 65 20   scanf with the 
14a0: 73 61 6d 65 20 22 25 70 22 20 61 6e 64 0a 2a 2a  same "%p" and.**
14b0: 20 67 65 74 20 79 6f 75 72 20 70 6f 69 6e 74 65   get your pointe
14c0: 72 20 62 61 63 6b 2e 20 20 59 6f 75 20 68 61 76  r back.  You hav
14d0: 65 20 74 6f 20 70 72 65 70 65 6e 64 20 61 20 22  e to prepend a "
14e0: 30 78 22 20 62 65 66 6f 72 65 20 69 74 20 77 69  0x" before it wi
14f0: 6c 6c 0a 2a 2a 20 77 6f 72 6b 2e 20 20 4f 72 20  ll.** work.  Or 
1500: 61 74 20 6c 65 61 73 74 20 74 68 61 74 20 69 73  at least that is
1510: 20 77 68 61 74 20 69 73 20 72 65 70 6f 72 74 65   what is reporte
1520: 64 20 74 6f 20 6d 65 20 28 64 72 68 29 2e 20 20  d to me (drh).  
1530: 42 75 74 20 74 68 69 73 0a 2a 2a 20 62 65 68 61  But this.** beha
1540: 76 69 6f 72 20 76 61 72 69 65 73 20 66 72 6f 6d  vior varies from
1550: 20 6d 61 63 68 69 6e 65 20 74 6f 20 6d 61 63 68   machine to mach
1560: 69 6e 65 2e 20 20 54 68 65 20 73 6f 6c 75 74 69  ine.  The soluti
1570: 6f 6e 20 75 73 65 64 20 68 65 72 20 69 73 0a 2a  on used her is.*
1580: 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20 73 74  * to test the st
1590: 72 69 6e 67 20 72 69 67 68 74 20 61 66 74 65 72  ring right after
15a0: 20 69 74 20 69 73 20 67 65 6e 65 72 61 74 65 64   it is generated
15b0: 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 63 61   to see if it ca
15c0: 6e 20 62 65 0a 2a 2a 20 75 6e 64 65 72 73 74 6f  n be.** understo
15d0: 6f 64 20 62 79 20 73 63 61 6e 66 2c 20 61 6e 64  od by scanf, and
15e0: 20 69 66 20 6e 6f 74 2c 20 74 72 79 20 70 72 65   if not, try pre
15f0: 70 65 6e 64 69 6e 67 20 61 6e 20 22 30 78 22 20  pending an "0x" 
1600: 74 6f 20 73 65 65 20 69 66 0a 2a 2a 20 74 68 61  to see if.** tha
1610: 74 20 68 65 6c 70 73 2e 20 20 49 66 20 6e 6f 74  t helps.  If not
1620: 68 69 6e 67 20 77 6f 72 6b 73 2c 20 61 20 66 61  hing works, a fa
1630: 74 61 6c 20 65 72 72 6f 72 20 69 73 20 67 65 6e  tal error is gen
1640: 65 72 61 74 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  erated..*/.int s
1650: 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
1660: 69 6e 74 65 72 53 74 72 28 54 63 6c 5f 49 6e 74  interStr(Tcl_Int
1670: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 63 68 61  erp *interp, cha
1680: 72 20 2a 7a 50 74 72 2c 20 76 6f 69 64 20 2a 70  r *zPtr, void *p
1690: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  ){.  sqlite3_snp
16a0: 72 69 6e 74 66 28 31 30 30 2c 20 7a 50 74 72 2c  rintf(100, zPtr,
16b0: 20 22 25 70 22 2c 20 70 29 3b 0a 20 20 72 65 74   "%p", p);.  ret
16c0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
16d0: 2a 0a 2a 2a 20 54 68 65 20 63 61 6c 6c 62 61 63  *.** The callbac
16e0: 6b 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 73 71  k routine for sq
16f0: 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74  lite3_exec_print
1700: 66 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  f()..*/.static i
1710: 6e 74 20 65 78 65 63 5f 70 72 69 6e 74 66 5f 63  nt exec_printf_c
1720: 62 28 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e  b(void *pArg, in
1730: 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61  t argc, char **a
1740: 72 67 76 2c 20 63 68 61 72 20 2a 2a 6e 61 6d 65  rgv, char **name
1750: 29 7b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  ){.  Tcl_DString
1760: 20 2a 73 74 72 20 3d 20 28 54 63 6c 5f 44 53 74   *str = (Tcl_DSt
1770: 72 69 6e 67 2a 29 70 41 72 67 3b 0a 20 20 69 6e  ring*)pArg;.  in
1780: 74 20 69 3b 0a 0a 20 20 69 66 28 20 54 63 6c 5f  t i;..  if( Tcl_
1790: 44 53 74 72 69 6e 67 4c 65 6e 67 74 68 28 73 74  DStringLength(st
17a0: 72 29 3d 3d 30 20 29 7b 0a 20 20 20 20 66 6f 72  r)==0 ){.    for
17b0: 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b  (i=0; i<argc; i+
17c0: 2b 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 44 53  +){.      Tcl_DS
17d0: 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65 6d 65  tringAppendEleme
17e0: 6e 74 28 73 74 72 2c 20 6e 61 6d 65 5b 69 5d 20  nt(str, name[i] 
17f0: 3f 20 6e 61 6d 65 5b 69 5d 20 3a 20 22 4e 55 4c  ? name[i] : "NUL
1800: 4c 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  L");.    }.  }. 
1810: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63   for(i=0; i<argc
1820: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f  ; i++){.    Tcl_
1830: 44 53 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65  DStringAppendEle
1840: 6d 65 6e 74 28 73 74 72 2c 20 61 72 67 76 5b 69  ment(str, argv[i
1850: 5d 20 3f 20 61 72 67 76 5b 69 5d 20 3a 20 22 4e  ] ? argv[i] : "N
1860: 55 4c 4c 22 29 3b 0a 20 20 7d 0a 20 20 72 65 74  ULL");.  }.  ret
1870: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
1880: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
1890: 65 78 65 63 5f 70 72 69 6e 74 66 20 20 44 42 20  exec_printf  DB 
18a0: 20 46 4f 52 4d 41 54 20 20 53 54 52 49 4e 47 0a   FORMAT  STRING.
18b0: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  **.** Invoke the
18c0: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 5f 70 72   sqlite3_exec_pr
18d0: 69 6e 74 66 28 29 20 69 6e 74 65 72 66 61 63 65  intf() interface
18e0: 20 75 73 69 6e 67 20 74 68 65 20 6f 70 65 6e 20   using the open 
18f0: 64 61 74 61 62 61 73 65 0a 2a 2a 20 44 42 2e 20  database.** DB. 
1900: 20 54 68 65 20 53 51 4c 20 69 73 20 74 68 65 20   The SQL is the 
1910: 73 74 72 69 6e 67 20 46 4f 52 4d 41 54 2e 20 20  string FORMAT.  
1920: 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e  The format strin
1930: 67 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e  g should contain
1940: 0a 2a 2a 20 6f 6e 65 20 25 73 20 6f 72 20 25 71  .** one %s or %q
1950: 2e 20 20 53 54 52 49 4e 47 20 69 73 20 74 68 65  .  STRING is the
1960: 20 76 61 6c 75 65 20 69 6e 73 65 72 74 65 64 20   value inserted 
1970: 69 6e 74 6f 20 25 73 20 6f 72 20 25 71 2e 0a 2a  into %s or %q..*
1980: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
1990: 74 5f 65 78 65 63 5f 70 72 69 6e 74 66 28 0a 20  t_exec_printf(. 
19a0: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
19b0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
19c0: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
19d0: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
19e0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
19f0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
1a00: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
1a10: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1a20: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
1a30: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
1a40: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
1a50: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
1a60: 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  t */.){.  sqlite
1a70: 33 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53 74  3 *db;.  Tcl_DSt
1a80: 72 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74 20  ring str;.  int 
1a90: 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72  rc;.  char *zErr
1aa0: 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 53   = 0;.  char *zS
1ab0: 71 6c 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b  ql;.  char zBuf[
1ac0: 33 30 5d 3b 0a 20 20 69 66 28 20 61 72 67 63 21  30];.  if( argc!
1ad0: 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =4 ){.    Tcl_Ap
1ae0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
1af0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
1b00: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
1b10: 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
1b20: 20 20 22 20 44 42 20 46 4f 52 4d 41 54 20 53 54    " DB FORMAT ST
1b30: 52 49 4e 47 22 2c 20 30 29 3b 0a 20 20 20 20 72  RING", 0);.    r
1b40: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1b50: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
1b60: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
1b70: 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
1b80: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1b90: 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 49  ;.  Tcl_DStringI
1ba0: 6e 69 74 28 26 73 74 72 29 3b 0a 20 20 7a 53 71  nit(&str);.  zSq
1bb0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  l = sqlite3_mpri
1bc0: 6e 74 66 28 61 72 67 76 5b 32 5d 2c 20 61 72 67  ntf(argv[2], arg
1bd0: 76 5b 33 5d 29 3b 0a 20 20 72 63 20 3d 20 73 71  v[3]);.  rc = sq
1be0: 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a  lite3_exec(db, z
1bf0: 53 71 6c 2c 20 65 78 65 63 5f 70 72 69 6e 74 66  Sql, exec_printf
1c00: 5f 63 62 2c 20 26 73 74 72 2c 20 26 7a 45 72 72  _cb, &str, &zErr
1c10: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
1c20: 65 28 7a 53 71 6c 29 3b 0a 20 20 73 70 72 69 6e  e(zSql);.  sprin
1c30: 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 72  tf(zBuf, "%d", r
1c40: 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  c);.  Tcl_Append
1c50: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
1c60: 7a 42 75 66 29 3b 0a 20 20 54 63 6c 5f 41 70 70  zBuf);.  Tcl_App
1c70: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
1c80: 70 2c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p, rc==SQLITE_OK
1c90: 20 3f 20 54 63 6c 5f 44 53 74 72 69 6e 67 56 61   ? Tcl_DStringVa
1ca0: 6c 75 65 28 26 73 74 72 29 20 3a 20 7a 45 72 72  lue(&str) : zErr
1cb0: 29 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  );.  Tcl_DString
1cc0: 46 72 65 65 28 26 73 74 72 29 3b 0a 20 20 69 66  Free(&str);.  if
1cd0: 28 20 7a 45 72 72 20 29 20 73 71 6c 69 74 65 33  ( zErr ) sqlite3
1ce0: 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 69  _free(zErr);.  i
1cf0: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
1d00: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
1d10: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
1d20: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75  CL_ERROR;.  retu
1d30: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
1d40: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
1d50: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f 74 65  te3_mprintf_z_te
1d60: 73 74 20 20 53 45 50 41 52 41 54 4f 52 20 20 41  st  SEPARATOR  A
1d70: 52 47 30 20 20 41 52 47 31 20 2e 2e 2e 0a 2a 2a  RG0  ARG1 ....**
1d80: 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 25 7a 20  .** Test the %z 
1d90: 66 6f 72 6d 61 74 20 6f 66 20 73 71 6c 69 74 65  format of sqlite
1da0: 4d 50 72 69 6e 74 66 28 29 2e 20 20 55 73 65 20  MPrintf().  Use 
1db0: 6d 75 6c 74 69 70 6c 65 20 6d 70 72 69 6e 74 66  multiple mprintf
1dc0: 28 29 20 63 61 6c 6c 73 20 74 6f 20 0a 2a 2a 20  () calls to .** 
1dd0: 63 6f 6e 63 61 74 65 6e 61 74 65 20 61 72 67 30  concatenate arg0
1de0: 20 74 68 72 6f 75 67 68 20 61 72 67 6e 20 75 73   through argn us
1df0: 69 6e 67 20 73 65 70 61 72 61 74 6f 72 20 61 73  ing separator as
1e00: 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 2e 0a   the separator..
1e10: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65  ** Return the re
1e20: 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  sult..*/.static 
1e30: 69 6e 74 20 74 65 73 74 5f 6d 70 72 69 6e 74 66  int test_mprintf
1e40: 5f 7a 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  _z(.  void *NotU
1e50: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
1e60: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
1e70: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
1e80: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
1e90: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
1ea0: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
1eb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ec0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
1ed0: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
1ee0: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
1ef0: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
1f00: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63  gument */.){.  c
1f10: 68 61 72 20 2a 7a 52 65 73 75 6c 74 20 3d 20 30  har *zResult = 0
1f20: 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 66 6f  ;.  int i;..  fo
1f30: 72 28 69 3d 32 3b 20 69 3c 61 72 67 63 3b 20 69  r(i=2; i<argc; i
1f40: 2b 2b 29 7b 0a 20 20 20 20 7a 52 65 73 75 6c 74  ++){.    zResult
1f50: 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
1f60: 66 28 22 25 7a 25 73 25 73 22 2c 20 7a 52 65 73  f("%z%s%s", zRes
1f70: 75 6c 74 2c 20 61 72 67 76 5b 31 5d 2c 20 61 72  ult, argv[1], ar
1f80: 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 54 63  gv[i]);.  }.  Tc
1f90: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
1fa0: 6e 74 65 72 70 2c 20 7a 52 65 73 75 6c 74 2c 20  nterp, zResult, 
1fb0: 30 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65  0);.  sqliteFree
1fc0: 28 7a 52 65 73 75 6c 74 29 3b 0a 20 20 72 65 74  (zResult);.  ret
1fd0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
1fe0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
1ff0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 6e 5f 74  ite3_mprintf_n_t
2000: 65 73 74 20 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a  est  STRING.**.*
2010: 2a 20 54 65 73 74 20 74 68 65 20 25 6e 20 66 6f  * Test the %n fo
2020: 72 6d 61 74 20 6f 66 20 73 71 6c 69 74 65 4d 50  rmat of sqliteMP
2030: 72 69 6e 74 66 28 29 2e 20 20 52 65 74 75 72 6e  rintf().  Return
2040: 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   the length of t
2050: 68 65 0a 2a 2a 20 69 6e 70 75 74 20 73 74 72 69  he.** input stri
2060: 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ng..*/.static in
2070: 74 20 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f 6e  t test_mprintf_n
2080: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
2090: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
20a0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
20b0: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
20c0: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
20d0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
20e0: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
20f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
2100: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
2110: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
2120: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2130: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
2140: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61  ment */.){.  cha
2150: 72 20 2a 7a 53 74 72 3b 0a 20 20 69 6e 74 20 6e  r *zStr;.  int n
2160: 20 3d 20 30 3b 0a 20 20 7a 53 74 72 20 3d 20 73   = 0;.  zStr = s
2170: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 22 25  qlite3MPrintf("%
2180: 73 25 6e 22 2c 20 61 72 67 76 5b 31 5d 2c 20 26  s%n", argv[1], &
2190: 6e 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65  n);.  sqliteFree
21a0: 28 7a 53 74 72 29 3b 0a 20 20 54 63 6c 5f 53 65  (zStr);.  Tcl_Se
21b0: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
21c0: 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a  p, Tcl_NewIntObj
21d0: 28 6e 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  (n));.  return T
21e0: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
21f0: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
2200: 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66  get_table_printf
2210: 20 20 44 42 20 20 46 4f 52 4d 41 54 20 20 53 54    DB  FORMAT  ST
2220: 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b  RING.**.** Invok
2230: 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 67 65  e the sqlite3_ge
2240: 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 28 29  t_table_printf()
2250: 20 69 6e 74 65 72 66 61 63 65 20 75 73 69 6e 67   interface using
2260: 20 74 68 65 20 6f 70 65 6e 20 64 61 74 61 62 61   the open databa
2270: 73 65 0a 2a 2a 20 44 42 2e 20 20 54 68 65 20 53  se.** DB.  The S
2280: 51 4c 20 69 73 20 74 68 65 20 73 74 72 69 6e 67  QL is the string
2290: 20 46 4f 52 4d 41 54 2e 20 20 54 68 65 20 66 6f   FORMAT.  The fo
22a0: 72 6d 61 74 20 73 74 72 69 6e 67 20 73 68 6f 75  rmat string shou
22b0: 6c 64 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 6f 6e  ld contain.** on
22c0: 65 20 25 73 20 6f 72 20 25 71 2e 20 20 53 54 52  e %s or %q.  STR
22d0: 49 4e 47 20 69 73 20 74 68 65 20 76 61 6c 75 65  ING is the value
22e0: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 25   inserted into %
22f0: 73 20 6f 72 20 25 71 2e 0a 2a 2f 0a 73 74 61 74  s or %q..*/.stat
2300: 69 63 20 69 6e 74 20 74 65 73 74 5f 67 65 74 5f  ic int test_get_
2310: 74 61 62 6c 65 5f 70 72 69 6e 74 66 28 0a 20 20  table_printf(.  
2320: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
2330: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
2340: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
2350: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
2360: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
2370: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
2380: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
2390: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
23a0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
23b0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
23c0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
23d0: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
23e0: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
23f0: 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53 74 72   *db;.  Tcl_DStr
2400: 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74 20 72  ing str;.  int r
2410: 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20  c;.  char *zErr 
2420: 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 52 6f 77 2c  = 0;.  int nRow,
2430: 20 6e 43 6f 6c 3b 0a 20 20 63 68 61 72 20 2a 2a   nCol;.  char **
2440: 61 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20 69  aResult;.  int i
2450: 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33 30  ;.  char zBuf[30
2460: 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  ];.  char *zSql;
2470: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34 20 29  .  if( argc!=4 )
2480: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
2490: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
24a0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
24b0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
24c0: 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20  v[0], .       " 
24d0: 44 42 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47  DB FORMAT STRING
24e0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
24f0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
2500: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
2510: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
2520: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
2530: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
2540: 54 63 6c 5f 44 53 74 72 69 6e 67 49 6e 69 74 28  Tcl_DStringInit(
2550: 26 73 74 72 29 3b 0a 20 20 7a 53 71 6c 20 3d 20  &str);.  zSql = 
2560: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
2570: 61 72 67 76 5b 32 5d 2c 61 72 67 76 5b 33 5d 29  argv[2],argv[3])
2580: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2590: 5f 67 65 74 5f 74 61 62 6c 65 28 64 62 2c 20 7a  _get_table(db, z
25a0: 53 71 6c 2c 20 26 61 52 65 73 75 6c 74 2c 20 26  Sql, &aResult, &
25b0: 6e 52 6f 77 2c 20 26 6e 43 6f 6c 2c 20 26 7a 45  nRow, &nCol, &zE
25c0: 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66  rr);.  sqlite3_f
25d0: 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 73 70 72  ree(zSql);.  spr
25e0: 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c  intf(zBuf, "%d",
25f0: 20 72 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65   rc);.  Tcl_Appe
2600: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
2610: 2c 20 7a 42 75 66 29 3b 0a 20 20 69 66 28 20 72  , zBuf);.  if( r
2620: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2630: 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66      sprintf(zBuf
2640: 2c 20 22 25 64 22 2c 20 6e 52 6f 77 29 3b 0a 20  , "%d", nRow);. 
2650: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65     Tcl_AppendEle
2660: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  ment(interp, zBu
2670: 66 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28  f);.    sprintf(
2680: 7a 42 75 66 2c 20 22 25 64 22 2c 20 6e 43 6f 6c  zBuf, "%d", nCol
2690: 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  );.    Tcl_Appen
26a0: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
26b0: 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 6f 72 28   zBuf);.    for(
26c0: 69 3d 30 3b 20 69 3c 28 6e 52 6f 77 2b 31 29 2a  i=0; i<(nRow+1)*
26d0: 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nCol; i++){.    
26e0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d    Tcl_AppendElem
26f0: 65 6e 74 28 69 6e 74 65 72 70 2c 20 61 52 65 73  ent(interp, aRes
2700: 75 6c 74 5b 69 5d 20 3f 20 61 52 65 73 75 6c 74  ult[i] ? aResult
2710: 5b 69 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20  [i] : "NULL");. 
2720: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
2730: 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d    Tcl_AppendElem
2740: 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 45 72 72  ent(interp, zErr
2750: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
2760: 5f 66 72 65 65 5f 74 61 62 6c 65 28 61 52 65 73  _free_table(aRes
2770: 75 6c 74 29 3b 0a 20 20 69 66 28 20 7a 45 72 72  ult);.  if( zErr
2780: 20 29 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28   ) sqlite3_free(
2790: 7a 45 72 72 29 3b 0a 20 20 69 66 28 20 73 71 6c  zErr);.  if( sql
27a0: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
27b0: 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20  interp, db, rc) 
27c0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
27d0: 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  OR;.  return TCL
27e0: 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55  _OK;.}.../*.** U
27f0: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6c  sage:  sqlite3_l
2800: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
2810: 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e   DB.**.** Return
2820: 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 52 4f  s the integer RO
2830: 57 49 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20  WID of the most 
2840: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 2e 0a 2a  recent insert..*
2850: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
2860: 74 5f 6c 61 73 74 5f 72 6f 77 69 64 28 0a 20 20  t_last_rowid(.  
2870: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
2880: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
2890: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
28a0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
28b0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
28c0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
28d0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
28e0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
28f0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
2900: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
2910: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
2920: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
2930: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
2940: 20 2a 64 62 3b 0a 20 20 63 68 61 72 20 7a 42 75   *db;.  char zBu
2950: 66 5b 33 30 5d 3b 0a 0a 20 20 69 66 28 20 61 72  f[30];..  if( ar
2960: 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
2970: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
2980: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
2990: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
29a0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44  "", argv[0], " D
29b0: 42 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  B\"", 0);.    re
29c0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
29d0: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
29e0: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
29f0: 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
2a00: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
2a10: 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c  .  sprintf(zBuf,
2a20: 20 22 25 6c 6c 64 22 2c 20 73 71 6c 69 74 65 33   "%lld", sqlite3
2a30: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
2a40: 69 64 28 64 62 29 29 3b 0a 20 20 54 63 6c 5f 41  id(db));.  Tcl_A
2a50: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
2a60: 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20  rp, zBuf, 0);.  
2a70: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
2a80: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
2a90: 3a 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 20 44  :  sqlite3_key D
2aa0: 42 20 4b 45 59 0a 2a 2a 0a 2a 2a 20 53 65 74 20  B KEY.**.** Set 
2ab0: 74 68 65 20 63 6f 64 65 63 20 6b 65 79 2e 0a 2a  the codec key..*
2ac0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
2ad0: 74 5f 6b 65 79 28 0a 20 20 76 6f 69 64 20 2a 4e  t_key(.  void *N
2ae0: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
2af0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
2b00: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
2b10: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
2b20: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
2b30: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
2b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2b50: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
2b60: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
2b70: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
2b80: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
2b90: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
2ba0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
2bb0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
2bc0: 79 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20  y;.  int nKey;. 
2bd0: 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a   if( argc!=3 ){.
2be0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
2bf0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
2c00: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
2c10: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
2c20: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c  0],.       " FIL
2c30: 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20  ENAME\"", 0);.  
2c40: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
2c50: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
2c60: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
2c70: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
2c80: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
2c90: 52 4f 52 3b 0a 20 20 7a 4b 65 79 20 3d 20 61 72  ROR;.  zKey = ar
2ca0: 67 76 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20 3d 20  gv[2];.  nKey = 
2cb0: 73 74 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a 23 69  strlen(zKey);.#i
2cc0: 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f  fdef SQLITE_HAS_
2cd0: 43 4f 44 45 43 0a 20 20 73 71 6c 69 74 65 33 5f  CODEC.  sqlite3_
2ce0: 6b 65 79 28 64 62 2c 20 7a 4b 65 79 2c 20 6e 4b  key(db, zKey, nK
2cf0: 65 79 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65  ey);.#endif.  re
2d00: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
2d10: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
2d20: 6c 69 74 65 33 5f 72 65 6b 65 79 20 44 42 20 4b  lite3_rekey DB K
2d30: 45 59 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20  EY.**.** Change 
2d40: 74 68 65 20 63 6f 64 65 63 20 6b 65 79 2e 0a 2a  the codec key..*
2d50: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
2d60: 74 5f 72 65 6b 65 79 28 0a 20 20 76 6f 69 64 20  t_rekey(.  void 
2d70: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
2d80: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
2d90: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
2da0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
2db0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
2dc0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
2dd0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
2de0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
2df0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
2e00: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
2e10: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
2e20: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
2e30: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
2e40: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
2e50: 4b 65 79 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b  Key;.  int nKey;
2e60: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
2e70: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
2e80: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
2e90: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
2ea0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
2eb0: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
2ec0: 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a  ILENAME\"", 0);.
2ed0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
2ee0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
2ef0: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
2f00: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
2f10: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
2f20: 45 52 52 4f 52 3b 0a 20 20 7a 4b 65 79 20 3d 20  ERROR;.  zKey = 
2f30: 61 72 67 76 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20  argv[2];.  nKey 
2f40: 3d 20 73 74 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a  = strlen(zKey);.
2f50: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41  #ifdef SQLITE_HA
2f60: 53 5f 43 4f 44 45 43 0a 20 20 73 71 6c 69 74 65  S_CODEC.  sqlite
2f70: 33 5f 72 65 6b 65 79 28 64 62 2c 20 7a 4b 65 79  3_rekey(db, zKey
2f80: 2c 20 6e 4b 65 79 29 3b 0a 23 65 6e 64 69 66 0a  , nKey);.#endif.
2f90: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
2fa0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
2fb0: 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20    sqlite3_close 
2fc0: 44 42 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 73 20  DB.**.** Closes 
2fd0: 74 68 65 20 64 61 74 61 62 61 73 65 20 6f 70 65  the database ope
2fe0: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6f  ned by sqlite3_o
2ff0: 70 65 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  pen..*/.static i
3000: 6e 74 20 73 71 6c 69 74 65 5f 74 65 73 74 5f 63  nt sqlite_test_c
3010: 6c 6f 73 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  lose(.  void *No
3020: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
3030: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
3040: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
3050: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
3060: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
3070: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
3080: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3090: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
30a0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
30b0: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
30c0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
30d0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
30e0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
30f0: 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 61 72  int rc;.  if( ar
3100: 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
3110: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
3120: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
3130: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
3140: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
3150: 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22      " FILENAME\"
3160: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
3170: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
3180: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
3190: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
31a0: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
31b0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
31c0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6c 6f  rc = sqlite3_clo
31d0: 73 65 28 64 62 29 3b 0a 20 20 54 63 6c 5f 53 65  se(db);.  Tcl_Se
31e0: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
31f0: 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d  (char *)errorNam
3200: 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49  e(rc), TCL_STATI
3210: 43 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  C);.  return TCL
3220: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d  _OK;.}../*.** Im
3230: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
3240: 74 68 65 20 78 5f 63 6f 61 6c 65 73 63 65 28 29  the x_coalesce()
3250: 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 52 65   function..** Re
3260: 74 75 72 6e 20 74 68 65 20 66 69 72 73 74 20 61  turn the first a
3270: 72 67 75 6d 65 6e 74 20 6e 6f 6e 2d 4e 55 4c 4c  rgument non-NULL
3280: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
3290: 61 74 69 63 20 76 6f 69 64 20 69 66 6e 75 6c 6c  atic void ifnull
32a0: 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Func(sqlite3_con
32b0: 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20 69  text *context, i
32c0: 6e 74 20 61 72 67 63 2c 20 73 71 6c 69 74 65 33  nt argc, sqlite3
32d0: 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a  _value **argv){.
32e0: 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69    int i;.  for(i
32f0: 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29  =0; i<argc; i++)
3300: 7b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45  {.    if( SQLITE
3310: 5f 4e 55 4c 4c 21 3d 73 71 6c 69 74 65 33 5f 76  _NULL!=sqlite3_v
3320: 61 6c 75 65 5f 74 79 70 65 28 61 72 67 76 5b 69  alue_type(argv[i
3330: 5d 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ]) ){.      sqli
3340: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
3350: 63 6f 6e 74 65 78 74 2c 20 28 63 68 61 72 2a 29  context, (char*)
3360: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
3370: 78 74 28 61 72 67 76 5b 69 5d 29 2c 0a 20 20 20  xt(argv[i]),.   
3380: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
3390: 61 6c 75 65 5f 62 79 74 65 73 28 61 72 67 76 5b  alue_bytes(argv[
33a0: 69 5d 29 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e  i]), SQLITE_TRAN
33b0: 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 62 72  SIENT);.      br
33c0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  eak;.    }.  }.}
33d0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 74 72 75 63 74  ../*.** A struct
33e0: 75 72 65 20 69 6e 74 6f 20 77 68 69 63 68 20 74  ure into which t
33f0: 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 65 78  o accumulate tex
3400: 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 64 73 74  t..*/.struct dst
3410: 72 20 7b 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63  r {.  int nAlloc
3420: 3b 20 20 2f 2a 20 53 70 61 63 65 20 61 6c 6c 6f  ;  /* Space allo
3430: 63 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  cated */.  int n
3440: 55 73 65 64 3b 20 20 20 2f 2a 20 53 70 61 63 65  Used;   /* Space
3450: 20 75 73 65 64 20 2a 2f 0a 20 20 63 68 61 72 20   used */.  char 
3460: 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 73  *z;     /* The s
3470: 70 61 63 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  pace */.};../*.*
3480: 2a 20 41 70 70 65 6e 64 20 74 65 78 74 20 74 6f  * Append text to
3490: 20 61 20 64 73 74 72 0a 2a 2f 0a 73 74 61 74 69   a dstr.*/.stati
34a0: 63 20 76 6f 69 64 20 64 73 74 72 41 70 70 65 6e  c void dstrAppen
34b0: 64 28 73 74 72 75 63 74 20 64 73 74 72 20 2a 70  d(struct dstr *p
34c0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
34d0: 20 69 6e 74 20 64 69 76 69 64 65 72 29 7b 0a 20   int divider){. 
34e0: 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65 6e 28   int n = strlen(
34f0: 7a 29 3b 0a 20 20 69 66 28 20 70 2d 3e 6e 55 73  z);.  if( p->nUs
3500: 65 64 20 2b 20 6e 20 2b 20 32 20 3e 20 70 2d 3e  ed + n + 2 > p->
3510: 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 63 68  nAlloc ){.    ch
3520: 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 20 20 70 2d  ar *zNew;.    p-
3530: 3e 6e 41 6c 6c 6f 63 20 3d 20 70 2d 3e 6e 41 6c  >nAlloc = p->nAl
3540: 6c 6f 63 2a 32 20 2b 20 6e 20 2b 20 32 30 30 3b  loc*2 + n + 200;
3550: 0a 20 20 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69  .    zNew = sqli
3560: 74 65 52 65 61 6c 6c 6f 63 28 70 2d 3e 7a 2c 20  teRealloc(p->z, 
3570: 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20 20  p->nAlloc);.    
3580: 69 66 28 20 7a 4e 65 77 3d 3d 30 20 29 7b 0a 20  if( zNew==0 ){. 
3590: 20 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28       sqliteFree(
35a0: 70 2d 3e 7a 29 3b 0a 20 20 20 20 20 20 6d 65 6d  p->z);.      mem
35b0: 73 65 74 28 70 2c 20 30 2c 20 73 69 7a 65 6f 66  set(p, 0, sizeof
35c0: 28 2a 70 29 29 3b 0a 20 20 20 20 20 20 72 65 74  (*p));.      ret
35d0: 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  urn;.    }.    p
35e0: 2d 3e 7a 20 3d 20 7a 4e 65 77 3b 0a 20 20 7d 0a  ->z = zNew;.  }.
35f0: 20 20 69 66 28 20 64 69 76 69 64 65 72 20 26 26    if( divider &&
3600: 20 70 2d 3e 6e 55 73 65 64 3e 30 20 29 7b 0a 20   p->nUsed>0 ){. 
3610: 20 20 20 70 2d 3e 7a 5b 70 2d 3e 6e 55 73 65 64     p->z[p->nUsed
3620: 2b 2b 5d 20 3d 20 64 69 76 69 64 65 72 3b 0a 20  ++] = divider;. 
3630: 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 2d 3e   }.  memcpy(&p->
3640: 7a 5b 70 2d 3e 6e 55 73 65 64 5d 2c 20 7a 2c 20  z[p->nUsed], z, 
3650: 6e 2b 31 29 3b 0a 20 20 70 2d 3e 6e 55 73 65 64  n+1);.  p->nUsed
3660: 20 2b 3d 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   += n;.}../*.** 
3670: 49 6e 76 6f 6b 65 64 20 66 6f 72 20 65 61 63 68  Invoked for each
3680: 20 63 61 6c 6c 62 61 63 6b 20 66 72 6f 6d 20 73   callback from s
3690: 71 6c 69 74 65 33 45 78 65 63 46 75 6e 63 0a 2a  qlite3ExecFunc.*
36a0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 65 78 65  /.static int exe
36b0: 63 46 75 6e 63 43 61 6c 6c 62 61 63 6b 28 76 6f  cFuncCallback(vo
36c0: 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 61  id *pData, int a
36d0: 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76  rgc, char **argv
36e0: 2c 20 63 68 61 72 20 2a 2a 4e 6f 74 55 73 65 64  , char **NotUsed
36f0: 29 7b 0a 20 20 73 74 72 75 63 74 20 64 73 74 72  ){.  struct dstr
3700: 20 2a 70 20 3d 20 28 73 74 72 75 63 74 20 64 73   *p = (struct ds
3710: 74 72 2a 29 70 44 61 74 61 3b 0a 20 20 69 6e 74  tr*)pData;.  int
3720: 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   i;.  for(i=0; i
3730: 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20  <argc; i++){.   
3740: 20 69 66 28 20 61 72 67 76 5b 69 5d 3d 3d 30 20   if( argv[i]==0 
3750: 29 7b 0a 20 20 20 20 20 20 64 73 74 72 41 70 70  ){.      dstrApp
3760: 65 6e 64 28 70 2c 20 22 4e 55 4c 4c 22 2c 20 27  end(p, "NULL", '
3770: 20 27 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   ');.    }else{.
3780: 20 20 20 20 20 20 64 73 74 72 41 70 70 65 6e 64        dstrAppend
3790: 28 70 2c 20 61 72 67 76 5b 69 5d 2c 20 27 20 27  (p, argv[i], ' '
37a0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  );.    }.  }.  r
37b0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 0;.}../*.*
37c0: 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * Implementation
37d0: 20 6f 66 20 74 68 65 20 78 5f 73 71 6c 69 74 65   of the x_sqlite
37e0: 5f 65 78 65 63 28 29 20 66 75 6e 63 74 69 6f 6e  _exec() function
37f0: 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  .  This function
3800: 20 74 61 6b 65 73 0a 2a 2a 20 61 20 73 69 6e 67   takes.** a sing
3810: 6c 65 20 61 72 67 75 6d 65 6e 74 20 61 6e 64 20  le argument and 
3820: 61 74 74 65 6d 70 74 73 20 74 6f 20 65 78 65 63  attempts to exec
3830: 75 74 65 20 74 68 61 74 20 61 72 67 75 6d 65 6e  ute that argumen
3840: 74 20 61 73 20 53 51 4c 20 63 6f 64 65 2e 0a 2a  t as SQL code..*
3850: 2a 20 54 68 69 73 20 69 73 20 69 6c 6c 65 67 61  * This is illega
3860: 6c 20 61 6e 64 20 73 68 6f 75 6c 64 20 73 65 74  l and should set
3870: 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 49 53 55   the SQLITE_MISU
3880: 53 45 20 66 6c 61 67 20 6f 6e 20 74 68 65 20 64  SE flag on the d
3890: 61 74 61 62 61 73 65 2e 0a 2a 2a 0a 2a 2a 20 32  atabase..**.** 2
38a0: 30 30 34 2d 4a 61 6e 2d 30 37 3a 20 20 57 65 20  004-Jan-07:  We 
38b0: 68 61 76 65 20 63 68 61 6e 67 65 64 20 74 68 69  have changed thi
38c0: 73 20 74 6f 20 6d 61 6b 65 20 69 74 20 6c 65 67  s to make it leg
38d0: 61 6c 20 74 6f 20 63 61 6c 6c 20 73 71 6c 69 74  al to call sqlit
38e0: 65 33 5f 65 78 65 63 28 29 0a 2a 2a 20 66 72 6f  e3_exec().** fro
38f0: 6d 20 77 69 74 68 69 6e 20 61 20 66 75 6e 63 74  m within a funct
3900: 69 6f 6e 20 63 61 6c 6c 2e 20 20 0a 2a 2a 20 0a  ion call.  .** .
3910: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
3920: 73 69 6d 75 6c 61 74 65 73 20 74 68 65 20 65 66  simulates the ef
3930: 66 65 63 74 20 6f 66 20 68 61 76 69 6e 67 20 74  fect of having t
3940: 77 6f 20 74 68 72 65 61 64 73 20 61 74 74 65 6d  wo threads attem
3950: 70 74 20 74 6f 0a 2a 2a 20 75 73 65 20 74 68 65  pt to.** use the
3960: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61   same database a
3970: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e  t the same time.
3980: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
3990: 73 71 6c 69 74 65 33 45 78 65 63 46 75 6e 63 28  sqlite3ExecFunc(
39a0: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
39b0: 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20 0a 20 20  xt *context, .  
39c0: 69 6e 74 20 61 72 67 63 2c 20 20 0a 20 20 73 71  int argc,  .  sq
39d0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
39e0: 67 76 0a 29 7b 0a 20 20 73 74 72 75 63 74 20 64  gv.){.  struct d
39f0: 73 74 72 20 78 3b 0a 20 20 6d 65 6d 73 65 74 28  str x;.  memset(
3a00: 26 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28 78 29  &x, 0, sizeof(x)
3a10: 29 3b 0a 20 20 28 76 6f 69 64 29 73 71 6c 69 74  );.  (void)sqlit
3a20: 65 33 5f 65 78 65 63 28 28 73 71 6c 69 74 65 33  e3_exec((sqlite3
3a30: 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64  *)sqlite3_user_d
3a40: 61 74 61 28 63 6f 6e 74 65 78 74 29 2c 0a 20 20  ata(context),.  
3a50: 20 20 20 20 28 63 68 61 72 2a 29 73 71 6c 69 74      (char*)sqlit
3a60: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72  e3_value_text(ar
3a70: 67 76 5b 30 5d 29 2c 0a 20 20 20 20 20 20 65 78  gv[0]),.      ex
3a80: 65 63 46 75 6e 63 43 61 6c 6c 62 61 63 6b 2c 20  ecFuncCallback, 
3a90: 26 78 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65  &x, 0);.  sqlite
3aa0: 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f  3_result_text(co
3ab0: 6e 74 65 78 74 2c 20 78 2e 7a 2c 20 78 2e 6e 55  ntext, x.z, x.nU
3ac0: 73 65 64 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e  sed, SQLITE_TRAN
3ad0: 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65  SIENT);.  sqlite
3ae0: 46 72 65 65 28 78 2e 7a 29 3b 0a 7d 0a 0a 2f 2a  Free(x.z);.}../*
3af0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
3b00: 74 65 5f 74 65 73 74 5f 63 72 65 61 74 65 5f 66  te_test_create_f
3b10: 75 6e 63 74 69 6f 6e 20 44 42 0a 2a 2a 0a 2a 2a  unction DB.**.**
3b20: 20 43 61 6c 6c 20 74 68 65 20 73 71 6c 69 74 65   Call the sqlite
3b30: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
3b40: 6e 20 41 50 49 20 6f 6e 20 74 68 65 20 67 69 76  n API on the giv
3b50: 65 6e 20 64 61 74 61 62 61 73 65 20 69 6e 20 6f  en database in o
3b60: 72 64 65 72 0a 2a 2a 20 74 6f 20 63 72 65 61 74  rder.** to creat
3b70: 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d  e a function nam
3b80: 65 64 20 22 78 5f 63 6f 61 6c 65 73 63 65 22 2e  ed "x_coalesce".
3b90: 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20    This function 
3ba0: 64 6f 65 73 20 74 68 65 20 73 61 6d 65 20 74 68  does the same th
3bb0: 69 6e 67 0a 2a 2a 20 61 73 20 74 68 65 20 22 63  ing.** as the "c
3bc0: 6f 61 6c 65 73 63 65 22 20 66 75 6e 63 74 69 6f  oalesce" functio
3bd0: 6e 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f  n.  This functio
3be0: 6e 20 61 6c 73 6f 20 72 65 67 69 73 74 65 72 73  n also registers
3bf0: 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   an SQL function
3c00: 0a 2a 2a 20 6e 61 6d 65 64 20 22 78 5f 73 71 6c  .** named "x_sql
3c10: 69 74 65 5f 65 78 65 63 22 20 74 68 61 74 20 69  ite_exec" that i
3c20: 6e 76 6f 6b 65 73 20 73 71 6c 69 74 65 33 5f 65  nvokes sqlite3_e
3c30: 78 65 63 28 29 2e 20 20 49 6e 76 6f 6b 69 6e 67  xec().  Invoking
3c40: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a   sqlite3_exec().
3c50: 2a 2a 20 69 6e 20 74 68 69 73 20 77 61 79 20 69  ** in this way i
3c60: 73 20 69 6c 6c 65 67 61 6c 20 72 65 63 75 72 73  s illegal recurs
3c70: 69 6f 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20 72  ion and should r
3c80: 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d  aise an SQLITE_M
3c90: 49 53 55 53 45 20 65 72 72 6f 72 2e 0a 2a 2a 20  ISUSE error..** 
3ca0: 54 68 65 20 65 66 66 65 63 74 20 69 73 20 73 69  The effect is si
3cb0: 6d 69 6c 61 72 20 74 6f 20 74 72 79 69 6e 67 20  milar to trying 
3cc0: 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 20  to use the same 
3cd0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
3ce0: 69 6f 6e 20 66 72 6f 6d 0a 2a 2a 20 74 77 6f 20  ion from.** two 
3cf0: 74 68 72 65 61 64 73 20 61 74 20 74 68 65 20 73  threads at the s
3d00: 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20  ame time..**.** 
3d10: 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f 74  The original mot
3d20: 69 76 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73  ivation for this
3d30: 20 72 6f 75 74 69 6e 65 20 77 61 73 20 74 6f 20   routine was to 
3d40: 62 65 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c 20  be able to call 
3d50: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63  the.** sqlite3_c
3d60: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 66  reate_function f
3d70: 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20 61 20  unction while a 
3d80: 71 75 65 72 79 20 69 73 20 69 6e 20 70 72 6f 67  query is in prog
3d90: 72 65 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  ress in order.**
3da0: 20 74 6f 20 74 65 73 74 20 74 68 65 20 53 51 4c   to test the SQL
3db0: 49 54 45 5f 4d 49 53 55 53 45 20 64 65 74 65 63  ITE_MISUSE detec
3dc0: 74 69 6f 6e 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73  tion logic..*/.s
3dd0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
3de0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a  reate_function(.
3df0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
3e00: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
3e10: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
3e20: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
3e30: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
3e40: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
3e50: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
3e60: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
3e70: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
3e80: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
3e90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
3ea0: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
3eb0: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72  nt */.){.  int r
3ec0: 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  c;.  sqlite3 *db
3ed0: 3b 0a 20 20 65 78 74 65 72 6e 20 76 6f 69 64 20  ;.  extern void 
3ee0: 4d 64 35 5f 52 65 67 69 73 74 65 72 28 73 71 6c  Md5_Register(sql
3ef0: 69 74 65 33 2a 29 3b 0a 0a 20 20 69 66 28 20 61  ite3*);..  if( a
3f00: 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  rgc!=2 ){.    Tc
3f10: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
3f20: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
3f30: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
3f40: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
3f50: 20 20 20 20 20 22 20 44 42 5c 22 22 2c 20 30 29       " DB\"", 0)
3f60: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
3f70: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
3f80: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
3f90: 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
3fa0: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
3fb0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20  L_ERROR;.  rc = 
3fc0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
3fd0: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78 5f 63  unction(db, "x_c
3fe0: 6f 61 6c 65 73 63 65 22 2c 20 2d 31 2c 20 53 51  oalesce", -1, SQ
3ff0: 4c 49 54 45 5f 41 4e 59 2c 20 30 2c 20 0a 20 20  LITE_ANY, 0, .  
4000: 20 20 20 20 20 20 69 66 6e 75 6c 6c 46 75 6e 63        ifnullFunc
4010: 2c 20 30 2c 20 30 29 3b 0a 0a 23 69 66 6e 64 65  , 0, 0);..#ifnde
4020: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
4030: 46 31 36 0a 20 20 2f 2a 20 55 73 65 20 74 68 65  F16.  /* Use the
4040: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
4050: 66 75 6e 63 74 69 6f 6e 31 36 28 29 20 41 50 49  function16() API
4060: 20 68 65 72 65 2e 20 4d 61 69 6e 6c 79 20 66 6f   here. Mainly fo
4070: 72 20 66 75 6e 2c 20 62 75 74 20 61 6c 73 6f 20  r fun, but also 
4080: 0a 20 20 2a 2a 20 62 65 63 61 75 73 65 20 69 74  .  ** because it
4090: 20 69 73 20 6e 6f 74 20 74 65 73 74 65 64 20 61   is not tested a
40a0: 6e 79 77 68 65 72 65 20 65 6c 73 65 2e 20 2a 2f  nywhere else. */
40b0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
40c0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69  E_OK ){.    sqli
40d0: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b  te3_value *pVal;
40e0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d  .#ifdef SQLITE_M
40f0: 45 4d 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  EMDEBUG.    if( 
4100: 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46  sqlite3_iMallocF
4110: 61 69 6c 3e 30 20 29 7b 0a 20 20 20 20 20 20 73  ail>0 ){.      s
4120: 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61  qlite3_iMallocFa
4130: 69 6c 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  il++;.    }.#end
4140: 69 66 20 0a 20 20 20 20 70 56 61 6c 20 3d 20 73  if .    pVal = s
4150: 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29  qlite3ValueNew()
4160: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c  ;.    sqlite3Val
4170: 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d  ueSetStr(pVal, -
4180: 31 2c 20 22 78 5f 73 71 6c 69 74 65 5f 65 78 65  1, "x_sqlite_exe
4190: 63 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  c", SQLITE_UTF8,
41a0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
41b0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
41c0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
41d0: 6e 31 36 28 64 62 2c 20 0a 20 20 20 20 20 20 20  n16(db, .       
41e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 61         sqlite3Va
41f0: 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51  lueText(pVal, SQ
4200: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
4210: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
4220: 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36   1, SQLITE_UTF16
4230: 2c 20 64 62 2c 20 73 71 6c 69 74 65 33 45 78 65  , db, sqlite3Exe
4240: 63 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20  cFunc, 0, 0);.  
4250: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72    sqlite3ValueFr
4260: 65 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 23 65  ee(pVal);.  }.#e
4270: 6e 64 69 66 0a 0a 20 20 69 66 28 20 73 71 6c 69  ndif..  if( sqli
4280: 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
4290: 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29  nterp, db, rc) )
42a0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
42b0: 52 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75  R;.  Tcl_SetResu
42c0: 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72  lt(interp, (char
42d0: 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29   *)errorName(rc)
42e0: 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
42f0: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
4300: 52 6f 75 74 69 6e 65 73 20 74 6f 20 69 6d 70 6c  Routines to impl
4310: 65 6d 65 6e 74 20 74 68 65 20 78 5f 63 6f 75 6e  ement the x_coun
4320: 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  t() aggregate fu
4330: 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 78 5f  nction..**.** x_
4340: 63 6f 75 6e 74 28 29 20 63 6f 75 6e 74 73 20 74  count() counts t
4350: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  he number of non
4360: 2d 6e 75 6c 6c 20 61 72 67 75 6d 65 6e 74 73 2e  -null arguments.
4370: 20 20 42 75 74 20 74 68 65 72 65 20 61 72 65 0a    But there are.
4380: 2a 2a 20 73 6f 6d 65 20 74 77 69 73 74 73 20 66  ** some twists f
4390: 6f 72 20 74 65 73 74 69 6e 67 20 70 75 72 70 6f  or testing purpo
43a0: 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ses..**.** If th
43b0: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 5f  e argument to x_
43c0: 63 6f 75 6e 74 28 29 20 69 73 20 34 30 20 74 68  count() is 40 th
43d0: 65 6e 20 61 20 55 54 46 2d 38 20 65 72 72 6f 72  en a UTF-8 error
43e0: 20 69 73 20 72 65 70 6f 72 74 65 64 0a 2a 2a 20   is reported.** 
43f0: 6f 6e 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  on the step func
4400: 74 69 6f 6e 2e 20 20 49 66 20 78 5f 63 6f 75 6e  tion.  If x_coun
4410: 74 28 34 31 29 20 69 73 20 73 65 65 6e 2c 20 74  t(41) is seen, t
4420: 68 65 6e 20 61 20 55 54 46 2d 31 36 20 65 72 72  hen a UTF-16 err
4430: 6f 72 0a 2a 2a 20 69 73 20 72 65 70 6f 72 74 65  or.** is reporte
4440: 64 20 6f 6e 20 74 68 65 20 73 74 65 70 20 66 75  d on the step fu
4450: 6e 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20  nction.  If the 
4460: 74 6f 74 61 6c 20 63 6f 75 6e 74 20 69 73 20 34  total count is 4
4470: 32 2c 20 74 68 65 6e 0a 2a 2a 20 61 20 55 54 46  2, then.** a UTF
4480: 2d 38 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  -8 error is repo
4490: 72 74 65 64 20 6f 6e 20 74 68 65 20 66 69 6e 61  rted on the fina
44a0: 6c 69 7a 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  lize function..*
44b0: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
44c0: 20 43 6f 75 6e 74 43 74 78 20 43 6f 75 6e 74 43   CountCtx CountC
44d0: 74 78 3b 0a 73 74 72 75 63 74 20 43 6f 75 6e 74  tx;.struct Count
44e0: 43 74 78 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 7d  Ctx {.  int n;.}
44f0: 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 20 63 6f  ;.static void co
4500: 75 6e 74 53 74 65 70 28 73 71 6c 69 74 65 33 5f  untStep(sqlite3_
4510: 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74  context *context
4520: 2c 20 69 6e 74 20 61 72 67 63 2c 20 73 71 6c 69  , int argc, sqli
4530: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76  te3_value **argv
4540: 29 7b 0a 20 20 43 6f 75 6e 74 43 74 78 20 2a 70  ){.  CountCtx *p
4550: 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33 5f  ;.  p = sqlite3_
4560: 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78  aggregate_contex
4570: 74 28 63 6f 6e 74 65 78 74 2c 20 73 69 7a 65 6f  t(context, sizeo
4580: 66 28 2a 70 29 29 3b 0a 20 20 69 66 28 20 28 61  f(*p));.  if( (a
4590: 72 67 63 3d 3d 30 20 7c 7c 20 53 51 4c 49 54 45  rgc==0 || SQLITE
45a0: 5f 4e 55 4c 4c 21 3d 73 71 6c 69 74 65 33 5f 76  _NULL!=sqlite3_v
45b0: 61 6c 75 65 5f 74 79 70 65 28 61 72 67 76 5b 30  alue_type(argv[0
45c0: 5d 29 20 29 20 26 26 20 70 20 29 7b 0a 20 20 20  ]) ) && p ){.   
45d0: 20 70 2d 3e 6e 2b 2b 3b 0a 20 20 7d 0a 20 20 69   p->n++;.  }.  i
45e0: 66 28 20 61 72 67 63 3e 30 20 29 7b 0a 20 20 20  f( argc>0 ){.   
45f0: 20 69 6e 74 20 76 20 3d 20 73 71 6c 69 74 65 33   int v = sqlite3
4600: 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b  _value_int(argv[
4610: 30 5d 29 3b 0a 20 20 20 20 69 66 28 20 76 3d 3d  0]);.    if( v==
4620: 34 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  40 ){.      sqli
4630: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
4640: 28 63 6f 6e 74 65 78 74 2c 20 22 76 61 6c 75 65  (context, "value
4650: 20 6f 66 20 34 30 20 68 61 6e 64 65 64 20 74 6f   of 40 handed to
4660: 20 78 5f 63 6f 75 6e 74 22 2c 20 2d 31 29 3b 0a   x_count", -1);.
4670: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4680: 4d 49 54 5f 55 54 46 31 36 0a 20 20 20 20 7d 65  MIT_UTF16.    }e
4690: 6c 73 65 20 69 66 28 20 76 3d 3d 34 31 20 29 7b  lse if( v==41 ){
46a0: 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
46b0: 72 20 7a 55 74 66 31 36 45 72 72 4d 73 67 5b 5d  r zUtf16ErrMsg[]
46c0: 20 3d 20 7b 20 30 2c 20 30 78 36 31 2c 20 30 2c   = { 0, 0x61, 0,
46d0: 20 30 78 36 32 2c 20 30 2c 20 30 78 36 33 2c 20   0x62, 0, 0x63, 
46e0: 30 2c 20 30 2c 20 30 7d 3b 0a 20 20 20 20 20 20  0, 0, 0};.      
46f0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
4700: 72 72 6f 72 31 36 28 63 6f 6e 74 65 78 74 2c 20  rror16(context, 
4710: 26 7a 55 74 66 31 36 45 72 72 4d 73 67 5b 31 2d  &zUtf16ErrMsg[1-
4720: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
4730: 5d 2c 20 2d 31 29 3b 0a 23 65 6e 64 69 66 0a 20  ], -1);.#endif. 
4740: 20 20 20 7d 0a 20 20 7d 0a 7d 20 20 20 0a 73 74     }.  }.}   .st
4750: 61 74 69 63 20 76 6f 69 64 20 63 6f 75 6e 74 46  atic void countF
4760: 69 6e 61 6c 69 7a 65 28 73 71 6c 69 74 65 33 5f  inalize(sqlite3_
4770: 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74  context *context
4780: 29 7b 0a 20 20 43 6f 75 6e 74 43 74 78 20 2a 70  ){.  CountCtx *p
4790: 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33 5f  ;.  p = sqlite3_
47a0: 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78  aggregate_contex
47b0: 74 28 63 6f 6e 74 65 78 74 2c 20 73 69 7a 65 6f  t(context, sizeo
47c0: 66 28 2a 70 29 29 3b 0a 20 20 69 66 28 20 70 20  f(*p));.  if( p 
47d0: 29 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 3d  ){.    if( p->n=
47e0: 3d 34 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  =42 ){.      sql
47f0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
4800: 72 28 63 6f 6e 74 65 78 74 2c 20 22 78 5f 63 6f  r(context, "x_co
4810: 75 6e 74 20 74 6f 74 61 6c 73 20 74 6f 20 34 32  unt totals to 42
4820: 22 2c 20 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73  ", -1);.    }els
4830: 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e{.      sqlite3
4840: 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74  _result_int(cont
4850: 65 78 74 2c 20 70 20 3f 20 70 2d 3e 6e 20 3a 20  ext, p ? p->n : 
4860: 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a  0);.    }.  }.}.
4870: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
4880: 71 6c 69 74 65 5f 74 65 73 74 5f 63 72 65 61 74  qlite_test_creat
4890: 65 5f 61 67 67 72 65 67 61 74 65 20 44 42 0a 2a  e_aggregate DB.*
48a0: 2a 0a 2a 2a 20 43 61 6c 6c 20 74 68 65 20 73 71  *.** Call the sq
48b0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
48c0: 63 74 69 6f 6e 20 41 50 49 20 6f 6e 20 74 68 65  ction API on the
48d0: 20 67 69 76 65 6e 20 64 61 74 61 62 61 73 65 20   given database 
48e0: 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 63  in order.** to c
48f0: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
4900: 20 6e 61 6d 65 64 20 22 78 5f 63 6f 75 6e 74 22   named "x_count"
4910: 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  .  This function
4920: 20 64 6f 65 73 20 74 68 65 20 73 61 6d 65 20 74   does the same t
4930: 68 69 6e 67 0a 2a 2a 20 61 73 20 74 68 65 20 22  hing.** as the "
4940: 6d 64 35 73 75 6d 22 20 66 75 6e 63 74 69 6f 6e  md5sum" function
4950: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6f 72 69 67  ..**.** The orig
4960: 69 6e 61 6c 20 6d 6f 74 69 76 61 74 69 6f 6e 20  inal motivation 
4970: 66 6f 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65  for this routine
4980: 20 77 61 73 20 74 6f 20 62 65 20 61 62 6c 65 20   was to be able 
4990: 74 6f 20 63 61 6c 6c 20 74 68 65 0a 2a 2a 20 73  to call the.** s
49a0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 61 67  qlite3_create_ag
49b0: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
49c0: 20 77 68 69 6c 65 20 61 20 71 75 65 72 79 20 69   while a query i
49d0: 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 69 6e  s in progress in
49e0: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 74 65 73   order.** to tes
49f0: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 49 53  t the SQLITE_MIS
4a00: 55 53 45 20 64 65 74 65 63 74 69 6f 6e 20 6c 6f  USE detection lo
4a10: 67 69 63 2e 20 20 53 65 65 20 6d 69 73 75 73 65  gic.  See misuse
4a20: 2e 74 65 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  .test..**.** Thi
4a30: 73 20 72 6f 75 74 69 6e 65 20 77 61 73 20 6c 61  s routine was la
4a40: 74 65 72 20 65 78 74 65 6e 64 65 64 20 74 6f 20  ter extended to 
4a50: 74 65 73 74 20 74 68 65 20 75 73 65 20 6f 66 20  test the use of 
4a60: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
4a70: 72 72 6f 72 28 29 0a 2a 2a 20 77 69 74 68 69 6e  rror().** within
4a80: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
4a90: 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ions..*/.static 
4aa0: 69 6e 74 20 74 65 73 74 5f 63 72 65 61 74 65 5f  int test_create_
4ab0: 61 67 67 72 65 67 61 74 65 28 0a 20 20 76 6f 69  aggregate(.  voi
4ac0: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
4ad0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
4ae0: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
4af0: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
4b00: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
4b10: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
4b20: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
4b30: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
4b40: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
4b50: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
4b60: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
4b70: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
4b80: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
4b90: 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  b;.  int rc;.  i
4ba0: 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20  f( argc!=2 ){.  
4bb0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
4bc0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
4bd0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
4be0: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
4bf0: 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c 45 4e  ,.       " FILEN
4c00: 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  AME\"", 0);.    
4c10: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
4c20: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
4c30: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
4c40: 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
4c50: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
4c60: 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
4c70: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
4c80: 6e 28 64 62 2c 20 22 78 5f 63 6f 75 6e 74 22 2c  n(db, "x_count",
4c90: 20 30 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   0, SQLITE_UTF8,
4ca0: 20 30 2c 20 30 2c 0a 20 20 20 20 20 20 63 6f 75   0, 0,.      cou
4cb0: 6e 74 53 74 65 70 2c 63 6f 75 6e 74 46 69 6e 61  ntStep,countFina
4cc0: 6c 69 7a 65 29 3b 0a 20 20 69 66 28 20 72 63 3d  lize);.  if( rc=
4cd0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
4ce0: 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65    sqlite3_create
4cf0: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78  _function(db, "x
4d00: 5f 63 6f 75 6e 74 22 2c 20 31 2c 20 53 51 4c 49  _count", 1, SQLI
4d10: 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 2c 0a 20  TE_UTF8, 0, 0,. 
4d20: 20 20 20 20 20 20 20 63 6f 75 6e 74 53 74 65 70         countStep
4d30: 2c 63 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 29 3b  ,countFinalize);
4d40: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
4d50: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
4d60: 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20  terp, db, rc) ) 
4d70: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
4d80: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
4d90: 4b 3b 0a 7d 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73  K;.}..../*.** Us
4da0: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
4db0: 72 69 6e 74 66 5f 69 6e 74 20 46 4f 52 4d 41 54  rintf_int FORMAT
4dc0: 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52   INTEGER INTEGER
4dd0: 20 49 4e 54 45 47 45 52 0a 2a 2a 0a 2a 2a 20 43   INTEGER.**.** C
4de0: 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68  all mprintf with
4df0: 20 74 68 72 65 65 20 69 6e 74 65 67 65 72 20 61   three integer a
4e00: 72 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61 74  rguments.*/.stat
4e10: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d  ic int sqlite3_m
4e20: 70 72 69 6e 74 66 5f 69 6e 74 28 0a 20 20 76 6f  printf_int(.  vo
4e30: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
4e40: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
4e50: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
4e60: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
4e70: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
4e80: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
4e90: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
4ea0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
4eb0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
4ec0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
4ed0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
4ee0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
4ef0: 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c  /.){.  int a[3],
4f00: 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20   i;.  char *z;. 
4f10: 20 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a   if( argc!=5 ){.
4f20: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
4f30: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
4f40: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
4f50: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
4f60: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52  0],.       " FOR
4f70: 4d 41 54 20 49 4e 54 20 49 4e 54 20 49 4e 54 5c  MAT INT INT INT\
4f80: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
4f90: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
4fa0: 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 35  }.  for(i=2; i<5
4fb0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
4fc0: 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72  Tcl_GetInt(inter
4fd0: 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69  p, argv[i], &a[i
4fe0: 2d 32 5d 29 20 29 20 72 65 74 75 72 6e 20 54 43  -2]) ) return TC
4ff0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a  L_ERROR;.  }.  z
5000: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
5010: 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d  tf(argv[1], a[0]
5020: 2c 20 61 5b 31 5d 2c 20 61 5b 32 5d 29 3b 0a 20  , a[1], a[2]);. 
5030: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
5040: 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b  t(interp, z, 0);
5050: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
5060: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  z);.  return TCL
5070: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66  _OK;.}../*.** If
5080: 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73   zNum represents
5090: 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74   an integer that
50a0: 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 36 34 2d   will fit in 64-
50b0: 62 69 74 73 2c 20 74 68 65 6e 20 73 65 74 0a 2a  bits, then set.*
50c0: 2a 20 2a 70 56 61 6c 75 65 20 74 6f 20 74 68 61  * *pValue to tha
50d0: 74 20 69 6e 74 65 67 65 72 20 61 6e 64 20 72 65  t integer and re
50e0: 74 75 72 6e 20 74 72 75 65 2e 20 20 4f 74 68 65  turn true.  Othe
50f0: 72 77 69 73 65 20 72 65 74 75 72 6e 20 66 61 6c  rwise return fal
5100: 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  se..*/.static in
5110: 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 36  t sqlite3GetInt6
5120: 34 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  4(const char *zN
5130: 75 6d 2c 20 69 36 34 20 2a 70 56 61 6c 75 65 29  um, i64 *pValue)
5140: 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 46  {.  if( sqlite3F
5150: 69 74 73 49 6e 36 34 42 69 74 73 28 7a 4e 75 6d  itsIn64Bits(zNum
5160: 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
5170: 61 74 6f 69 36 34 28 7a 4e 75 6d 2c 20 70 56 61  atoi64(zNum, pVa
5180: 6c 75 65 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  lue);.    return
5190: 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   1;.  }.  return
51a0: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61   0;.}../*.** Usa
51b0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72  ge:  sqlite3_mpr
51c0: 69 6e 74 66 5f 69 6e 74 36 34 20 46 4f 52 4d 41  intf_int64 FORMA
51d0: 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45  T INTEGER INTEGE
51e0: 52 20 49 4e 54 45 47 45 52 0a 2a 2a 0a 2a 2a 20  R INTEGER.**.** 
51f0: 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74  Call mprintf wit
5200: 68 20 74 68 72 65 65 20 36 34 2d 62 69 74 20 69  h three 64-bit i
5210: 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73  nteger arguments
5220: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
5230: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69  qlite3_mprintf_i
5240: 6e 74 36 34 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  nt64(.  void *No
5250: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
5260: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
5270: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
5280: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
5290: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
52a0: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
52b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
52c0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
52d0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
52e0: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
52f0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
5300: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
5310: 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65   int i;.  sqlite
5320: 5f 69 6e 74 36 34 20 61 5b 33 5d 3b 0a 20 20 63  _int64 a[3];.  c
5330: 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72  har *z;.  if( ar
5340: 67 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=5 ){.    Tcl
5350: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
5360: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
5370: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
5380: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
5390: 20 20 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54      " FORMAT INT
53a0: 20 49 4e 54 20 49 4e 54 5c 22 22 2c 20 30 29 3b   INT INT\"", 0);
53b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
53c0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72  ERROR;.  }.  for
53d0: 28 69 3d 32 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b  (i=2; i<5; i++){
53e0: 0a 20 20 20 20 69 66 28 20 21 73 71 6c 69 74 65  .    if( !sqlite
53f0: 33 47 65 74 49 6e 74 36 34 28 61 72 67 76 5b 69  3GetInt64(argv[i
5400: 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 7b 0a 20  ], &a[i-2]) ){. 
5410: 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52       Tcl_AppendR
5420: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 61  esult(interp, "a
5430: 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 61  rgument is not a
5440: 20 76 61 6c 69 64 20 36 34 2d 62 69 74 20 69 6e   valid 64-bit in
5450: 74 65 67 65 72 22 2c 20 30 29 3b 0a 20 20 20 20  teger", 0);.    
5460: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
5470: 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  OR;.    }.  }.  
5480: 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  z = sqlite3_mpri
5490: 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30  ntf(argv[1], a[0
54a0: 5d 2c 20 61 5b 31 5d 2c 20 61 5b 32 5d 29 3b 0a  ], a[1], a[2]);.
54b0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
54c0: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29  lt(interp, z, 0)
54d0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
54e0: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  (z);.  return TC
54f0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
5500: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d  sage:  sqlite3_m
5510: 70 72 69 6e 74 66 5f 73 74 72 20 46 4f 52 4d 41  printf_str FORMA
5520: 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45  T INTEGER INTEGE
5530: 52 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 43  R STRING.**.** C
5540: 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68  all mprintf with
5550: 20 74 77 6f 20 69 6e 74 65 67 65 72 20 61 72 67   two integer arg
5560: 75 6d 65 6e 74 73 20 61 6e 64 20 6f 6e 65 20 73  uments and one s
5570: 74 72 69 6e 67 20 61 72 67 75 6d 65 6e 74 0a 2a  tring argument.*
5580: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
5590: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72  ite3_mprintf_str
55a0: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
55b0: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
55c0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
55d0: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
55e0: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
55f0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
5600: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
5610: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
5620: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
5630: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
5640: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
5650: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
5660: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ment */.){.  int
5670: 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 63 68 61 72   a[3], i;.  char
5680: 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 3c   *z;.  if( argc<
5690: 34 20 7c 7c 20 61 72 67 63 3e 35 20 29 7b 0a 20  4 || argc>5 ){. 
56a0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
56b0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
56c0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
56d0: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
56e0: 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d  ],.       " FORM
56f0: 41 54 20 49 4e 54 20 49 4e 54 20 3f 53 54 52 49  AT INT INT ?STRI
5700: 4e 47 3f 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  NG?\"", 0);.    
5710: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
5720: 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b  ;.  }.  for(i=2;
5730: 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<4; i++){.    
5740: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69  if( Tcl_GetInt(i
5750: 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20  nterp, argv[i], 
5760: 26 61 5b 69 2d 32 5d 29 20 29 20 72 65 74 75 72  &a[i-2]) ) retur
5770: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
5780: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d  .  z = sqlite3_m
5790: 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20  printf(argv[1], 
57a0: 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 72 67 63  a[0], a[1], argc
57b0: 3e 34 20 3f 20 61 72 67 76 5b 34 5d 20 3a 20 4e  >4 ? argv[4] : N
57c0: 55 4c 4c 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  ULL);.  Tcl_Appe
57d0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
57e0: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
57f0: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
5800: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
5810: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
5820: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75  ite3_mprintf_dou
5830: 62 6c 65 20 46 4f 52 4d 41 54 20 49 4e 54 45 47  ble FORMAT INTEG
5840: 45 52 20 49 4e 54 45 47 45 52 20 44 4f 55 42 4c  ER INTEGER DOUBL
5850: 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72  E.**.** Call mpr
5860: 69 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e  intf with two in
5870: 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20  teger arguments 
5880: 61 6e 64 20 6f 6e 65 20 64 6f 75 62 6c 65 20 61  and one double a
5890: 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69  rgument.*/.stati
58a0: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70  c int sqlite3_mp
58b0: 72 69 6e 74 66 5f 64 6f 75 62 6c 65 28 0a 20 20  rintf_double(.  
58c0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
58d0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
58e0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
58f0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
5900: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
5910: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
5920: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
5930: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
5940: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
5950: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
5960: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
5970: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
5980: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33   */.){.  int a[3
5990: 5d 2c 20 69 3b 0a 20 20 64 6f 75 62 6c 65 20 72  ], i;.  double r
59a0: 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  ;.  char *z;.  i
59b0: 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20 20  f( argc!=5 ){.  
59c0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
59d0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
59e0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
59f0: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
5a00: 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41  ,.       " FORMA
5a10: 54 20 49 4e 54 20 49 4e 54 20 44 4f 55 42 4c 45  T INT INT DOUBLE
5a20: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
5a30: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
5a40: 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c   }.  for(i=2; i<
5a50: 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  4; i++){.    if(
5a60: 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65   Tcl_GetInt(inte
5a70: 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26 61 5b  rp, argv[i], &a[
5a80: 69 2d 32 5d 29 20 29 20 72 65 74 75 72 6e 20 54  i-2]) ) return T
5a90: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
5aa0: 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c  if( Tcl_GetDoubl
5ab0: 65 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 34  e(interp, argv[4
5ac0: 5d 2c 20 26 72 29 20 29 20 72 65 74 75 72 6e 20  ], &r) ) return 
5ad0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 20 3d  TCL_ERROR;.  z =
5ae0: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
5af0: 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20  (argv[1], a[0], 
5b00: 61 5b 31 5d 2c 20 72 29 3b 0a 20 20 54 63 6c 5f  a[1], r);.  Tcl_
5b10: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
5b20: 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71  erp, z, 0);.  sq
5b30: 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20  lite3_free(z);. 
5b40: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
5b50: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
5b60: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
5b70: 5f 73 63 61 6c 65 64 20 46 4f 52 4d 41 54 20 44  _scaled FORMAT D
5b80: 4f 55 42 4c 45 20 44 4f 55 42 4c 45 0a 2a 2a 0a  OUBLE DOUBLE.**.
5b90: 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20  ** Call mprintf 
5ba0: 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f  with a single do
5bb0: 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68  uble argument wh
5bc0: 69 63 68 20 69 73 20 74 68 65 20 70 72 6f 64 75  ich is the produ
5bd0: 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77 6f  ct of the.** two
5be0: 20 61 72 67 75 6d 65 6e 74 73 20 67 69 76 65 6e   arguments given
5bf0: 20 61 62 6f 76 65 2e 20 20 54 68 69 73 20 69 73   above.  This is
5c00: 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
5c10: 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20 75  e overflow and u
5c20: 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75 62  nderflow.** doub
5c30: 6c 65 73 20 74 6f 20 74 65 73 74 20 74 68 61 74  les to test that
5c40: 20 74 68 65 79 20 61 72 65 20 63 6f 6e 76 65 72   they are conver
5c50: 74 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a 2f  ted properly..*/
5c60: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
5c70: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c  te3_mprintf_scal
5c80: 65 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  ed(.  void *NotU
5c90: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
5ca0: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
5cb0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
5cc0: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
5cd0: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
5ce0: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
5cf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
5d00: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
5d10: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
5d20: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
5d30: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
5d40: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69  gument */.){.  i
5d50: 6e 74 20 69 3b 0a 20 20 64 6f 75 62 6c 65 20 72  nt i;.  double r
5d60: 5b 32 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  [2];.  char *z;.
5d70: 20 20 69 66 28 20 61 72 67 63 21 3d 34 20 29 7b    if( argc!=4 ){
5d80: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
5d90: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
5da0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
5db0: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
5dc0: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f  [0],.       " FO
5dd0: 52 4d 41 54 20 44 4f 55 42 4c 45 20 44 4f 55 42  RMAT DOUBLE DOUB
5de0: 4c 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  LE\"", 0);.    r
5df0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
5e00: 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20  .  }.  for(i=2; 
5e10: 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<4; i++){.    i
5e20: 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65  f( Tcl_GetDouble
5e30: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d  (interp, argv[i]
5e40: 2c 20 26 72 5b 69 2d 32 5d 29 20 29 20 72 65 74  , &r[i-2]) ) ret
5e50: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
5e60: 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33   }.  z = sqlite3
5e70: 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d  _mprintf(argv[1]
5e80: 2c 20 72 5b 30 5d 2a 72 5b 31 5d 29 3b 0a 20 20  , r[0]*r[1]);.  
5e90: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
5ea0: 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a  (interp, z, 0);.
5eb0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
5ec0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
5ed0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
5ee0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72  ge:  sqlite3_mpr
5ef0: 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 20 46 4f 52  intf_stronly FOR
5f00: 4d 41 54 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a  MAT STRING.**.**
5f10: 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69   Call mprintf wi
5f20: 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f 75 62  th a single doub
5f30: 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63  le argument whic
5f40: 68 20 69 73 20 74 68 65 20 70 72 6f 64 75 63 74  h is the product
5f50: 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77 6f 20 61   of the.** two a
5f60: 72 67 75 6d 65 6e 74 73 20 67 69 76 65 6e 20 61  rguments given a
5f70: 62 6f 76 65 2e 20 20 54 68 69 73 20 69 73 20 75  bove.  This is u
5f80: 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  sed to generate 
5f90: 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20 75 6e 64  overflow and und
5fa0: 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75 62 6c 65  erflow.** double
5fb0: 73 20 74 6f 20 74 65 73 74 20 74 68 61 74 20 74  s to test that t
5fc0: 68 65 79 20 61 72 65 20 63 6f 6e 76 65 72 74 65  hey are converte
5fd0: 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a 2f 0a 73  d properly..*/.s
5fe0: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
5ff0: 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c  3_mprintf_stronl
6000: 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  y(.  void *NotUs
6010: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
6020: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
6030: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
6040: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
6050: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
6060: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
6070: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
6080: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
6090: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
60a0: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
60b0: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
60c0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68  ument */.){.  ch
60d0: 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67  ar *z;.  if( arg
60e0: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
60f0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
6100: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
6110: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
6120: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
6130: 20 20 20 22 20 46 4f 52 4d 41 54 20 53 54 52 49     " FORMAT STRI
6140: 4e 47 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  NG\"", 0);.    r
6150: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
6160: 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74  .  }.  z = sqlit
6170: 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b  e3_mprintf(argv[
6180: 31 5d 2c 20 61 72 67 76 5b 32 5d 29 3b 0a 20 20  1], argv[2]);.  
6190: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
61a0: 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a  (interp, z, 0);.
61b0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
61c0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
61d0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
61e0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72  ge:  sqlite3_mpr
61f0: 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65 20 46  intf_hexdouble F
6200: 4f 52 4d 41 54 20 48 45 58 0a 2a 2a 0a 2a 2a 20  ORMAT HEX.**.** 
6210: 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74  Call mprintf wit
6220: 68 20 61 20 73 69 6e 67 6c 65 20 64 6f 75 62 6c  h a single doubl
6230: 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63 68  e argument which
6240: 20 69 73 20 64 65 72 69 76 65 64 20 66 72 6f 6d   is derived from
6250: 20 74 68 65 0a 2a 2a 20 68 65 78 61 64 65 63 69   the.** hexadeci
6260: 6d 61 6c 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  mal encoding of 
6270: 61 6e 20 49 45 45 45 20 64 6f 75 62 6c 65 2e 0a  an IEEE double..
6280: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
6290: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65  lite3_mprintf_he
62a0: 78 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64 20  xdouble(.  void 
62b0: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
62c0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
62d0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
62e0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
62f0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
6300: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
6310: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
6320: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
6330: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
6340: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
6350: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
6360: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
6370: 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 64  {.  char *z;.  d
6380: 6f 75 62 6c 65 20 72 3b 0a 20 20 75 6e 73 69 67  ouble r;.  unsig
6390: 6e 65 64 20 20 78 31 2c 20 78 32 3b 0a 20 20 6c  ned  x1, x2;.  l
63a0: 6f 6e 67 20 6c 6f 6e 67 20 75 6e 73 69 67 6e 65  ong long unsigne
63b0: 64 20 64 3b 0a 20 20 69 66 28 20 61 72 67 63 21  d d;.  if( argc!
63c0: 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
63d0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
63e0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
63f0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
6400: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
6410: 20 22 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47   " FORMAT STRING
6420: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
6430: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
6440: 20 7d 0a 20 20 69 66 28 20 73 73 63 61 6e 66 28   }.  if( sscanf(
6450: 61 72 67 76 5b 32 5d 2c 20 22 25 30 38 78 25 30  argv[2], "%08x%0
6460: 38 78 22 2c 20 26 78 32 2c 20 26 78 31 29 21 3d  8x", &x2, &x1)!=
6470: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
6480: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
6490: 2c 20 22 32 6e 64 20 61 72 67 75 6d 65 6e 74 20  , "2nd argument 
64a0: 73 68 6f 75 6c 64 20 62 65 20 31 36 2d 63 68 61  should be 16-cha
64b0: 72 61 63 74 65 72 73 20 6f 66 20 68 65 78 22 2c  racters of hex",
64c0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
64d0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
64e0: 20 64 20 3d 20 78 32 3b 0a 20 20 64 20 3d 20 28   d = x2;.  d = (
64f0: 64 3c 3c 33 32 29 20 2b 20 78 31 3b 0a 20 20 6d  d<<32) + x1;.  m
6500: 65 6d 63 70 79 28 26 72 2c 20 26 64 2c 20 73 69  emcpy(&r, &d, si
6510: 7a 65 6f 66 28 72 29 29 3b 0a 20 20 7a 20 3d 20  zeof(r));.  z = 
6520: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
6530: 61 72 67 76 5b 31 5d 2c 20 72 29 3b 0a 20 20 54  argv[1], r);.  T
6540: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
6550: 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20  interp, z, 0);. 
6560: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29   sqlite3_free(z)
6570: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
6580: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
6590: 65 3a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  e: sqlite_malloc
65a0: 5f 66 61 69 6c 20 4e 20 20 3f 52 45 50 45 41 54  _fail N  ?REPEAT
65b0: 2d 49 4e 54 45 52 56 41 4c 3f 0a 2a 2a 0a 2a 2a  -INTERVAL?.**.**
65c0: 20 52 69 67 20 73 71 6c 69 74 65 4d 61 6c 6c 6f   Rig sqliteMallo
65d0: 63 28 29 20 74 6f 20 66 61 69 6c 20 6f 6e 20 74  c() to fail on t
65e0: 68 65 20 4e 2d 74 68 20 63 61 6c 6c 20 61 6e 64  he N-th call and
65f0: 20 65 76 65 72 79 20 52 45 50 45 41 54 2d 49 4e   every REPEAT-IN
6600: 54 45 52 56 41 4c 20 63 61 6c 6c 0a 2a 2a 20 61  TERVAL call.** a
6610: 66 74 65 72 20 74 68 61 74 2e 20 20 49 66 20 52  fter that.  If R
6620: 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20 69  EPEAT-INTERVAL i
6630: 73 20 30 20 6f 72 20 69 73 20 6f 6d 69 74 74 65  s 0 or is omitte
6640: 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 61 20 73  d, then only a s
6650: 69 6e 67 6c 65 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  ingle.** malloc 
6660: 77 69 6c 6c 20 66 61 69 6c 2e 20 20 49 66 20 52  will fail.  If R
6670: 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20 69  EPEAT-INTERVAL i
6680: 73 20 31 20 74 68 65 6e 20 61 6c 6c 20 6d 61 6c  s 1 then all mal
6690: 6c 6f 63 73 20 61 66 74 65 72 20 74 68 65 0a 2a  locs after the.*
66a0: 2a 20 66 69 72 73 74 20 66 61 69 6c 75 72 65 20  * first failure 
66b0: 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f  will continue to
66c0: 20 66 61 69 6c 20 6f 6e 20 65 76 65 72 79 20 63   fail on every c
66d0: 61 6c 6c 2e 20 20 49 66 20 52 45 50 45 41 54 2d  all.  If REPEAT-
66e0: 49 4e 54 45 52 56 41 4c 20 69 73 0a 2a 2a 20 32  INTERVAL is.** 2
66f0: 20 74 68 65 6e 20 65 76 65 72 79 20 6f 74 68 65   then every othe
6700: 72 20 6d 61 6c 6c 6f 63 20 77 69 6c 6c 20 66 61  r malloc will fa
6710: 69 6c 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72 74  il.  And so fort
6720: 68 2e 0a 2a 2a 0a 2a 2a 20 54 75 72 6e 20 6f 66  h..**.** Turn of
6730: 66 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73 6d  f this mechanism
6740: 20 61 6e 64 20 72 65 73 65 74 20 74 68 65 20 73   and reset the s
6750: 71 6c 69 74 65 33 54 68 72 65 61 64 44 61 74 61  qlite3ThreadData
6760: 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  ()->mallocFailed
6770: 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 69 66   .** variable if
6780: 20 4e 3d 3d 30 2e 0a 2a 2f 0a 23 69 66 64 65 66   N==0..*/.#ifdef
6790: 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
67a0: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
67b0: 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 28 0a  te_malloc_fail(.
67c0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
67d0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
67e0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
67f0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
6800: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
6810: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
6820: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
6830: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
6840: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
6850: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
6860: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
6870: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
6880: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 6e  nt */.){.  int n
6890: 3b 0a 20 20 69 6e 74 20 72 65 70 3b 0a 20 20 69  ;.  int rep;.  i
68a0: 66 28 20 61 72 67 63 21 3d 32 20 26 26 20 61 72  f( argc!=2 && ar
68b0: 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
68c0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
68d0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
68e0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
68f0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 4e  "", argv[0], " N
6900: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
6910: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
6920: 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74   }.  if( Tcl_Get
6930: 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76  Int(interp, argv
6940: 5b 31 5d 2c 20 26 6e 29 20 29 20 72 65 74 75 72  [1], &n) ) retur
6950: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
6960: 66 28 20 61 72 67 63 3d 3d 33 20 29 7b 0a 20 20  f( argc==3 ){.  
6970: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
6980: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32 5d  (interp, argv[2]
6990: 2c 20 26 72 65 70 29 20 29 20 72 65 74 75 72 6e  , &rep) ) return
69a0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 65   TCL_ERROR;.  }e
69b0: 6c 73 65 7b 0a 20 20 20 20 72 65 70 20 3d 20 30  lse{.    rep = 0
69c0: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ;.  }.  sqlite3_
69d0: 69 4d 61 6c 6c 6f 63 46 61 69 6c 20 3d 20 6e 3b  iMallocFail = n;
69e0: 0a 20 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c  .  sqlite3_iMall
69f0: 6f 63 52 65 73 65 74 20 3d 20 72 65 70 3b 0a 20  ocReset = rep;. 
6a00: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
6a10: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
6a20: 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f 6d 61  Usage: sqlite_ma
6a30: 6c 6c 6f 63 5f 73 74 61 74 0a 2a 2a 0a 2a 2a 20  lloc_stat.**.** 
6a40: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
6a50: 72 20 6f 66 20 70 72 69 6f 72 20 63 61 6c 6c 73  r of prior calls
6a60: 20 74 6f 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63   to sqliteMalloc
6a70: 28 29 20 61 6e 64 20 73 71 6c 69 74 65 46 72 65  () and sqliteFre
6a80: 65 28 29 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  e()..*/.#ifdef S
6a90: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 73  QLITE_MEMDEBUG.s
6aa0: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
6ab0: 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 28 0a 20 20  _malloc_stat(.  
6ac0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
6ad0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
6ae0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
6af0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
6b00: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
6b10: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
6b20: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
6b30: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
6b40: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
6b50: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
6b60: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
6b70: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
6b80: 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 7a 42   */.){.  char zB
6b90: 75 66 5b 32 30 30 5d 3b 0a 20 20 73 70 72 69 6e  uf[200];.  sprin
6ba0: 74 66 28 7a 42 75 66 2c 20 22 25 64 20 25 64 20  tf(zBuf, "%d %d 
6bb0: 25 64 22 2c 20 73 71 6c 69 74 65 33 5f 6e 4d 61  %d", sqlite3_nMa
6bc0: 6c 6c 6f 63 2c 73 71 6c 69 74 65 33 5f 6e 46 72  lloc,sqlite3_nFr
6bd0: 65 65 2c 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c  ee,sqlite3_iMall
6be0: 6f 63 46 61 69 6c 29 3b 0a 20 20 54 63 6c 5f 41  ocFail);.  Tcl_A
6bf0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
6c00: 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20  rp, zBuf, 0);.  
6c10: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
6c20: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  ../*.** This fun
6c30: 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
6c40: 20 61 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 20 74   a Tcl command t
6c50: 68 61 74 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b  hat may be invok
6c60: 65 64 20 75 73 69 6e 67 20 61 6e 79 20 6f 66 0a  ed using any of.
6c70: 2a 2a 20 74 68 65 20 66 6f 75 72 20 66 6f 72 6d  ** the four form
6c80: 73 20 65 6e 75 6d 65 72 61 74 65 64 20 62 65 6c  s enumerated bel
6c90: 6f 77 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ow..**.** sqlite
6ca0: 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64  _malloc_outstand
6cb0: 69 6e 67 0a 2a 2a 20 20 20 20 20 52 65 74 75 72  ing.**     Retur
6cc0: 6e 20 61 20 73 75 6d 6d 61 72 79 20 6f 66 20 61  n a summary of a
6cd0: 6c 6c 20 75 6e 66 72 65 65 64 20 62 6c 6f 63 6b  ll unfreed block
6ce0: 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  s of memory allo
6cf0: 63 61 74 65 64 20 62 79 20 74 68 65 0a 2a 2a 20  cated by the.** 
6d00: 20 20 20 20 63 75 72 72 65 6e 74 20 74 68 72 65      current thre
6d10: 61 64 2e 20 53 65 65 20 63 6f 6d 6d 65 6e 74 73  ad. See comments
6d20: 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20   above function 
6d30: 73 71 6c 69 74 65 33 4f 75 74 73 74 61 6e 64 69  sqlite3Outstandi
6d40: 6e 67 4d 61 6c 6c 6f 63 73 28 29 20 0a 2a 2a 20  ngMallocs() .** 
6d50: 20 20 20 20 69 6e 20 75 74 69 6c 2e 63 20 66 6f      in util.c fo
6d60: 72 20 61 20 64 65 73 63 72 69 70 74 69 6f 6e 20  r a description 
6d70: 6f 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  of the returned 
6d80: 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  value..**.** sql
6d90: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74  ite_malloc_outst
6da0: 61 6e 64 69 6e 67 20 2d 62 79 74 65 73 0a 2a 2a  anding -bytes.**
6db0: 20 20 20 20 20 52 65 74 75 72 6e 20 74 68 65 20       Return the 
6dc0: 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20  total amount of 
6dd0: 75 6e 66 72 65 65 64 20 6d 65 6d 6f 72 79 20 28  unfreed memory (
6de0: 69 6e 20 62 79 74 65 73 29 20 61 6c 6c 6f 63 61  in bytes) alloca
6df0: 74 65 64 20 62 79 20 0a 2a 2a 20 20 20 20 20 74  ted by .**     t
6e00: 68 69 73 20 74 68 72 65 61 64 2e 0a 2a 2a 0a 2a  his thread..**.*
6e10: 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  * sqlite_malloc_
6e20: 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d 6d 61 78  outstanding -max
6e30: 62 79 74 65 73 0a 2a 2a 20 20 20 20 20 52 65 74  bytes.**     Ret
6e40: 75 72 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  urn the maximum 
6e50: 61 6d 6f 75 6e 74 20 6f 66 20 64 79 6e 61 6d 69  amount of dynami
6e60: 63 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20  c memory in use 
6e70: 61 74 20 6f 6e 65 20 74 69 6d 65 20 0a 2a 2a 20  at one time .** 
6e80: 20 20 20 20 62 79 20 74 68 69 73 20 74 68 72 65      by this thre
6e90: 61 64 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ad..**.** sqlite
6ea0: 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64  _malloc_outstand
6eb0: 69 6e 67 20 2d 63 6c 65 61 72 6d 61 78 62 79 74  ing -clearmaxbyt
6ec0: 65 73 0a 2a 2a 20 20 20 20 20 53 65 74 20 74 68  es.**     Set th
6ed0: 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
6ee0: 20 62 79 20 5b 73 71 6c 69 74 65 5f 6d 61 6c 6c   by [sqlite_mall
6ef0: 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d  oc_outstanding -
6f00: 6d 61 78 62 79 74 65 73 5d 0a 2a 2a 20 20 20 20  maxbytes].**    
6f10: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
6f20: 76 61 6c 75 65 20 6f 66 20 5b 73 71 6c 69 74 65  value of [sqlite
6f30: 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64  _malloc_outstand
6f40: 69 6e 67 20 2d 62 79 74 65 73 5d 2e 20 0a 2a 2f  ing -bytes]. .*/
6f50: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
6f60: 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61  te_malloc_outsta
6f70: 6e 64 69 6e 67 28 0a 20 20 43 6c 69 65 6e 74 44  nding(.  ClientD
6f80: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  ata clientData,.
6f90: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
6fa0: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
6fb0: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
6fc0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
6fd0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
6fe0: 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20  nt objc,        
6ff0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
7000: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
7010: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
7020: 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d   objv[]  /* Comm
7030: 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f  and arguments */
7040: 0a 29 7b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  .){.  extern int
7050: 20 73 71 6c 69 74 65 33 4f 75 74 73 74 61 6e 64   sqlite3Outstand
7060: 69 6e 67 4d 61 6c 6c 6f 63 73 28 54 63 6c 5f 49  ingMallocs(Tcl_I
7070: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29 3b 0a  nterp *interp);.
7080: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
7090: 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64 65  ITE_DEBUG) && de
70a0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
70b0: 44 45 42 55 47 29 20 26 26 20 53 51 4c 49 54 45  DEBUG) && SQLITE
70c0: 5f 4d 45 4d 44 45 42 55 47 3e 31 0a 20 20 69 66  _MEMDEBUG>1.  if
70d0: 28 20 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20  ( objc==2 ){.   
70e0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72   const char *zAr
70f0: 67 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  g = Tcl_GetStrin
7100: 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 23 69 66 64  g(objv[1]);.#ifd
7110: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
7120: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
7130: 4e 54 0a 20 20 20 20 54 68 72 65 61 64 44 61 74  NT.    ThreadDat
7140: 61 20 63 6f 6e 73 74 20 2a 70 54 64 20 3d 20 73  a const *pTd = s
7150: 71 6c 69 74 65 33 54 68 72 65 61 64 44 61 74 61  qlite3ThreadData
7160: 52 65 61 64 4f 6e 6c 79 28 29 3b 0a 20 20 20 20  ReadOnly();.    
7170: 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 7a 41  if( 0==strcmp(zA
7180: 72 67 2c 20 22 2d 62 79 74 65 73 22 29 20 29 7b  rg, "-bytes") ){
7190: 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 4f 62  .      Tcl_SetOb
71a0: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
71b0: 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 70 54  Tcl_NewIntObj(pT
71c0: 64 2d 3e 6e 41 6c 6c 6f 63 29 29 3b 0a 20 20 20  d->nAlloc));.   
71d0: 20 7d 65 6c 73 65 20 69 66 28 20 30 3d 3d 73 74   }else if( 0==st
71e0: 72 63 6d 70 28 7a 41 72 67 2c 20 22 2d 63 6c 65  rcmp(zArg, "-cle
71f0: 61 72 6d 61 78 62 79 74 65 73 22 29 20 29 7b 0a  armaxbytes") ){.
7200: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6e 4d        sqlite3_nM
7210: 61 78 41 6c 6c 6f 63 20 3d 20 70 54 64 2d 3e 6e  axAlloc = pTd->n
7220: 41 6c 6c 6f 63 3b 0a 20 20 20 20 7d 65 6c 73 65  Alloc;.    }else
7230: 20 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28   .#endif.    if(
7240: 20 30 3d 3d 73 74 72 63 6d 70 28 7a 41 72 67 2c   0==strcmp(zArg,
7250: 20 22 2d 6d 61 78 62 79 74 65 73 22 29 20 29 7b   "-maxbytes") ){
7260: 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 4f 62  .      Tcl_SetOb
7270: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
7280: 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62  Tcl_NewWideIntOb
7290: 6a 28 73 71 6c 69 74 65 33 5f 6e 4d 61 78 41 6c  j(sqlite3_nMaxAl
72a0: 6c 6f 63 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65  loc));.    }else
72b0: 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41 70 70 65  {.      Tcl_Appe
72c0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
72d0: 20 22 62 61 64 20 6f 70 74 69 6f 6e 20 5c 22 22   "bad option \""
72e0: 2c 20 7a 41 72 67 2c 20 0a 20 20 20 20 20 20 20  , zArg, .       
72f0: 20 22 5c 22 3a 20 6d 75 73 74 20 62 65 20 2d 62   "\": must be -b
7300: 79 74 65 73 2c 20 2d 6d 61 78 62 79 74 65 73 20  ytes, -maxbytes 
7310: 6f 72 20 2d 63 6c 65 61 72 6d 61 78 62 79 74 65  or -clearmaxbyte
7320: 73 22 2c 20 30 0a 20 20 20 20 20 20 29 3b 0a 20  s", 0.      );. 
7330: 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f       return TCL_
7340: 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 0a 20 20  ERROR;.    }..  
7350: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
7360: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 6f 62 6a 63  .  }..  if( objc
7370: 21 3d 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=1 ){.    Tcl_W
7380: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
7390: 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 2d  rp, 1, objv, "?-
73a0: 62 79 74 65 73 3f 22 29 3b 0a 20 20 20 20 72 65  bytes?");.    re
73b0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
73c0: 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 73 71    }..  return sq
73d0: 6c 69 74 65 33 4f 75 74 73 74 61 6e 64 69 6e 67  lite3Outstanding
73e0: 4d 61 6c 6c 6f 63 73 28 69 6e 74 65 72 70 29 3b  Mallocs(interp);
73f0: 0a 23 65 6c 73 65 0a 20 20 72 65 74 75 72 6e 20  .#else.  return 
7400: 54 43 4c 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 7d  TCL_OK;.#endif.}
7410: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55  .#endif../*.** U
7420: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 65 6e  sage: sqlite3_en
7430: 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68  able_shared_cach
7440: 65 20 20 20 20 20 20 42 4f 4f 4c 45 41 4e 0a 2a  e      BOOLEAN.*
7450: 2a 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  *.*/.#if !define
7460: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  d(SQLITE_OMIT_SH
7470: 41 52 45 44 5f 43 41 43 48 45 29 0a 73 74 61 74  ARED_CACHE).stat
7480: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 6e 61 62  ic int test_enab
7490: 6c 65 5f 73 68 61 72 65 64 28 0a 20 20 43 6c 69  le_shared(.  Cli
74a0: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
74b0: 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  ta, /* Pointer t
74c0: 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  o sqlite3_enable
74d0: 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  _XXX function */
74e0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
74f0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
7500: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
7510: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
7520: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
7530: 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
7540: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
7550: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
7560: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
7570: 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
7580: 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
7590: 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  /.){.  int rc;. 
75a0: 20 69 6e 74 20 65 6e 61 62 6c 65 3b 0a 20 20 69   int enable;.  i
75b0: 6e 74 20 72 65 74 20 3d 20 30 3b 0a 0a 20 20 69  nt ret = 0;..  i
75c0: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
75d0: 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
75e0: 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
75f0: 6a 76 2c 20 22 42 4f 4f 4c 45 41 4e 22 29 3b 0a  jv, "BOOLEAN");.
7600: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
7610: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
7620: 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72  Tcl_GetBooleanFr
7630: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
7640: 6a 76 5b 31 5d 2c 20 26 65 6e 61 62 6c 65 29 20  jv[1], &enable) 
7650: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
7660: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
7670: 65 74 20 3d 20 73 71 6c 69 74 65 33 54 68 72 65  et = sqlite3Thre
7680: 61 64 44 61 74 61 52 65 61 64 4f 6e 6c 79 28 29  adDataReadOnly()
7690: 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 3b  ->useSharedData;
76a0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
76b0: 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61  enable_shared_ca
76c0: 63 68 65 28 65 6e 61 62 6c 65 29 3b 0a 20 20 69  che(enable);.  i
76d0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
76e0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52   ){.    Tcl_SetR
76f0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
7700: 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72 72  har *)sqlite3Err
7710: 53 74 72 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  Str(rc), TCL_STA
7720: 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  TIC);.    return
7730: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
7740: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
7750: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
7760: 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 72 65 74  ewBooleanObj(ret
7770: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
7780: 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  _OK;.}.#endif../
7790: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
77a0: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e  te3_libversion_n
77b0: 75 6d 62 65 72 0a 2a 2a 0a 2a 2f 0a 73 74 61 74  umber.**.*/.stat
77c0: 69 63 20 69 6e 74 20 74 65 73 74 5f 6c 69 62 76  ic int test_libv
77d0: 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 0a 20  ersion_number(. 
77e0: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
77f0: 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74  ntData, /* Point
7800: 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e  er to sqlite3_en
7810: 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f  able_XXX functio
7820: 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  n */.  Tcl_Inter
7830: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
7840: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
7850: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
7860: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
7870: 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
7880: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
7890: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
78a0: 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
78b0: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
78c0: 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
78d0: 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 53  ts */.){.  Tcl_S
78e0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
78f0: 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
7900: 6a 28 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72  j(sqlite3_libver
7910: 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 29 29 3b  sion_number()));
7920: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
7930: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
7940: 3a 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  : sqlite3_table_
7950: 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 20  column_metadata 
7960: 44 42 20 64 62 6e 61 6d 65 20 74 62 6c 6e 61 6d  DB dbname tblnam
7970: 65 20 63 6f 6c 6e 61 6d 65 0a 2a 2a 0a 2a 2f 0a  e colname.**.*/.
7980: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
7990: 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41  ABLE_COLUMN_META
79a0: 44 41 54 41 0a 73 74 61 74 69 63 20 69 6e 74 20  DATA.static int 
79b0: 74 65 73 74 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d  test_table_colum
79c0: 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20 20 43 6c  n_metadata(.  Cl
79d0: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
79e0: 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20  ata, /* Pointer 
79f0: 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  to sqlite3_enabl
7a00: 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a  e_XXX function *
7a10: 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
7a20: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
7a30: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
7a40: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
7a50: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
7a60: 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20   int objc,      
7a70: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
7a80: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
7a90: 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  /.  Tcl_Obj *CON
7aa0: 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f  ST objv[]  /* Co
7ab0: 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20  mmand arguments 
7ac0: 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  */.){.  sqlite3 
7ad0: 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  *db;.  const cha
7ae0: 72 20 2a 7a 44 62 3b 0a 20 20 63 6f 6e 73 74 20  r *zDb;.  const 
7af0: 63 68 61 72 20 2a 7a 54 62 6c 3b 0a 20 20 63 6f  char *zTbl;.  co
7b00: 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 0a  nst char *zCol;.
7b10: 20 20 69 6e 74 20 72 63 3b 0a 20 20 54 63 6c 5f    int rc;.  Tcl_
7b20: 4f 62 6a 20 2a 70 52 65 74 3b 0a 0a 20 20 63 6f  Obj *pRet;..  co
7b30: 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 61 74  nst char *zDatat
7b40: 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  ype;.  const cha
7b50: 72 20 2a 7a 43 6f 6c 6c 73 65 71 3b 0a 20 20 69  r *zCollseq;.  i
7b60: 6e 74 20 6e 6f 74 6e 75 6c 6c 3b 0a 20 20 69 6e  nt notnull;.  in
7b70: 74 20 70 72 69 6d 61 72 79 6b 65 79 3b 0a 20 20  t primarykey;.  
7b80: 69 6e 74 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  int autoincremen
7b90: 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  t;..  if( objc!=
7ba0: 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  5 ){.    Tcl_Wro
7bb0: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
7bc0: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42 20 64  , 1, objv, "DB d
7bd0: 62 6e 61 6d 65 20 74 62 6c 6e 61 6d 65 20 63 6f  bname tblname co
7be0: 6c 6e 61 6d 65 22 29 3b 0a 20 20 20 20 72 65 74  lname");.    ret
7bf0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
7c00: 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
7c10: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
7c20: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
7c30: 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
7c40: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
7c50: 20 7a 44 62 20 3d 20 54 63 6c 5f 47 65 74 53 74   zDb = Tcl_GetSt
7c60: 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20  ring(objv[2]);. 
7c70: 20 7a 54 62 6c 20 3d 20 54 63 6c 5f 47 65 74 53   zTbl = Tcl_GetS
7c80: 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a  tring(objv[3]);.
7c90: 20 20 7a 43 6f 6c 20 3d 20 54 63 6c 5f 47 65 74    zCol = Tcl_Get
7ca0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 34 5d 29 3b  String(objv[4]);
7cb0: 0a 0a 20 20 69 66 28 20 73 74 72 6c 65 6e 28 7a  ..  if( strlen(z
7cc0: 44 62 29 3d 3d 30 20 29 20 7a 44 62 20 3d 20 30  Db)==0 ) zDb = 0
7cd0: 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
7ce0: 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d  3_table_column_m
7cf0: 65 74 61 64 61 74 61 28 64 62 2c 20 7a 44 62 2c  etadata(db, zDb,
7d00: 20 7a 54 62 6c 2c 20 7a 43 6f 6c 2c 20 0a 20 20   zTbl, zCol, .  
7d10: 20 20 20 20 26 7a 44 61 74 61 74 79 70 65 2c 20      &zDatatype, 
7d20: 26 7a 43 6f 6c 6c 73 65 71 2c 20 26 6e 6f 74 6e  &zCollseq, &notn
7d30: 75 6c 6c 2c 20 26 70 72 69 6d 61 72 79 6b 65 79  ull, &primarykey
7d40: 2c 20 26 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  , &autoincrement
7d50: 29 3b 0a 0a 20 20 69 66 28 20 72 63 21 3d 53 51  );..  if( rc!=SQ
7d60: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54  LITE_OK ){.    T
7d70: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
7d80: 69 6e 74 65 72 70 2c 20 73 71 6c 69 74 65 33 5f  interp, sqlite3_
7d90: 65 72 72 6d 73 67 28 64 62 29 2c 20 30 29 3b 0a  errmsg(db), 0);.
7da0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
7db0: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 70 52 65  RROR;.  }..  pRe
7dc0: 74 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29  t = Tcl_NewObj()
7dd0: 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
7de0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20  ppendElement(0, 
7df0: 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72  pRet, Tcl_NewStr
7e00: 69 6e 67 4f 62 6a 28 7a 44 61 74 61 74 79 70 65  ingObj(zDatatype
7e10: 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69  , -1));.  Tcl_Li
7e20: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
7e30: 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63 6c 5f  nt(0, pRet, Tcl_
7e40: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 43 6f  NewStringObj(zCo
7e50: 6c 6c 73 65 71 2c 20 2d 31 29 29 3b 0a 20 20 54  llseq, -1));.  T
7e60: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
7e70: 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c  Element(0, pRet,
7e80: 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e   Tcl_NewIntObj(n
7e90: 6f 74 6e 75 6c 6c 29 29 3b 0a 20 20 54 63 6c 5f  otnull));.  Tcl_
7ea0: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
7eb0: 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63  ment(0, pRet, Tc
7ec0: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 70 72 69 6d  l_NewIntObj(prim
7ed0: 61 72 79 6b 65 79 29 29 3b 0a 20 20 54 63 6c 5f  arykey));.  Tcl_
7ee0: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
7ef0: 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63  ment(0, pRet, Tc
7f00: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 75 74 6f  l_NewIntObj(auto
7f10: 69 6e 63 72 65 6d 65 6e 74 29 29 3b 0a 20 20 54  increment));.  T
7f20: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
7f30: 69 6e 74 65 72 70 2c 20 70 52 65 74 29 3b 0a 0a  interp, pRet);..
7f40: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
7f50: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  .}.#endif.../*.*
7f60: 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
7f70: 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20  _load_extension 
7f80: 44 42 2d 48 41 4e 44 4c 45 20 46 49 4c 45 20 3f  DB-HANDLE FILE ?
7f90: 50 52 4f 43 3f 0a 2a 2f 0a 73 74 61 74 69 63 20  PROC?.*/.static 
7fa0: 69 6e 74 20 74 65 73 74 5f 6c 6f 61 64 5f 65 78  int test_load_ex
7fb0: 74 65 6e 73 69 6f 6e 28 0a 20 20 43 6c 69 65 6e  tension(.  Clien
7fc0: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
7fd0: 2c 20 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f  , /* Not used */
7fe0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
7ff0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
8000: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
8010: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
8020: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
8030: 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
8040: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
8050: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
8060: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
8070: 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
8080: 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
8090: 2f 0a 29 7b 0a 20 20 54 63 6c 5f 43 6d 64 49 6e  /.){.  Tcl_CmdIn
80a0: 66 6f 20 63 6d 64 49 6e 66 6f 3b 0a 20 20 73 71  fo cmdInfo;.  sq
80b0: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74  lite3 *db;.  int
80c0: 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 44 62   rc;.  char *zDb
80d0: 3b 0a 20 20 63 68 61 72 20 2a 7a 46 69 6c 65 3b  ;.  char *zFile;
80e0: 0a 20 20 63 68 61 72 20 2a 7a 50 72 6f 63 20 3d  .  char *zProc =
80f0: 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72   0;.  char *zErr
8100: 20 3d 20 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a   = 0;..  if( obj
8110: 63 21 3d 34 20 26 26 20 6f 62 6a 63 21 3d 33 20  c!=4 && objc!=3 
8120: 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
8130: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
8140: 31 2c 20 6f 62 6a 76 2c 20 22 44 42 2d 48 41 4e  1, objv, "DB-HAN
8150: 44 4c 45 20 46 49 4c 45 20 3f 50 52 4f 43 3f 22  DLE FILE ?PROC?"
8160: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
8170: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a  L_ERROR;.  }.  z
8180: 44 62 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  Db = Tcl_GetStri
8190: 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20 20 7a  ng(objv[1]);.  z
81a0: 46 69 6c 65 20 3d 20 54 63 6c 5f 47 65 74 53 74  File = Tcl_GetSt
81b0: 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20  ring(objv[2]);. 
81c0: 20 69 66 28 20 6f 62 6a 63 3d 3d 34 20 29 7b 0a   if( objc==4 ){.
81d0: 20 20 20 20 7a 50 72 6f 63 20 3d 20 54 63 6c 5f      zProc = Tcl_
81e0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33  GetString(objv[3
81f0: 5d 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78  ]);.  }..  /* Ex
8200: 74 72 61 63 74 20 74 68 65 20 43 20 64 61 74 61  tract the C data
8210: 62 61 73 65 20 68 61 6e 64 6c 65 20 66 72 6f 6d  base handle from
8220: 20 74 68 65 20 54 63 6c 20 63 6f 6d 6d 61 6e 64   the Tcl command
8230: 20 6e 61 6d 65 20 2a 2f 0a 20 20 69 66 28 20 21   name */.  if( !
8240: 54 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64 49 6e  Tcl_GetCommandIn
8250: 66 6f 28 69 6e 74 65 72 70 2c 20 7a 44 62 2c 20  fo(interp, zDb, 
8260: 26 63 6d 64 49 6e 66 6f 29 20 29 7b 0a 20 20 20  &cmdInfo) ){.   
8270: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
8280: 74 28 69 6e 74 65 72 70 2c 20 22 63 6f 6d 6d 61  t(interp, "comma
8290: 6e 64 20 6e 6f 74 20 66 6f 75 6e 64 3a 20 22 2c  nd not found: ",
82a0: 20 7a 44 62 2c 20 28 63 68 61 72 2a 29 30 29 3b   zDb, (char*)0);
82b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
82c0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 64 62 20  ERROR;.  }.  db 
82d0: 3d 20 28 28 73 74 72 75 63 74 20 53 71 6c 69 74  = ((struct Sqlit
82e0: 65 44 62 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62 6a  eDb*)cmdInfo.obj
82f0: 43 6c 69 65 6e 74 44 61 74 61 29 2d 3e 64 62 3b  ClientData)->db;
8300: 0a 20 20 61 73 73 65 72 74 28 64 62 29 3b 0a 0a  .  assert(db);..
8310: 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 75 6e    /* Call the un
8320: 64 65 72 6c 79 69 6e 67 20 43 20 66 75 6e 63 74  derlying C funct
8330: 69 6f 6e 2e 20 49 66 20 61 6e 20 65 72 72 6f 72  ion. If an error
8340: 20 6f 63 63 75 72 73 2c 20 73 65 74 20 72 63 20   occurs, set rc 
8350: 74 6f 20 0a 20 20 2a 2a 20 54 43 4c 5f 45 52 52  to .  ** TCL_ERR
8360: 4f 52 20 61 6e 64 20 6c 6f 61 64 20 61 6e 79 20  OR and load any 
8370: 65 72 72 6f 72 20 73 74 72 69 6e 67 20 69 6e 74  error string int
8380: 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65  o the interprete
8390: 72 2e 20 49 66 20 6e 6f 20 0a 20 20 2a 2a 20 65  r. If no .  ** e
83a0: 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 73 65 74  rror occurs, set
83b0: 20 72 63 20 74 6f 20 54 43 4c 5f 4f 4b 2e 0a 20   rc to TCL_OK.. 
83c0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
83d0: 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
83e0: 4e 53 49 4f 4e 0a 20 20 72 63 20 3d 20 53 51 4c  NSION.  rc = SQL
83f0: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7a 45 72  ITE_ERROR;.  zEr
8400: 72 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  r = sqlite3_mpri
8410: 6e 74 66 28 22 74 68 69 73 20 62 75 69 6c 64 20  ntf("this build 
8420: 6f 6d 69 74 73 20 73 71 6c 69 74 65 33 5f 6c 6f  omits sqlite3_lo
8430: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 22 29  ad_extension()")
8440: 3b 0a 23 65 6c 73 65 0a 20 20 72 63 20 3d 20 73  ;.#else.  rc = s
8450: 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65  qlite3_load_exte
8460: 6e 73 69 6f 6e 28 64 62 2c 20 7a 46 69 6c 65 2c  nsion(db, zFile,
8470: 20 7a 50 72 6f 63 2c 20 26 7a 45 72 72 29 3b 0a   zProc, &zErr);.
8480: 23 65 6e 64 69 66 0a 20 20 69 66 28 20 72 63 21  #endif.  if( rc!
8490: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
84a0: 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
84b0: 69 6e 74 65 72 70 2c 20 7a 45 72 72 20 3f 20 7a  interp, zErr ? z
84c0: 45 72 72 20 3a 20 22 22 2c 20 54 43 4c 5f 56 4f  Err : "", TCL_VO
84d0: 4c 41 54 49 4c 45 29 3b 0a 20 20 20 20 72 63 20  LATILE);.    rc 
84e0: 3d 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  = TCL_ERROR;.  }
84f0: 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 54  else{.    rc = T
8500: 43 4c 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 73 71 6c  CL_OK;.  }.  sql
8510: 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b  ite3_free(zErr);
8520: 0a 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ..  return rc;.}
8530: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
8540: 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f  qlite3_enable_lo
8550: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 44 42 2d  ad_extension DB-
8560: 48 41 4e 44 4c 45 20 4f 4e 4f 46 46 0a 2a 2f 0a  HANDLE ONOFF.*/.
8570: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
8580: 65 6e 61 62 6c 65 5f 6c 6f 61 64 28 0a 20 20 43  enable_load(.  C
8590: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
85a0: 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75 73 65  Data, /* Not use
85b0: 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  d */.  Tcl_Inter
85c0: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
85d0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
85e0: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
85f0: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
8600: 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
8610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
8620: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
8630: 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
8640: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
8650: 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
8660: 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 43  ts */.){.  Tcl_C
8670: 6d 64 49 6e 66 6f 20 63 6d 64 49 6e 66 6f 3b 0a  mdInfo cmdInfo;.
8680: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
8690: 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 69 6e   char *zDb;.  in
86a0: 74 20 6f 6e 6f 66 66 3b 0a 0a 20 20 69 66 28 20  t onoff;..  if( 
86b0: 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
86c0: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
86d0: 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
86e0: 20 22 44 42 2d 48 41 4e 44 4c 45 20 4f 4e 4f 46   "DB-HANDLE ONOF
86f0: 46 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  F");.    return 
8700: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
8710: 20 7a 44 62 20 3d 20 54 63 6c 5f 47 65 74 53 74   zDb = Tcl_GetSt
8720: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 0a  ring(objv[1]);..
8730: 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65    /* Extract the
8740: 20 43 20 64 61 74 61 62 61 73 65 20 68 61 6e 64   C database hand
8750: 6c 65 20 66 72 6f 6d 20 74 68 65 20 54 63 6c 20  le from the Tcl 
8760: 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 20 2a 2f 0a  command name */.
8770: 20 20 69 66 28 20 21 54 63 6c 5f 47 65 74 43 6f    if( !Tcl_GetCo
8780: 6d 6d 61 6e 64 49 6e 66 6f 28 69 6e 74 65 72 70  mmandInfo(interp
8790: 2c 20 7a 44 62 2c 20 26 63 6d 64 49 6e 66 6f 29  , zDb, &cmdInfo)
87a0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
87b0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
87c0: 20 22 63 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f   "command not fo
87d0: 75 6e 64 3a 20 22 2c 20 7a 44 62 2c 20 28 63 68  und: ", zDb, (ch
87e0: 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 65 74 75  ar*)0);.    retu
87f0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
8800: 7d 0a 20 20 64 62 20 3d 20 28 28 73 74 72 75 63  }.  db = ((struc
8810: 74 20 53 71 6c 69 74 65 44 62 2a 29 63 6d 64 49  t SqliteDb*)cmdI
8820: 6e 66 6f 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74  nfo.objClientDat
8830: 61 29 2d 3e 64 62 3b 0a 20 20 61 73 73 65 72 74  a)->db;.  assert
8840: 28 64 62 29 3b 0a 0a 20 20 2f 2a 20 47 65 74 20  (db);..  /* Get 
8850: 74 68 65 20 6f 6e 6f 66 66 20 70 61 72 61 6d 65  the onoff parame
8860: 74 65 72 20 2a 2f 0a 20 20 69 66 28 20 54 63 6c  ter */.  if( Tcl
8870: 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f  _GetBooleanFromO
8880: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
8890: 32 5d 2c 20 26 6f 6e 6f 66 66 29 20 29 7b 0a 20  2], &onoff) ){. 
88a0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
88b0: 52 4f 52 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66  ROR;.  }..#ifdef
88c0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
88d0: 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 54 63  D_EXTENSION.  Tc
88e0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
88f0: 6e 74 65 72 70 2c 20 22 74 68 69 73 20 62 75 69  nterp, "this bui
8900: 6c 64 20 6f 6d 69 74 73 20 73 71 6c 69 74 65 33  ld omits sqlite3
8910: 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28  _load_extension(
8920: 29 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  )");.  return TC
8930: 4c 5f 45 52 52 4f 52 3b 0a 23 65 6c 73 65 0a 20  L_ERROR;.#else. 
8940: 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f   sqlite3_enable_
8950: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 64  load_extension(d
8960: 62 2c 20 6f 6e 6f 66 66 29 3b 0a 20 20 72 65 74  b, onoff);.  ret
8970: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 23 65 6e 64  urn TCL_OK;.#end
8980: 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  if.}../*.** Usag
8990: 65 3a 20 20 73 71 6c 69 74 65 5f 61 62 6f 72 74  e:  sqlite_abort
89a0: 0a 2a 2a 0a 2a 2a 20 53 68 75 74 64 6f 77 6e 20  .**.** Shutdown 
89b0: 74 68 65 20 70 72 6f 63 65 73 73 20 69 6d 6d 65  the process imme
89c0: 64 69 61 74 65 6c 79 2e 20 20 54 68 69 73 20 69  diately.  This i
89d0: 73 20 6e 6f 74 20 61 20 63 6c 65 61 6e 20 73 68  s not a clean sh
89e0: 75 74 64 6f 77 6e 2e 0a 2a 2a 20 54 68 69 73 20  utdown..** This 
89f0: 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20  command is used 
8a00: 74 6f 20 74 65 73 74 20 74 68 65 20 72 65 63 6f  to test the reco
8a10: 76 65 72 61 62 69 6c 69 74 79 20 6f 66 20 61 20  verability of a 
8a20: 64 61 74 61 62 61 73 65 20 69 6e 0a 2a 2a 20 74  database in.** t
8a30: 68 65 20 65 76 65 6e 74 20 6f 66 20 61 20 70 72  he event of a pr
8a40: 6f 67 72 61 6d 20 63 72 61 73 68 2e 0a 2a 2f 0a  ogram crash..*/.
8a50: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
8a60: 65 5f 61 62 6f 72 74 28 0a 20 20 76 6f 69 64 20  e_abort(.  void 
8a70: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
8a80: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
8a90: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
8aa0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
8ab0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
8ac0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
8ad0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
8ae0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
8af0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
8b00: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
8b10: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
8b20: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
8b30: 7b 0a 20 20 61 73 73 65 72 74 28 20 69 6e 74 65  {.  assert( inte
8b40: 72 70 3d 3d 30 20 29 3b 20 20 20 2f 2a 20 54 68  rp==0 );   /* Th
8b50: 69 73 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 66  is will always f
8b60: 61 69 6c 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20  ail */.  return 
8b70: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
8b80: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   The following r
8b90: 6f 75 74 69 6e 65 20 69 73 20 61 20 75 73 65 72  outine is a user
8ba0: 2d 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e  -defined SQL fun
8bb0: 63 74 69 6f 6e 20 77 68 6f 73 65 20 70 75 72 70  ction whose purp
8bc0: 6f 73 65 0a 2a 2a 20 69 73 20 74 6f 20 74 65 73  ose.** is to tes
8bd0: 74 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 74  t the sqlite_set
8be0: 5f 72 65 73 75 6c 74 28 29 20 41 50 49 2e 0a 2a  _result() API..*
8bf0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 65  /.static void te
8c00: 73 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63  stFunc(sqlite3_c
8c10: 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c  ontext *context,
8c20: 20 69 6e 74 20 61 72 67 63 2c 20 73 71 6c 69 74   int argc, sqlit
8c30: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 29  e3_value **argv)
8c40: 7b 0a 20 20 77 68 69 6c 65 28 20 61 72 67 63 3e  {.  while( argc>
8c50: 3d 32 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20  =2 ){.    const 
8c60: 63 68 61 72 20 2a 7a 41 72 67 30 20 3d 20 28 63  char *zArg0 = (c
8c70: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
8c80: 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29  ue_text(argv[0])
8c90: 3b 0a 20 20 20 20 69 66 28 20 7a 41 72 67 30 20  ;.    if( zArg0 
8ca0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 30 3d 3d  ){.      if( 0==
8cb0: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
8cc0: 41 72 67 30 2c 20 22 69 6e 74 22 29 20 29 7b 0a  Arg0, "int") ){.
8cd0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
8ce0: 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65  result_int(conte
8cf0: 78 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  xt, sqlite3_valu
8d00: 65 5f 69 6e 74 28 61 72 67 76 5b 31 5d 29 29 3b  e_int(argv[1]));
8d10: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
8d20: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
8d30: 7a 41 72 67 30 2c 22 69 6e 74 36 34 22 29 3d 3d  zArg0,"int64")==
8d40: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
8d50: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36  ite3_result_int6
8d60: 34 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69 74  4(context, sqlit
8d70: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 61  e3_value_int64(a
8d80: 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20  rgv[1]));.      
8d90: 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
8da0: 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22  3StrICmp(zArg0,"
8db0: 73 74 72 69 6e 67 22 29 3d 3d 30 20 29 7b 0a 20  string")==0 ){. 
8dc0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
8dd0: 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65  esult_text(conte
8de0: 78 74 2c 20 28 63 68 61 72 2a 29 73 71 6c 69 74  xt, (char*)sqlit
8df0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72  e3_value_text(ar
8e00: 67 76 5b 31 5d 29 2c 20 2d 31 2c 0a 20 20 20 20  gv[1]), -1,.    
8e10: 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54          SQLITE_T
8e20: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20  RANSIENT);.     
8e30: 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
8e40: 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c  e3StrICmp(zArg0,
8e50: 22 64 6f 75 62 6c 65 22 29 3d 3d 30 20 29 7b 0a  "double")==0 ){.
8e60: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
8e70: 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f  result_double(co
8e80: 6e 74 65 78 74 2c 20 73 71 6c 69 74 65 33 5f 76  ntext, sqlite3_v
8e90: 61 6c 75 65 5f 64 6f 75 62 6c 65 28 61 72 67 76  alue_double(argv
8ea0: 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c  [1]));.      }el
8eb0: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
8ec0: 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 6e 75 6c  rICmp(zArg0,"nul
8ed0: 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  l")==0 ){.      
8ee0: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
8ef0: 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0a  _null(context);.
8f00: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
8f10: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
8f20: 41 72 67 30 2c 22 76 61 6c 75 65 22 29 3d 3d 30  Arg0,"value")==0
8f30: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
8f40: 74 65 33 5f 72 65 73 75 6c 74 5f 76 61 6c 75 65  te3_result_value
8f50: 28 63 6f 6e 74 65 78 74 2c 20 61 72 67 76 5b 73  (context, argv[s
8f60: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
8f70: 28 61 72 67 76 5b 31 5d 29 5d 29 3b 0a 20 20 20  (argv[1])]);.   
8f80: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
8f90: 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74    goto error_out
8fa0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
8fb0: 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  lse{.      goto 
8fc0: 65 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 7d  error_out;.    }
8fd0: 0a 20 20 20 20 61 72 67 63 20 2d 3d 20 32 3b 0a  .    argc -= 2;.
8fe0: 20 20 20 20 61 72 67 76 20 2b 3d 20 32 3b 0a 20      argv += 2;. 
8ff0: 20 7d 0a 20 20 72 65 74 75 72 6e 3b 0a 0a 65 72   }.  return;..er
9000: 72 6f 72 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74  ror_out:.  sqlit
9010: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
9020: 63 6f 6e 74 65 78 74 2c 22 66 69 72 73 74 20 61  context,"first a
9030: 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64 20 62  rgument should b
9040: 65 20 6f 6e 65 20 6f 66 3a 20 22 0a 20 20 20 20  e one of: ".    
9050: 20 20 22 69 6e 74 20 69 6e 74 36 34 20 73 74 72    "int int64 str
9060: 69 6e 67 20 64 6f 75 62 6c 65 20 6e 75 6c 6c 20  ing double null 
9070: 76 61 6c 75 65 22 2c 20 2d 31 29 3b 0a 7d 0a 0a  value", -1);.}..
9080: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73  /*.** Usage:   s
9090: 71 6c 69 74 65 5f 72 65 67 69 73 74 65 72 5f 74  qlite_register_t
90a0: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 20 44 42  est_function  DB
90b0: 20 20 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 67    NAME.**.** Reg
90c0: 69 73 74 65 72 20 74 68 65 20 74 65 73 74 20 53  ister the test S
90d0: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 6e 20 74  QL function on t
90e0: 68 65 20 64 61 74 61 62 61 73 65 20 44 42 20 75  he database DB u
90f0: 6e 64 65 72 20 74 68 65 20 6e 61 6d 65 20 4e 41  nder the name NA
9100: 4d 45 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ME..*/.static in
9110: 74 20 74 65 73 74 5f 72 65 67 69 73 74 65 72 5f  t test_register_
9120: 66 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  func(.  void *No
9130: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
9140: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
9150: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
9160: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
9170: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
9180: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
9190: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
91a0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
91b0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
91c0: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
91d0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
91e0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
91f0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
9200: 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 61 72  int rc;.  if( ar
9210: 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
9220: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
9230: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
9240: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
9250: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20  "", argv[0], .  
9260: 20 20 20 20 20 22 20 44 42 20 46 55 4e 43 54 49       " DB FUNCTI
9270: 4f 4e 2d 4e 41 4d 45 22 2c 20 30 29 3b 0a 20 20  ON-NAME", 0);.  
9280: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
9290: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
92a0: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
92b0: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
92c0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
92d0: 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
92e0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
92f0: 69 6f 6e 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c  ion(db, argv[2],
9300: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38   -1, SQLITE_UTF8
9310: 2c 20 30 2c 20 0a 20 20 20 20 20 20 74 65 73 74  , 0, .      test
9320: 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20 69  Func, 0, 0);.  i
9330: 66 28 20 72 63 21 3d 30 20 29 7b 0a 20 20 20 20  f( rc!=0 ){.    
9340: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
9350: 28 69 6e 74 65 72 70 2c 20 73 71 6c 69 74 65 33  (interp, sqlite3
9360: 45 72 72 53 74 72 28 72 63 29 2c 20 30 29 3b 0a  ErrStr(rc), 0);.
9370: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
9380: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
9390: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
93a0: 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
93b0: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
93c0: 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20  ERROR;.  return 
93d0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
93e0: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
93f0: 5f 66 69 6e 61 6c 69 7a 65 20 20 53 54 4d 54 20  _finalize  STMT 
9400: 0a 2a 2a 0a 2a 2a 20 46 69 6e 61 6c 69 7a 65 20  .**.** Finalize 
9410: 61 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e 64  a statement hand
9420: 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  le..*/.static in
9430: 74 20 74 65 73 74 5f 66 69 6e 61 6c 69 7a 65 28  t test_finalize(
9440: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
9450: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
9460: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
9470: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
9480: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
9490: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
94a0: 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
94b0: 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  rc;.  sqlite3 *d
94c0: 62 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  b;..  if( objc!=
94d0: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
94e0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
94f0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
9500: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
9510: 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53          Tcl_GetS
9520: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
9530: 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54 4d  v[0], 0), " <STM
9540: 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  T>", 0);.    ret
9550: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
9560: 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
9570: 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
9580: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
9590: 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
95a0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
95b0: 52 4f 52 3b 0a 0a 20 20 69 66 28 20 70 53 74 6d  ROR;..  if( pStm
95c0: 74 20 29 7b 0a 20 20 20 20 64 62 20 3d 20 53 74  t ){.    db = St
95d0: 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 3b 0a 20  mtToDb(pStmt);. 
95e0: 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
95f0: 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
9600: 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75  );.  Tcl_SetResu
9610: 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72  lt(interp, (char
9620: 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29   *)errorName(rc)
9630: 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20  , TCL_STATIC);. 
9640: 20 69 66 28 20 64 62 20 26 26 20 73 71 6c 69 74   if( db && sqlit
9650: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
9660: 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20  terp, db, rc) ) 
9670: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
9680: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
9690: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
96a0: 65 3a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65  e:  sqlite3_rese
96b0: 74 20 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52  t  STMT .**.** R
96c0: 65 73 65 74 20 61 20 73 74 61 74 65 6d 65 6e 74  eset a statement
96d0: 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74   handle..*/.stat
96e0: 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65 73 65  ic int test_rese
96f0: 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  t(.  void * clie
9700: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
9710: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
9720: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
9730: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
9740: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
9750: 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
9760: 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
9770: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
9780: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
9790: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
97a0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
97b0: 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
97c0: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
97d0: 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c  objv[0], 0), " <
97e0: 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20  STMT>", 0);.    
97f0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
9800: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
9810: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
9820: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
9830: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
9840: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
9850: 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
9860: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70 53  sqlite3_reset(pS
9870: 74 6d 74 29 3b 0a 20 20 69 66 28 20 70 53 74 6d  tmt);.  if( pStm
9880: 74 20 26 26 20 73 71 6c 69 74 65 33 54 65 73 74  t && sqlite3Test
9890: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
98a0: 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c  StmtToDb(pStmt),
98b0: 20 72 63 29 20 29 7b 0a 20 20 20 20 72 65 74 75   rc) ){.    retu
98c0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
98d0: 7d 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c  }.  Tcl_SetResul
98e0: 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
98f0: 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
9900: 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 2f 2a   TCL_STATIC);./*
9910: 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
9920: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
9930: 52 3b 0a 20 20 7d 0a 2a 2f 0a 20 20 72 65 74 75  R;.  }.*/.  retu
9940: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
9950: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
9960: 74 65 33 5f 65 78 70 69 72 65 64 20 53 54 4d 54  te3_expired STMT
9970: 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54   .**.** Return T
9980: 52 55 45 20 69 66 20 61 20 72 65 63 6f 6d 70 69  RUE if a recompi
9990: 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74  lation of the st
99a0: 61 74 65 6d 65 6e 74 20 69 73 20 72 65 63 6f 6d  atement is recom
99b0: 6d 65 6e 64 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  mended..*/.stati
99c0: 63 20 69 6e 74 20 74 65 73 74 5f 65 78 70 69 72  c int test_expir
99d0: 65 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  ed(.  void * cli
99e0: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
99f0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
9a00: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
9a10: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
9a20: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
9a30: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
9a40: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
9a50: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
9a60: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
9a70: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
9a80: 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
9a90: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
9aa0: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
9ab0: 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29  ), " <STMT>", 0)
9ac0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
9ad0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
9ae0: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
9af0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
9b00: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
9b10: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
9b20: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
9b30: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
9b40: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42  interp, Tcl_NewB
9b50: 6f 6f 6c 65 61 6e 4f 62 6a 28 73 71 6c 69 74 65  ooleanObj(sqlite
9b60: 33 5f 65 78 70 69 72 65 64 28 70 53 74 6d 74 29  3_expired(pStmt)
9b70: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
9b80: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
9b90: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 74 72  age:  sqlite3_tr
9ba0: 61 6e 73 66 65 72 5f 62 69 6e 64 69 6e 67 73 20  ansfer_bindings 
9bb0: 46 52 4f 4d 53 54 4d 54 20 54 4f 53 54 4d 54 0a  FROMSTMT TOSTMT.
9bc0: 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 61  **.** Transfer a
9bd0: 6c 6c 20 62 69 6e 64 69 6e 67 73 20 66 72 6f 6d  ll bindings from
9be0: 20 46 52 4f 4d 53 54 4d 54 20 6f 76 65 72 20 74   FROMSTMT over t
9bf0: 6f 20 54 4f 53 54 4d 54 0a 2a 2f 0a 73 74 61 74  o TOSTMT.*/.stat
9c00: 69 63 20 69 6e 74 20 74 65 73 74 5f 74 72 61 6e  ic int test_tran
9c10: 73 66 65 72 5f 62 69 6e 64 28 0a 20 20 76 6f 69  sfer_bind(.  voi
9c20: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
9c30: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
9c40: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
9c50: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
9c60: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
9c70: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
9c80: 6d 74 31 2c 20 2a 70 53 74 6d 74 32 3b 0a 20 20  mt1, *pStmt2;.  
9c90: 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
9ca0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
9cb0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
9cc0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
9cd0: 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
9ce0: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
9cf0: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
9d00: 30 29 2c 20 22 20 46 52 4f 4d 2d 53 54 4d 54 20  0), " FROM-STMT 
9d10: 54 4f 2d 53 54 4d 54 22 2c 20 30 29 3b 0a 20 20  TO-STMT", 0);.  
9d20: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
9d30: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
9d40: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
9d50: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
9d60: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
9d70: 74 6d 74 31 29 29 20 72 65 74 75 72 6e 20 54 43  tmt1)) return TC
9d80: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 67  L_ERROR;.  if( g
9d90: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
9da0: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
9db0: 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 2c 20 26 70  ing(objv[2]), &p
9dc0: 53 74 6d 74 32 29 29 20 72 65 74 75 72 6e 20 54  Stmt2)) return T
9dd0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
9de0: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
9df0: 65 72 70 2c 20 0a 20 20 20 20 20 54 63 6c 5f 4e  erp, .     Tcl_N
9e00: 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
9e10: 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 69 6e  _transfer_bindin
9e20: 67 73 28 70 53 74 6d 74 31 2c 70 53 74 6d 74 32  gs(pStmt1,pStmt2
9e30: 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  )));.  return TC
9e40: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
9e50: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 63  sage:  sqlite3_c
9e60: 68 61 6e 67 65 73 20 44 42 0a 2a 2a 0a 2a 2a 20  hanges DB.**.** 
9e70: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
9e80: 72 20 6f 66 20 63 68 61 6e 67 65 73 20 6d 61 64  r of changes mad
9e90: 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  e to the databas
9ea0: 65 20 62 79 20 74 68 65 20 6c 61 73 74 20 53 51  e by the last SQ
9eb0: 4c 0a 2a 2a 20 65 78 65 63 75 74 69 6f 6e 2e 0a  L.** execution..
9ec0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
9ed0: 73 74 5f 63 68 61 6e 67 65 73 28 0a 20 20 76 6f  st_changes(.  vo
9ee0: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
9ef0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
9f00: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
9f10: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
9f20: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
9f30: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
9f40: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
9f50: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
9f60: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
9f70: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
9f80: 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
9f90: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
9fa0: 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30  jv[0]), " DB", 0
9fb0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
9fc0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
9fd0: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
9fe0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
9ff0: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
a000: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
a010: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53  L_ERROR;.  Tcl_S
a020: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
a030: 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
a040: 6a 28 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  j(sqlite3_change
a050: 73 28 64 62 29 29 29 3b 0a 20 20 72 65 74 75 72  s(db)));.  retur
a060: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
a070: 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 22  ** This is the "
a080: 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75  static_bind_valu
a090: 65 22 20 74 68 61 74 20 76 61 72 69 61 62 6c 65  e" that variable
a0a0: 73 20 61 72 65 20 62 6f 75 6e 64 20 74 6f 20 77  s are bound to w
a0b0: 68 65 6e 0a 2a 2a 20 74 68 65 20 46 4c 41 47 20  hen.** the FLAG 
a0c0: 6f 70 74 69 6f 6e 20 6f 66 20 73 71 6c 69 74 65  option of sqlite
a0d0: 33 5f 62 69 6e 64 20 69 73 20 22 73 74 61 74 69  3_bind is "stati
a0e0: 63 22 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61  c".*/.static cha
a0f0: 72 20 2a 73 71 6c 69 74 65 5f 73 74 61 74 69 63  r *sqlite_static
a100: 5f 62 69 6e 64 5f 76 61 6c 75 65 20 3d 20 30 3b  _bind_value = 0;
a110: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
a120: 73 71 6c 69 74 65 33 5f 62 69 6e 64 20 20 56 4d  sqlite3_bind  VM
a130: 20 20 49 44 58 20 20 56 41 4c 55 45 20 20 46 4c    IDX  VALUE  FL
a140: 41 47 53 0a 2a 2a 0a 2a 2a 20 53 65 74 73 20 74  AGS.**.** Sets t
a150: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
a160: 49 44 58 2d 74 68 20 6f 63 63 75 72 61 6e 63 65  IDX-th occurance
a170: 20 6f 66 20 22 3f 22 20 69 6e 20 74 68 65 20 6f   of "?" in the o
a180: 72 69 67 69 6e 61 6c 20 53 51 4c 0a 2a 2a 20 73  riginal SQL.** s
a190: 74 72 69 6e 67 2e 20 20 56 41 4c 55 45 20 69 73  tring.  VALUE is
a1a0: 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 2e 20   the new value. 
a1b0: 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e 75 6c 6c   If FLAGS=="null
a1c0: 22 20 74 68 65 6e 20 56 41 4c 55 45 20 69 73 0a  " then VALUE is.
a1d0: 2a 2a 20 69 67 6e 6f 72 65 64 20 61 6e 64 20 74  ** ignored and t
a1e0: 68 65 20 76 61 6c 75 65 20 69 73 20 73 65 74 20  he value is set 
a1f0: 74 6f 20 4e 55 4c 4c 2e 20 20 49 66 20 46 4c 41  to NULL.  If FLA
a200: 47 53 3d 3d 22 73 74 61 74 69 63 22 20 74 68 65  GS=="static" the
a210: 6e 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 69  n.** the value i
a220: 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
a230: 75 65 20 6f 66 20 61 20 73 74 61 74 69 63 20 76  ue of a static v
a240: 61 72 69 61 62 6c 65 20 6e 61 6d 65 64 0a 2a 2a  ariable named.**
a250: 20 22 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f   "sqlite_static_
a260: 62 69 6e 64 5f 76 61 6c 75 65 22 2e 20 20 49 66  bind_value".  If
a270: 20 46 4c 41 47 53 3d 3d 22 6e 6f 72 6d 61 6c 22   FLAGS=="normal"
a280: 20 74 68 65 6e 20 61 20 63 6f 70 79 0a 2a 2a 20   then a copy.** 
a290: 6f 66 20 74 68 65 20 56 41 4c 55 45 20 69 73 20  of the VALUE is 
a2a0: 6d 61 64 65 2e 20 20 49 66 20 46 4c 41 47 53 3d  made.  If FLAGS=
a2b0: 3d 22 62 6c 6f 62 31 30 22 20 74 68 65 6e 20 61  ="blob10" then a
a2c0: 20 56 41 4c 55 45 20 69 73 20 69 67 6e 6f 72 65   VALUE is ignore
a2d0: 64 0a 2a 2a 20 61 6e 20 61 20 31 30 2d 62 79 74  d.** an a 10-byt
a2e0: 65 20 62 6c 6f 62 20 22 61 62 63 5c 30 30 30 78  e blob "abc\000x
a2f0: 79 7a 5c 30 30 30 70 71 22 20 69 73 20 69 6e 73  yz\000pq" is ins
a300: 65 72 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  erted..*/.static
a310: 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 28 0a   int test_bind(.
a320: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
a330: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
a340: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
a350: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
a360: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
a370: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
a380: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
a390: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a3a0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
a3b0: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
a3c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
a3d0: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
a3e0: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  nt */.){.  sqlit
a3f0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
a400: 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
a410: 69 64 78 3b 0a 20 20 69 66 28 20 61 72 67 63 21  idx;.  if( argc!
a420: 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =5 ){.    Tcl_Ap
a430: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
a440: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
a450: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
a460: 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
a470: 20 20 22 20 56 4d 20 49 44 58 20 56 41 4c 55 45    " VM IDX VALUE
a480: 20 28 6e 75 6c 6c 7c 73 74 61 74 69 63 7c 6e 6f   (null|static|no
a490: 72 6d 61 6c 29 5c 22 22 2c 20 30 29 3b 0a 20 20  rmal)\"", 0);.  
a4a0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
a4b0: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
a4c0: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
a4d0: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 70  erp, argv[1], &p
a4e0: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
a4f0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
a500: 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72  Tcl_GetInt(inter
a510: 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26 69 64 78  p, argv[2], &idx
a520: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
a530: 52 52 4f 52 3b 0a 20 20 69 66 28 20 73 74 72 63  RROR;.  if( strc
a540: 6d 70 28 61 72 67 76 5b 34 5d 2c 22 6e 75 6c 6c  mp(argv[4],"null
a550: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  ")==0 ){.    rc 
a560: 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e  = sqlite3_bind_n
a570: 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64 78 29 3b  ull(pStmt, idx);
a580: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72  .  }else if( str
a590: 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 73 74 61  cmp(argv[4],"sta
a5a0: 74 69 63 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  tic")==0 ){.    
a5b0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
a5c0: 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64  d_text(pStmt, id
a5d0: 78 2c 20 73 71 6c 69 74 65 5f 73 74 61 74 69 63  x, sqlite_static
a5e0: 5f 62 69 6e 64 5f 76 61 6c 75 65 2c 20 2d 31 2c  _bind_value, -1,
a5f0: 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   0);.  }else if(
a600: 20 73 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c   strcmp(argv[4],
a610: 22 6e 6f 72 6d 61 6c 22 29 3d 3d 30 20 29 7b 0a  "normal")==0 ){.
a620: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
a630: 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74  _bind_text(pStmt
a640: 2c 20 69 64 78 2c 20 61 72 67 76 5b 33 5d 2c 20  , idx, argv[3], 
a650: 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  -1, SQLITE_TRANS
a660: 49 45 4e 54 29 3b 0a 20 20 7d 65 6c 73 65 20 69  IENT);.  }else i
a670: 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b 34  f( strcmp(argv[4
a680: 5d 2c 22 62 6c 6f 62 31 30 22 29 3d 3d 30 20 29  ],"blob10")==0 )
a690: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
a6a0: 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74  e3_bind_text(pSt
a6b0: 6d 74 2c 20 69 64 78 2c 20 22 61 62 63 5c 30 30  mt, idx, "abc\00
a6c0: 30 78 79 7a 5c 30 30 30 70 71 22 2c 20 31 30 2c  0xyz\000pq", 10,
a6d0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
a6e0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 54 63  .  }else{.    Tc
a6f0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
a700: 6e 74 65 72 70 2c 20 22 34 74 68 20 61 72 67 75  nterp, "4th argu
a710: 6d 65 6e 74 20 73 68 6f 75 6c 64 20 62 65 20 22  ment should be "
a720: 0a 20 20 20 20 20 20 20 20 22 5c 22 6e 75 6c 6c  .        "\"null
a730: 5c 22 20 6f 72 20 5c 22 73 74 61 74 69 63 5c 22  \" or \"static\"
a740: 20 6f 72 20 5c 22 6e 6f 72 6d 61 6c 5c 22 22 2c   or \"normal\"",
a750: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
a760: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
a770: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
a780: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
a790: 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c  StmtToDb(pStmt),
a7a0: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
a7b0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  L_ERROR;.  if( r
a7c0: 63 20 29 7b 0a 20 20 20 20 63 68 61 72 20 7a 42  c ){.    char zB
a7d0: 75 66 5b 35 30 5d 3b 0a 20 20 20 20 73 70 72 69  uf[50];.    spri
a7e0: 6e 74 66 28 7a 42 75 66 2c 20 22 28 25 64 29 20  ntf(zBuf, "(%d) 
a7f0: 22 2c 20 72 63 29 3b 0a 20 20 20 20 54 63 6c 5f  ", rc);.    Tcl_
a800: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
a810: 65 72 70 2c 20 7a 42 75 66 2c 20 73 71 6c 69 74  erp, zBuf, sqlit
a820: 65 33 45 72 72 53 74 72 28 72 63 29 2c 20 30 29  e3ErrStr(rc), 0)
a830: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
a840: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65  _ERROR;.  }.  re
a850: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
a860: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
a870: 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20  MIT_UTF16./*.** 
a880: 55 73 61 67 65 3a 20 61 64 64 5f 74 65 73 74 5f  Usage: add_test_
a890: 63 6f 6c 6c 61 74 65 20 3c 64 62 20 70 74 72 3e  collate <db ptr>
a8a0: 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c 65   <utf8> <utf16le
a8b0: 3e 20 3c 75 74 66 31 36 62 65 3e 0a 2a 2a 0a 2a  > <utf16be>.**.*
a8c0: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
a8d0: 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20  is used to test 
a8e0: 74 68 61 74 20 53 51 4c 69 74 65 20 73 65 6c 65  that SQLite sele
a8f0: 63 74 73 20 74 68 65 20 63 6f 72 72 65 63 74 20  cts the correct 
a900: 63 6f 6c 6c 61 74 69 6f 6e 0a 2a 2a 20 73 65 71  collation.** seq
a910: 75 65 6e 63 65 20 63 61 6c 6c 62 61 63 6b 20 77  uence callback w
a920: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 76 65 72  hen multiple ver
a930: 73 69 6f 6e 73 20 28 66 6f 72 20 64 69 66 66 65  sions (for diffe
a940: 72 65 6e 74 20 74 65 78 74 20 65 6e 63 6f 64 69  rent text encodi
a950: 6e 67 73 29 0a 2a 2a 20 61 72 65 20 61 76 61 69  ngs).** are avai
a960: 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c  lable..**.** Cal
a970: 6c 69 6e 67 20 74 68 69 73 20 72 6f 75 74 69 6e  ling this routin
a980: 65 20 72 65 67 69 73 74 65 72 73 20 74 68 65 20  e registers the 
a990: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
a9a0: 63 65 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65  ce "test_collate
a9b0: 22 0a 2a 2a 20 77 69 74 68 20 64 61 74 61 62 61  ".** with databa
a9c0: 73 65 20 68 61 6e 64 6c 65 20 3c 64 62 3e 2e 20  se handle <db>. 
a9d0: 54 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d  The second argum
a9e0: 65 6e 74 20 6d 75 73 74 20 62 65 20 61 20 6c 69  ent must be a li
a9f0: 73 74 20 6f 66 20 74 68 72 65 65 0a 2a 2a 20 62  st of three.** b
aa00: 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 73 2e 20 49  oolean values. I
aa10: 66 20 74 68 65 20 66 69 72 73 74 20 69 73 20 74  f the first is t
aa20: 72 75 65 2c 20 74 68 65 6e 20 61 20 76 65 72 73  rue, then a vers
aa30: 69 6f 6e 20 6f 66 20 74 65 73 74 5f 63 6f 6c 6c  ion of test_coll
aa40: 61 74 65 20 69 73 0a 2a 2a 20 72 65 67 69 73 74  ate is.** regist
aa50: 65 72 65 64 20 66 6f 72 20 55 54 46 2d 38 2c 20  ered for UTF-8, 
aa60: 69 66 20 74 68 65 20 73 65 63 6f 6e 64 20 69 73  if the second is
aa70: 20 74 72 75 65 2c 20 61 20 76 65 72 73 69 6f 6e   true, a version
aa80: 20 69 73 20 72 65 67 69 73 74 65 72 65 64 20 66   is registered f
aa90: 6f 72 0a 2a 2a 20 55 54 46 2d 31 36 6c 65 2c 20  or.** UTF-16le, 
aaa0: 69 66 20 74 68 65 20 74 68 69 72 64 20 69 73 20  if the third is 
aab0: 74 72 75 65 2c 20 61 20 55 54 46 2d 31 36 62 65  true, a UTF-16be
aac0: 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76 61 69   version is avai
aad0: 6c 61 62 6c 65 2e 0a 2a 2a 20 50 72 65 76 69 6f  lable..** Previo
aae0: 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74  us versions of t
aaf0: 65 73 74 5f 63 6f 6c 6c 61 74 65 20 61 72 65 20  est_collate are 
ab00: 64 65 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  deleted..**.** T
ab10: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
ab20: 75 65 6e 63 65 20 74 65 73 74 5f 63 6f 6c 6c 61  uence test_colla
ab30: 74 65 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  te is implemente
ab40: 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65  d by calling the
ab50: 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 54 43  .** following TC
ab60: 4c 20 73 63 72 69 70 74 3a 0a 2a 2a 0a 2a 2a 20  L script:.**.** 
ab70: 20 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20    "test_collate 
ab80: 3c 65 6e 63 3e 20 3c 6c 68 73 3e 20 3c 72 68 73  <enc> <lhs> <rhs
ab90: 3e 22 0a 2a 2a 0a 2a 2a 20 54 68 65 20 3c 6c 68  >".**.** The <lh
aba0: 73 3e 20 61 6e 64 20 3c 72 68 73 3e 20 61 72 65  s> and <rhs> are
abb0: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 20   the two values 
abc0: 62 65 69 6e 67 20 63 6f 6d 70 61 72 65 64 2c 20  being compared, 
abd0: 65 6e 63 6f 64 65 64 20 69 6e 20 55 54 46 2d 38  encoded in UTF-8
abe0: 2e 0a 2a 2a 20 54 68 65 20 3c 65 6e 63 3e 20 70  ..** The <enc> p
abf0: 61 72 61 6d 65 74 65 72 20 69 73 20 74 68 65 20  arameter is the 
ac00: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65 20  encoding of the 
ac10: 63 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 74 69  collation functi
ac20: 6f 6e 20 74 68 61 74 0a 2a 2a 20 53 51 4c 69 74  on that.** SQLit
ac30: 65 20 73 65 6c 65 63 74 65 64 20 74 6f 20 63 61  e selected to ca
ac40: 6c 6c 2e 20 54 68 65 20 54 43 4c 20 74 65 73 74  ll. The TCL test
ac50: 20 73 63 72 69 70 74 20 69 6d 70 6c 65 6d 65 6e   script implemen
ac60: 74 73 20 74 68 65 0a 2a 2a 20 22 74 65 73 74 5f  ts the.** "test_
ac70: 63 6f 6c 6c 61 74 65 22 20 70 72 6f 63 2e 0a 2a  collate" proc..*
ac80: 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74  *.** Note that t
ac90: 68 69 73 20 77 69 6c 6c 20 6f 6e 6c 79 20 77 6f  his will only wo
aca0: 72 6b 20 77 69 74 68 20 6f 6e 65 20 69 6e 74 65  rk with one inte
acb0: 70 72 65 74 65 72 20 61 74 20 61 20 74 69 6d 65  preter at a time
acc0: 2c 20 61 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65  , as the.** inte
acd0: 72 70 20 70 6f 69 6e 74 65 72 20 74 6f 20 75 73  rp pointer to us
ace0: 65 20 77 68 65 6e 20 65 76 61 6c 75 61 74 69 6e  e when evaluatin
acf0: 67 20 74 68 65 20 54 43 4c 20 73 63 72 69 70 74  g the TCL script
ad00: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 0a 2a 2a   is stored in.**
ad10: 20 70 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74   pTestCollateInt
ad20: 65 72 70 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 54  erp..*/.static T
ad30: 63 6c 5f 49 6e 74 65 72 70 2a 20 70 54 65 73 74  cl_Interp* pTest
ad40: 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 3b 0a 73  CollateInterp;.s
ad50: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
ad60: 6f 6c 6c 61 74 65 5f 66 75 6e 63 28 0a 20 20 76  ollate_func(.  v
ad70: 6f 69 64 20 2a 70 43 74 78 2c 20 0a 20 20 69 6e  oid *pCtx, .  in
ad80: 74 20 6e 41 2c 20 63 6f 6e 73 74 20 76 6f 69 64  t nA, const void
ad90: 20 2a 7a 41 2c 0a 20 20 69 6e 74 20 6e 42 2c 20   *zA,.  int nB, 
ada0: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 42 0a 29  const void *zB.)
adb0: 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  {.  Tcl_Interp *
adc0: 69 20 3d 20 70 54 65 73 74 43 6f 6c 6c 61 74 65  i = pTestCollate
add0: 49 6e 74 65 72 70 3b 0a 20 20 69 6e 74 20 65 6e  Interp;.  int en
ade0: 63 69 6e 20 3d 20 28 69 6e 74 29 70 43 74 78 3b  cin = (int)pCtx;
adf0: 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
ae00: 74 20 6e 3b 0a 0a 20 20 73 71 6c 69 74 65 33 5f  t n;..  sqlite3_
ae10: 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20 54  value *pVal;.  T
ae20: 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 0a 20 20 70  cl_Obj *pX;..  p
ae30: 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  X = Tcl_NewStrin
ae40: 67 4f 62 6a 28 22 74 65 73 74 5f 63 6f 6c 6c 61  gObj("test_colla
ae50: 74 65 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f  te", -1);.  Tcl_
ae60: 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29  IncrRefCount(pX)
ae70: 3b 0a 0a 20 20 73 77 69 74 63 68 28 20 65 6e 63  ;..  switch( enc
ae80: 69 6e 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53  in ){.    case S
ae90: 51 4c 49 54 45 5f 55 54 46 38 3a 0a 20 20 20 20  QLITE_UTF8:.    
aea0: 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70    Tcl_ListObjApp
aeb0: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c  endElement(i,pX,
aec0: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
aed0: 28 22 55 54 46 2d 38 22 2c 2d 31 29 29 3b 0a 20  ("UTF-8",-1));. 
aee0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
aef0: 63 61 73 65 20 53 51 4c 49 54 45 5f 55 54 46 31  case SQLITE_UTF1
af00: 36 4c 45 3a 0a 20 20 20 20 20 20 54 63 6c 5f 4c  6LE:.      Tcl_L
af10: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
af20: 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e 65 77  ent(i,pX,Tcl_New
af30: 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31  StringObj("UTF-1
af40: 36 4c 45 22 2c 2d 31 29 29 3b 0a 20 20 20 20 20  6LE",-1));.     
af50: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
af60: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a   SQLITE_UTF16BE:
af70: 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f  .      Tcl_ListO
af80: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
af90: 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69  i,pX,Tcl_NewStri
afa0: 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 42 45 22  ngObj("UTF-16BE"
afb0: 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20 62 72 65  ,-1));.      bre
afc0: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
afd0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 30 29  .      assert(0)
afe0: 3b 0a 20 20 7d 0a 0a 20 20 70 56 61 6c 20 3d 20  ;.  }..  pVal = 
aff0: 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
b000: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75  );.  sqlite3Valu
b010: 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 6e 41  eSetStr(pVal, nA
b020: 2c 20 7a 41 2c 20 65 6e 63 69 6e 2c 20 53 51 4c  , zA, encin, SQL
b030: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 6e  ITE_STATIC);.  n
b040: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
b050: 5f 62 79 74 65 73 28 70 56 61 6c 29 3b 0a 20 20  _bytes(pVal);.  
b060: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
b070: 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 0a 20  dElement(i,pX,. 
b080: 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69       Tcl_NewStri
b090: 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73 71 6c  ngObj((char*)sql
b0a0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
b0b0: 70 56 61 6c 29 2c 6e 29 29 3b 0a 20 20 73 71 6c  pVal),n));.  sql
b0c0: 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
b0d0: 70 56 61 6c 2c 20 6e 42 2c 20 7a 42 2c 20 65 6e  pVal, nB, zB, en
b0e0: 63 69 6e 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  cin, SQLITE_STAT
b0f0: 49 43 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74  IC);.  n = sqlit
b100: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70  e3_value_bytes(p
b110: 56 61 6c 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74  Val);.  Tcl_List
b120: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
b130: 28 69 2c 70 58 2c 0a 20 20 20 20 20 20 54 63 6c  (i,pX,.      Tcl
b140: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28 63  _NewStringObj((c
b150: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
b160: 75 65 5f 74 65 78 74 28 70 56 61 6c 29 2c 6e 29  ue_text(pVal),n)
b170: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75  );.  sqlite3Valu
b180: 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 0a 20 20  eFree(pVal);..  
b190: 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 2c  Tcl_EvalObjEx(i,
b1a0: 20 70 58 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44   pX, 0);.  Tcl_D
b1b0: 65 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b  ecrRefCount(pX);
b1c0: 0a 20 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  .  Tcl_GetIntFro
b1d0: 6d 4f 62 6a 28 69 2c 20 54 63 6c 5f 47 65 74 4f  mObj(i, Tcl_GetO
b1e0: 62 6a 52 65 73 75 6c 74 28 69 29 2c 20 26 72 65  bjResult(i), &re
b1f0: 73 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 65 73  s);.  return res
b200: 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 74  ;.}.static int t
b210: 65 73 74 5f 63 6f 6c 6c 61 74 65 28 0a 20 20 76  est_collate(.  v
b220: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
b230: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
b240: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
b250: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
b260: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
b270: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
b280: 69 6e 74 20 76 61 6c 3b 0a 20 20 73 71 6c 69 74  int val;.  sqlit
b290: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a  e3_value *pVal;.
b2a0: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
b2b0: 20 6f 62 6a 63 21 3d 35 20 29 20 67 6f 74 6f 20   objc!=5 ) goto 
b2c0: 62 61 64 5f 61 72 67 73 3b 0a 20 20 70 54 65 73  bad_args;.  pTes
b2d0: 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 20 3d  tCollateInterp =
b2e0: 20 69 6e 74 65 72 70 3b 0a 20 20 69 66 28 20 67   interp;.  if( g
b2f0: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
b300: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
b310: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29  g(objv[1]), &db)
b320: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
b330: 52 4f 52 3b 0a 0a 20 20 69 66 28 20 54 43 4c 5f  ROR;..  if( TCL_
b340: 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65  OK!=Tcl_GetBoole
b350: 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  anFromObj(interp
b360: 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 76 61 6c 29  , objv[2], &val)
b370: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
b380: 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
b390: 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
b3a0: 74 69 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 63  tion(db, "test_c
b3b0: 6f 6c 6c 61 74 65 22 2c 20 53 51 4c 49 54 45 5f  ollate", SQLITE_
b3c0: 55 54 46 38 2c 20 0a 20 20 20 20 20 20 20 20 20  UTF8, .         
b3d0: 20 28 76 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f   (void *)SQLITE_
b3e0: 55 54 46 38 2c 20 76 61 6c 3f 74 65 73 74 5f 63  UTF8, val?test_c
b3f0: 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a  ollate_func:0);.
b400: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
b410: 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 54  _OK ){.    if( T
b420: 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
b430: 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
b440: 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76  erp, objv[3], &v
b450: 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
b460: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 72 63 20 3d  _ERROR;.    rc =
b470: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
b480: 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 74  collation(db, "t
b490: 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 53 51  est_collate", SQ
b4a0: 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c 20 0a 20  LITE_UTF16LE, . 
b4b0: 20 20 20 20 20 20 20 20 20 20 20 28 76 6f 69 64             (void
b4c0: 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 31 36 4c   *)SQLITE_UTF16L
b4d0: 45 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c  E, val?test_coll
b4e0: 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20 20 20  ate_func:0);.   
b4f0: 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c   if( TCL_OK!=Tcl
b500: 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f  _GetBooleanFromO
b510: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
b520: 34 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75  4], &val) ) retu
b530: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 23  rn TCL_ERROR;..#
b540: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
b550: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 73 71  DEBUG.    if( sq
b560: 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69  lite3_iMallocFai
b570: 6c 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  l>0 ){.      sql
b580: 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c  ite3_iMallocFail
b590: 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ++;.    }.#endif
b5a0: 0a 20 20 20 20 70 56 61 6c 20 3d 20 73 71 6c 69  .    pVal = sqli
b5b0: 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20  te3ValueNew();. 
b5c0: 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53     sqlite3ValueS
b5d0: 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20  etStr(pVal, -1, 
b5e0: 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20  "test_collate", 
b5f0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
b600: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
b610: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
b620: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 31 36  eate_collation16
b630: 28 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20 20  (db, .          
b640: 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
b650: 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54  (pVal, SQLITE_UT
b660: 46 31 36 4e 41 54 49 56 45 29 2c 20 53 51 4c 49  F16NATIVE), SQLI
b670: 54 45 5f 55 54 46 31 36 42 45 2c 20 0a 20 20 20  TE_UTF16BE, .   
b680: 20 20 20 20 20 20 20 28 76 6f 69 64 20 2a 29 53         (void *)S
b690: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20 76  QLITE_UTF16BE, v
b6a0: 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f  al?test_collate_
b6b0: 66 75 6e 63 3a 30 29 3b 0a 20 20 20 20 73 71 6c  func:0);.    sql
b6c0: 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70 56  ite3ValueFree(pV
b6d0: 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  al);.  }.  if( s
b6e0: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
b6f0: 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63  e(interp, db, rc
b700: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
b710: 52 52 4f 52 3b 0a 20 20 0a 20 20 69 66 28 20 72  RROR;.  .  if( r
b720: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
b730: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
b740: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c  sult(interp, sql
b750: 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d  ite3TestErrorNam
b760: 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72  e(rc), 0);.    r
b770: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
b780: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
b790: 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f 61 72 67 73 3a  L_OK;..bad_args:
b7a0: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
b7b0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
b7c0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
b7d0: 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
b7e0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
b7f0: 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
b800: 2c 20 22 20 3c 44 42 3e 20 3c 75 74 66 38 3e 20  , " <DB> <utf8> 
b810: 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66 31 36  <utf16le> <utf16
b820: 62 65 3e 22 2c 20 30 29 3b 0a 20 20 72 65 74 75  be>", 0);.  retu
b830: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a  rn TCL_ERROR;.}.
b840: 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 65 20  ./*.** When the 
b850: 63 6f 6c 6c 61 74 69 6f 6e 20 6e 65 65 64 65 64  collation needed
b860: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76   callback is inv
b870: 6f 6b 65 64 2c 20 72 65 63 6f 72 64 20 74 68 65  oked, record the
b880: 20 6e 61 6d 65 20 6f 66 20 0a 2a 2a 20 74 68 65   name of .** the
b890: 20 72 65 71 75 65 73 74 65 64 20 63 6f 6c 6c 61   requested colla
b8a0: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 68 65  ting function he
b8b0: 72 65 2e 20 20 54 68 65 20 72 65 63 6f 72 64 65  re.  The recorde
b8c0: 64 20 6e 61 6d 65 20 69 73 20 6c 69 6e 6b 65 64  d name is linked
b8d0: 0a 2a 2a 20 74 6f 20 61 20 54 43 4c 20 76 61 72  .** to a TCL var
b8e0: 69 61 62 6c 65 20 61 6e 64 20 75 73 65 64 20 74  iable and used t
b8f0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  o make sure that
b900: 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20 63   the requested c
b910: 6f 6c 6c 61 74 69 6f 6e 0a 2a 2a 20 6e 61 6d 65  ollation.** name
b920: 20 69 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2f 0a   is correct..*/.
b930: 73 74 61 74 69 63 20 63 68 61 72 20 7a 4e 65 65  static char zNee
b940: 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b 32 30 30  dedCollation[200
b950: 5d 3b 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a  ];.static char *
b960: 70 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f  pzNeededCollatio
b970: 6e 20 3d 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61  n = zNeededColla
b980: 74 69 6f 6e 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 43 61  tion;.../*.** Ca
b990: 6c 6c 65 64 20 77 68 65 6e 20 61 20 63 6f 6c 6c  lled when a coll
b9a0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
b9b0: 73 20 6e 65 65 64 65 64 2e 20 20 52 65 67 69 73  s needed.  Regis
b9c0: 74 65 72 65 64 20 75 73 69 6e 67 0a 2a 2a 20 73  tered using.** s
b9d0: 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e  qlite3_collation
b9e0: 5f 6e 65 65 64 65 64 31 36 28 29 2e 0a 2a 2f 0a  _needed16()..*/.
b9f0: 73 74 61 74 69 63 20 76 6f 69 64 20 74 65 73 74  static void test
ba00: 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 5f  _collate_needed_
ba10: 63 62 28 0a 20 20 76 6f 69 64 20 2a 70 43 74 78  cb(.  void *pCtx
ba20: 2c 20 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  , .  sqlite3 *db
ba30: 2c 0a 20 20 69 6e 74 20 65 54 65 78 74 52 65 70  ,.  int eTextRep
ba40: 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ,.  const void *
ba50: 70 4e 61 6d 65 0a 29 7b 0a 20 20 69 6e 74 20 65  pName.){.  int e
ba60: 6e 63 20 3d 20 45 4e 43 28 64 62 29 3b 0a 20 20  nc = ENC(db);.  
ba70: 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a  int i;.  char *z
ba80: 3b 0a 20 20 66 6f 72 28 7a 20 3d 20 28 63 68 61  ;.  for(z = (cha
ba90: 72 2a 29 70 4e 61 6d 65 2c 20 69 3d 30 3b 20 2a  r*)pName, i=0; *
baa0: 7a 20 7c 7c 20 7a 5b 31 5d 3b 20 7a 2b 2b 29 7b  z || z[1]; z++){
bab0: 0a 20 20 20 20 69 66 28 20 2a 7a 20 29 20 7a 4e  .    if( *z ) zN
bac0: 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b 69  eededCollation[i
bad0: 2b 2b 5d 20 3d 20 2a 7a 3b 0a 20 20 7d 0a 20 20  ++] = *z;.  }.  
bae0: 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e  zNeededCollation
baf0: 5b 69 5d 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  [i] = 0;.  sqlit
bb00: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
bb10: 69 6f 6e 28 0a 20 20 20 20 20 20 64 62 2c 20 22  ion(.      db, "
bb20: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 45  test_collate", E
bb30: 4e 43 28 64 62 29 2c 20 28 76 6f 69 64 20 2a 29  NC(db), (void *)
bb40: 65 6e 63 2c 20 74 65 73 74 5f 63 6f 6c 6c 61 74  enc, test_collat
bb50: 65 5f 66 75 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  e_func);.}../*.*
bb60: 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74 65 73  * Usage: add_tes
bb70: 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64  t_collate_needed
bb80: 20 44 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e   DB.*/.static in
bb90: 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e  t test_collate_n
bba0: 65 65 64 65 64 28 0a 20 20 76 6f 69 64 20 2a 20  eeded(.  void * 
bbb0: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
bbc0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
bbd0: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
bbe0: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
bbf0: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
bc00: 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63  e3 *db;.  int rc
bc10: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
bc20: 20 29 20 67 6f 74 6f 20 62 61 64 5f 61 72 67 73   ) goto bad_args
bc30: 3b 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  ;.  if( getDbPoi
bc40: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
bc50: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
bc60: 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
bc70: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
bc80: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  rc = sqlite3_col
bc90: 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31 36 28  lation_needed16(
bca0: 64 62 2c 20 30 2c 20 74 65 73 74 5f 63 6f 6c 6c  db, 0, test_coll
bcb0: 61 74 65 5f 6e 65 65 64 65 64 5f 63 62 29 3b 0a  ate_needed_cb);.
bcc0: 20 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69    zNeededCollati
bcd0: 6f 6e 5b 30 5d 20 3d 20 30 3b 0a 20 20 69 66 28  on[0] = 0;.  if(
bce0: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
bcf0: 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
bd00: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
bd10: 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e  _ERROR;.  return
bd20: 20 54 43 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f 61 72   TCL_OK;..bad_ar
bd30: 67 73 3a 0a 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  gs:.  Tcl_WrongN
bd40: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
bd50: 2c 20 6f 62 6a 76 2c 20 22 44 42 22 29 3b 0a 20  , objv, "DB");. 
bd60: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
bd70: 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63  R;.}../*.** tclc
bd80: 6d 64 3a 20 20 20 61 64 64 5f 61 6c 69 67 6e 6d  md:   add_alignm
bd90: 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 69  ent_test_collati
bda0: 6f 6e 73 20 20 44 42 0a 2a 2a 0a 2a 2a 20 41 64  ons  DB.**.** Ad
bdb0: 64 20 74 77 6f 20 6e 65 77 20 63 6f 6c 6c 61 74  d two new collat
bdc0: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 74 6f  ing sequences to
bdd0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 44 42   the database DB
bde0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 75 74 66 31 36  .**.**     utf16
bdf0: 5f 61 6c 69 67 6e 65 64 0a 2a 2a 20 20 20 20 20  _aligned.**     
be00: 75 74 66 31 36 5f 75 6e 61 6c 69 67 6e 65 64 0a  utf16_unaligned.
be10: 2a 2a 0a 2a 2a 20 42 6f 74 68 20 63 6f 6c 6c 61  **.** Both colla
be20: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 75  ting sequences u
be30: 73 65 20 74 68 65 20 73 61 6d 65 20 73 6f 72 74  se the same sort
be40: 20 6f 72 64 65 72 20 61 73 20 42 49 4e 41 52 59   order as BINARY
be50: 2e 0a 2a 2a 20 54 68 65 20 6f 6e 6c 79 20 64 69  ..** The only di
be60: 66 66 65 72 65 6e 63 65 20 69 73 20 74 68 61 74  fference is that
be70: 20 74 68 65 20 75 74 66 31 36 5f 61 6c 69 67 6e   the utf16_align
be80: 65 64 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20  ed collating.** 
be90: 73 65 71 75 65 6e 63 65 20 69 73 20 64 65 63 6c  sequence is decl
bea0: 61 72 65 64 20 77 69 74 68 20 74 68 65 20 53 51  ared with the SQ
beb0: 4c 49 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e  LITE_UTF16_ALIGN
bec0: 45 44 20 66 6c 61 67 2e 0a 2a 2a 20 42 6f 74 68  ED flag..** Both
bed0: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
bee0: 69 6f 6e 73 20 69 6e 63 72 65 6d 65 6e 74 20 74  ions increment t
bef0: 68 65 20 75 6e 61 6c 69 67 6e 65 64 20 75 74 66  he unaligned utf
bf00: 31 36 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 77 68  16 counter.** wh
bf10: 65 6e 65 76 65 72 20 74 68 65 79 20 73 65 65 20  enever they see 
bf20: 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 62 65  a string that be
bf30: 67 69 6e 73 20 6f 6e 20 61 6e 20 6f 64 64 20 62  gins on an odd b
bf40: 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 0a 2a 2f  yte boundary..*/
bf50: 0a 73 74 61 74 69 63 20 69 6e 74 20 75 6e 61 6c  .static int unal
bf60: 69 67 6e 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75  igned_string_cou
bf70: 6e 74 65 72 20 3d 20 30 3b 0a 73 74 61 74 69 63  nter = 0;.static
bf80: 20 69 6e 74 20 61 6c 69 67 6e 6d 65 6e 74 43 6f   int alignmentCo
bf90: 6c 6c 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a  llFunc(.  void *
bfa0: 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e  NotUsed,.  int n
bfb0: 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64  Key1, const void
bfc0: 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e   *pKey1,.  int n
bfd0: 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64  Key2, const void
bfe0: 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74   *pKey2.){.  int
bff0: 20 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b   rc, n;.  n = nK
c000: 65 79 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79  ey1<nKey2 ? nKey
c010: 31 20 3a 20 6e 4b 65 79 32 3b 0a 20 20 69 66 28  1 : nKey2;.  if(
c020: 20 6e 4b 65 79 31 3e 30 20 26 26 20 31 3d 3d 28   nKey1>0 && 1==(
c030: 31 26 28 69 6e 74 29 70 4b 65 79 31 29 20 29 20  1&(int)pKey1) ) 
c040: 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e 67  unaligned_string
c050: 5f 63 6f 75 6e 74 65 72 2b 2b 3b 0a 20 20 69 66  _counter++;.  if
c060: 28 20 6e 4b 65 79 32 3e 30 20 26 26 20 31 3d 3d  ( nKey2>0 && 1==
c070: 28 31 26 28 69 6e 74 29 70 4b 65 79 32 29 20 29  (1&(int)pKey2) )
c080: 20 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e   unaligned_strin
c090: 67 5f 63 6f 75 6e 74 65 72 2b 2b 3b 0a 20 20 72  g_counter++;.  r
c0a0: 63 20 3d 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31  c = memcmp(pKey1
c0b0: 2c 20 70 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69  , pKey2, n);.  i
c0c0: 66 28 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20  f( rc==0 ){.    
c0d0: 72 63 20 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65  rc = nKey1 - nKe
c0e0: 79 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  y2;.  }.  return
c0f0: 20 72 63 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e   rc;.}.static in
c100: 74 20 61 64 64 5f 61 6c 69 67 6e 6d 65 6e 74 5f  t add_alignment_
c110: 74 65 73 74 5f 63 6f 6c 6c 61 74 69 6f 6e 73 28  test_collations(
c120: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
c130: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
c140: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
c150: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
c160: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
c170: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
c180: 3b 0a 20 20 69 66 28 20 6f 62 6a 63 3e 3d 32 20  ;.  if( objc>=2 
c190: 29 7b 0a 20 20 20 20 69 66 28 20 67 65 74 44 62  ){.    if( getDb
c1a0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
c1b0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
c1c0: 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
c1d0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
c1e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65  .    sqlite3_cre
c1f0: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62  ate_collation(db
c200: 2c 20 22 75 74 66 31 36 5f 75 6e 61 6c 69 67 6e  , "utf16_unalign
c210: 65 64 22 2c 0a 20 20 20 20 20 20 20 20 53 51 4c  ed",.        SQL
c220: 49 54 45 5f 55 54 46 31 36 2c 20 0a 20 20 20 20  ITE_UTF16, .    
c230: 20 20 20 20 30 2c 20 61 6c 69 67 6e 6d 65 6e 74      0, alignment
c240: 43 6f 6c 6c 46 75 6e 63 29 3b 0a 20 20 20 20 73  CollFunc);.    s
c250: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
c260: 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 75 74 66  llation(db, "utf
c270: 31 36 5f 61 6c 69 67 6e 65 64 22 2c 0a 20 20 20  16_aligned",.   
c280: 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 31       SQLITE_UTF1
c290: 36 20 7c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  6 | SQLITE_UTF16
c2a0: 5f 41 4c 49 47 4e 45 44 2c 20 0a 20 20 20 20 20  _ALIGNED, .     
c2b0: 20 20 20 30 2c 20 61 6c 69 67 6e 6d 65 6e 74 43     0, alignmentC
c2c0: 6f 6c 6c 46 75 6e 63 29 3b 0a 20 20 7d 0a 20 20  ollFunc);.  }.  
c2d0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
c2e0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ;.}.#endif /* !d
c2f0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
c300: 49 54 5f 55 54 46 31 36 29 20 2a 2f 0a 0a 2f 2a  IT_UTF16) */../*
c310: 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74  .** Usage: add_t
c320: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 3c 64 62  est_function <db
c330: 20 70 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75 74   ptr> <utf8> <ut
c340: 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e  f16le> <utf16be>
c350: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  .**.** This func
c360: 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
c370: 74 65 73 74 20 74 68 61 74 20 53 51 4c 69 74 65  test that SQLite
c380: 20 73 65 6c 65 63 74 73 20 74 68 65 20 63 6f 72   selects the cor
c390: 72 65 63 74 20 75 73 65 72 0a 2a 2a 20 66 75 6e  rect user.** fun
c3a0: 63 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 77  ction callback w
c3b0: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 76 65 72  hen multiple ver
c3c0: 73 69 6f 6e 73 20 28 66 6f 72 20 64 69 66 66 65  sions (for diffe
c3d0: 72 65 6e 74 20 74 65 78 74 20 65 6e 63 6f 64 69  rent text encodi
c3e0: 6e 67 73 29 0a 2a 2a 20 61 72 65 20 61 76 61 69  ngs).** are avai
c3f0: 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c  lable..**.** Cal
c400: 6c 69 6e 67 20 74 68 69 73 20 72 6f 75 74 69 6e  ling this routin
c410: 65 20 72 65 67 69 73 74 65 72 73 20 75 70 20 74  e registers up t
c420: 6f 20 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73  o three versions
c430: 20 6f 66 20 74 68 65 20 75 73 65 72 20 66 75 6e   of the user fun
c440: 63 74 69 6f 6e 0a 2a 2a 20 22 74 65 73 74 5f 66  ction.** "test_f
c450: 75 6e 63 74 69 6f 6e 22 20 77 69 74 68 20 64 61  unction" with da
c460: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 64  tabase handle <d
c470: 62 3e 2e 20 20 49 66 20 74 68 65 20 73 65 63 6f  b>.  If the seco
c480: 6e 64 20 61 72 67 75 6d 65 6e 74 20 69 73 0a 2a  nd argument is.*
c490: 2a 20 74 72 75 65 2c 20 74 68 65 6e 20 61 20 76  * true, then a v
c4a0: 65 72 73 69 6f 6e 20 6f 66 20 74 65 73 74 5f 66  ersion of test_f
c4b0: 75 6e 63 74 69 6f 6e 20 69 73 20 72 65 67 69 73  unction is regis
c4c0: 74 65 72 65 64 20 66 6f 72 20 55 54 46 2d 38 2c  tered for UTF-8,
c4d0: 20 69 66 20 74 68 65 0a 2a 2a 20 74 68 69 72 64   if the.** third
c4e0: 20 69 73 20 74 72 75 65 2c 20 61 20 76 65 72 73   is true, a vers
c4f0: 69 6f 6e 20 69 73 20 72 65 67 69 73 74 65 72 65  ion is registere
c500: 64 20 66 6f 72 20 55 54 46 2d 31 36 6c 65 2c 20  d for UTF-16le, 
c510: 69 66 20 74 68 65 20 66 6f 75 72 74 68 20 69 73  if the fourth is
c520: 0a 2a 2a 20 74 72 75 65 2c 20 61 20 55 54 46 2d  .** true, a UTF-
c530: 31 36 62 65 20 76 65 72 73 69 6f 6e 20 69 73 20  16be version is 
c540: 61 76 61 69 6c 61 62 6c 65 2e 20 20 50 72 65 76  available.  Prev
c550: 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66  ious versions of
c560: 0a 2a 2a 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  .** test_functio
c570: 6e 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a  n are deleted..*
c580: 2a 0a 2a 2a 20 54 68 65 20 75 73 65 72 20 66 75  *.** The user fu
c590: 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d  nction is implem
c5a0: 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67  ented by calling
c5b0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 54   the following T
c5c0: 43 4c 20 73 63 72 69 70 74 3a 0a 2a 2a 0a 2a 2a  CL script:.**.**
c5d0: 20 20 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f     "test_functio
c5e0: 6e 20 3c 65 6e 63 3e 20 3c 61 72 67 3e 22 0a 2a  n <enc> <arg>".*
c5f0: 2a 0a 2a 2a 20 57 68 65 72 65 20 3c 65 6e 63 3e  *.** Where <enc>
c600: 20 69 73 20 6f 6e 65 20 6f 66 20 55 54 46 2d 38   is one of UTF-8
c610: 2c 20 55 54 46 2d 31 36 4c 45 20 6f 72 20 55 54  , UTF-16LE or UT
c620: 46 31 36 42 45 2c 20 61 6e 64 20 3c 61 72 67 3e  F16BE, and <arg>
c630: 20 69 73 20 74 68 65 0a 2a 2a 20 73 69 6e 67 6c   is the.** singl
c640: 65 20 61 72 67 75 6d 65 6e 74 20 70 61 73 73 65  e argument passe
c650: 64 20 74 6f 20 74 68 65 20 53 51 4c 20 66 75 6e  d to the SQL fun
c660: 63 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65  ction. The value
c670: 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20   returned by.** 
c680: 74 68 65 20 54 43 4c 20 73 63 72 69 70 74 20 69  the TCL script i
c690: 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72 65  s used as the re
c6a0: 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 74 68  turn value of th
c6b0: 65 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20  e SQL function. 
c6c0: 49 74 0a 2a 2a 20 69 73 20 70 61 73 73 65 64 20  It.** is passed 
c6d0: 74 6f 20 53 51 4c 69 74 65 20 75 73 69 6e 67 20  to SQLite using 
c6e0: 55 54 46 2d 31 36 42 45 20 66 6f 72 20 61 20 55  UTF-16BE for a U
c6f0: 54 46 2d 38 20 74 65 73 74 5f 66 75 6e 63 74 69  TF-8 test_functi
c700: 6f 6e 28 29 2c 20 55 54 46 2d 38 0a 2a 2a 20 66  on(), UTF-8.** f
c710: 6f 72 20 61 20 55 54 46 2d 31 36 4c 45 20 74 65  or a UTF-16LE te
c720: 73 74 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20 61  st_function(), a
c730: 6e 64 20 55 54 46 2d 31 36 4c 45 20 66 6f 72 20  nd UTF-16LE for 
c740: 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  an implementatio
c750: 6e 20 74 68 61 74 0a 2a 2a 20 70 72 65 66 65 72  n that.** prefer
c760: 73 20 55 54 46 2d 31 36 42 45 2e 0a 2a 2f 0a 23  s UTF-16BE..*/.#
c770: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
c780: 49 54 5f 55 54 46 31 36 0a 73 74 61 74 69 63 20  IT_UTF16.static 
c790: 76 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69  void test_functi
c7a0: 6f 6e 5f 75 74 66 38 28 0a 20 20 73 71 6c 69 74  on_utf8(.  sqlit
c7b0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
c7c0: 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20  , .  int nArg,. 
c7d0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
c7e0: 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49  *argv.){.  Tcl_I
c7f0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20  nterp *interp;. 
c800: 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20   Tcl_Obj *pX;.  
c810: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
c820: 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20  Val;.  interp = 
c830: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71  (Tcl_Interp *)sq
c840: 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
c850: 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20 54 63  pCtx);.  pX = Tc
c860: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
c870: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  test_function", 
c880: 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52  -1);.  Tcl_IncrR
c890: 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54  efCount(pX);.  T
c8a0: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
c8b0: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
c8c0: 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  pX, Tcl_NewStrin
c8d0: 67 4f 62 6a 28 22 55 54 46 2d 38 22 2c 20 2d 31  gObj("UTF-8", -1
c8e0: 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
c8f0: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
c900: 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20  nterp, pX, .    
c910: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
c920: 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65  bj((char*)sqlite
c930: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
c940: 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54  v[0]), -1));.  T
c950: 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74  cl_EvalObjEx(int
c960: 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54  erp, pX, 0);.  T
c970: 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
c980: 70 58 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72  pX);.  sqlite3_r
c990: 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78 2c  esult_text(pCtx,
c9a0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65   Tcl_GetStringRe
c9b0: 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 2d 31  sult(interp), -1
c9c0: 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
c9d0: 4e 54 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71  NT);.  pVal = sq
c9e0: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b  lite3ValueNew();
c9f0: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  .  sqlite3ValueS
ca00: 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20  etStr(pVal, -1, 
ca10: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73  Tcl_GetStringRes
ca20: 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20 20  ult(interp), .  
ca30: 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 2c      SQLITE_UTF8,
ca40: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
ca50: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
ca60: 74 5f 74 65 78 74 31 36 62 65 28 70 43 74 78 2c  t_text16be(pCtx,
ca70: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
ca80: 65 78 74 31 36 62 65 28 70 56 61 6c 29 2c 0a 20  ext16be(pVal),. 
ca90: 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f       -1, SQLITE_
caa0: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71  TRANSIENT);.  sq
cab0: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
cac0: 56 61 6c 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76  Val);.}.static v
cad0: 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  oid test_functio
cae0: 6e 5f 75 74 66 31 36 6c 65 28 0a 20 20 73 71 6c  n_utf16le(.  sql
caf0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
cb00: 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c  tx, .  int nArg,
cb10: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
cb20: 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c   **argv.){.  Tcl
cb30: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b  _Interp *interp;
cb40: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a  .  Tcl_Obj *pX;.
cb50: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
cb60: 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20  *pVal;.  interp 
cb70: 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29  = (Tcl_Interp *)
cb80: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
cb90: 61 28 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20  a(pCtx);.  pX = 
cba0: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
cbb0: 28 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22  ("test_function"
cbc0: 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63  , -1);.  Tcl_Inc
cbd0: 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20  rRefCount(pX);. 
cbe0: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
cbf0: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
cc00: 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72  , pX, Tcl_NewStr
cc10: 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 4c 45  ingObj("UTF-16LE
cc20: 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c  ", -1));.  Tcl_L
cc30: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
cc40: 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20  ent(interp, pX, 
cc50: 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74  .      Tcl_NewSt
cc60: 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73  ringObj((char*)s
cc70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
cc80: 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29  t(argv[0]), -1))
cc90: 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45  ;.  Tcl_EvalObjE
cca0: 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30 29  x(interp, pX, 0)
ccb0: 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  ;.  Tcl_DecrRefC
ccc0: 6f 75 6e 74 28 70 58 29 3b 0a 20 20 70 56 61 6c  ount(pX);.  pVal
ccd0: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
cce0: 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ew();.  sqlite3V
ccf0: 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
cd00: 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72 69   -1, Tcl_GetStri
cd10: 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  ngResult(interp)
cd20: 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  , .      SQLITE_
cd30: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
cd40: 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  TIC);.  sqlite3_
cd50: 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78  result_text(pCtx
cd60: 2c 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  ,(char*)sqlite3_
cd70: 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c 29  value_text(pVal)
cd80: 2c 2d 31 2c 53 51 4c 49 54 45 5f 54 52 41 4e 53  ,-1,SQLITE_TRANS
cd90: 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65 33  IENT);.  sqlite3
cda0: 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b  ValueFree(pVal);
cdb0: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74  .}.static void t
cdc0: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66  est_function_utf
cdd0: 31 36 62 65 28 0a 20 20 73 71 6c 69 74 65 33 5f  16be(.  sqlite3_
cde0: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a  context *pCtx, .
cdf0: 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73 71    int nArg,.  sq
ce00: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
ce10: 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65  gv.){.  Tcl_Inte
ce20: 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63  rp *interp;.  Tc
ce30: 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71 6c  l_Obj *pX;.  sql
ce40: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
ce50: 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20 28 54 63  ;.  interp = (Tc
ce60: 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c 69 74  l_Interp *)sqlit
ce70: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 70 43 74  e3_user_data(pCt
ce80: 78 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e  x);.  pX = Tcl_N
ce90: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73  ewStringObj("tes
cea0: 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31 29  t_function", -1)
ceb0: 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43  ;.  Tcl_IncrRefC
cec0: 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f  ount(pX);.  Tcl_
ced0: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
cee0: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c  ment(interp, pX,
cef0: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
cf00: 6a 28 22 55 54 46 2d 31 36 42 45 22 2c 20 2d 31  j("UTF-16BE", -1
cf10: 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
cf20: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
cf30: 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20  nterp, pX, .    
cf40: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
cf50: 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65  bj((char*)sqlite
cf60: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
cf70: 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54  v[0]), -1));.  T
cf80: 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74  cl_EvalObjEx(int
cf90: 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54  erp, pX, 0);.  T
cfa0: 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
cfb0: 70 58 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71  pX);.  pVal = sq
cfc0: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b  lite3ValueNew();
cfd0: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  .  sqlite3ValueS
cfe0: 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20  etStr(pVal, -1, 
cff0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73  Tcl_GetStringRes
d000: 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20 20  ult(interp), .  
d010: 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 2c      SQLITE_UTF8,
d020: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
d030: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
d040: 74 5f 74 65 78 74 31 36 6c 65 28 70 43 74 78 2c  t_text16le(pCtx,
d050: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
d060: 65 78 74 31 36 6c 65 28 70 56 61 6c 29 2c 0a 20  ext16le(pVal),. 
d070: 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f       -1, SQLITE_
d080: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71  TRANSIENT);.  sq
d090: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
d0a0: 56 61 6c 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  Val);.}.#endif /
d0b0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
d0c0: 46 31 36 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e  F16 */.static in
d0d0: 74 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 28  t test_function(
d0e0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
d0f0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
d100: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
d110: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
d120: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
d130: 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
d140: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73  E_OMIT_UTF16.  s
d150: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
d160: 74 20 76 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62  t val;..  if( ob
d170: 6a 63 21 3d 35 20 29 20 67 6f 74 6f 20 62 61 64  jc!=5 ) goto bad
d180: 5f 61 72 67 73 3b 0a 20 20 69 66 28 20 67 65 74  _args;.  if( get
d190: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
d1a0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
d1b0: 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
d1c0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
d1d0: 52 3b 0a 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b  R;..  if( TCL_OK
d1e0: 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e  !=Tcl_GetBoolean
d1f0: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
d200: 6f 62 6a 76 5b 32 5d 2c 20 26 76 61 6c 29 20 29  objv[2], &val) )
d210: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
d220: 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29 7b 0a  R;.  if( val ){.
d230: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
d240: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
d250: 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c  "test_function",
d260: 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   1, SQLITE_UTF8,
d270: 20 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 70   .        interp
d280: 2c 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f  , test_function_
d290: 75 74 66 38 2c 20 30 2c 20 30 29 3b 0a 20 20 7d  utf8, 0, 0);.  }
d2a0: 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54  .  if( TCL_OK!=T
d2b0: 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f  cl_GetBooleanFro
d2c0: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
d2d0: 76 5b 33 5d 2c 20 26 76 61 6c 29 20 29 20 72 65  v[3], &val) ) re
d2e0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
d2f0: 20 20 69 66 28 20 76 61 6c 20 29 7b 0a 20 20 20    if( val ){.   
d300: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
d310: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 74 65  function(db, "te
d320: 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 31 2c  st_function", 1,
d330: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c   SQLITE_UTF16LE,
d340: 20 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 70   .        interp
d350: 2c 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f  , test_function_
d360: 75 74 66 31 36 6c 65 2c 20 30 2c 20 30 29 3b 0a  utf16le, 0, 0);.
d370: 20 20 7d 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b    }.  if( TCL_OK
d380: 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e  !=Tcl_GetBoolean
d390: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
d3a0: 6f 62 6a 76 5b 34 5d 2c 20 26 76 61 6c 29 20 29  objv[4], &val) )
d3b0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
d3c0: 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29 7b 0a  R;.  if( val ){.
d3d0: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
d3e0: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
d3f0: 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c  "test_function",
d400: 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36   1, SQLITE_UTF16
d410: 42 45 2c 20 0a 20 20 20 20 20 20 20 20 69 6e 74  BE, .        int
d420: 65 72 70 2c 20 74 65 73 74 5f 66 75 6e 63 74 69  erp, test_functi
d430: 6f 6e 5f 75 74 66 31 36 62 65 2c 20 30 2c 20 30  on_utf16be, 0, 0
d440: 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  );.  }..  return
d450: 20 54 43 4c 5f 4f 4b 3b 0a 62 61 64 5f 61 72 67   TCL_OK;.bad_arg
d460: 73 3a 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  s:.  Tcl_AppendR
d470: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
d480: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
d490: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
d4a0: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
d4b0: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
d4c0: 30 29 2c 20 22 20 3c 44 42 3e 20 3c 75 74 66 38  0), " <DB> <utf8
d4d0: 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66  > <utf16le> <utf
d4e0: 31 36 62 65 3e 22 2c 20 30 29 3b 0a 23 65 6e 64  16be>", 0);.#end
d4f0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
d500: 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74  T_UTF16 */.  ret
d510: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d  urn TCL_ERROR;.}
d520: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
d530: 20 20 20 20 20 20 20 74 65 73 74 5f 65 72 72 73         test_errs
d540: 74 72 20 3c 65 72 72 20 63 6f 64 65 3e 0a 2a 2a  tr <err code>.**
d550: 0a 2a 2a 20 54 65 73 74 20 74 68 61 74 20 74 68  .** Test that th
d560: 65 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  e english langua
d570: 67 65 20 73 74 72 69 6e 67 20 65 71 75 69 76 61  ge string equiva
d580: 6c 65 6e 74 73 20 66 6f 72 20 73 71 6c 69 74 65  lents for sqlite
d590: 20 65 72 72 6f 72 20 63 6f 64 65 73 0a 2a 2a 20   error codes.** 
d5a0: 61 72 65 20 73 61 6e 65 2e 20 54 68 65 20 70 61  are sane. The pa
d5b0: 72 61 6d 65 74 65 72 20 69 73 20 61 6e 20 69 6e  rameter is an in
d5c0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 69  teger representi
d5d0: 6e 67 20 61 6e 20 73 71 6c 69 74 65 20 65 72 72  ng an sqlite err
d5e0: 6f 72 20 63 6f 64 65 2e 0a 2a 2a 20 54 68 65 20  or code..** The 
d5f0: 72 65 73 75 6c 74 20 69 73 20 61 20 6c 69 73 74  result is a list
d600: 20 6f 66 20 74 77 6f 20 65 6c 65 6d 65 6e 74 73   of two elements
d610: 2c 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 70  , the string rep
d620: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
d630: 68 65 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65  he.** error code
d640: 20 61 6e 64 20 74 68 65 20 65 6e 67 6c 69 73 68   and the english
d650: 20 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61 6e   language explan
d660: 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63  ation..*/.static
d670: 20 69 6e 74 20 74 65 73 74 5f 65 72 72 73 74 72   int test_errstr
d680: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
d690: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
d6a0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
d6b0: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
d6c0: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
d6d0: 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 6f 64  .){.  char *zCod
d6e0: 65 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66  e;.  int i;.  if
d6f0: 28 20 6f 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20  ( objc!=1 ){.   
d700: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
d710: 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
d720: 76 2c 20 22 3c 65 72 72 6f 72 20 63 6f 64 65 3e  v, "<error code>
d730: 22 29 3b 0a 20 20 7d 0a 0a 20 20 7a 43 6f 64 65  ");.  }..  zCode
d740: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
d750: 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20 20 66 6f 72  (objv[1]);.  for
d760: 28 69 3d 30 3b 20 69 3c 32 30 30 3b 20 69 2b 2b  (i=0; i<200; i++
d770: 29 7b 0a 20 20 20 20 69 66 28 20 30 3d 3d 73 74  ){.    if( 0==st
d780: 72 63 6d 70 28 65 72 72 6f 72 4e 61 6d 65 28 69  rcmp(errorName(i
d790: 29 2c 20 7a 43 6f 64 65 29 20 29 20 62 72 65 61  ), zCode) ) brea
d7a0: 6b 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74  k;.  }.  Tcl_Set
d7b0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
d7c0: 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72  char *)sqlite3Er
d7d0: 72 53 74 72 28 69 29 2c 20 30 29 3b 0a 20 20 72  rStr(i), 0);.  r
d7e0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
d7f0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
d800: 20 62 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a 0a 2a   breakpoint.**.*
d810: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 65  * This routine e
d820: 78 69 73 74 73 20 66 6f 72 20 6f 6e 65 20 70 75  xists for one pu
d830: 72 70 6f 73 65 20 2d 20 74 6f 20 70 72 6f 76 69  rpose - to provi
d840: 64 65 20 61 20 70 6c 61 63 65 20 74 6f 20 70 75  de a place to pu
d850: 74 20 61 0a 2a 2a 20 62 72 65 61 6b 70 6f 69 6e  t a.** breakpoin
d860: 74 20 77 69 74 68 20 47 44 42 20 74 68 61 74 20  t with GDB that 
d870: 63 61 6e 20 62 65 20 74 72 69 67 67 65 72 65 64  can be triggered
d880: 20 75 73 69 6e 67 20 54 43 4c 20 63 6f 64 65 2e   using TCL code.
d890: 20 20 54 68 65 20 75 73 65 0a 2a 2a 20 66 6f 72    The use.** for
d8a0: 20 74 68 69 73 20 69 73 20 77 68 65 6e 20 61 20   this is when a 
d8b0: 70 61 72 74 69 63 75 6c 61 72 20 74 65 73 74 20  particular test 
d8c0: 66 61 69 6c 73 20 6f 6e 20 28 73 61 79 29 20 74  fails on (say) t
d8d0: 68 65 20 31 34 38 35 74 68 20 69 74 65 72 61 74  he 1485th iterat
d8e0: 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 74 68 65 20 54  ion..** In the T
d8f0: 43 4c 20 74 65 73 74 20 73 63 72 69 70 74 2c 20  CL test script, 
d900: 77 65 20 63 61 6e 20 61 64 64 20 63 6f 64 65 20  we can add code 
d910: 6c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a  like this:.**.**
d920: 20 20 20 20 20 69 66 20 7b 24 69 3d 3d 31 34 38       if {$i==148
d930: 35 7d 20 62 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a  5} breakpoint.**
d940: 0a 2a 2a 20 54 68 65 6e 20 72 75 6e 20 74 65 73  .** Then run tes
d950: 74 66 69 78 74 75 72 65 20 69 6e 20 74 68 65 20  tfixture in the 
d960: 64 65 62 75 67 67 65 72 20 61 6e 64 20 77 61 69  debugger and wai
d970: 74 20 66 6f 72 20 74 68 65 20 62 72 65 61 6b 70  t for the breakp
d980: 6f 69 6e 74 20 74 6f 0a 2a 2a 20 66 69 72 65 2e  oint to.** fire.
d990: 20 20 54 68 65 6e 20 61 64 64 69 74 69 6f 6e 61    Then additiona
d9a0: 6c 20 62 72 65 61 6b 70 6f 69 6e 74 73 20 63 61  l breakpoints ca
d9b0: 6e 20 62 65 20 73 65 74 20 74 6f 20 74 72 61 63  n be set to trac
d9c0: 65 20 64 6f 77 6e 20 74 68 65 20 62 75 67 2e 0a  e down the bug..
d9d0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
d9e0: 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28 0a 20  st_breakpoint(. 
d9f0: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
da00: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
da10: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
da20: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
da30: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
da40: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
da50: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
da60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
da70: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
da80: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
da90: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
daa0: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
dab0: 74 20 2a 2f 0a 29 7b 0a 20 20 72 65 74 75 72 6e  t */.){.  return
dac0: 20 54 43 4c 5f 4f 4b 3b 20 20 20 20 20 20 20 20   TCL_OK;        
dad0: 20 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 2a   /* Do nothing *
dae0: 2f 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  /.}../*.** Usage
daf0: 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
db00: 5f 69 6e 74 20 20 53 54 4d 54 20 4e 20 56 41 4c  _int  STMT N VAL
db10: 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  UE.**.** Test th
db20: 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  e sqlite3_bind_i
db30: 6e 74 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53  nt interface.  S
db40: 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65  TMT is a prepare
db50: 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  d statement..** 
db60: 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  N is the index o
db70: 66 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20  f a wildcard in 
db80: 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
db90: 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f  tement.  This co
dba0: 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61  mmand.** binds a
dbb0: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
dbc0: 56 41 4c 55 45 20 74 6f 20 74 68 61 74 20 77 69  VALUE to that wi
dbd0: 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69  ldcard..*/.stati
dbe0: 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
dbf0: 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  int(.  void * cl
dc00: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
dc10: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
dc20: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
dc30: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
dc40: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
dc50: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
dc60: 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 76  int idx;.  int v
dc70: 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  alue;.  int rc;.
dc80: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29  .  if( objc!=4 )
dc90: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
dca0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
dcb0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
dcc0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
dcd0: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
dce0: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
dcf0: 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20  ], 0), " STMT N 
dd00: 56 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20  VALUE", 0);.    
dd10: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
dd20: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
dd30: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
dd40: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
dd50: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
dd60: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
dd70: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
dd80: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
dd90: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
dda0: 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20   &idx) ) return 
ddb0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
ddc0: 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
ddd0: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
dde0: 33 5d 2c 20 26 76 61 6c 75 65 29 20 29 20 72 65  3], &value) ) re
ddf0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
de00: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
de10: 62 69 6e 64 5f 69 6e 74 28 70 53 74 6d 74 2c 20  bind_int(pStmt, 
de20: 69 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69  idx, value);.  i
de30: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
de40: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74  rCode(interp, St
de50: 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72  mtToDb(pStmt), r
de60: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
de70: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21  ERROR;.  if( rc!
de80: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
de90: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
dea0: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  OR;.  }..  retur
deb0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a  n TCL_OK;.}.../*
dec0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c  .** Usage:   sql
ded0: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 20  ite3_bind_int64 
dee0: 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a   STMT N VALUE.**
def0: 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c  .** Test the sql
df00: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 20  ite3_bind_int64 
df10: 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54  interface.  STMT
df20: 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73   is a prepared s
df30: 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69  tatement..** N i
df40: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
df50: 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65   wildcard in the
df60: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
df70: 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61  ent.  This comma
df80: 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 36 34  nd.** binds a 64
df90: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 56 41 4c  -bit integer VAL
dfa0: 55 45 20 74 6f 20 74 68 61 74 20 77 69 6c 64 63  UE to that wildc
dfb0: 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ard..*/.static i
dfc0: 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74  nt test_bind_int
dfd0: 36 34 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  64(.  void * cli
dfe0: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
dff0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
e000: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
e010: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
e020: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
e030: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
e040: 6e 74 20 69 64 78 3b 0a 20 20 69 36 34 20 76 61  nt idx;.  i64 va
e050: 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  lue;.  int rc;..
e060: 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b    if( objc!=4 ){
e070: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
e080: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
e090: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
e0a0: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
e0b0: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
e0c0: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
e0d0: 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56  , 0), " STMT N V
e0e0: 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20 72  ALUE", 0);.    r
e0f0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
e100: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
e110: 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
e120: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
e130: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
e140: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
e150: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
e160: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
e170: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
e180: 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
e190: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
e1a0: 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46 72  Tcl_GetWideIntFr
e1b0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
e1c0: 6a 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29 20 29  jv[3], &value) )
e1d0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
e1e0: 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  R;..  rc = sqlit
e1f0: 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 70 53  e3_bind_int64(pS
e200: 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65 29  tmt, idx, value)
e210: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
e220: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
e230: 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
e240: 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  t), rc) ) return
e250: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
e260: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
e270: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
e280: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
e290: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
e2a0: 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  .../*.** Usage: 
e2b0: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64    sqlite3_bind_d
e2c0: 6f 75 62 6c 65 20 20 53 54 4d 54 20 4e 20 56 41  ouble  STMT N VA
e2d0: 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74  LUE.**.** Test t
e2e0: 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  he sqlite3_bind_
e2f0: 64 6f 75 62 6c 65 20 69 6e 74 65 72 66 61 63 65  double interface
e300: 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65  .  STMT is a pre
e310: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
e320: 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64  .** N is the ind
e330: 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64  ex of a wildcard
e340: 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
e350: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69   statement.  Thi
e360: 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e  s command.** bin
e370: 64 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ds a 64-bit inte
e380: 67 65 72 20 56 41 4c 55 45 20 74 6f 20 74 68 61  ger VALUE to tha
e390: 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73  t wildcard..*/.s
e3a0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62  tatic int test_b
e3b0: 69 6e 64 5f 64 6f 75 62 6c 65 28 0a 20 20 76 6f  ind_double(.  vo
e3c0: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
e3d0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
e3e0: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
e3f0: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
e400: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
e410: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
e420: 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  tmt;.  int idx;.
e430: 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 3b 0a    double value;.
e440: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
e450: 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20   objc!=4 ){.    
e460: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
e470: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
e480: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
e490: 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54  e \"",.        T
e4a0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
e4b0: 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c  Obj(objv[0], 0),
e4c0: 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 22   " STMT N VALUE"
e4d0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
e4e0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
e4f0: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
e500: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
e510: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
e520: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
e530: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
e540: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
e550: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
e560: 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29  , objv[2], &idx)
e570: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
e580: 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
e590: 65 74 44 6f 75 62 6c 65 46 72 6f 6d 4f 62 6a 28  etDoubleFromObj(
e5a0: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c  interp, objv[3],
e5b0: 20 26 76 61 6c 75 65 29 20 29 20 72 65 74 75 72   &value) ) retur
e5c0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
e5d0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
e5e0: 64 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20  d_double(pStmt, 
e5f0: 69 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69  idx, value);.  i
e600: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
e610: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74  rCode(interp, St
e620: 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72  mtToDb(pStmt), r
e630: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
e640: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21  ERROR;.  if( rc!
e650: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
e660: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
e670: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  OR;.  }..  retur
e680: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
e690: 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
e6a0: 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 20 53  te3_bind_null  S
e6b0: 54 4d 54 20 4e 0a 2a 2a 0a 2a 2a 20 54 65 73 74  TMT N.**.** Test
e6c0: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e   the sqlite3_bin
e6d0: 64 5f 6e 75 6c 6c 20 69 6e 74 65 72 66 61 63 65  d_null interface
e6e0: 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65  .  STMT is a pre
e6f0: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
e700: 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64  .** N is the ind
e710: 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64  ex of a wildcard
e720: 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
e730: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69   statement.  Thi
e740: 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e  s command.** bin
e750: 64 73 20 61 20 4e 55 4c 4c 20 74 6f 20 74 68 65  ds a NULL to the
e760: 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74   wildcard..*/.st
e770: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69  atic int test_bi
e780: 6e 64 5f 6e 75 6c 6c 28 0a 20 20 76 6f 69 64 20  nd_null(.  void 
e790: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
e7a0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
e7b0: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
e7c0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
e7d0: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
e7e0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
e7f0: 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69  ;.  int idx;.  i
e800: 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
e810: 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
e820: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
e830: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
e840: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
e850: 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  "",.        Tcl_
e860: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
e870: 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20  (objv[0], 0), " 
e880: 53 54 4d 54 20 4e 22 2c 20 30 29 3b 0a 20 20 20  STMT N", 0);.   
e890: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
e8a0: 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
e8b0: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
e8c0: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
e8d0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
e8e0: 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
e8f0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
e900: 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
e910: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
e920: 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e  , &idx) ) return
e930: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
e940: 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
e950: 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64 78  _null(pStmt, idx
e960: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
e970: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
e980: 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
e990: 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
e9a0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
e9b0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
e9c0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
e9d0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
e9e0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
e9f0: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
ea00: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
ea10: 65 78 74 20 20 53 54 4d 54 20 4e 20 53 54 52 49  ext  STMT N STRI
ea20: 4e 47 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54  NG BYTES.**.** T
ea30: 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f  est the sqlite3_
ea40: 62 69 6e 64 5f 74 65 78 74 20 69 6e 74 65 72 66  bind_text interf
ea50: 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20  ace.  STMT is a 
ea60: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
ea70: 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20  nt..** N is the 
ea80: 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63  index of a wildc
ea90: 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61  ard in the prepa
eaa0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  red statement.  
eab0: 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20  This command.** 
eac0: 62 69 6e 64 73 20 61 20 55 54 46 2d 38 20 73 74  binds a UTF-8 st
ead0: 72 69 6e 67 20 53 54 52 49 4e 47 20 74 6f 20 74  ring STRING to t
eae0: 68 65 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68  he wildcard.  Th
eaf0: 65 20 73 74 72 69 6e 67 20 69 73 20 42 59 54 45  e string is BYTE
eb00: 53 20 62 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e  S bytes.** long.
eb10: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
eb20: 65 73 74 5f 62 69 6e 64 5f 74 65 78 74 28 0a 20  est_bind_text(. 
eb30: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
eb40: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
eb50: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
eb60: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
eb70: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
eb80: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
eb90: 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64  *pStmt;.  int id
eba0: 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a  x;.  int bytes;.
ebb0: 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20    char *value;. 
ebc0: 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
ebd0: 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54  objc!=5 ){.    T
ebe0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
ebf0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
ec00: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
ec10: 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
ec20: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
ec30: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
ec40: 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 20 42  " STMT N VALUE B
ec50: 59 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20 72  YTES", 0);.    r
ec60: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
ec70: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
ec80: 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
ec90: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
eca0: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
ecb0: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
ecc0: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
ecd0: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
ece0: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
ecf0: 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
ed00: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75  CL_ERROR;.  valu
ed10: 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  e = Tcl_GetStrin
ed20: 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 69 66  g(objv[3]);.  if
ed30: 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
ed40: 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
ed50: 5b 34 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72  [4], &bytes) ) r
ed60: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
ed70: 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
ed80: 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74  _bind_text(pStmt
ed90: 2c 20 69 64 78 2c 20 76 61 6c 75 65 2c 20 62 79  , idx, value, by
eda0: 74 65 73 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e  tes, SQLITE_TRAN
edb0: 53 49 45 4e 54 29 3b 0a 20 20 69 66 28 20 73 71  SIENT);.  if( sq
edc0: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
edd0: 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44  (interp, StmtToD
ede0: 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20  b(pStmt), rc) ) 
edf0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
ee00: 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
ee10: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c  TE_OK ){.    Tcl
ee20: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
ee30: 74 65 72 70 2c 20 73 71 6c 69 74 65 33 54 65 73  terp, sqlite3Tes
ee40: 74 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  tErrorName(rc), 
ee50: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
ee60: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
ee70: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
ee80: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
ee90: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
eea0: 65 78 74 31 36 20 3f 2d 73 74 61 74 69 63 3f 20  ext16 ?-static? 
eeb0: 53 54 4d 54 20 4e 20 53 54 52 49 4e 47 20 42 59  STMT N STRING BY
eec0: 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74  TES.**.** Test t
eed0: 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  he sqlite3_bind_
eee0: 74 65 78 74 31 36 20 69 6e 74 65 72 66 61 63 65  text16 interface
eef0: 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65  .  STMT is a pre
ef00: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
ef10: 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64  .** N is the ind
ef20: 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64  ex of a wildcard
ef30: 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
ef40: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69   statement.  Thi
ef50: 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e  s command.** bin
ef60: 64 73 20 61 20 55 54 46 2d 31 36 20 73 74 72 69  ds a UTF-16 stri
ef70: 6e 67 20 53 54 52 49 4e 47 20 74 6f 20 74 68 65  ng STRING to the
ef80: 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20   wildcard.  The 
ef90: 73 74 72 69 6e 67 20 69 73 20 42 59 54 45 53 20  string is BYTES 
efa0: 62 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e 0a 2a  bytes.** long..*
efb0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
efc0: 74 5f 62 69 6e 64 5f 74 65 78 74 31 36 28 0a 20  t_bind_text16(. 
efd0: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
efe0: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
eff0: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
f000: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
f010: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
f020: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
f030: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c  OMIT_UTF16.  sql
f040: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
f050: 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69  ;.  int idx;.  i
f060: 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 68 61 72  nt bytes;.  char
f070: 20 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72   *value;.  int r
f080: 63 3b 0a 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  c;..  void (*xDe
f090: 6c 29 28 29 20 3d 20 28 6f 62 6a 63 3d 3d 36 3f  l)() = (objc==6?
f0a0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 3a 53 51  SQLITE_STATIC:SQ
f0b0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
f0c0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 53 74 6d  .  Tcl_Obj *oStm
f0d0: 74 20 20 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63  t    = objv[objc
f0e0: 2d 34 5d 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  -4];.  Tcl_Obj *
f0f0: 6f 4e 20 20 20 20 20 20 20 3d 20 6f 62 6a 76 5b  oN       = objv[
f100: 6f 62 6a 63 2d 33 5d 3b 0a 20 20 54 63 6c 5f 4f  objc-3];.  Tcl_O
f110: 62 6a 20 2a 6f 53 74 72 69 6e 67 20 20 3d 20 6f  bj *oString  = o
f120: 62 6a 76 5b 6f 62 6a 63 2d 32 5d 3b 0a 20 20 54  bjv[objc-2];.  T
f130: 63 6c 5f 4f 62 6a 20 2a 6f 42 79 74 65 73 20 20  cl_Obj *oBytes  
f140: 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 31 5d 3b   = objv[objc-1];
f150: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20  ..  if( objc!=5 
f160: 26 26 20 6f 62 6a 63 21 3d 36 29 7b 0a 20 20 20  && objc!=6){.   
f170: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
f180: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
f190: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
f1a0: 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
f1b0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
f1c0: 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
f1d0: 2c 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45  , " STMT N VALUE
f1e0: 20 42 59 54 45 53 22 2c 20 30 29 3b 0a 20 20 20   BYTES", 0);.   
f1f0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f200: 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
f210: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
f220: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
f230: 6e 67 28 6f 53 74 6d 74 29 2c 20 26 70 53 74 6d  ng(oStmt), &pStm
f240: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
f250: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
f260: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
f270: 6e 74 65 72 70 2c 20 6f 4e 2c 20 26 69 64 78 29  nterp, oN, &idx)
f280: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
f290: 52 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d 20 28  ROR;.  value = (
f2a0: 63 68 61 72 2a 29 54 63 6c 5f 47 65 74 42 79 74  char*)Tcl_GetByt
f2b0: 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 53  eArrayFromObj(oS
f2c0: 74 72 69 6e 67 2c 20 30 29 3b 0a 20 20 69 66 28  tring, 0);.  if(
f2d0: 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
f2e0: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 42 79 74 65  bj(interp, oByte
f2f0: 73 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74  s, &bytes) ) ret
f300: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
f310: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62    rc = sqlite3_b
f320: 69 6e 64 5f 74 65 78 74 31 36 28 70 53 74 6d 74  ind_text16(pStmt
f330: 2c 20 69 64 78 2c 20 28 76 6f 69 64 20 2a 29 76  , idx, (void *)v
f340: 61 6c 75 65 2c 20 62 79 74 65 73 2c 20 78 44 65  alue, bytes, xDe
f350: 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  l);.  if( sqlite
f360: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
f370: 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53  erp, StmtToDb(pS
f380: 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75  tmt), rc) ) retu
f390: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
f3a0: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
f3b0: 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
f3c0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
f3d0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
f3e0: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20  _OMIT_UTF16 */. 
f3f0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
f400: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
f410: 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62    sqlite3_bind_b
f420: 6c 6f 62 20 20 53 54 4d 54 20 4e 20 44 41 54 41  lob  STMT N DATA
f430: 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73   BYTES.**.** Tes
f440: 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69  t the sqlite3_bi
f450: 6e 64 5f 62 6c 6f 62 20 69 6e 74 65 72 66 61 63  nd_blob interfac
f460: 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72  e.  STMT is a pr
f470: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
f480: 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e  ..** N is the in
f490: 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72  dex of a wildcar
f4a0: 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  d in the prepare
f4b0: 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  d statement.  Th
f4c0: 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69  is command.** bi
f4d0: 6e 64 73 20 61 20 42 4c 4f 42 20 74 6f 20 74 68  nds a BLOB to th
f4e0: 65 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65  e wildcard.  The
f4f0: 20 42 4c 4f 42 20 69 73 20 42 59 54 45 53 20 62   BLOB is BYTES b
f500: 79 74 65 73 20 69 6e 20 73 69 7a 65 2e 0a 2a 2f  ytes in size..*/
f510: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
f520: 5f 62 69 6e 64 5f 62 6c 6f 62 28 0a 20 20 76 6f  _bind_blob(.  vo
f530: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
f540: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
f550: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
f560: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
f570: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
f580: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
f590: 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  tmt;.  int idx;.
f5a0: 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 20 20 63    int bytes;.  c
f5b0: 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20 69 6e  har *value;.  in
f5c0: 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
f5d0: 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=5 ){.    Tcl_
f5e0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
f5f0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
f600: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
f610: 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
f620: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
f630: 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53  objv[0], 0), " S
f640: 54 4d 54 20 4e 20 44 41 54 41 20 42 59 54 45 53  TMT N DATA BYTES
f650: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
f660: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
f670: 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
f680: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
f690: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
f6a0: 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
f6b0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f6c0: 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
f6d0: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
f6e0: 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78  p, objv[2], &idx
f6f0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
f700: 52 52 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d 20  RROR;.  value = 
f710: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
f720: 6a 76 5b 33 5d 29 3b 0a 20 20 69 66 28 20 54 63  jv[3]);.  if( Tc
f730: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
f740: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c  interp, objv[4],
f750: 20 26 62 79 74 65 73 29 20 29 20 72 65 74 75 72   &bytes) ) retur
f760: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
f770: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
f780: 64 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 20 69 64  d_blob(pStmt, id
f790: 78 2c 20 76 61 6c 75 65 2c 20 62 79 74 65 73 2c  x, value, bytes,
f7a0: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
f7b0: 54 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  T);.  if( sqlite
f7c0: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
f7d0: 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53  erp, StmtToDb(pS
f7e0: 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75  tmt), rc) ) retu
f7f0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
f800: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
f810: 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
f820: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
f830: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
f840: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
f850: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
f860: 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 20  parameter_count 
f870: 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 52 65 74 75   STMT.**.** Retu
f880: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
f890: 20 77 69 6c 64 63 61 72 64 73 20 69 6e 20 74 68   wildcards in th
f8a0: 65 20 67 69 76 65 6e 20 73 74 61 74 65 6d 65 6e  e given statemen
f8b0: 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  t..*/.static int
f8c0: 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d   test_bind_param
f8d0: 65 74 65 72 5f 63 6f 75 6e 74 28 0a 20 20 76 6f  eter_count(.  vo
f8e0: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
f8f0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
f900: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
f910: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
f920: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
f930: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
f940: 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  tmt;..  if( objc
f950: 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=2 ){.    Tcl_W
f960: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
f970: 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54  rp, 1, objv, "ST
f980: 4d 54 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  MT");.    return
f990: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
f9a0: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
f9b0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
f9c0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
f9d0: 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
f9e0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
f9f0: 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
fa00: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
fa10: 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65  NewIntObj(sqlite
fa20: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
fa30: 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 29 29 3b  _count(pStmt)));
fa40: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
fa50: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
fa60: 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
fa70: 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 20  _parameter_name 
fa80: 20 53 54 4d 54 20 20 4e 0a 2a 2a 0a 2a 2a 20 52   STMT  N.**.** R
fa90: 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f  eturn the name o
faa0: 66 20 74 68 65 20 4e 74 68 20 77 69 6c 64 63 61  f the Nth wildca
fab0: 72 64 2e 20 20 54 68 65 20 66 69 72 73 74 20 77  rd.  The first w
fac0: 69 6c 64 63 61 72 64 20 69 73 20 31 2e 0a 2a 2a  ildcard is 1..**
fad0: 20 41 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   An empty string
fae0: 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20   is returned if 
faf0: 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67  N is out of rang
fb00: 65 20 6f 72 20 69 66 20 74 68 65 20 77 69 6c 64  e or if the wild
fb10: 63 61 72 64 0a 2a 2a 20 69 73 20 6e 61 6d 65 6c  card.** is namel
fb20: 65 73 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ess..*/.static i
fb30: 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72  nt test_bind_par
fb40: 61 6d 65 74 65 72 5f 6e 61 6d 65 28 0a 20 20 76  ameter_name(.  v
fb50: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
fb60: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
fb70: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
fb80: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
fb90: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
fba0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
fbb0: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a  Stmt;.  int i;..
fbc0: 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b    if( objc!=3 ){
fbd0: 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75  .    Tcl_WrongNu
fbe0: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
fbf0: 20 6f 62 6a 76 2c 20 22 53 54 4d 54 20 4e 22 29   objv, "STMT N")
fc00: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
fc10: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
fc20: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
fc30: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
fc40: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
fc50: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
fc60: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
fc70: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
fc80: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
fc90: 76 5b 32 5d 2c 20 26 69 29 20 29 20 72 65 74 75  v[2], &i) ) retu
fca0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
fcb0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
fcc0: 28 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54  (interp, .     T
fcd0: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
fce0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
fcf0: 61 6d 65 74 65 72 5f 6e 61 6d 65 28 70 53 74 6d  ameter_name(pStm
fd00: 74 2c 69 29 2c 2d 31 29 0a 20 20 29 3b 0a 20 20  t,i),-1).  );.  
fd10: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
fd20: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
fd30: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
fd40: 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 20 20 53  rameter_index  S
fd50: 54 4d 54 20 20 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20  TMT  NAME.**.** 
fd60: 52 65 74 75 72 6e 20 74 68 65 20 69 6e 64 65 78  Return the index
fd70: 20 6f 66 20 74 68 65 20 77 69 6c 64 63 61 72 64   of the wildcard
fd80: 20 63 61 6c 6c 65 64 20 4e 41 4d 45 2e 20 20 52   called NAME.  R
fd90: 65 74 75 72 6e 20 30 20 69 66 20 74 68 65 72 65  eturn 0 if there
fda0: 20 69 73 0a 2a 2a 20 6e 6f 20 73 75 63 68 20 77   is.** no such w
fdb0: 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74  ildcard..*/.stat
fdc0: 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64  ic int test_bind
fdd0: 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
fde0: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
fdf0: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
fe00: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
fe10: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
fe20: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
fe30: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
fe40: 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66  mt *pStmt;..  if
fe50: 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
fe60: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
fe70: 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
fe80: 76 2c 20 22 53 54 4d 54 20 4e 41 4d 45 22 29 3b  v, "STMT NAME");
fe90: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
fea0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
feb0: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
fec0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
fed0: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
fee0: 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
fef0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63   TCL_ERROR;.  Tc
ff00: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
ff10: 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63 6c  nterp, .     Tcl
ff20: 5f 4e 65 77 49 6e 74 4f 62 6a 28 0a 20 20 20 20  _NewIntObj(.    
ff30: 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
ff40: 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28  parameter_index(
ff50: 70 53 74 6d 74 2c 54 63 6c 5f 47 65 74 53 74 72  pStmt,Tcl_GetStr
ff60: 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 0a 20 20  ing(objv[2])).  
ff70: 20 20 20 29 0a 20 20 29 3b 0a 20 20 72 65 74 75     ).  );.  retu
ff80: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
ff90: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c  .** Usage:   sql
ffa0: 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
ffb0: 6e 67 73 20 53 54 4d 54 0a 2a 2a 0a 2a 2f 0a 73  ngs STMT.**.*/.s
ffc0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
ffd0: 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 0a 20  lear_bindings(. 
ffe0: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
fff0: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
10000 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
10010 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
10020 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
10030 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
10040 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f  *pStmt;..  if( o
10050 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
10060 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
10070 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
10080 22 53 54 4d 54 22 29 3b 0a 20 20 20 20 72 65 74  "STMT");.    ret
10090 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
100a0 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74   }.  if( getStmt
100b0 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
100c0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
100d0 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
100e0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
100f0 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  OR;.  Tcl_SetObj
10100 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
10110 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
10120 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
10130 6e 67 73 28 70 53 74 6d 74 29 29 29 3b 0a 20 20  ngs(pStmt)));.  
10140 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
10150 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
10160 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20 4d   sqlite3_sleep M
10170 49 4c 4c 49 53 45 43 4f 4e 44 53 0a 2a 2f 0a 73  ILLISECONDS.*/.s
10180 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
10190 6c 65 65 70 28 0a 20 20 76 6f 69 64 20 2a 20 63  leep(.  void * c
101a0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
101b0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
101c0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
101d0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
101e0 6a 76 5b 5d 0a 29 7b 0a 20 20 69 6e 74 20 6d 73  jv[].){.  int ms
101f0 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
10200 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
10210 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
10220 20 31 2c 20 6f 62 6a 76 2c 20 22 4d 49 4c 4c 49   1, objv, "MILLI
10230 53 45 43 4f 4e 44 53 22 29 3b 0a 20 20 20 20 72  SECONDS");.    r
10240 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
10250 0a 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47  .  }.  if( Tcl_G
10260 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
10270 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 6d  erp, objv[1], &m
10280 73 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  s) ){.    return
10290 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
102a0 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
102b0 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
102c0 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
102d0 5f 73 6c 65 65 70 28 6d 73 29 29 29 3b 0a 20 20  _sleep(ms)));.  
102e0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
102f0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
10300 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 44  qlite3_errcode D
10310 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  B.**.** Return t
10320 68 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  he string repres
10330 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
10340 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71 6c 69  most recent sqli
10350 74 65 33 5f 2a 20 41 50 49 0a 2a 2a 20 65 72 72  te3_* API.** err
10360 6f 72 20 63 6f 64 65 2e 20 65 2e 67 2e 20 22 53  or code. e.g. "S
10370 51 4c 49 54 45 5f 45 52 52 4f 52 22 2e 0a 2a 2f  QLITE_ERROR"..*/
10380 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
10390 5f 65 72 72 63 6f 64 65 28 0a 20 20 76 6f 69 64  _errcode(.  void
103a0 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
103b0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
103c0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
103d0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
103e0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
103f0 6c 69 74 65 33 20 2a 64 62 3b 0a 0a 20 20 69 66  lite3 *db;..  if
10400 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
10410 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
10420 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
10430 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
10440 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
10450 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
10460 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30  jv[0]), " DB", 0
10470 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
10480 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
10490 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
104a0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
104b0 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
104c0 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
104d0 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53  L_ERROR;.  Tcl_S
104e0 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
104f0 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
10500 6d 65 28 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  me(sqlite3_errco
10510 64 65 28 64 62 29 29 2c 20 30 29 3b 0a 20 20 72  de(db)), 0);.  r
10520 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
10530 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
10540 74 65 73 74 5f 65 72 72 6d 73 67 20 44 42 0a 2a  test_errmsg DB.*
10550 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65  *.** Returns the
10560 20 55 54 46 2d 38 20 72 65 70 72 65 73 65 6e 74   UTF-8 represent
10570 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 72 72  ation of the err
10580 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e  or message strin
10590 67 20 66 6f 72 20 74 68 65 0a 2a 2a 20 6d 6f 73  g for the.** mos
105a0 74 20 72 65 63 65 6e 74 20 73 71 6c 69 74 65 33  t recent sqlite3
105b0 5f 2a 20 41 50 49 20 63 61 6c 6c 2e 0a 2a 2f 0a  _* API call..*/.
105c0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
105d0 65 72 72 6d 73 67 28 0a 20 20 76 6f 69 64 20 2a  errmsg(.  void *
105e0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
105f0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
10600 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
10610 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
10620 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
10630 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74  te3 *db;.  const
10640 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a 0a 20 20   char *zErr;..  
10650 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
10660 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
10670 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
10680 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
10690 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
106a0 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
106b0 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c  objv[0]), " DB",
106c0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
106d0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
106e0 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
106f0 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
10700 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
10710 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
10720 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a 45  TCL_ERROR;..  zE
10730 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  rr = sqlite3_err
10740 6d 73 67 28 64 62 29 3b 0a 20 20 54 63 6c 5f 53  msg(db);.  Tcl_S
10750 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
10760 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
10770 67 4f 62 6a 28 7a 45 72 72 2c 20 2d 31 29 29 3b  gObj(zErr, -1));
10780 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
10790 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
107a0 3a 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67 31  :   test_errmsg1
107b0 36 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  6 DB.**.** Retur
107c0 6e 73 20 74 68 65 20 55 54 46 2d 31 36 20 72 65  ns the UTF-16 re
107d0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
107e0 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
107f0 65 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  e string for the
10800 0a 2a 2a 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  .** most recent 
10810 73 71 6c 69 74 65 33 5f 2a 20 41 50 49 20 63 61  sqlite3_* API ca
10820 6c 6c 2e 20 54 68 69 73 20 69 73 20 61 20 62 79  ll. This is a by
10830 74 65 20 61 72 72 61 79 20 6f 62 6a 65 63 74 20  te array object 
10840 61 74 20 74 68 65 20 54 43 4c 20 0a 2a 2a 20 6c  at the TCL .** l
10850 65 76 65 6c 2c 20 61 6e 64 20 69 74 20 69 6e 63  evel, and it inc
10860 6c 75 64 65 73 20 74 68 65 20 30 78 30 30 20 30  ludes the 0x00 0
10870 78 30 30 20 74 65 72 6d 69 6e 61 74 6f 72 20 62  x00 terminator b
10880 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
10890 6f 66 20 74 68 65 0a 2a 2a 20 55 54 46 2d 31 36  of the.** UTF-16
108a0 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74   string..*/.stat
108b0 69 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72 6d  ic int test_errm
108c0 73 67 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  sg16(.  void * c
108d0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
108e0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
108f0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
10900 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
10910 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
10920 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
10930 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  6.  sqlite3 *db;
10940 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
10950 45 72 72 3b 0a 20 20 69 6e 74 20 62 79 74 65 73  Err;.  int bytes
10960 20 3d 20 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a   = 0;..  if( obj
10970 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
10980 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
10990 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
109a0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
109b0 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
109c0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
109d0 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20  ), " DB", 0);.  
109e0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
109f0 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
10a00 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
10a10 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
10a20 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20  (objv[1]), &db) 
10a30 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
10a40 4f 52 3b 0a 0a 20 20 7a 45 72 72 20 3d 20 73 71  OR;..  zErr = sq
10a50 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28 64  lite3_errmsg16(d
10a60 62 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29  b);.  if( zErr )
10a70 7b 0a 20 20 20 20 62 79 74 65 73 20 3d 20 73 71  {.    bytes = sq
10a80 6c 69 74 65 33 75 74 66 31 36 42 79 74 65 4c 65  lite3utf16ByteLe
10a90 6e 28 7a 45 72 72 2c 20 2d 31 29 3b 0a 20 20 7d  n(zErr, -1);.  }
10aa0 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
10ab0 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
10ac0 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28  NewByteArrayObj(
10ad0 7a 45 72 72 2c 20 62 79 74 65 73 29 29 3b 0a 23  zErr, bytes));.#
10ae0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
10af0 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20  OMIT_UTF16 */.  
10b00 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
10b10 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
10b20 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 44  qlite3_prepare D
10b30 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c  B sql bytes tail
10b40 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c  var.**.** Compil
10b50 65 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e 20  e up to <bytes> 
10b60 62 79 74 65 73 20 6f 66 20 74 68 65 20 73 75 70  bytes of the sup
10b70 70 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e 67  plied SQL string
10b80 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20   <sql> using.** 
10b90 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
10ba0 3c 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d 65  <DB>. The parame
10bb0 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69 73  ter <tailval> is
10bc0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 67   the name of a g
10bd0 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62 6c  lobal.** variabl
10be0 65 20 74 68 61 74 20 69 73 20 73 65 74 20 74 6f  e that is set to
10bf0 20 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72 74   the unused port
10c00 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69 66  ion of <sql> (if
10c10 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d 54   any). A.** STMT
10c20 20 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75 72   handle is retur
10c30 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ned..*/.static i
10c40 6e 74 20 74 65 73 74 5f 70 72 65 70 61 72 65 28  nt test_prepare(
10c50 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
10c60 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
10c70 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
10c80 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
10c90 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
10ca0 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
10cb0 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
10cc0 7a 53 71 6c 3b 0a 20 20 69 6e 74 20 62 79 74 65  zSql;.  int byte
10cd0 73 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  s;.  const char 
10ce0 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20 73 71  *zTail = 0;.  sq
10cf0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
10d00 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 42  t = 0;.  char zB
10d10 75 66 5b 35 30 5d 3b 0a 20 20 69 6e 74 20 72 63  uf[50];.  int rc
10d20 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35  ;..  if( objc!=5
10d30 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
10d40 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
10d50 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
10d60 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
10d70 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
10d80 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
10d90 20 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61   DB sql bytes ta
10da0 69 6c 76 61 72 22 2c 20 30 29 3b 0a 20 20 20 20  ilvar", 0);.    
10db0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
10dc0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
10dd0 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
10de0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
10df0 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20  bjv[1]), &db) ) 
10e00 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
10e10 3b 0a 20 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47  ;.  zSql = Tcl_G
10e20 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d  etString(objv[2]
10e30 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  );.  if( Tcl_Get
10e40 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
10e50 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74  p, objv[3], &byt
10e60 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  es) ) return TCL
10e70 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
10e80 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
10e90 64 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c  db, zSql, bytes,
10ea0 20 26 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c 29   &pStmt, &zTail)
10eb0 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
10ec0 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
10ed0 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74  p, db, rc) ) ret
10ee0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
10ef0 20 69 66 28 20 7a 54 61 69 6c 20 29 7b 0a 20 20   if( zTail ){.  
10f00 20 20 69 66 28 20 62 79 74 65 73 3e 3d 30 20 29    if( bytes>=0 )
10f10 7b 0a 20 20 20 20 20 20 62 79 74 65 73 20 3d 20  {.      bytes = 
10f20 62 79 74 65 73 20 2d 20 28 7a 54 61 69 6c 2d 7a  bytes - (zTail-z
10f30 53 71 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Sql);.    }.    
10f40 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69  Tcl_ObjSetVar2(i
10f50 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20  nterp, objv[4], 
10f60 30 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  0, Tcl_NewString
10f70 4f 62 6a 28 7a 54 61 69 6c 2c 20 62 79 74 65 73  Obj(zTail, bytes
10f80 29 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28  ), 0);.  }.  if(
10f90 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
10fa0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 53  {.    assert( pS
10fb0 74 6d 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 70  tmt==0 );.    sp
10fc0 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 28 25 64  rintf(zBuf, "(%d
10fd0 29 20 22 2c 20 72 63 29 3b 0a 20 20 20 20 54 63  ) ", rc);.    Tc
10fe0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
10ff0 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 73 71 6c  nterp, zBuf, sql
11000 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c  ite3_errmsg(db),
11010 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
11020 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
11030 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20    if( pStmt ){. 
11040 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65     if( sqlite3Te
11050 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72  stMakePointerStr
11060 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70  (interp, zBuf, p
11070 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
11080 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 54 63  CL_ERROR;.    Tc
11090 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
110a0 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b  nterp, zBuf, 0);
110b0 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
110c0 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
110d0 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 70 72  sage: sqlite3_pr
110e0 65 70 61 72 65 20 44 42 20 73 71 6c 20 62 79 74  epare DB sql byt
110f0 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a 2a  es tailvar.**.**
11100 20 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f 20 3c   Compile up to <
11110 62 79 74 65 73 3e 20 62 79 74 65 73 20 6f 66 20  bytes> bytes of 
11120 74 68 65 20 73 75 70 70 6c 69 65 64 20 53 51 4c  the supplied SQL
11130 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20 75 73   string <sql> us
11140 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  ing.** database 
11150 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54 68 65  handle <DB>. The
11160 20 70 61 72 61 6d 65 74 65 72 20 3c 74 61 69 6c   parameter <tail
11170 76 61 6c 3e 20 69 73 20 74 68 65 20 6e 61 6d 65  val> is the name
11180 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20   of a global.** 
11190 76 61 72 69 61 62 6c 65 20 74 68 61 74 20 69 73  variable that is
111a0 20 73 65 74 20 74 6f 20 74 68 65 20 75 6e 75 73   set to the unus
111b0 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20 3c 73  ed portion of <s
111c0 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20 41 0a  ql> (if any). A.
111d0 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65 20 69  ** STMT handle i
111e0 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73  s returned..*/.s
111f0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 70  tatic int test_p
11200 72 65 70 61 72 65 31 36 28 0a 20 20 76 6f 69 64  repare16(.  void
11210 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
11220 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
11230 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
11240 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
11250 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e  T objv[].){.#ifn
11260 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
11270 55 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33 20  UTF16.  sqlite3 
11280 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  *db;.  const voi
11290 64 20 2a 7a 53 71 6c 3b 0a 20 20 63 6f 6e 73 74  d *zSql;.  const
112a0 20 76 6f 69 64 20 2a 7a 54 61 69 6c 20 3d 20 30   void *zTail = 0
112b0 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 54 61  ;.  Tcl_Obj *pTa
112c0 69 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  il = 0;.  sqlite
112d0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20  3_stmt *pStmt = 
112e0 30 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 35  0;.  char zBuf[5
112f0 30 5d 3b 20 0a 20 20 69 6e 74 20 72 63 3b 0a 20  0]; .  int rc;. 
11300 20 69 6e 74 20 62 79 74 65 73 3b 20 20 20 20 20   int bytes;     
11310 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
11320 65 20 69 6e 74 65 67 65 72 20 73 70 65 63 69 66  e integer specif
11330 69 65 64 20 61 73 20 61 72 67 20 33 20 2a 2f 0a  ied as arg 3 */.
11340 20 20 69 6e 74 20 6f 62 6a 6c 65 6e 3b 20 20 20    int objlen;   
11350 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
11360 68 65 20 62 79 74 65 2d 61 72 72 61 79 20 6c 65  he byte-array le
11370 6e 67 74 68 20 6f 66 20 61 72 67 20 32 20 2a 2f  ngth of arg 2 */
11380 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20  ..  if( objc!=5 
11390 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
113a0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
113b0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
113c0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
113d0 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
113e0 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
113f0 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69  DB sql bytes tai
11400 6c 76 61 72 22 2c 20 30 29 3b 0a 20 20 20 20 72  lvar", 0);.    r
11410 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
11420 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
11430 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
11440 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
11450 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
11460 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
11470 0a 20 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65  .  zSql = Tcl_Ge
11480 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62  tByteArrayFromOb
11490 6a 28 6f 62 6a 76 5b 32 5d 2c 20 26 6f 62 6a 6c  j(objv[2], &objl
114a0 65 6e 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  en);.  if( Tcl_G
114b0 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
114c0 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62  erp, objv[3], &b
114d0 79 74 65 73 29 20 29 20 72 65 74 75 72 6e 20 54  ytes) ) return T
114e0 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20  CL_ERROR;..  rc 
114f0 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
11500 65 31 36 28 64 62 2c 20 7a 53 71 6c 2c 20 62 79  e16(db, zSql, by
11510 74 65 73 2c 20 26 70 53 74 6d 74 2c 20 26 7a 54  tes, &pStmt, &zT
11520 61 69 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  ail);.  if( sqli
11530 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
11540 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29  nterp, db, rc) )
11550 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11560 52 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  R;.  if( rc ){. 
11570 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
11580 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
11590 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20 6f 62 6a  zTail ){.    obj
115a0 6c 65 6e 20 3d 20 6f 62 6a 6c 65 6e 20 2d 20 28  len = objlen - (
115b0 28 75 38 20 2a 29 7a 54 61 69 6c 2d 28 75 38 20  (u8 *)zTail-(u8 
115c0 2a 29 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65  *)zSql);.  }else
115d0 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 30  {.    objlen = 0
115e0 3b 0a 20 20 7d 0a 20 20 70 54 61 69 6c 20 3d 20  ;.  }.  pTail = 
115f0 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79  Tcl_NewByteArray
11600 4f 62 6a 28 28 75 38 20 2a 29 7a 54 61 69 6c 2c  Obj((u8 *)zTail,
11610 20 6f 62 6a 6c 65 6e 29 3b 0a 20 20 54 63 6c 5f   objlen);.  Tcl_
11620 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 54 61  IncrRefCount(pTa
11630 69 6c 29 3b 0a 20 20 54 63 6c 5f 4f 62 6a 53 65  il);.  Tcl_ObjSe
11640 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6f 62  tVar2(interp, ob
11650 6a 76 5b 34 5d 2c 20 30 2c 20 70 54 61 69 6c 2c  jv[4], 0, pTail,
11660 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52   0);.  Tcl_DecrR
11670 65 66 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a  efCount(pTail);.
11680 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a  .  if( pStmt ){.
11690 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54      if( sqlite3T
116a0 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74  estMakePointerSt
116b0 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  r(interp, zBuf, 
116c0 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
116d0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
116e0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
116f0 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
11700 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  0);.#endif /* SQ
11710 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
11720 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
11730 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
11740 67 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ge: sqlite3_open
11750 20 66 69 6c 65 6e 61 6d 65 20 3f 6f 70 74 69 6f   filename ?optio
11760 6e 73 2d 6c 69 73 74 3f 0a 2a 2f 0a 73 74 61 74  ns-list?.*/.stat
11770 69 63 20 69 6e 74 20 74 65 73 74 5f 6f 70 65 6e  ic int test_open
11780 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
11790 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
117a0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
117b0 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
117c0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
117d0 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  .){.  const char
117e0 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20 20 73   *zFilename;.  s
117f0 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
11800 74 20 72 63 3b 0a 20 20 63 68 61 72 20 7a 42 75  t rc;.  char zBu
11810 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f  f[100];..  if( o
11820 62 6a 63 21 3d 33 20 26 26 20 6f 62 6a 63 21 3d  bjc!=3 && objc!=
11830 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
11840 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
11850 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
11860 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
11870 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
11880 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
11890 22 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f  " filename optio
118a0 6e 73 2d 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20  ns-list", 0);.  
118b0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
118c0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65  OR;.  }..  zFile
118d0 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74 53 74  name = Tcl_GetSt
118e0 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20  ring(objv[1]);. 
118f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
11900 65 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 64  en(zFilename, &d
11910 62 29 3b 0a 20 20 0a 20 20 69 66 28 20 73 71 6c  b);.  .  if( sql
11920 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e  ite3TestMakePoin
11930 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a  terStr(interp, z
11940 42 75 66 2c 20 64 62 29 20 29 20 72 65 74 75 72  Buf, db) ) retur
11950 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
11960 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
11970 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29  interp, zBuf, 0)
11980 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
11990 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
119a0 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31  e: sqlite3_open1
119b0 36 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f  6 filename optio
119c0 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  ns.*/.static int
119d0 20 74 65 73 74 5f 6f 70 65 6e 31 36 28 0a 20 20   test_open16(.  
119e0 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
119f0 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
11a00 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
11a10 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
11a20 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
11a30 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
11a40 4d 49 54 5f 55 54 46 31 36 0a 20 20 63 6f 6e 73  MIT_UTF16.  cons
11a50 74 20 76 6f 69 64 20 2a 7a 46 69 6c 65 6e 61 6d  t void *zFilenam
11a60 65 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  e;.  sqlite3 *db
11a70 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68  ;.  int rc;.  ch
11a80 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a 0a 20  ar zBuf[100];.. 
11a90 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
11aa0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
11ab0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
11ac0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
11ad0 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
11ae0 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
11af0 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c  (objv[0]), " fil
11b00 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73 2d 6c 69  ename options-li
11b10 73 74 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  st", 0);.    ret
11b20 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
11b30 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20   }..  zFilename 
11b40 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72  = Tcl_GetByteArr
11b50 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31  ayFromObj(objv[1
11b60 5d 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71  ], 0);.  rc = sq
11b70 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28 7a 46 69  lite3_open16(zFi
11b80 6c 65 6e 61 6d 65 2c 20 26 64 62 29 3b 0a 20 20  lename, &db);.  
11b90 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
11ba0 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72  stMakePointerStr
11bb0 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 64  (interp, zBuf, d
11bc0 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
11bd0 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 41 70 70  ERROR;.  Tcl_App
11be0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
11bf0 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23 65 6e 64  , zBuf, 0);.#end
11c00 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
11c10 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74  T_UTF16 */.  ret
11c20 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
11c30 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
11c40 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31 36 20 3c  te3_complete16 <
11c50 55 54 46 2d 31 36 20 73 74 72 69 6e 67 3e 0a 2a  UTF-16 string>.*
11c60 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31 20 69 66  *.** Return 1 if
11c70 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 61 72   the supplied ar
11c80 67 75 6d 65 6e 74 20 69 73 20 61 20 63 6f 6d 70  gument is a comp
11c90 6c 65 74 65 20 53 51 4c 20 73 74 61 74 65 6d 65  lete SQL stateme
11ca0 6e 74 2c 20 6f 72 20 7a 65 72 6f 0a 2a 2a 20 6f  nt, or zero.** o
11cb0 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a 73 74 61  therwise..*/.sta
11cc0 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6d  tic int test_com
11cd0 70 6c 65 74 65 31 36 28 0a 20 20 76 6f 69 64 20  plete16(.  void 
11ce0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
11cf0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
11d00 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
11d10 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
11d20 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 20 21   objv[].){.#if !
11d30 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
11d40 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 29 20 26 26  MIT_COMPLETE) &&
11d50 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
11d60 5f 4f 4d 49 54 5f 55 54 46 31 36 29 0a 20 20 63  _OMIT_UTF16).  c
11d70 68 61 72 20 2a 7a 42 75 66 3b 0a 0a 20 20 69 66  har *zBuf;..  if
11d80 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
11d90 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
11da0 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
11db0 76 2c 20 22 3c 75 74 66 2d 31 36 20 73 71 6c 3e  v, "<utf-16 sql>
11dc0 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
11dd0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
11de0 20 7a 42 75 66 20 3d 20 28 63 68 61 72 2a 29 54   zBuf = (char*)T
11df0 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79 46  cl_GetByteArrayF
11e00 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31 5d 2c 20  romObj(objv[1], 
11e10 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  0);.  Tcl_SetObj
11e20 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
11e30 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
11e40 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31 36 28  ite3_complete16(
11e50 7a 42 75 66 29 29 29 3b 0a 23 65 6e 64 69 66 20  zBuf)));.#endif 
11e60 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
11e70 4f 4d 50 4c 45 54 45 20 26 26 20 53 51 4c 49 54  OMPLETE && SQLIT
11e80 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
11e90 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
11ea0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
11eb0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 53 54   sqlite3_step ST
11ec0 4d 54 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65  MT.**.** Advance
11ed0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
11ee0 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 2e 0a  o the next row..
11ef0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
11f00 73 74 5f 73 74 65 70 28 0a 20 20 76 6f 69 64 20  st_step(.  void 
11f10 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
11f20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
11f30 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
11f40 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
11f50 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
11f60 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
11f70 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69  ;.  int rc;..  i
11f80 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
11f90 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
11fa0 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
11fb0 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
11fc0 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
11fd0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
11fe0 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 22  bjv[0]), " STMT"
11ff0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
12000 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
12010 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
12020 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
12030 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
12040 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
12050 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
12060 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
12070 5f 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 0a 20  _step(pStmt);.. 
12080 20 2f 2a 20 69 66 28 20 72 63 21 3d 53 51 4c 49   /* if( rc!=SQLI
12090 54 45 5f 44 4f 4e 45 20 26 26 20 72 63 21 3d 53  TE_DONE && rc!=S
120a0 51 4c 49 54 45 5f 52 4f 57 20 29 20 72 65 74 75  QLITE_ROW ) retu
120b0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 20 2a 2f  rn TCL_ERROR; */
120c0 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
120d0 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
120e0 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  )errorName(rc), 
120f0 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  0);.  return TCL
12100 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
12110 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
12120 75 6d 6e 5f 63 6f 75 6e 74 20 53 54 4d 54 20 0a  umn_count STMT .
12130 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
12140 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
12150 6e 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ns returned by t
12160 68 65 20 73 71 6c 20 73 74 61 74 65 6d 65 6e 74  he sql statement
12170 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69 63   STMT..*/.static
12180 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e   int test_column
12190 5f 63 6f 75 6e 74 28 0a 20 20 76 6f 69 64 20 2a  _count(.  void *
121a0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
121b0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
121c0 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
121d0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
121e0 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
121f0 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
12200 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
12210 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
12220 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
12230 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
12240 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
12250 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
12260 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
12270 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29  STMT column", 0)
12280 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
12290 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
122a0 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
122b0 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
122c0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
122d0 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
122e0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
122f0 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
12300 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
12310 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f  wIntObj(sqlite3_
12320 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74  column_count(pSt
12330 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  mt)));.  return 
12340 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
12350 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
12360 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 53 54 4d 54  column_type STMT
12370 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65   column.**.** Re
12380 74 75 72 6e 20 74 68 65 20 74 79 70 65 20 6f 66  turn the type of
12390 20 74 68 65 20 64 61 74 61 20 69 6e 20 63 6f 6c   the data in col
123a0 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20  umn 'column' of 
123b0 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 2e  the current row.
123c0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
123d0 65 73 74 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28  est_column_type(
123e0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
123f0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
12400 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
12410 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
12420 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
12430 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
12440 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
12450 63 6f 6c 3b 0a 20 20 69 6e 74 20 74 70 3b 0a 0a  col;.  int tp;..
12460 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b    if( objc!=3 ){
12470 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
12480 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
12490 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
124a0 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
124b0 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
124c0 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54  g(objv[0]), " ST
124d0 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a  MT column", 0);.
124e0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
124f0 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
12500 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
12510 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
12520 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
12530 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
12540 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
12550 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
12560 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
12570 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74  [2], &col) ) ret
12580 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
12590 20 20 74 70 20 3d 20 73 71 6c 69 74 65 33 5f 63    tp = sqlite3_c
125a0 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74 6d 74  olumn_type(pStmt
125b0 2c 20 63 6f 6c 29 3b 0a 20 20 73 77 69 74 63 68  , col);.  switch
125c0 28 20 74 70 20 29 7b 0a 20 20 20 20 63 61 73 65  ( tp ){.    case
125d0 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3a   SQLITE_INTEGER:
125e0 20 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52   .      Tcl_SetR
125f0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 49  esult(interp, "I
12600 4e 54 45 47 45 52 22 2c 20 54 43 4c 5f 53 54 41  NTEGER", TCL_STA
12610 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72 65  TIC); .      bre
12620 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
12630 49 54 45 5f 4e 55 4c 4c 3a 0a 20 20 20 20 20 20  ITE_NULL:.      
12640 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
12650 74 65 72 70 2c 20 22 4e 55 4c 4c 22 2c 20 54 43  terp, "NULL", TC
12660 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20  L_STATIC); .    
12670 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
12680 65 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3a 0a  e SQLITE_FLOAT:.
12690 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73        Tcl_SetRes
126a0 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 46 4c 4f  ult(interp, "FLO
126b0 41 54 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  AT", TCL_STATIC)
126c0 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ; .      break;.
126d0 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
126e0 54 45 58 54 3a 0a 20 20 20 20 20 20 54 63 6c 5f  TEXT:.      Tcl_
126f0 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
12700 2c 20 22 54 45 58 54 22 2c 20 54 43 4c 5f 53 54  , "TEXT", TCL_ST
12710 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72  ATIC); .      br
12720 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
12730 4c 49 54 45 5f 42 4c 4f 42 3a 0a 20 20 20 20 20  LITE_BLOB:.     
12740 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
12750 6e 74 65 72 70 2c 20 22 42 4c 4f 42 22 2c 20 54  nterp, "BLOB", T
12760 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20  CL_STATIC); .   
12770 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
12780 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 61 73 73  fault:.      ass
12790 65 72 74 28 30 29 3b 0a 20 20 7d 0a 0a 20 20 72  ert(0);.  }..  r
127a0 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
127b0 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
127c0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
127d0 36 34 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a  64 STMT column.*
127e0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
127f0 64 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e 20 27  data in column '
12800 63 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65 20 63  column' of the c
12810 75 72 72 65 6e 74 20 72 6f 77 20 63 61 73 74 20  urrent row cast 
12820 61 73 20 61 6e 0a 2a 2a 20 77 69 64 65 20 28 36  as an.** wide (6
12830 34 2d 62 69 74 29 20 69 6e 74 65 67 65 72 2e 0a  4-bit) integer..
12840 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
12850 73 74 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28  st_column_int64(
12860 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
12870 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
12880 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
12890 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
128a0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
128b0 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
128c0 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
128d0 63 6f 6c 3b 0a 20 20 69 36 34 20 69 56 61 6c 3b  col;.  i64 iVal;
128e0 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
128f0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
12900 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
12910 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
12920 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
12930 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
12940 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
12950 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29  STMT column", 0)
12960 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
12970 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
12980 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
12990 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
129a0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
129b0 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
129c0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
129d0 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
129e0 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
129f0 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72  jv[2], &col) ) r
12a00 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12a10 0a 0a 20 20 69 56 61 6c 20 3d 20 73 71 6c 69 74  ..  iVal = sqlit
12a20 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28  e3_column_int64(
12a30 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 54  pStmt, col);.  T
12a40 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
12a50 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 57  interp, Tcl_NewW
12a60 69 64 65 49 6e 74 4f 62 6a 28 69 56 61 6c 29 29  ideIntObj(iVal))
12a70 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
12a80 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
12a90 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
12aa0 6e 5f 62 6c 6f 62 20 53 54 4d 54 20 63 6f 6c 75  n_blob STMT colu
12ab0 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  mn.*/.static int
12ac0 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f   test_column_blo
12ad0 62 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  b(.  void * clie
12ae0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
12af0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
12b00 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
12b10 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
12b20 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
12b30 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
12b40 74 20 63 6f 6c 3b 0a 0a 20 20 69 6e 74 20 6c 65  t col;..  int le
12b50 6e 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  n;.  const void 
12b60 2a 70 42 6c 6f 62 3b 0a 0a 20 20 69 66 28 20 6f  *pBlob;..  if( o
12b70 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
12b80 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
12b90 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
12ba0 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
12bb0 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
12bc0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
12bd0 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75  0]), " STMT colu
12be0 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  mn", 0);.    ret
12bf0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
12c00 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
12c10 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
12c20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
12c30 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
12c40 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
12c50 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
12c60 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
12c70 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63  erp, objv[2], &c
12c80 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ol) ) return TCL
12c90 5f 45 52 52 4f 52 3b 0a 0a 20 20 70 42 6c 6f 62  _ERROR;..  pBlob
12ca0 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
12cb0 6e 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 20 63 6f  n_blob(pStmt, co
12cc0 6c 29 3b 0a 20 20 6c 65 6e 20 3d 20 73 71 6c 69  l);.  len = sqli
12cd0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
12ce0 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20  (pStmt, col);.  
12cf0 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
12d00 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
12d10 42 79 74 65 41 72 72 61 79 4f 62 6a 28 70 42 6c  ByteArrayObj(pBl
12d20 6f 62 2c 20 6c 65 6e 29 29 3b 0a 20 20 72 65 74  ob, len));.  ret
12d30 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
12d40 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
12d50 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  te3_column_doubl
12d60 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a  e STMT column.**
12d70 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 64  .** Return the d
12d80 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e 20 27 63  ata in column 'c
12d90 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65 20 63 75  olumn' of the cu
12da0 72 72 65 6e 74 20 72 6f 77 20 63 61 73 74 20 61  rrent row cast a
12db0 73 20 61 20 64 6f 75 62 6c 65 2e 0a 2a 2f 0a 73  s a double..*/.s
12dc0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
12dd0 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 0a 20 20  olumn_double(.  
12de0 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
12df0 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
12e00 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
12e10 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
12e20 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
12e30 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
12e40 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c  pStmt;.  int col
12e50 3b 0a 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 3b  ;.  double rVal;
12e60 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
12e70 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
12e80 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
12e90 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
12ea0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
12eb0 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
12ec0 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
12ed0 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29  STMT column", 0)
12ee0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
12ef0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
12f00 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
12f10 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
12f20 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
12f30 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
12f40 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
12f50 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
12f60 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
12f70 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72  jv[2], &col) ) r
12f80 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12f90 0a 0a 20 20 72 56 61 6c 20 3d 20 73 71 6c 69 74  ..  rVal = sqlit
12fa0 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65  e3_column_double
12fb0 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20  (pStmt, col);.  
12fc0 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
12fd0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
12fe0 44 6f 75 62 6c 65 4f 62 6a 28 72 56 61 6c 29 29  DoubleObj(rVal))
12ff0 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
13000 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
13010 65 3a 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f  e: sqlite3_data_
13020 63 6f 75 6e 74 20 53 54 4d 54 20 0a 2a 2a 0a 2a  count STMT .**.*
13030 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
13040 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 72  ber of columns r
13050 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 73  eturned by the s
13060 71 6c 20 73 74 61 74 65 6d 65 6e 74 20 53 54 4d  ql statement STM
13070 54 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  T..*/.static int
13080 20 74 65 73 74 5f 64 61 74 61 5f 63 6f 75 6e 74   test_data_count
13090 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
130a0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
130b0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
130c0 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
130d0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
130e0 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
130f0 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66  mt *pStmt;..  if
13100 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
13110 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
13120 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
13130 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
13140 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
13150 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
13160 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
13170 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
13180 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13190 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
131a0 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
131b0 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
131c0 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
131d0 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
131e0 5f 45 52 52 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53  _ERROR;..  Tcl_S
131f0 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
13200 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
13210 6a 28 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63  j(sqlite3_data_c
13220 6f 75 6e 74 28 70 53 74 6d 74 29 29 29 3b 0a 20  ount(pStmt)));. 
13230 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
13240 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
13250 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
13260 65 78 74 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ext STMT column.
13270 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  **.** Usage: sql
13280 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
13290 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  type STMT column
132a0 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  .**.** Usage: sq
132b0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
132c0 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2f  e STMT column.*/
132d0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
132e0 5f 73 74 6d 74 5f 75 74 66 38 28 0a 20 20 76 6f  _stmt_utf8(.  vo
132f0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
13300 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
13310 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41 50 49  er to SQLite API
13320 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
13330 69 6e 76 6f 6b 65 20 2a 2f 0a 20 20 54 63 6c 5f  invoke */.  Tcl_
13340 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
13350 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
13360 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
13370 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
13380 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
13390 69 6e 74 20 63 6f 6c 3b 0a 20 20 63 6f 6e 73 74  int col;.  const
133a0 20 63 68 61 72 20 2a 28 2a 78 46 75 6e 63 29 28   char *(*xFunc)(
133b0 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 20 69  sqlite3_stmt*, i
133c0 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  nt) = clientData
133d0 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
133e0 7a 52 65 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  zRet;..  if( obj
133f0 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
13400 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
13410 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
13420 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
13430 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
13440 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
13450 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
13460 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
13470 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
13480 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
13490 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
134a0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
134b0 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
134c0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
134d0 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
134e0 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
134f0 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
13500 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
13510 52 52 4f 52 3b 0a 20 20 7a 52 65 74 20 3d 20 78  RROR;.  zRet = x
13520 46 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c 29  Func(pStmt, col)
13530 3b 0a 20 20 69 66 28 20 7a 52 65 74 20 29 7b 0a  ;.  if( zRet ){.
13540 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c      Tcl_SetResul
13550 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
13560 2a 29 7a 52 65 74 2c 20 30 29 3b 0a 20 20 7d 0a  *)zRet, 0);.  }.
13570 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
13580 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .}..static int t
13590 65 73 74 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76  est_global_recov
135a0 65 72 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  er(.  void * cli
135b0 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
135c0 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
135d0 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
135e0 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
135f0 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51  [].){.#ifndef SQ
13600 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f 42 41 4c  LITE_OMIT_GLOBAL
13610 52 45 43 4f 56 45 52 0a 20 20 69 6e 74 20 72 63  RECOVER.  int rc
13620 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 31 20  ;.  if( objc!=1 
13630 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
13640 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
13650 31 2c 20 6f 62 6a 76 2c 20 22 22 29 3b 0a 20 20  1, objv, "");.  
13660 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
13670 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  OR;.  }.  rc = s
13680 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f 72 65  qlite3_global_re
13690 63 6f 76 65 72 28 29 3b 0a 20 20 54 63 6c 5f 53  cover();.  Tcl_S
136a0 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
136b0 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
136c0 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54  me(rc), TCL_STAT
136d0 49 43 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65  IC);.#endif.  re
136e0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
136f0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
13700 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
13710 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a   STMT column.**.
13720 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
13730 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
13740 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a  e STMT column.**
13750 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
13760 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 53  e3_column_name S
13770 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74  TMT column.*/.st
13780 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 74  atic int test_st
13790 6d 74 5f 75 74 66 31 36 28 0a 20 20 76 6f 69 64  mt_utf16(.  void
137a0 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20   * clientData,  
137b0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
137c0 20 53 51 4c 69 74 65 20 41 50 49 20 66 75 6e 63   SQLite API func
137d0 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b  tion to be invok
137e0 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  ed */.  Tcl_Inte
137f0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
13800 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
13810 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
13820 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
13830 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73  E_OMIT_UTF16.  s
13840 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
13850 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20  mt;.  int col;. 
13860 20 54 63 6c 5f 4f 62 6a 20 2a 70 52 65 74 3b 0a   Tcl_Obj *pRet;.
13870 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 4e    const void *zN
13880 61 6d 65 31 36 3b 0a 20 20 63 6f 6e 73 74 20 76  ame16;.  const v
13890 6f 69 64 20 2a 28 2a 78 46 75 6e 63 29 28 73 71  oid *(*xFunc)(sq
138a0 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 20 69 6e 74  lite3_stmt*, int
138b0 29 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a  ) = clientData;.
138c0 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
138d0 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
138e0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
138f0 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
13900 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
13910 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
13920 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53  ng(objv[0]), " S
13930 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b  TMT column", 0);
13940 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
13950 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
13960 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
13970 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
13980 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
13990 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
139a0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
139b0 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
139c0 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
139d0 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65  v[2], &col) ) re
139e0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
139f0 0a 20 20 7a 4e 61 6d 65 31 36 20 3d 20 78 46 75  .  zName16 = xFu
13a00 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a  nc(pStmt, col);.
13a10 20 20 69 66 28 20 7a 4e 61 6d 65 31 36 20 29 7b    if( zName16 ){
13a20 0a 20 20 20 20 70 52 65 74 20 3d 20 54 63 6c 5f  .    pRet = Tcl_
13a30 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28  NewByteArrayObj(
13a40 7a 4e 61 6d 65 31 36 2c 20 73 71 6c 69 74 65 33  zName16, sqlite3
13a50 75 74 66 31 36 42 79 74 65 4c 65 6e 28 7a 4e 61  utf16ByteLen(zNa
13a60 6d 65 31 36 2c 20 2d 31 29 2b 32 29 3b 0a 20 20  me16, -1)+2);.  
13a70 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
13a80 6c 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74 29  lt(interp, pRet)
13a90 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
13aa0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
13ab0 36 20 2a 2f 0a 0a 20 20 72 65 74 75 72 6e 20 54  6 */..  return T
13ac0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
13ad0 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63  Usage: sqlite3_c
13ae0 6f 6c 75 6d 6e 5f 69 6e 74 20 53 54 4d 54 20 63  olumn_int STMT c
13af0 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67  olumn.**.** Usag
13b00 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
13b10 6e 5f 62 79 74 65 73 20 53 54 4d 54 20 63 6f 6c  n_bytes STMT col
13b20 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a  umn.**.** Usage:
13b30 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
13b40 62 79 74 65 73 31 36 20 53 54 4d 54 20 63 6f 6c  bytes16 STMT col
13b50 75 6d 6e 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63  umn.**.*/.static
13b60 20 69 6e 74 20 74 65 73 74 5f 73 74 6d 74 5f 69   int test_stmt_i
13b70 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  nt(.  void * cli
13b80 65 6e 74 44 61 74 61 2c 20 20 20 20 2f 2a 20 50  entData,    /* P
13b90 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c 69 74 65  ointer to SQLite
13ba0 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 74 6f   API function to
13bb0 20 62 65 20 69 6e 76 6f 6b 65 64 20 2a 2f 0a 20   be invoked */. 
13bc0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
13bd0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
13be0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
13bf0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
13c00 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
13c10 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20  t;.  int col;.  
13c20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 73 71 6c  int (*xFunc)(sql
13c30 69 74 65 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29  ite3_stmt*, int)
13c40 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 3b 0a 0a   = clientData;..
13c50 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b    if( objc!=3 ){
13c60 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
13c70 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
13c80 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
13c90 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
13ca0 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
13cb0 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54  g(objv[0]), " ST
13cc0 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a  MT column", 0);.
13cd0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
13ce0 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
13cf0 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
13d00 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
13d10 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
13d20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
13d30 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
13d40 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
13d50 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
13d60 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74  [2], &col) ) ret
13d70 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
13d80 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
13d90 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
13da0 65 77 49 6e 74 4f 62 6a 28 78 46 75 6e 63 28 70  ewIntObj(xFunc(p
13db0 53 74 6d 74 2c 20 63 6f 6c 29 29 29 3b 0a 20 20  Stmt, col)));.  
13dc0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
13dd0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
13de0 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 2f 2a 0a  _OMIT_DISKIO./*.
13df0 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
13e00 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69 74  e3OsOpenReadWrit
13e10 65 20 3c 66 69 6c 65 6e 61 6d 65 3e 0a 2a 2f 0a  e <filename>.*/.
13e20 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
13e30 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61  sqlite3OsOpenRea
13e40 64 57 72 69 74 65 28 0a 20 20 76 6f 69 64 20 2a  dWrite(.  void *
13e50 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
13e60 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
13e70 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
13e80 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
13e90 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69  objv[].){.  OsFi
13ea0 6c 65 20 2a 70 46 69 6c 65 3b 0a 20 20 69 6e 74  le *pFile;.  int
13eb0 20 72 63 3b 0a 20 20 69 6e 74 20 64 75 6d 6d 79   rc;.  int dummy
13ec0 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30  ;.  char zBuf[10
13ed0 30 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  0];..  if( objc!
13ee0 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
13ef0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
13f00 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
13f10 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
13f20 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
13f30 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
13f40 20 22 20 66 69 6c 65 6e 61 6d 65 22 2c 20 30 29   " filename", 0)
13f50 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
13f60 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72  _ERROR;.  }..  r
13f70 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 4f 70 65  c = sqlite3OsOpe
13f80 6e 52 65 61 64 57 72 69 74 65 28 54 63 6c 5f 47  nReadWrite(Tcl_G
13f90 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
13fa0 29 2c 20 26 70 46 69 6c 65 2c 20 26 64 75 6d 6d  ), &pFile, &dumm
13fb0 79 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  y);.  if( rc!=SQ
13fc0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54  LITE_OK ){.    T
13fd0 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
13fe0 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72  erp, (char *)err
13ff0 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f  orName(rc), TCL_
14000 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 65 74  STATIC);.    ret
14010 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
14020 20 7d 0a 20 20 73 71 6c 69 74 65 33 54 65 73 74   }.  sqlite3Test
14030 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69  MakePointerStr(i
14040 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70 46 69  nterp, zBuf, pFi
14050 6c 65 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65  le);.  Tcl_SetRe
14060 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
14070 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  f, 0);.  return 
14080 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a  TCL_ERROR;.}../*
14090 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
140a0 74 65 33 4f 73 43 6c 6f 73 65 20 3c 66 69 6c 65  te3OsClose <file
140b0 20 68 61 6e 64 6c 65 3e 0a 2a 2f 0a 73 74 61 74   handle>.*/.stat
140c0 69 63 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69  ic int test_sqli
140d0 74 65 33 4f 73 43 6c 6f 73 65 28 0a 20 20 76 6f  te3OsClose(.  vo
140e0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
140f0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
14100 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
14110 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
14120 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
14130 4f 73 46 69 6c 65 20 2a 70 46 69 6c 65 3b 0a 20  OsFile *pFile;. 
14140 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
14150 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
14160 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
14170 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
14180 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
14190 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
141a0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
141b0 5b 30 5d 29 2c 20 22 20 66 69 6c 65 68 61 6e 64  [0]), " filehand
141c0 6c 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  le", 0);.    ret
141d0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
141e0 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 46 69 6c   }..  if( getFil
141f0 65 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  ePointer(interp,
14200 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
14210 62 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65 29  bjv[1]), &pFile)
14220 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
14230 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
14240 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 43 6c  rc = sqlite3OsCl
14250 6f 73 65 28 26 70 46 69 6c 65 29 3b 0a 20 20 69  ose(&pFile);.  i
14260 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
14270 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52   ){.    Tcl_SetR
14280 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
14290 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28  har *)errorName(
142a0 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  rc), TCL_STATIC)
142b0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
142c0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65  _ERROR;.  }.  re
142d0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
142e0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
142f0 6c 69 74 65 33 4f 73 4c 6f 63 6b 20 3c 66 69 6c  lite3OsLock <fil
14300 65 20 68 61 6e 64 6c 65 3e 20 3c 6c 6f 63 6b 74  e handle> <lockt
14310 79 70 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ype>.*/.static i
14320 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f  nt test_sqlite3O
14330 73 4c 6f 63 6b 28 0a 20 20 76 6f 69 64 20 2a 20  sLock(.  void * 
14340 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
14350 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
14360 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
14370 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
14380 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c  bjv[].){.  OsFil
14390 65 20 2a 20 70 46 69 6c 65 3b 0a 20 20 69 6e 74  e * pFile;.  int
143a0 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
143b0 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
143c0 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
143d0 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
143e0 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
143f0 2c 20 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  , .        Tcl_G
14400 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
14410 29 2c 20 0a 20 20 20 20 20 20 20 20 22 20 66 69  ), .        " fi
14420 6c 65 68 61 6e 64 6c 65 20 28 53 48 41 52 45 44  lehandle (SHARED
14430 7c 52 45 53 45 52 56 45 44 7c 50 45 4e 44 49 4e  |RESERVED|PENDIN
14440 47 7c 45 58 43 4c 55 53 49 56 45 29 22 2c 20 30  G|EXCLUSIVE)", 0
14450 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
14460 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
14470 69 66 28 20 67 65 74 46 69 6c 65 50 6f 69 6e 74  if( getFilePoint
14480 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
14490 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
144a0 29 2c 20 26 70 46 69 6c 65 29 20 29 7b 0a 20 20  ), &pFile) ){.  
144b0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
144c0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 30  OR;.  }..  if( 0
144d0 3d 3d 73 74 72 63 6d 70 28 22 53 48 41 52 45 44  ==strcmp("SHARED
144e0 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  ", Tcl_GetString
144f0 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20 20  (objv[2])) ){.  
14500 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73    rc = sqlite3Os
14510 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 53 48 41 52  Lock(pFile, SHAR
14520 45 44 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20  ED_LOCK);.  }.  
14530 65 6c 73 65 20 69 66 28 20 30 3d 3d 73 74 72 63  else if( 0==strc
14540 6d 70 28 22 52 45 53 45 52 56 45 44 22 2c 20 54  mp("RESERVED", T
14550 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
14560 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20 20 72 63  v[2])) ){.    rc
14570 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b   = sqlite3OsLock
14580 28 70 46 69 6c 65 2c 20 52 45 53 45 52 56 45 44  (pFile, RESERVED
14590 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c  _LOCK);.  }.  el
145a0 73 65 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70  se if( 0==strcmp
145b0 28 22 50 45 4e 44 49 4e 47 22 2c 20 54 63 6c 5f  ("PENDING", Tcl_
145c0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32  GetString(objv[2
145d0 5d 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ])) ){.    rc = 
145e0 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46  sqlite3OsLock(pF
145f0 69 6c 65 2c 20 50 45 4e 44 49 4e 47 5f 4c 4f 43  ile, PENDING_LOC
14600 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69  K);.  }.  else i
14610 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 22 45 58  f( 0==strcmp("EX
14620 43 4c 55 53 49 56 45 22 2c 20 54 63 6c 5f 47 65  CLUSIVE", Tcl_Ge
14630 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29  tString(objv[2])
14640 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
14650 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c  lite3OsLock(pFil
14660 65 2c 20 45 58 43 4c 55 53 49 56 45 5f 4c 4f 43  e, EXCLUSIVE_LOC
14670 4b 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  K);.  }else{.   
14680 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
14690 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
146a0 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
146b0 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
146c0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
146d0 62 6a 76 5b 30 5d 29 2c 20 0a 20 20 20 20 20 20  bjv[0]), .      
146e0 20 20 22 20 66 69 6c 65 68 61 6e 64 6c 65 20 28    " filehandle (
146f0 53 48 41 52 45 44 7c 52 45 53 45 52 56 45 44 7c  SHARED|RESERVED|
14700 50 45 4e 44 49 4e 47 7c 45 58 43 4c 55 53 49 56  PENDING|EXCLUSIV
14710 45 29 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  E)", 0);.    ret
14720 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
14730 20 7d 0a 0a 20 20 69 66 28 20 72 63 21 3d 53 51   }..  if( rc!=SQ
14740 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54  LITE_OK ){.    T
14750 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
14760 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72  erp, (char *)err
14770 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f  orName(rc), TCL_
14780 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 65 74  STATIC);.    ret
14790 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
147a0 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f   }.  return TCL_
147b0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
147c0 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73 55 6e  ge:  sqlite3OsUn
147d0 6c 6f 63 6b 20 3c 66 69 6c 65 20 68 61 6e 64 6c  lock <file handl
147e0 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e>.*/.static int
147f0 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 55   test_sqlite3OsU
14800 6e 6c 6f 63 6b 28 0a 20 20 76 6f 69 64 20 2a 20  nlock(.  void * 
14810 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
14820 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
14830 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
14840 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
14850 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c  bjv[].){.  OsFil
14860 65 20 2a 20 70 46 69 6c 65 3b 0a 20 20 69 6e 74  e * pFile;.  int
14870 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
14880 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
14890 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
148a0 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
148b0 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
148c0 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
148d0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
148e0 2c 20 22 20 66 69 6c 65 68 61 6e 64 6c 65 22 2c  , " filehandle",
148f0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
14900 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
14910 20 20 69 66 28 20 67 65 74 46 69 6c 65 50 6f 69    if( getFilePoi
14920 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
14930 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
14940 31 5d 29 2c 20 26 70 46 69 6c 65 29 20 29 7b 0a  1]), &pFile) ){.
14950 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
14960 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  RROR;.  }.  rc =
14970 20 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b   sqlite3OsUnlock
14980 28 70 46 69 6c 65 2c 20 4e 4f 5f 4c 4f 43 4b 29  (pFile, NO_LOCK)
14990 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
149a0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c  TE_OK ){.    Tcl
149b0 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
149c0 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72  p, (char *)error
149d0 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
149e0 41 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72  ATIC);.    retur
149f0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
14a00 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
14a10 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
14a20 3a 20 20 73 71 6c 69 74 65 33 4f 73 54 65 6d 70  :  sqlite3OsTemp
14a30 46 69 6c 65 4e 61 6d 65 0a 2a 2f 0a 73 74 61 74  FileName.*/.stat
14a40 69 63 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69  ic int test_sqli
14a50 74 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d  te3OsTempFileNam
14a60 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
14a70 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
14a80 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
14a90 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
14aa0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
14ab0 5d 0a 29 7b 0a 20 20 63 68 61 72 20 7a 46 69 6c  ].){.  char zFil
14ac0 65 5b 53 51 4c 49 54 45 5f 54 45 4d 50 4e 41 4d  e[SQLITE_TEMPNAM
14ad0 45 5f 53 49 5a 45 5d 3b 0a 20 20 69 6e 74 20 72  E_SIZE];.  int r
14ae0 63 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  c;..  rc = sqlit
14af0 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65  e3OsTempFileName
14b00 28 7a 46 69 6c 65 29 3b 0a 20 20 69 66 28 20 72  (zFile);.  if( r
14b10 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
14b20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c      Tcl_SetResul
14b30 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
14b40 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
14b50 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20   TCL_STATIC);.  
14b60 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
14b70 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70  OR;.  }.  Tcl_Ap
14b80 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
14b90 70 2c 20 7a 46 69 6c 65 2c 20 30 29 3b 0a 20 20  p, zFile, 0);.  
14ba0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
14bb0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55  .#endif../*.** U
14bc0 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 73 65  sage:  sqlite_se
14bd0 74 5f 6d 61 67 69 63 20 20 44 42 20 20 4d 41 47  t_magic  DB  MAG
14be0 49 43 2d 4e 55 4d 42 45 52 0a 2a 2a 0a 2a 2a 20  IC-NUMBER.**.** 
14bf0 53 65 74 20 74 68 65 20 64 62 2d 3e 6d 61 67 69  Set the db->magi
14c00 63 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 69  c value.  This i
14c10 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 65  s used to test e
14c20 72 72 6f 72 20 72 65 63 6f 76 65 72 79 20 6c 6f  rror recovery lo
14c30 67 69 63 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  gic..*/.static i
14c40 6e 74 20 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61  nt sqlite_set_ma
14c50 67 69 63 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  gic(.  void * cl
14c60 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
14c70 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
14c80 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68    int argc,.  ch
14c90 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73  ar **argv.){.  s
14ca0 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66  qlite3 *db;.  if
14cb0 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20  ( argc!=3 ){.   
14cc0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
14cd0 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
14ce0 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
14cf0 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
14d00 0a 20 20 20 20 20 20 20 20 20 22 20 44 42 20 4d  .         " DB M
14d10 41 47 49 43 22 2c 20 30 29 3b 0a 20 20 20 20 72  AGIC", 0);.    r
14d20 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
14d30 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
14d40 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
14d50 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
14d60 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
14d70 3b 0a 20 20 69 66 28 20 73 74 72 63 6d 70 28 61  ;.  if( strcmp(a
14d80 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f  rgv[2], "SQLITE_
14d90 4d 41 47 49 43 5f 4f 50 45 4e 22 29 3d 3d 30 20  MAGIC_OPEN")==0 
14da0 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63  ){.    db->magic
14db0 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
14dc0 4f 50 45 4e 3b 0a 20 20 7d 65 6c 73 65 20 69 66  OPEN;.  }else if
14dd0 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d  ( strcmp(argv[2]
14de0 2c 20 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  , "SQLITE_MAGIC_
14df0 43 4c 4f 53 45 44 22 29 3d 3d 30 20 29 7b 0a 20  CLOSED")==0 ){. 
14e00 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53     db->magic = S
14e10 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
14e20 45 44 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ED;.  }else if( 
14e30 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20  strcmp(argv[2], 
14e40 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55  "SQLITE_MAGIC_BU
14e50 53 59 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64  SY")==0 ){.    d
14e60 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
14e70 45 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20  E_MAGIC_BUSY;.  
14e80 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
14e90 28 61 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54  (argv[2], "SQLIT
14ea0 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 22 29 3d  E_MAGIC_ERROR")=
14eb0 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61  =0 ){.    db->ma
14ec0 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47  gic = SQLITE_MAG
14ed0 49 43 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73  IC_ERROR;.  }els
14ee0 65 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74  e if( Tcl_GetInt
14ef0 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32 5d  (interp, argv[2]
14f00 2c 20 26 64 62 2d 3e 6d 61 67 69 63 29 20 29 7b  , &db->magic) ){
14f10 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
14f20 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74  ERROR;.  }.  ret
14f30 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
14f40 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
14f50 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20 20  ite3_interrupt  
14f60 44 42 20 0a 2a 2a 0a 2a 2a 20 54 72 69 67 67 65  DB .**.** Trigge
14f70 72 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20 6f  r an interrupt o
14f80 6e 20 44 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69  n DB.*/.static i
14f90 6e 74 20 74 65 73 74 5f 69 6e 74 65 72 72 75 70  nt test_interrup
14fa0 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  t(.  void * clie
14fb0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
14fc0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
14fd0 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72  int argc,.  char
14fe0 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c   **argv.){.  sql
14ff0 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
15000 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  argc!=2 ){.    T
15010 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
15020 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
15030 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
15040 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22   \"", argv[0], "
15050 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   DB", 0);.    re
15060 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
15070 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
15080 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
15090 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
150a0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
150b0 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  .  sqlite3_inter
150c0 72 75 70 74 28 64 62 29 3b 0a 20 20 72 65 74 75  rupt(db);.  retu
150d0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74  rn TCL_OK;.}..st
150e0 61 74 69 63 20 75 38 20 2a 73 71 6c 69 74 65 33  atic u8 *sqlite3
150f0 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65 20  _stack_baseline 
15100 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 46 69 6c 6c  = 0;../*.** Fill
15110 20 74 68 65 20 73 74 61 63 6b 20 77 69 74 68 20   the stack with 
15120 61 20 6b 6e 6f 77 6e 20 62 69 74 70 61 74 74 65  a known bitpatte
15130 72 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  rn..*/.static vo
15140 69 64 20 70 72 65 70 53 74 61 63 6b 28 76 6f 69  id prepStack(voi
15150 64 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 75  d){.  int i;.  u
15160 33 32 20 62 69 67 42 75 66 5b 36 35 35 33 36 5d  32 bigBuf[65536]
15170 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73  ;.  for(i=0; i<s
15180 69 7a 65 6f 66 28 62 69 67 42 75 66 29 3b 20 69  izeof(bigBuf); i
15190 2b 2b 29 20 62 69 67 42 75 66 5b 69 5d 20 3d 20  ++) bigBuf[i] = 
151a0 30 78 64 65 61 64 62 65 65 66 3b 0a 20 20 73 71  0xdeadbeef;.  sq
151b0 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65  lite3_stack_base
151c0 6c 69 6e 65 20 3d 20 28 75 38 2a 29 26 62 69 67  line = (u8*)&big
151d0 42 75 66 5b 36 35 35 33 36 5d 3b 0a 7d 0a 0a 2f  Buf[65536];.}../
151e0 2a 0a 2a 2a 20 47 65 74 20 74 68 65 20 63 75 72  *.** Get the cur
151f0 72 65 6e 74 20 73 74 61 63 6b 20 64 65 70 74 68  rent stack depth
15200 2e 20 20 55 73 65 64 20 66 6f 72 20 64 65 62 75  .  Used for debu
15210 67 67 69 6e 67 20 6f 6e 6c 79 2e 0a 2a 2f 0a 75  gging only..*/.u
15220 36 34 20 73 71 6c 69 74 65 33 53 74 61 63 6b 44  64 sqlite3StackD
15230 65 70 74 68 28 76 6f 69 64 29 7b 0a 20 20 75 38  epth(void){.  u8
15240 20 78 3b 0a 20 20 72 65 74 75 72 6e 20 28 75 36   x;.  return (u6
15250 34 29 28 73 71 6c 69 74 65 33 5f 73 74 61 63 6b  4)(sqlite3_stack
15260 5f 62 61 73 65 6c 69 6e 65 20 2d 20 26 78 29 3b  _baseline - &x);
15270 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
15280 20 20 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f    sqlite3_stack_
15290 75 73 65 64 20 44 42 20 53 51 4c 0a 2a 2a 0a 2a  used DB SQL.**.*
152a0 2a 20 54 72 79 20 74 6f 20 6d 65 61 73 75 72 65  * Try to measure
152b0 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 73   the amount of s
152c0 74 61 63 6b 20 73 70 61 63 65 20 75 73 65 64 20  tack space used 
152d0 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c  by a call to sql
152e0 69 74 65 33 5f 65 78 65 63 0a 2a 2f 0a 73 74 61  ite3_exec.*/.sta
152f0 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 74 61  tic int test_sta
15300 63 6b 5f 75 73 65 64 28 0a 20 20 76 6f 69 64 20  ck_used(.  void 
15310 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
15320 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
15330 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a  rp,.  int argc,.
15340 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b    char **argv.){
15350 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
15360 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 61    int i;.  if( a
15370 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  rgc!=3 ){.    Tc
15380 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
15390 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
153a0 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
153b0 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20  \"", argv[0], . 
153c0 20 20 20 20 20 20 20 22 20 44 42 20 53 51 4c 22         " DB SQL"
153d0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
153e0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
153f0 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
15400 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
15410 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
15420 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 70  n TCL_ERROR;.  p
15430 72 65 70 53 74 61 63 6b 28 29 3b 0a 20 20 28 76  repStack();.  (v
15440 6f 69 64 29 73 71 6c 69 74 65 33 5f 65 78 65 63  oid)sqlite3_exec
15450 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 30 2c  (db, argv[2], 0,
15460 20 30 2c 20 30 29 3b 0a 20 20 66 6f 72 28 69 3d   0, 0);.  for(i=
15470 36 35 35 33 35 3b 20 69 3e 3d 30 20 26 26 20 28  65535; i>=0 && (
15480 28 75 33 32 2a 29 73 71 6c 69 74 65 33 5f 73 74  (u32*)sqlite3_st
15490 61 63 6b 5f 62 61 73 65 6c 69 6e 65 29 5b 2d 69  ack_baseline)[-i
154a0 5d 3d 3d 30 78 64 65 61 64 62 65 65 66 3b 20 69  ]==0xdeadbeef; i
154b0 2d 2d 29 7b 7d 0a 20 20 54 63 6c 5f 53 65 74 4f  --){}.  Tcl_SetO
154c0 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
154d0 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 69   Tcl_NewIntObj(i
154e0 2a 34 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  *4));.  return T
154f0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
15500 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f 64 65  Usage: sqlite_de
15510 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 20 44 42  lete_function DB
15520 20 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 0a 2a   function-name.*
15530 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20  *.** Delete the 
15540 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 27 66  user function 'f
15550 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 27 20 66 72  unction-name' fr
15560 6f 6d 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  om database hand
15570 6c 65 20 44 42 2e 20 49 74 0a 2a 2a 20 69 73 20  le DB. It.** is 
15580 61 73 73 75 6d 65 64 20 74 68 61 74 20 74 68 65  assumed that the
15590 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 77   user function w
155a0 61 73 20 63 72 65 61 74 65 64 20 61 73 20 55 54  as created as UT
155b0 46 38 2c 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f  F8, any number o
155c0 66 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 73 20 28  f.** arguments (
155d0 74 68 65 20 77 61 79 20 74 68 65 20 54 43 4c 20  the way the TCL 
155e0 69 6e 74 65 72 66 61 63 65 20 64 6f 65 73 20 69  interface does i
155f0 74 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  t)..*/.static in
15600 74 20 64 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f  t delete_functio
15610 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  n(.  void * clie
15620 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
15630 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
15640 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72  int argc,.  char
15650 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74   **argv.){.  int
15660 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a   rc;.  sqlite3 *
15670 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  db;.  if( argc!=
15680 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
15690 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
156a0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
156b0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
156c0 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20  argv[0], .      
156d0 20 20 22 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d    " DB function-
156e0 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20 72  name", 0);.    r
156f0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
15700 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
15710 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
15720 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
15730 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
15740 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
15750 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
15760 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 2d 31  (db, argv[2], -1
15770 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30  , SQLITE_UTF8, 0
15780 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 54 63  , 0, 0, 0);.  Tc
15790 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
157a0 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f  rp, (char *)erro
157b0 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53  rName(rc), TCL_S
157c0 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75 72 6e  TATIC);.  return
157d0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
157e0 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f  * Usage: sqlite_
157f0 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  delete_collation
15800 20 44 42 20 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61   DB collation-na
15810 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  me.**.** Delete 
15820 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
15830 71 75 65 6e 63 65 20 27 63 6f 6c 6c 61 74 69 6f  quence 'collatio
15840 6e 2d 6e 61 6d 65 27 20 66 72 6f 6d 20 64 61 74  n-name' from dat
15850 61 62 61 73 65 20 68 61 6e 64 6c 65 20 0a 2a 2a  abase handle .**
15860 20 44 42 2e 20 49 74 20 69 73 20 61 73 73 75 6d   DB. It is assum
15870 65 64 20 74 68 61 74 20 74 68 65 20 63 6f 6c 6c  ed that the coll
15880 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
15890 61 73 20 63 72 65 61 74 65 64 20 61 73 20 55 54  as created as UT
158a0 46 38 20 28 74 68 65 20 0a 2a 2a 20 77 61 79 20  F8 (the .** way 
158b0 74 68 65 20 54 43 4c 20 69 6e 74 65 72 66 61 63  the TCL interfac
158c0 65 20 64 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a 73  e does it)..*/.s
158d0 74 61 74 69 63 20 69 6e 74 20 64 65 6c 65 74 65  tatic int delete
158e0 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 76 6f  _collation(.  vo
158f0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
15900 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
15910 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67  nterp,.  int arg
15920 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  c,.  char **argv
15930 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  .){.  int rc;.  
15940 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
15950 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  f( argc!=3 ){.  
15960 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
15970 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
15980 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
15990 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
159a0 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44 42 20  , .        " DB 
159b0 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 22 2c 20  function-name", 
159c0 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
159d0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
159e0 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
159f0 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
15a00 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
15a10 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
15a20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
15a30 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 61  _collation(db, a
15a40 72 67 76 5b 32 5d 2c 20 53 51 4c 49 54 45 5f 55  rgv[2], SQLITE_U
15a50 54 46 38 2c 20 30 2c 20 30 29 3b 0a 20 20 54 63  TF8, 0, 0);.  Tc
15a60 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
15a70 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f  rp, (char *)erro
15a80 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53  rName(rc), TCL_S
15a90 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75 72 6e  TATIC);.  return
15aa0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
15ab0 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
15ac0 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20  _get_autocommit 
15ad0 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  DB.**.** Return 
15ae0 74 72 75 65 20 69 66 20 74 68 65 20 64 61 74 61  true if the data
15af0 62 61 73 65 20 44 42 20 69 73 20 63 75 72 72 65  base DB is curre
15b00 6e 74 6c 79 20 69 6e 20 61 75 74 6f 2d 63 6f 6d  ntly in auto-com
15b10 6d 69 74 20 6d 6f 64 65 2e 0a 2a 2a 20 52 65 74  mit mode..** Ret
15b20 75 72 6e 20 66 61 6c 73 65 20 69 66 20 6e 6f 74  urn false if not
15b30 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
15b40 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 0a  get_autocommit(.
15b50 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
15b60 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
15b70 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
15b80 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a   argc,.  char **
15b90 61 72 67 76 0a 29 7b 0a 20 20 63 68 61 72 20 7a  argv.){.  char z
15ba0 42 75 66 5b 33 30 5d 3b 0a 20 20 73 71 6c 69 74  Buf[30];.  sqlit
15bb0 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72  e3 *db;.  if( ar
15bc0 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
15bd0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
15be0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
15bf0 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
15c00 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20  "", argv[0], .  
15c10 20 20 20 20 20 20 22 20 44 42 22 2c 20 30 29 3b        " DB", 0);
15c20 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
15c30 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
15c40 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
15c50 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
15c60 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
15c70 5f 45 52 52 4f 52 3b 0a 20 20 73 70 72 69 6e 74  _ERROR;.  sprint
15c80 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 73 71  f(zBuf, "%d", sq
15c90 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
15ca0 6d 6d 69 74 28 64 62 29 29 3b 0a 20 20 54 63 6c  mmit(db));.  Tcl
15cb0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
15cc0 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a  terp, zBuf, 0);.
15cd0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
15ce0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
15cf0 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69   sqlite3_busy_ti
15d00 6d 65 6f 75 74 20 44 42 20 4d 53 0a 2a 2a 0a 2a  meout DB MS.**.*
15d10 2a 20 53 65 74 20 74 68 65 20 62 75 73 79 20 74  * Set the busy t
15d20 69 6d 65 6f 75 74 2e 20 20 54 68 69 73 20 69 73  imeout.  This is
15d30 20 6d 6f 72 65 20 65 61 73 69 6c 79 20 64 6f 6e   more easily don
15d40 65 20 75 73 69 6e 67 20 74 68 65 20 74 69 6d 65  e using the time
15d50 6f 75 74 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66  out.** method of
15d60 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72 66 61   the TCL interfa
15d70 63 65 2e 20 20 42 75 74 20 77 65 20 6e 65 65 64  ce.  But we need
15d80 20 61 20 77 61 79 20 74 6f 20 74 65 73 74 20 74   a way to test t
15d90 68 65 20 63 61 73 65 0a 2a 2a 20 77 68 65 72 65  he case.** where
15da0 20 69 74 20 72 65 74 75 72 6e 73 20 53 51 4c 49   it returns SQLI
15db0 54 45 5f 4d 49 53 55 53 45 2e 0a 2a 2f 0a 73 74  TE_MISUSE..*/.st
15dc0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 75  atic int test_bu
15dd0 73 79 5f 74 69 6d 65 6f 75 74 28 0a 20 20 76 6f  sy_timeout(.  vo
15de0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
15df0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
15e00 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67  nterp,.  int arg
15e10 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  c,.  char **argv
15e20 0a 29 7b 0a 20 20 69 6e 74 20 72 63 2c 20 6d 73  .){.  int rc, ms
15e30 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  ;.  sqlite3 *db;
15e40 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
15e50 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
15e60 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
15e70 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
15e80 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
15e90 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22  v[0], .        "
15ea0 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   DB", 0);.    re
15eb0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
15ec0 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
15ed0 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
15ee0 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
15ef0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
15f00 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
15f10 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32  t(interp, argv[2
15f20 5d 2c 20 26 6d 73 29 20 29 20 72 65 74 75 72 6e  ], &ms) ) return
15f30 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63   TCL_ERROR;.  rc
15f40 20 3d 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f   = sqlite3_busy_
15f50 74 69 6d 65 6f 75 74 28 64 62 2c 20 6d 73 29 3b  timeout(db, ms);
15f60 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
15f70 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c 69  ult(interp, sqli
15f80 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65  te3TestErrorName
15f90 28 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74 75  (rc), 0);.  retu
15fa0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
15fb0 0a 2a 2a 20 55 73 61 67 65 3a 20 20 74 63 6c 5f  .** Usage:  tcl_
15fc0 76 61 72 69 61 62 6c 65 5f 74 79 70 65 20 56 41  variable_type VA
15fd0 52 49 41 42 4c 45 4e 41 4d 45 0a 2a 2a 0a 2a 2a  RIABLENAME.**.**
15fe0 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65   Return the name
15ff0 20 6f 66 20 74 68 65 20 69 6e 74 65 72 6e 61 6c   of the internal
16000 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
16010 66 6f 72 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  for the.** value
16020 20 6f 66 20 74 68 65 20 67 69 76 65 6e 20 76 61   of the given va
16030 72 69 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69  riable..*/.stati
16040 63 20 69 6e 74 20 74 63 6c 5f 76 61 72 69 61 62  c int tcl_variab
16050 6c 65 5f 74 79 70 65 28 0a 20 20 76 6f 69 64 20  le_type(.  void 
16060 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
16070 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
16080 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
16090 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
160a0 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 54 63 6c   objv[].){.  Tcl
160b0 5f 4f 62 6a 20 2a 70 56 61 72 3b 0a 20 20 69 66  _Obj *pVar;.  if
160c0 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
160d0 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
160e0 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
160f0 76 2c 20 22 56 41 52 49 41 42 4c 45 22 29 3b 0a  v, "VARIABLE");.
16100 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
16110 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 70 56 61 72  RROR;.  }.  pVar
16120 20 3d 20 54 63 6c 5f 47 65 74 56 61 72 32 45 78   = Tcl_GetVar2Ex
16130 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
16140 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
16150 20 30 2c 20 54 43 4c 5f 4c 45 41 56 45 5f 45 52   0, TCL_LEAVE_ER
16160 52 5f 4d 53 47 29 3b 0a 20 20 69 66 28 20 70 56  R_MSG);.  if( pV
16170 61 72 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 54  ar==0 ) return T
16180 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
16190 70 56 61 72 2d 3e 74 79 70 65 50 74 72 20 29 7b  pVar->typePtr ){
161a0 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  .    Tcl_SetObjR
161b0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
161c0 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 70  l_NewStringObj(p
161d0 56 61 72 2d 3e 74 79 70 65 50 74 72 2d 3e 6e 61  Var->typePtr->na
161e0 6d 65 2c 20 2d 31 29 29 3b 0a 20 20 7d 0a 20 20  me, -1));.  }.  
161f0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
16200 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
16210 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f  sqlite3_release_
16220 6d 65 6d 6f 72 79 20 3f 4e 3f 0a 2a 2a 0a 2a 2a  memory ?N?.**.**
16230 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 6c 65   Attempt to rele
16240 61 73 65 20 6d 65 6d 6f 72 79 20 63 75 72 72 65  ase memory curre
16250 6e 74 6c 79 20 68 65 6c 64 20 62 75 74 20 6e 6f  ntly held but no
16260 74 20 61 63 74 75 61 6c 6c 79 20 72 65 71 75 69  t actually requi
16270 72 65 64 2e 0a 2a 2a 20 54 68 65 20 69 6e 74 65  red..** The inte
16280 67 65 72 20 4e 20 69 73 20 74 68 65 20 6e 75 6d  ger N is the num
16290 62 65 72 20 6f 66 20 62 79 74 65 73 20 77 65 20  ber of bytes we 
162a0 61 72 65 20 74 72 79 69 6e 67 20 74 6f 20 72 65  are trying to re
162b0 6c 65 61 73 65 2e 20 20 54 68 65 20 0a 2a 2a 20  lease.  The .** 
162c0 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20  return value is 
162d0 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65  the amount of me
162e0 6d 6f 72 79 20 61 63 74 75 61 6c 6c 79 20 72 65  mory actually re
162f0 6c 65 61 73 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  leased..*/.stati
16300 63 20 69 6e 74 20 74 65 73 74 5f 72 65 6c 65 61  c int test_relea
16310 73 65 5f 6d 65 6d 6f 72 79 28 0a 20 20 76 6f 69  se_memory(.  voi
16320 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
16330 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
16340 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
16350 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
16360 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66  ST objv[].){.#if
16370 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
16380 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
16390 4e 41 47 45 4d 45 4e 54 29 20 26 26 20 21 64 65  NAGEMENT) && !de
163a0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
163b0 54 5f 44 49 53 4b 49 4f 29 0a 20 20 69 6e 74 20  T_DISKIO).  int 
163c0 4e 3b 0a 20 20 69 6e 74 20 61 6d 74 3b 0a 20 20  N;.  int amt;.  
163d0 69 66 28 20 6f 62 6a 63 21 3d 31 20 26 26 20 6f  if( objc!=1 && o
163e0 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
163f0 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
16400 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
16410 22 3f 4e 3f 22 29 3b 0a 20 20 20 20 72 65 74 75  "?N?");.    retu
16420 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
16430 7d 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d 32 20  }.  if( objc==2 
16440 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47  ){.    if( Tcl_G
16450 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
16460 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 4e  erp, objv[1], &N
16470 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
16480 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  RROR;.  }else{. 
16490 20 20 20 4e 20 3d 20 2d 31 3b 0a 20 20 7d 0a 20     N = -1;.  }. 
164a0 20 61 6d 74 20 3d 20 73 71 6c 69 74 65 33 5f 72   amt = sqlite3_r
164b0 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 4e 29  elease_memory(N)
164c0 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
164d0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
164e0 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 6d 74 29 29  _NewIntObj(amt))
164f0 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
16500 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
16510 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
16520 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  e3_soft_heap_lim
16530 69 74 20 3f 4e 3f 0a 2a 2a 0a 2a 2a 20 51 75 65  it ?N?.**.** Que
16540 72 79 20 6f 72 20 73 65 74 20 74 68 65 20 73 6f  ry or set the so
16550 66 74 20 68 65 61 70 20 6c 69 6d 69 74 20 66 6f  ft heap limit fo
16560 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 68  r the current th
16570 72 65 61 64 2e 20 20 54 68 65 0a 2a 2a 20 6c 69  read.  The.** li
16580 6d 69 74 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e  mit is only chan
16590 67 65 64 20 69 66 20 74 68 65 20 4e 20 69 73 20  ged if the N is 
165a0 70 72 65 73 65 6e 74 2e 20 20 54 68 65 20 70 72  present.  The pr
165b0 65 76 69 6f 75 73 20 6c 69 6d 69 74 0a 2a 2a 20  evious limit.** 
165c0 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a  is returned..*/.
165d0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
165e0 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 28  soft_heap_limit(
165f0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
16600 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
16610 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
16620 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
16630 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
16640 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ){.#if defined(S
16650 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
16660 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 29 20  ORY_MANAGEMENT) 
16670 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
16680 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 29 0a  TE_OMIT_DISKIO).
16690 20 20 69 6e 74 20 61 6d 74 3b 0a 20 20 69 66 28    int amt;.  if(
166a0 20 6f 62 6a 63 21 3d 31 20 26 26 20 6f 62 6a 63   objc!=1 && objc
166b0 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=2 ){.    Tcl_W
166c0 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
166d0 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 4e  rp, 1, objv, "?N
166e0 3f 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  ?");.    return 
166f0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
16700 20 61 6d 74 20 3d 20 73 71 6c 69 74 65 33 54 68   amt = sqlite3Th
16710 72 65 61 64 44 61 74 61 52 65 61 64 4f 6e 6c 79  readDataReadOnly
16720 28 29 2d 3e 6e 53 6f 66 74 48 65 61 70 4c 69 6d  ()->nSoftHeapLim
16730 69 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d  it;.  if( objc==
16740 32 20 29 7b 0a 20 20 20 20 69 6e 74 20 4e 3b 0a  2 ){.    int N;.
16750 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49      if( Tcl_GetI
16760 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
16770 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 4e 29 20 29  , objv[1], &N) )
16780 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
16790 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  R;.    sqlite3_s
167a0 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 28 4e  oft_heap_limit(N
167b0 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74  );.  }.  Tcl_Set
167c0 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
167d0 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
167e0 61 6d 74 29 29 3b 0a 23 65 6e 64 69 66 0a 20 20  amt));.#endif.  
167f0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
16800 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
16810 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 74   sqlite3_clear_t
16820 73 64 5f 6d 65 6d 64 65 62 75 67 0a 2a 2a 0a 2a  sd_memdebug.**.*
16830 2a 20 43 6c 65 61 72 20 61 6c 6c 20 6f 66 20 74  * Clear all of t
16840 68 65 20 4d 45 4d 44 45 42 55 47 20 69 6e 66 6f  he MEMDEBUG info
16850 72 6d 61 74 69 6f 6e 20 6f 75 74 20 6f 66 20 74  rmation out of t
16860 68 72 65 61 64 2d 73 70 65 63 69 66 69 63 20 64  hread-specific d
16870 61 74 61 2e 0a 2a 2a 20 54 68 69 73 20 77 69 6c  ata..** This wil
16880 6c 20 61 6c 6c 6f 77 20 69 74 20 74 6f 20 62 65  l allow it to be
16890 20 64 65 61 6c 6c 6f 63 61 74 65 64 2e 0a 2a 2f   deallocated..*/
168a0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
168b0 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65 6d 64 65  _clear_tsd_memde
168c0 62 75 67 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  bug(.  void * cl
168d0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
168e0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
168f0 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
16900 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
16910 76 5b 5d 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20  v[].){.  return 
16920 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
16930 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65   Usage:   sqlite
16940 33 5f 74 73 64 5f 72 65 6c 65 61 73 65 0a 2a 2a  3_tsd_release.**
16950 0a 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33  .** Call sqlite3
16960 52 65 6c 65 61 73 65 54 68 72 65 61 64 44 61 74  ReleaseThreadDat
16970 61 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  a..*/.static int
16980 20 74 65 73 74 5f 74 73 64 5f 72 65 6c 65 61 73   test_tsd_releas
16990 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
169a0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
169b0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
169c0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
169d0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
169e0 5d 0a 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64  ].){.#if defined
169f0 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47  (SQLITE_MEMDEBUG
16a00 29 0a 20 20 73 71 6c 69 74 65 33 52 65 6c 65 61  ).  sqlite3Relea
16a10 73 65 54 68 72 65 61 64 44 61 74 61 28 29 3b 0a  seThreadData();.
16a20 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20  #endif.  return 
16a30 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
16a40 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65   Usage:   sqlite
16a50 33 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70  3_thread_cleanup
16a60 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 74 68 65 20  .**.** Call the 
16a70 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64 5f 63  sqlite3_thread_c
16a80 6c 65 61 6e 75 70 20 41 50 49 2e 0a 2a 2f 0a 73  leanup API..*/.s
16a90 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 74  tatic int test_t
16aa0 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 28 0a 20  hread_cleanup(. 
16ab0 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
16ac0 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
16ad0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
16ae0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
16af0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
16b00 0a 20 20 73 71 6c 69 74 65 33 5f 74 68 72 65 61  .  sqlite3_threa
16b10 64 5f 63 6c 65 61 6e 75 70 28 29 3b 0a 20 20 72  d_cleanup();.  r
16b20 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
16b30 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ../*.** This rou
16b40 74 69 6e 65 20 73 65 74 73 20 65 6e 74 72 69 65  tine sets entrie
16b50 73 20 69 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20  s in the global 
16b60 3a 3a 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73  ::sqlite_options
16b70 28 29 20 61 72 72 61 79 20 76 61 72 69 61 62 6c  () array variabl
16b80 65 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 20 74  e.** according t
16b90 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  o the compile-ti
16ba0 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  me configuration
16bb0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
16bc0 2e 20 20 54 65 73 74 0a 2a 2a 20 70 72 6f 63 65  .  Test.** proce
16bd0 64 75 72 65 73 20 75 73 65 20 74 68 69 73 20 74  dures use this t
16be0 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 6e  o determine when
16bf0 20 74 65 73 74 73 20 73 68 6f 75 6c 64 20 62 65   tests should be
16c00 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73 74 61   omitted..*/.sta
16c10 74 69 63 20 76 6f 69 64 20 73 65 74 5f 6f 70 74  tic void set_opt
16c20 69 6f 6e 73 28 54 63 6c 5f 49 6e 74 65 72 70 20  ions(Tcl_Interp 
16c30 2a 69 6e 74 65 72 70 29 7b 0a 23 69 66 64 65 66  *interp){.#ifdef
16c40 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f   SQLITE_32BIT_RO
16c50 57 49 44 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  WID.  Tcl_SetVar
16c60 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
16c70 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72 6f 77  e_options", "row
16c80 69 64 33 32 22 2c 20 22 31 22 2c 20 54 43 4c 5f  id32", "1", TCL_
16c90 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
16ca0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
16cb0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
16cc0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72 6f 77  e_options", "row
16cd0 69 64 33 32 22 2c 20 22 30 22 2c 20 54 43 4c 5f  id32", "0", TCL_
16ce0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
16cf0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
16d00 49 54 45 5f 43 41 53 45 5f 53 45 4e 53 49 54 49  ITE_CASE_SENSITI
16d10 56 45 5f 4c 49 4b 45 0a 20 20 54 63 6c 5f 53 65  VE_LIKE.  Tcl_Se
16d20 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16d30 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 22  qlite_options","
16d40 63 61 73 65 73 65 6e 73 69 74 69 76 65 6c 69 6b  casesensitivelik
16d50 65 22 2c 22 31 22 2c 54 43 4c 5f 47 4c 4f 42 41  e","1",TCL_GLOBA
16d60 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
16d70 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
16d80 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
16d90 69 6f 6e 73 22 2c 22 63 61 73 65 73 65 6e 73 69  ions","casesensi
16da0 74 69 76 65 6c 69 6b 65 22 2c 22 30 22 2c 54 43  tivelike","0",TC
16db0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
16dc0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
16dd0 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 44 49  QLITE_DISABLE_DI
16de0 52 53 59 4e 43 0a 20 20 54 63 6c 5f 53 65 74 56  RSYNC.  Tcl_SetV
16df0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
16e00 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64  ite_options", "d
16e10 69 72 73 79 6e 63 22 2c 20 22 30 22 2c 20 54 43  irsync", "0", TC
16e20 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
16e30 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
16e40 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
16e50 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64  ite_options", "d
16e60 69 72 73 79 6e 63 22 2c 20 22 31 22 2c 20 54 43  irsync", "1", TC
16e70 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
16e80 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
16e90 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
16ea0 53 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  S.  Tcl_SetVar2(
16eb0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
16ec0 6f 70 74 69 6f 6e 73 22 2c 20 22 6c 66 73 22 2c  options", "lfs",
16ed0 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
16ee0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
16ef0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
16f00 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
16f10 6f 6e 73 22 2c 20 22 6c 66 73 22 2c 20 22 31 22  ons", "lfs", "1"
16f20 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
16f30 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
16f40 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
16f50 4c 54 45 52 54 41 42 4c 45 0a 20 20 54 63 6c 5f  LTERTABLE.  Tcl_
16f60 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
16f70 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
16f80 2c 20 22 61 6c 74 65 72 74 61 62 6c 65 22 2c 20  , "altertable", 
16f90 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
16fa0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
16fb0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
16fc0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
16fd0 6e 73 22 2c 20 22 61 6c 74 65 72 74 61 62 6c 65  ns", "altertable
16fe0 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
16ff0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
17000 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
17010 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 0a 20 20 54  OMIT_ANALYZE.  T
17020 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
17030 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
17040 6e 73 22 2c 20 22 61 6e 61 6c 79 7a 65 22 2c 20  ns", "analyze", 
17050 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
17060 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
17070 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
17080 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
17090 6e 73 22 2c 20 22 61 6e 61 6c 79 7a 65 22 2c 20  ns", "analyze", 
170a0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
170b0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
170c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
170d0 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
170e0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
170f0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
17100 74 69 6f 6e 73 22 2c 20 22 61 75 74 68 22 2c 20  tions", "auth", 
17110 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
17120 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
17130 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
17140 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
17150 6e 73 22 2c 20 22 61 75 74 68 22 2c 20 22 31 22  ns", "auth", "1"
17160 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
17170 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
17180 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
17190 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 54  UTOINCREMENT.  T
171a0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
171b0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
171c0 6e 73 22 2c 20 22 61 75 74 6f 69 6e 63 22 2c 20  ns", "autoinc", 
171d0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
171e0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
171f0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
17200 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
17210 6e 73 22 2c 20 22 61 75 74 6f 69 6e 63 22 2c 20  ns", "autoinc", 
17220 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
17230 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
17240 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
17250 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 54  T_AUTOVACUUM.  T
17260 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
17270 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
17280 6e 73 22 2c 20 22 61 75 74 6f 76 61 63 75 75 6d  ns", "autovacuum
17290 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
172a0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
172b0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
172c0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
172d0 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 76 61 63  tions", "autovac
172e0 75 75 6d 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  uum", "1", TCL_G
172f0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
17300 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
17310 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 20 2a 2f  IT_AUTOVACUUM */
17320 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
17330 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 41 55 54  LITE_DEFAULT_AUT
17340 4f 56 41 43 55 55 4d 29 20 7c 7c 20 53 51 4c 49  OVACUUM) || SQLI
17350 54 45 5f 44 45 46 41 55 4c 54 5f 41 55 54 4f 56  TE_DEFAULT_AUTOV
17360 41 43 55 55 4d 3d 3d 30 0a 20 20 54 63 6c 5f 53  ACUUM==0.  Tcl_S
17370 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 22 73  etVar2(interp,"s
17380 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 22  qlite_options","
17390 64 65 66 61 75 6c 74 5f 61 75 74 6f 76 61 63 75  default_autovacu
173a0 75 6d 22 2c 22 30 22 2c 54 43 4c 5f 47 4c 4f 42  um","0",TCL_GLOB
173b0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
173c0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
173d0 74 65 72 70 2c 22 73 71 6c 69 74 65 5f 6f 70 74  terp,"sqlite_opt
173e0 69 6f 6e 73 22 2c 22 64 65 66 61 75 6c 74 5f 61  ions","default_a
173f0 75 74 6f 76 61 63 75 75 6d 22 2c 22 31 22 2c 54  utovacuum","1",T
17400 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
17410 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
17420 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 45 54 57  SQLITE_OMIT_BETW
17430 45 45 4e 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  EEN_OPTIMIZATION
17440 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
17450 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
17460 70 74 69 6f 6e 73 22 2c 20 22 62 65 74 77 65 65  ptions", "betwee
17470 6e 5f 6f 70 74 22 2c 20 22 30 22 2c 20 54 43 4c  n_opt", "0", TCL
17480 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
17490 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
174a0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
174b0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 62 65  te_options", "be
174c0 74 77 65 65 6e 5f 6f 70 74 22 2c 20 22 31 22 2c  tween_opt", "1",
174d0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
174e0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
174f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 4c  f SQLITE_OMIT_BL
17500 4f 42 5f 4c 49 54 45 52 41 4c 0a 20 20 54 63 6c  OB_LITERAL.  Tcl
17510 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
17520 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
17530 22 2c 20 22 62 6c 6f 62 6c 69 74 22 2c 20 22 30  ", "bloblit", "0
17540 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
17550 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
17560 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
17570 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
17580 22 2c 20 22 62 6c 6f 62 6c 69 74 22 2c 20 22 31  ", "bloblit", "1
17590 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
175a0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
175b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
175c0 43 41 53 54 0a 20 20 54 63 6c 5f 53 65 74 56 61  CAST.  Tcl_SetVa
175d0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
175e0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 61  te_options", "ca
175f0 73 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  st", "0", TCL_GL
17600 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
17610 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
17620 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17630 6f 70 74 69 6f 6e 73 22 2c 20 22 63 61 73 74 22  options", "cast"
17640 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
17650 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
17660 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
17670 4d 49 54 5f 43 48 45 43 4b 0a 20 20 54 63 6c 5f  MIT_CHECK.  Tcl_
17680 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
17690 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
176a0 2c 20 22 63 68 65 63 6b 22 2c 20 22 30 22 2c 20  , "check", "0", 
176b0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
176c0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
176d0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
176e0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
176f0 22 63 68 65 63 6b 22 2c 20 22 31 22 2c 20 54 43  "check", "1", TC
17700 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
17710 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
17720 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
17730 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 20 20 54  UMN_METADATA.  T
17740 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
17750 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
17760 6e 73 22 2c 20 22 63 6f 6c 75 6d 6e 6d 65 74 61  ns", "columnmeta
17770 64 61 74 61 22 2c 20 22 31 22 2c 20 54 43 4c 5f  data", "1", TCL_
17780 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
17790 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
177a0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
177b0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6c  e_options", "col
177c0 75 6d 6e 6d 65 74 61 64 61 74 61 22 2c 20 22 30  umnmetadata", "0
177d0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
177e0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
177f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
17800 43 4f 4d 50 4c 45 54 45 0a 20 20 54 63 6c 5f 53  COMPLETE.  Tcl_S
17810 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
17820 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
17830 20 22 63 6f 6d 70 6c 65 74 65 22 2c 20 22 30 22   "complete", "0"
17840 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
17850 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
17860 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
17870 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
17880 2c 20 22 63 6f 6d 70 6c 65 74 65 22 2c 20 22 31  , "complete", "1
17890 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
178a0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
178b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
178c0 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 0a  COMPOUND_SELECT.
178d0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
178e0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
178f0 74 69 6f 6e 73 22 2c 20 22 63 6f 6d 70 6f 75 6e  tions", "compoun
17900 64 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  d", "0", TCL_GLO
17910 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
17920 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
17930 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
17940 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6d 70 6f 75  ptions", "compou
17950 6e 64 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  nd", "1", TCL_GL
17960 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
17970 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
17980 45 5f 4f 4d 49 54 5f 43 4f 4e 46 4c 49 43 54 5f  E_OMIT_CONFLICT_
17990 43 4c 41 55 53 45 0a 20 20 54 63 6c 5f 53 65 74  CLAUSE.  Tcl_Set
179a0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
179b0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
179c0 63 6f 6e 66 6c 69 63 74 22 2c 20 22 30 22 2c 20  conflict", "0", 
179d0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
179e0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
179f0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
17a00 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
17a10 22 63 6f 6e 66 6c 69 63 74 22 2c 20 22 31 22 2c  "conflict", "1",
17a20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
17a30 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 4f  );.#endif..#if O
17a40 53 5f 55 4e 49 58 0a 20 20 54 63 6c 5f 53 65 74  S_UNIX.  Tcl_Set
17a50 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
17a60 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
17a70 63 72 61 73 68 74 65 73 74 22 2c 20 22 31 22 2c  crashtest", "1",
17a80 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
17a90 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
17aa0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
17ab0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
17ac0 20 22 63 72 61 73 68 74 65 73 74 22 2c 20 22 30   "crashtest", "0
17ad0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
17ae0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
17af0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
17b00 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 0a 20  DATETIME_FUNCS. 
17b10 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
17b20 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
17b30 69 6f 6e 73 22 2c 20 22 64 61 74 65 74 69 6d 65  ions", "datetime
17b40 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
17b50 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
17b60 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
17b70 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
17b80 74 69 6f 6e 73 22 2c 20 22 64 61 74 65 74 69 6d  tions", "datetim
17b90 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  e", "1", TCL_GLO
17ba0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
17bb0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
17bc0 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 20 20 54  _OMIT_DISKIO.  T
17bd0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
17be0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
17bf0 6e 73 22 2c 20 22 64 69 73 6b 69 6f 22 2c 20 22  ns", "diskio", "
17c00 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
17c10 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
17c20 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
17c30 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
17c40 73 22 2c 20 22 64 69 73 6b 69 6f 22 2c 20 22 31  s", "diskio", "1
17c50 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
17c60 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
17c70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
17c80 45 58 50 4c 41 49 4e 0a 20 20 54 63 6c 5f 53 65  EXPLAIN.  Tcl_Se
17c90 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
17ca0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
17cb0 22 65 78 70 6c 61 69 6e 22 2c 20 22 30 22 2c 20  "explain", "0", 
17cc0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
17cd0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
17ce0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
17cf0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
17d00 22 65 78 70 6c 61 69 6e 22 2c 20 22 31 22 2c 20  "explain", "1", 
17d10 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
17d20 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
17d30 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
17d40 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 54 63  ATING_POINT.  Tc
17d50 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
17d60 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
17d70 73 22 2c 20 22 66 6c 6f 61 74 69 6e 67 70 6f 69  s", "floatingpoi
17d80 6e 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  nt", "0", TCL_GL
17d90 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
17da0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
17db0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17dc0 6f 70 74 69 6f 6e 73 22 2c 20 22 66 6c 6f 61 74  options", "float
17dd0 69 6e 67 70 6f 69 6e 74 22 2c 20 22 31 22 2c 20  ingpoint", "1", 
17de0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
17df0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
17e00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
17e10 45 49 47 4e 5f 4b 45 59 0a 20 20 54 63 6c 5f 53  EIGN_KEY.  Tcl_S
17e20 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
17e30 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
17e40 20 22 66 6f 72 65 69 67 6e 6b 65 79 22 2c 20 22   "foreignkey", "
17e50 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
17e60 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
17e70 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
17e80 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
17e90 73 22 2c 20 22 66 6f 72 65 69 67 6e 6b 65 79 22  s", "foreignkey"
17ea0 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
17eb0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
17ec0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
17ed0 4d 49 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56 45  MIT_GLOBALRECOVE
17ee0 52 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  R.  Tcl_SetVar2(
17ef0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17f00 6f 70 74 69 6f 6e 73 22 2c 20 22 67 6c 6f 62 61  options", "globa
17f10 6c 72 65 63 6f 76 65 72 22 2c 20 22 30 22 2c 20  lrecover", "0", 
17f20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
17f30 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
17f40 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
17f50 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
17f60 22 67 6c 6f 62 61 6c 72 65 63 6f 76 65 72 22 2c  "globalrecover",
17f70 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
17f80 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
17f90 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
17fa0 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
17fb0 43 4b 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  CK.  Tcl_SetVar2
17fc0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
17fd0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 69 6e 74 65  _options", "inte
17fe0 67 72 69 74 79 63 6b 22 2c 20 22 30 22 2c 20 54  grityck", "0", T
17ff0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
18000 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
18010 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
18020 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
18030 69 6e 74 65 67 72 69 74 79 63 6b 22 2c 20 22 31  integrityck", "1
18040 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
18050 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
18060 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
18070 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
18080 4d 41 54 29 20 26 26 20 53 51 4c 49 54 45 5f 44  MAT) && SQLITE_D
18090 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d  EFAULT_FILE_FORM
180a0 41 54 3d 3d 31 0a 20 20 54 63 6c 5f 53 65 74 56  AT==1.  Tcl_SetV
180b0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
180c0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6c  ite_options", "l
180d0 65 67 61 63 79 66 6f 72 6d 61 74 22 2c 20 22 31  egacyformat", "1
180e0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
180f0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
18100 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
18110 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
18120 22 2c 20 22 6c 65 67 61 63 79 66 6f 72 6d 61 74  ", "legacyformat
18130 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
18140 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
18150 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
18160 4f 4d 49 54 5f 4c 49 4b 45 5f 4f 50 54 49 4d 49  OMIT_LIKE_OPTIMI
18170 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74  ZATION.  Tcl_Set
18180 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
18190 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
181a0 6c 69 6b 65 5f 6f 70 74 22 2c 20 22 30 22 2c 20  like_opt", "0", 
181b0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
181c0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
181d0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
181e0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
181f0 22 6c 69 6b 65 5f 6f 70 74 22 2c 20 22 31 22 2c  "like_opt", "1",
18200 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
18210 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
18220 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45  f SQLITE_OMIT_ME
18230 4d 4f 52 59 44 42 0a 20 20 54 63 6c 5f 53 65 74  MORYDB.  Tcl_Set
18240 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
18250 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
18260 6d 65 6d 6f 72 79 64 62 22 2c 20 22 30 22 2c 20  memorydb", "0", 
18270 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
18280 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
18290 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
182a0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
182b0 22 6d 65 6d 6f 72 79 64 62 22 2c 20 22 31 22 2c  "memorydb", "1",
182c0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
182d0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
182e0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
182f0 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e  MEMORY_MANAGEMEN
18300 54 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  T.  Tcl_SetVar2(
18310 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
18320 6f 70 74 69 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72  options", "memor
18330 79 6d 61 6e 61 67 65 22 2c 20 22 31 22 2c 20 54  ymanage", "1", T
18340 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
18350 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
18360 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
18370 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
18380 6d 65 6d 6f 72 79 6d 61 6e 61 67 65 22 2c 20 22  memorymanage", "
18390 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
183a0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
183b0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
183c0 5f 4f 52 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  _OR_OPTIMIZATION
183d0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
183e0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
183f0 70 74 69 6f 6e 73 22 2c 20 22 6f 72 5f 6f 70 74  ptions", "or_opt
18400 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
18410 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
18420 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
18430 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
18440 74 69 6f 6e 73 22 2c 20 22 6f 72 5f 6f 70 74 22  tions", "or_opt"
18450 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
18460 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
18470 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
18480 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
18490 53 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  S.  Tcl_SetVar2(
184a0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
184b0 6f 70 74 69 6f 6e 73 22 2c 20 22 70 61 67 65 72  options", "pager
184c0 5f 70 72 61 67 6d 61 73 22 2c 20 22 30 22 2c 20  _pragmas", "0", 
184d0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
184e0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
184f0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
18500 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
18510 22 70 61 67 65 72 5f 70 72 61 67 6d 61 73 22 2c  "pager_pragmas",
18520 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
18530 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
18540 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
18550 49 54 5f 50 41 52 53 45 52 0a 20 20 54 63 6c 5f  IT_PARSER.  Tcl_
18560 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
18570 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
18580 2c 20 22 70 61 72 73 65 72 22 2c 20 22 30 22 2c  , "parser", "0",
18590 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
185a0 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
185b0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
185c0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
185d0 20 22 70 61 72 73 65 72 22 2c 20 22 31 22 2c 20   "parser", "1", 
185e0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
185f0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
18600 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
18610 54 5f 50 52 41 47 4d 41 29 20 7c 7c 20 64 65 66  T_PRAGMA) || def
18620 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
18630 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20  _FLAG_PRAGMAS). 
18640 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
18650 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
18660 69 6f 6e 73 22 2c 20 22 70 72 61 67 6d 61 22 2c  ions", "pragma",
18670 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
18680 5f 4f 4e 4c 59 29 3b 0a 20 20 54 63 6c 5f 53 65  _ONLY);.  Tcl_Se
18690 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
186a0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
186b0 22 69 6e 74 65 67 72 69 74 79 63 6b 22 2c 20 22  "integrityck", "
186c0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
186d0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
186e0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
186f0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
18700 73 22 2c 20 22 70 72 61 67 6d 61 22 2c 20 22 31  s", "pragma", "1
18710 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
18720 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
18730 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
18740 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
18750 4b 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  K.  Tcl_SetVar2(
18760 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
18770 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72 6f 67 72  options", "progr
18780 65 73 73 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ess", "0", TCL_G
18790 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
187a0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
187b0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
187c0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72 6f 67  _options", "prog
187d0 72 65 73 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f  ress", "1", TCL_
187e0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
187f0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
18800 49 54 45 5f 45 4e 41 42 4c 45 5f 52 45 44 45 46  ITE_ENABLE_REDEF
18810 5f 49 4f 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  _IO.  Tcl_SetVar
18820 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
18830 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72 65 64  e_options", "red
18840 65 66 69 6f 22 2c 20 22 31 22 2c 20 54 43 4c 5f  efio", "1", TCL_
18850 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
18860 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
18870 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
18880 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72 65 64  e_options", "red
18890 65 66 69 6f 22 2c 20 22 30 22 2c 20 54 43 4c 5f  efio", "0", TCL_
188a0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
188b0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
188c0 49 54 45 5f 4f 4d 49 54 5f 52 45 49 4e 44 45 58  ITE_OMIT_REINDEX
188d0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
188e0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
188f0 70 74 69 6f 6e 73 22 2c 20 22 72 65 69 6e 64 65  ptions", "reinde
18900 78 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  x", "0", TCL_GLO
18910 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
18920 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
18930 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
18940 70 74 69 6f 6e 73 22 2c 20 22 72 65 69 6e 64 65  ptions", "reinde
18950 78 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  x", "1", TCL_GLO
18960 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
18970 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
18980 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
18990 47 4d 41 53 0a 20 20 54 63 6c 5f 53 65 74 56 61  GMAS.  Tcl_SetVa
189a0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
189b0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63  te_options", "sc
189c0 68 65 6d 61 5f 70 72 61 67 6d 61 73 22 2c 20 22  hema_pragmas", "
189d0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
189e0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
189f0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
18a00 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
18a10 73 22 2c 20 22 73 63 68 65 6d 61 5f 70 72 61 67  s", "schema_prag
18a20 6d 61 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  mas", "1", TCL_G
18a30 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
18a40 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
18a50 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56  TE_OMIT_SCHEMA_V
18a60 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20  ERSION_PRAGMAS. 
18a70 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
18a80 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
18a90 69 6f 6e 73 22 2c 20 22 73 63 68 65 6d 61 5f 76  ions", "schema_v
18aa0 65 72 73 69 6f 6e 22 2c 20 22 30 22 2c 20 54 43  ersion", "0", TC
18ab0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
18ac0 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
18ad0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
18ae0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73  ite_options", "s
18af0 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 2c 20  chema_version", 
18b00 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
18b10 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
18b20 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
18b30 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
18b40 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
18b50 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
18b60 69 6f 6e 73 22 2c 20 22 73 68 61 72 65 64 5f 63  ions", "shared_c
18b70 61 63 68 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f  ache", "0", TCL_
18b80 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
18b90 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
18ba0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
18bb0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 68 61  e_options", "sha
18bc0 72 65 64 5f 63 61 63 68 65 22 2c 20 22 31 22 2c  red_cache", "1",
18bd0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
18be0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
18bf0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  f SQLITE_OMIT_SU
18c00 42 51 55 45 52 59 0a 20 20 54 63 6c 5f 53 65 74  BQUERY.  Tcl_Set
18c10 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
18c20 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
18c30 73 75 62 71 75 65 72 79 22 2c 20 22 30 22 2c 20  subquery", "0", 
18c40 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
18c50 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
18c60 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
18c70 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
18c80 22 73 75 62 71 75 65 72 79 22 2c 20 22 31 22 2c  "subquery", "1",
18c90 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
18ca0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
18cb0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 43  f SQLITE_OMIT_TC
18cc0 4c 5f 56 41 52 49 41 42 4c 45 0a 20 20 54 63 6c  L_VARIABLE.  Tcl
18cd0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
18ce0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
18cf0 22 2c 20 22 74 63 6c 76 61 72 22 2c 20 22 30 22  ", "tclvar", "0"
18d00 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
18d10 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
18d20 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
18d30 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
18d40 2c 20 22 74 63 6c 76 61 72 22 2c 20 22 31 22 2c  , "tclvar", "1",
18d50 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
18d60 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  );.#endif..#if d
18d70 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46  efined(THREADSAF
18d80 45 29 20 26 26 20 54 48 52 45 41 44 53 41 46 45  E) && THREADSAFE
18d90 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
18da0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
18db0 70 74 69 6f 6e 73 22 2c 20 22 74 68 72 65 61 64  ptions", "thread
18dc0 73 61 66 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f  safe", "1", TCL_
18dd0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
18de0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
18df0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
18e00 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 68 72  e_options", "thr
18e10 65 61 64 73 61 66 65 22 2c 20 22 30 22 2c 20 54  eadsafe", "0", T
18e20 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
18e30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
18e40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
18e50 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  E.  Tcl_SetVar2(
18e60 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
18e70 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72 61 63 65  options", "trace
18e80 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
18e90 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
18ea0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
18eb0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
18ec0 74 69 6f 6e 73 22 2c 20 22 74 72 61 63 65 22 2c  tions", "trace",
18ed0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
18ee0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
18ef0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
18f00 49 54 5f 54 52 49 47 47 45 52 0a 20 20 54 63 6c  IT_TRIGGER.  Tcl
18f10 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
18f20 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
18f30 22 2c 20 22 74 72 69 67 67 65 72 22 2c 20 22 30  ", "trigger", "0
18f40 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
18f50 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
18f60 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
18f70 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
18f80 22 2c 20 22 74 72 69 67 67 65 72 22 2c 20 22 31  ", "trigger", "1
18f90 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
18fa0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
18fb0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
18fc0 54 45 4d 50 44 42 0a 20 20 54 63 6c 5f 53 65 74  TEMPDB.  Tcl_Set
18fd0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
18fe0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
18ff0 74 65 6d 70 64 62 22 2c 20 22 30 22 2c 20 54 43  tempdb", "0", TC
19000 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
19010 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
19020 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
19030 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74  ite_options", "t
19040 65 6d 70 64 62 22 2c 20 22 31 22 2c 20 54 43 4c  empdb", "1", TCL
19050 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
19060 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
19070 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
19080 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
19090 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
190a0 74 69 6f 6e 73 22 2c 20 22 75 74 66 31 36 22 2c  tions", "utf16",
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 75 74 66 31 36 22 2c 20 22  ons", "utf16", "
19100 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
19110 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
19120 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
19130 5f 56 41 43 55 55 4d 0a 20 20 54 63 6c 5f 53 65  _VACUUM.  Tcl_Se
19140 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
19150 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
19160 22 76 61 63 75 75 6d 22 2c 20 22 30 22 2c 20 54  "vacuum", "0", T
19170 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
19180 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
19190 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
191a0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
191b0 76 61 63 75 75 6d 22 2c 20 22 31 22 2c 20 54 43  vacuum", "1", TC
191c0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
191d0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
191e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 0a  QLITE_OMIT_VIEW.
191f0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
19200 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
19210 74 69 6f 6e 73 22 2c 20 22 76 69 65 77 22 2c 20  tions", "view", 
19220 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
19230 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
19240 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
19250 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
19260 6e 73 22 2c 20 22 76 69 65 77 22 2c 20 22 31 22  ns", "view", "1"
19270 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
19280 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
19290 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
192a0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 63  IRTUALTABLE.  Tc
192b0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
192c0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
192d0 73 22 2c 20 22 76 74 61 62 22 2c 20 22 30 22 2c  s", "vtab", "0",
192e0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
192f0 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
19300 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
19310 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
19320 20 22 76 74 61 62 22 2c 20 22 31 22 2c 20 54 43   "vtab", "1", TC
19330 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
19340 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  #endif.}../*.** 
19350 52 65 67 69 73 74 65 72 20 63 6f 6d 6d 61 6e 64  Register command
19360 73 20 77 69 74 68 20 74 68 65 20 54 43 4c 20 69  s with the TCL i
19370 6e 74 65 72 70 72 65 74 65 72 2e 0a 2a 2f 0a 69  nterpreter..*/.i
19380 6e 74 20 53 71 6c 69 74 65 74 65 73 74 31 5f 49  nt Sqlitetest1_I
19390 6e 69 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a  nit(Tcl_Interp *
193a0 69 6e 74 65 72 70 29 7b 0a 20 20 65 78 74 65 72  interp){.  exter
193b0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 65  n int sqlite3_se
193c0 61 72 63 68 5f 63 6f 75 6e 74 3b 0a 20 20 65 78  arch_count;.  ex
193d0 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
193e0 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
193f0 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
19400 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 66 69 6c 65  qlite3_open_file
19410 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e  _count;.  extern
19420 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72   int sqlite3_sor
19430 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72  t_count;.  exter
19440 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 75  n int sqlite3_cu
19450 72 72 65 6e 74 5f 74 69 6d 65 3b 0a 20 20 73 74  rrent_time;.  st
19460 61 74 69 63 20 73 74 72 75 63 74 20 7b 0a 20 20  atic struct {.  
19470 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a     char *zName;.
19480 20 20 20 20 20 54 63 6c 5f 43 6d 64 50 72 6f 63       Tcl_CmdProc
19490 20 2a 78 50 72 6f 63 3b 0a 20 20 7d 20 61 43 6d   *xProc;.  } aCm
194a0 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20 22  d[] = {.     { "
194b0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
194c0 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 20  int",           
194d0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
194e0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
194f0 74 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22  t    },.     { "
19500 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
19510 69 6e 74 36 34 22 2c 20 20 20 20 20 20 20 20 20  int64",         
19520 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
19530 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
19540 74 36 34 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22  t64  },.     { "
19550 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
19560 73 74 72 22 2c 20 20 20 20 20 20 20 20 20 20 20  str",           
19570 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
19580 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74  lite3_mprintf_st
19590 72 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22  r    },.     { "
195a0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
195b0 73 74 72 6f 6e 6c 79 22 2c 20 20 20 20 20 20 20  stronly",       
195c0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
195d0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74  lite3_mprintf_st
195e0 72 6f 6e 6c 79 7d 2c 0a 20 20 20 20 20 7b 20 22  ronly},.     { "
195f0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
19600 64 6f 75 62 6c 65 22 2c 20 20 20 20 20 20 20 20  double",        
19610 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
19620 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f  lite3_mprintf_do
19630 75 62 6c 65 20 7d 2c 0a 20 20 20 20 20 7b 20 22  uble },.     { "
19640 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
19650 73 63 61 6c 65 64 22 2c 20 20 20 20 20 20 20 20  scaled",        
19660 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
19670 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63  lite3_mprintf_sc
19680 61 6c 65 64 20 7d 2c 0a 20 20 20 20 20 7b 20 22  aled },.     { "
19690 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
196a0 68 65 78 64 6f 75 62 6c 65 22 2c 20 20 20 28 54  hexdouble",   (T
196b0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
196c0 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78 64  te3_mprintf_hexd
196d0 6f 75 62 6c 65 7d 2c 0a 20 20 20 20 20 7b 20 22  ouble},.     { "
196e0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
196f0 7a 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20 20  z_test",        
19700 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
19710 73 74 5f 6d 70 72 69 6e 74 66 5f 7a 20 20 20 20  st_mprintf_z    
19720 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
19730 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 6e  qlite3_mprintf_n
19740 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20 20 28  _test",        (
19750 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
19760 74 5f 6d 70 72 69 6e 74 66 5f 6e 20 20 20 20 20  t_mprintf_n     
19770 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
19780 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
19790 74 5f 72 6f 77 69 64 22 2c 20 20 20 20 20 28 54  t_rowid",     (T
197a0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
197b0 5f 6c 61 73 74 5f 72 6f 77 69 64 20 20 20 20 20  _last_rowid     
197c0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
197d0 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74 66  ite3_exec_printf
197e0 22 2c 20 20 20 20 20 20 20 20 20 20 20 28 54 63  ",           (Tc
197f0 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
19800 65 78 65 63 5f 70 72 69 6e 74 66 20 20 20 20 20  exec_printf     
19810 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
19820 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72  te3_get_table_pr
19830 69 6e 74 66 22 2c 20 20 20 20 20 20 28 54 63 6c  intf",      (Tcl
19840 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 67  _CmdProc*)test_g
19850 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 20  et_table_printf 
19860 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
19870 65 33 5f 63 6c 6f 73 65 22 2c 20 20 20 20 20 20  e3_close",      
19880 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
19890 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f  CmdProc*)sqlite_
198a0 74 65 73 74 5f 63 6c 6f 73 65 20 20 20 20 20 7d  test_close     }
198b0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
198c0 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
198d0 6e 22 2c 20 20 20 20 20 20 20 28 54 63 6c 5f 43  n",       (Tcl_C
198e0 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 63 72 65  mdProc*)test_cre
198f0 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 20 7d 2c  ate_function  },
19900 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
19910 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74  _create_aggregat
19920 65 22 2c 20 20 20 20 20 20 28 54 63 6c 5f 43 6d  e",      (Tcl_Cm
19930 64 50 72 6f 63 2a 29 74 65 73 74 5f 63 72 65 61  dProc*)test_crea
19940 74 65 5f 61 67 67 72 65 67 61 74 65 20 7d 2c 0a  te_aggregate },.
19950 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 72       { "sqlite_r
19960 65 67 69 73 74 65 72 5f 74 65 73 74 5f 66 75 6e  egister_test_fun
19970 63 74 69 6f 6e 22 2c 20 28 54 63 6c 5f 43 6d 64  ction", (Tcl_Cmd
19980 50 72 6f 63 2a 29 74 65 73 74 5f 72 65 67 69 73  Proc*)test_regis
19990 74 65 72 5f 66 75 6e 63 20 20 20 20 7d 2c 0a 20  ter_func    },. 
199a0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 61 62      { "sqlite_ab
199b0 6f 72 74 22 2c 20 20 20 20 20 20 20 20 20 20 20  ort",           
199c0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
199d0 72 6f 63 2a 29 73 71 6c 69 74 65 5f 61 62 6f 72  roc*)sqlite_abor
199e0 74 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 23 69  t          },.#i
199f0 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44  fdef SQLITE_MEMD
19a00 45 42 55 47 0a 20 20 20 20 20 7b 20 22 73 71 6c  EBUG.     { "sql
19a10 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 22  ite_malloc_fail"
19a20 2c 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63  ,            (Tc
19a30 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74  l_CmdProc*)sqlit
19a40 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 20 20 20  e_malloc_fail   
19a50 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
19a60 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 22 2c  te_malloc_stat",
19a70 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
19a80 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65  _CmdProc*)sqlite
19a90 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 20 20 20 20  _malloc_stat    
19aa0 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b  },.#endif.     {
19ab0 20 22 73 71 6c 69 74 65 5f 62 69 6e 64 22 2c 20   "sqlite_bind", 
19ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ad0 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
19ae0 74 65 73 74 5f 62 69 6e 64 20 20 20 20 20 20 20  test_bind       
19af0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
19b00 22 62 72 65 61 6b 70 6f 69 6e 74 22 2c 20 20 20  "breakpoint",   
19b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
19b30 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 20 20  est_breakpoint  
19b40 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
19b50 73 71 6c 69 74 65 33 5f 6b 65 79 22 2c 20 20 20  sqlite3_key",   
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
19b80 73 74 5f 6b 65 79 20 20 20 20 20 20 20 20 20 20  st_key          
19b90 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
19ba0 71 6c 69 74 65 33 5f 72 65 6b 65 79 22 2c 20 20  qlite3_rekey",  
19bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
19bc0 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
19bd0 74 5f 72 65 6b 65 79 20 20 20 20 20 20 20 20 20  t_rekey         
19be0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
19bf0 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 22 2c  lite_set_magic",
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
19c10 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
19c20 74 65 5f 73 65 74 5f 6d 61 67 69 63 20 20 20 20  te_set_magic    
19c30 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
19c40 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 22 2c  ite3_interrupt",
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
19c60 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
19c70 69 6e 74 65 72 72 75 70 74 20 20 20 20 20 20 20  interrupt       
19c80 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
19c90 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e 63 74 69  te_delete_functi
19ca0 6f 6e 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c  on",        (Tcl
19cb0 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65 74 65  _CmdProc*)delete
19cc0 5f 66 75 6e 63 74 69 6f 6e 20 20 20 20 20 20 20  _function       
19cd0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
19ce0 65 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69  e_delete_collati
19cf0 6f 6e 22 2c 20 20 20 20 20 20 20 28 54 63 6c 5f  on",       (Tcl_
19d00 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65 74 65 5f  CmdProc*)delete_
19d10 63 6f 6c 6c 61 74 69 6f 6e 20 20 20 20 20 20 7d  collation      }
19d20 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
19d30 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
19d40 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43  ",        (Tcl_C
19d50 6d 64 50 72 6f 63 2a 29 67 65 74 5f 61 75 74 6f  mdProc*)get_auto
19d60 63 6f 6d 6d 69 74 20 20 20 20 20 20 20 20 7d 2c  commit        },
19d70 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
19d80 5f 73 74 61 63 6b 5f 75 73 65 64 22 2c 20 20 20  _stack_used",   
19d90 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
19da0 64 50 72 6f 63 2a 29 74 65 73 74 5f 73 74 61 63  dProc*)test_stac
19db0 6b 5f 75 73 65 64 20 20 20 20 20 20 20 7d 2c 0a  k_used       },.
19dc0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
19dd0 62 75 73 79 5f 74 69 6d 65 6f 75 74 22 2c 20 20  busy_timeout",  
19de0 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
19df0 50 72 6f 63 2a 29 74 65 73 74 5f 62 75 73 79 5f  Proc*)test_busy_
19e00 74 69 6d 65 6f 75 74 20 20 20 20 20 7d 2c 0a 20  timeout     },. 
19e10 20 7d 3b 0a 20 20 73 74 61 74 69 63 20 73 74 72   };.  static str
19e20 75 63 74 20 7b 0a 20 20 20 20 20 63 68 61 72 20  uct {.     char 
19e30 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 54 63 6c  *zName;.     Tcl
19e40 5f 4f 62 6a 43 6d 64 50 72 6f 63 20 2a 78 50 72  _ObjCmdProc *xPr
19e50 6f 63 3b 0a 20 20 20 20 20 76 6f 69 64 20 2a 63  oc;.     void *c
19e60 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 7d 20 61  lientData;.  } a
19e70 4f 62 6a 43 6d 64 5b 5d 20 3d 20 7b 0a 20 20 20  ObjCmd[] = {.   
19e80 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6e    { "sqlite3_con
19e90 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 22  nection_pointer"
19ea0 2c 20 20 20 20 67 65 74 5f 73 71 6c 69 74 65 5f  ,    get_sqlite_
19eb0 70 6f 69 6e 74 65 72 2c 20 30 20 7d 2c 0a 20 20  pointer, 0 },.  
19ec0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
19ed0 6e 64 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20  nd_int",        
19ee0 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f        test_bind_
19ef0 69 6e 74 2c 20 20 20 20 20 20 30 20 7d 2c 0a 20  int,      0 },. 
19f00 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62      { "sqlite3_b
19f10 69 6e 64 5f 69 6e 74 36 34 22 2c 20 20 20 20 20  ind_int64",     
19f20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64         test_bind
19f30 5f 69 6e 74 36 34 2c 20 20 20 20 30 20 7d 2c 0a  _int64,    0 },.
19f40 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
19f50 62 69 6e 64 5f 64 6f 75 62 6c 65 22 2c 20 20 20  bind_double",   
19f60 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e          test_bin
19f70 64 5f 64 6f 75 62 6c 65 2c 20 20 20 30 20 7d 2c  d_double,   0 },
19f80 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
19f90 5f 62 69 6e 64 5f 6e 75 6c 6c 22 2c 20 20 20 20  _bind_null",    
19fa0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69           test_bi
19fb0 6e 64 5f 6e 75 6c 6c 20 20 20 20 20 2c 30 20 7d  nd_null     ,0 }
19fc0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
19fd0 33 5f 62 69 6e 64 5f 74 65 78 74 22 2c 20 20 20  3_bind_text",   
19fe0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62            test_b
19ff0 69 6e 64 5f 74 65 78 74 20 20 20 20 20 2c 30 20  ind_text     ,0 
1a000 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1a010 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 22 2c  e3_bind_text16",
1a020 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
1a030 62 69 6e 64 5f 74 65 78 74 31 36 20 20 20 2c 30  bind_text16   ,0
1a040 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1a050 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 22 2c 20  te3_bind_blob", 
1a060 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
1a070 5f 62 69 6e 64 5f 62 6c 6f 62 20 20 20 20 20 2c  _bind_blob     ,
1a080 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
1a090 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
1a0a0 74 65 72 5f 63 6f 75 6e 74 22 2c 20 20 74 65 73  ter_count",  tes
1a0b0 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  t_bind_parameter
1a0c0 5f 63 6f 75 6e 74 2c 20 30 7d 2c 0a 20 20 20 20  _count, 0},.    
1a0d0 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64   { "sqlite3_bind
1a0e0 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 22  _parameter_name"
1a0f0 2c 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 70 61  ,   test_bind_pa
1a100 72 61 6d 65 74 65 72 5f 6e 61 6d 65 2c 20 20 30  rameter_name,  0
1a110 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1a120 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
1a130 72 5f 69 6e 64 65 78 22 2c 20 20 74 65 73 74 5f  r_index",  test_
1a140 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69  bind_parameter_i
1a150 6e 64 65 78 2c 20 30 7d 2c 0a 20 20 20 20 20 7b  ndex, 0},.     {
1a160 20 22 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f   "sqlite3_clear_
1a170 62 69 6e 64 69 6e 67 73 22 2c 20 20 20 20 20 20  bindings",      
1a180 20 20 74 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e    test_clear_bin
1a190 64 69 6e 67 73 2c 20 30 7d 2c 0a 20 20 20 20 20  dings, 0},.     
1a1a0 7b 20 22 73 71 6c 69 74 65 33 5f 73 6c 65 65 70  { "sqlite3_sleep
1a1b0 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
1a1c0 20 20 20 74 65 73 74 5f 73 6c 65 65 70 2c 20 20     test_sleep,  
1a1d0 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
1a1e0 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72 63   { "sqlite3_errc
1a1f0 6f 64 65 22 2c 20 20 20 20 20 20 20 20 20 20 20  ode",           
1a200 20 20 20 20 74 65 73 74 5f 65 72 72 63 6f 64 65      test_errcode
1a210 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
1a220 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72    { "sqlite3_err
1a230 6d 73 67 22 2c 20 20 20 20 20 20 20 20 20 20 20  msg",           
1a240 20 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67       test_errmsg
1a250 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20          ,0 },.  
1a260 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72     { "sqlite3_er
1a270 72 6d 73 67 31 36 22 2c 20 20 20 20 20 20 20 20  rmsg16",        
1a280 20 20 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73        test_errms
1a290 67 31 36 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20  g16      ,0 },. 
1a2a0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f      { "sqlite3_o
1a2b0 70 65 6e 22 2c 20 20 20 20 20 20 20 20 20 20 20  pen",           
1a2c0 20 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65 6e         test_open
1a2d0 20 20 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a            ,0 },.
1a2e0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1a2f0 6f 70 65 6e 31 36 22 2c 20 20 20 20 20 20 20 20  open16",        
1a300 20 20 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65          test_ope
1a310 6e 31 36 20 20 20 20 20 20 20 20 2c 30 20 7d 2c  n16        ,0 },
1a320 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1a330 5f 63 6f 6d 70 6c 65 74 65 31 36 22 2c 20 20 20  _complete16",   
1a340 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f           test_co
1a350 6d 70 6c 65 74 65 31 36 20 20 20 20 2c 30 20 7d  mplete16    ,0 }
1a360 2c 0a 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  ,..     { "sqlit
1a370 65 33 5f 70 72 65 70 61 72 65 22 2c 20 20 20 20  e3_prepare",    
1a380 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
1a390 70 72 65 70 61 72 65 20 20 20 20 20 20 20 2c 30  prepare       ,0
1a3a0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1a3b0 74 65 33 5f 70 72 65 70 61 72 65 31 36 22 2c 20  te3_prepare16", 
1a3c0 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
1a3d0 5f 70 72 65 70 61 72 65 31 36 20 20 20 20 20 2c  _prepare16     ,
1a3e0 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
1a3f0 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 22 2c 20  ite3_finalize", 
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
1a410 74 5f 66 69 6e 61 6c 69 7a 65 20 20 20 20 20 20  t_finalize      
1a420 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
1a430 6c 69 74 65 33 5f 72 65 73 65 74 22 2c 20 20 20  lite3_reset",   
1a440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
1a450 73 74 5f 72 65 73 65 74 20 20 20 20 20 20 20 20  st_reset        
1a460 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
1a470 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64 22 2c  qlite3_expired",
1a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a490 65 73 74 5f 65 78 70 69 72 65 64 20 20 20 20 20  est_expired     
1a4a0 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
1a4b0 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72  sqlite3_transfer
1a4c0 5f 62 69 6e 64 69 6e 67 73 22 2c 20 20 20 20 20  _bindings",     
1a4d0 74 65 73 74 5f 74 72 61 6e 73 66 65 72 5f 62 69  test_transfer_bi
1a4e0 6e 64 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20  nd ,0 },.     { 
1a4f0 22 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  "sqlite3_changes
1a500 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
1a510 20 74 65 73 74 5f 63 68 61 6e 67 65 73 20 20 20   test_changes   
1a520 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
1a530 20 22 73 71 6c 69 74 65 33 5f 73 74 65 70 22 2c   "sqlite3_step",
1a540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a550 20 20 74 65 73 74 5f 73 74 65 70 20 20 20 20 20    test_step     
1a560 20 20 20 20 20 2c 30 20 7d 2c 0a 0a 20 20 20 20       ,0 },..    
1a570 20 7b 20 22 73 71 6c 69 74 65 33 5f 72 65 6c 65   { "sqlite3_rele
1a580 61 73 65 5f 6d 65 6d 6f 72 79 22 2c 20 20 20 20  ase_memory",    
1a590 20 20 20 20 74 65 73 74 5f 72 65 6c 65 61 73 65      test_release
1a5a0 5f 6d 65 6d 6f 72 79 2c 20 20 20 20 20 30 7d 2c  _memory,     0},
1a5b0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1a5c0 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
1a5d0 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f 73 6f  ",       test_so
1a5e0 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 2c 20 20  ft_heap_limit,  
1a5f0 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71    0},.     { "sq
1a600 6c 69 74 65 33 5f 63 6c 65 61 72 5f 74 73 64 5f  lite3_clear_tsd_
1a610 6d 65 6d 64 65 62 75 67 22 2c 20 20 20 20 74 65  memdebug",    te
1a620 73 74 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65 6d  st_clear_tsd_mem
1a630 64 65 62 75 67 2c 20 30 7d 2c 0a 20 20 20 20 20  debug, 0},.     
1a640 7b 20 22 73 71 6c 69 74 65 33 5f 74 73 64 5f 72  { "sqlite3_tsd_r
1a650 65 6c 65 61 73 65 22 2c 20 20 20 20 20 20 20 20  elease",        
1a660 20 20 20 74 65 73 74 5f 74 73 64 5f 72 65 6c 65     test_tsd_rele
1a670 61 73 65 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  ase,        0},.
1a680 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1a690 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 22 2c  thread_cleanup",
1a6a0 20 20 20 20 20 20 20 20 74 65 73 74 5f 74 68 72          test_thr
1a6b0 65 61 64 5f 63 6c 65 61 6e 75 70 2c 20 20 20 20  ead_cleanup,    
1a6c0 20 30 7d 2c 0a 0a 20 20 20 20 20 7b 20 22 73 71   0},..     { "sq
1a6d0 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e  lite3_load_exten
1a6e0 73 69 6f 6e 22 2c 20 20 20 20 20 20 20 20 74 65  sion",        te
1a6f0 73 74 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  st_load_extensio
1a700 6e 2c 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20  n,     0},.     
1a710 7b 20 22 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  { "sqlite3_enabl
1a720 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e_load_extension
1a730 22 2c 20 74 65 73 74 5f 65 6e 61 62 6c 65 5f 6c  ", test_enable_l
1a740 6f 61 64 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  oad,        0},.
1a750 0a 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33  .     /* sqlite3
1a760 5f 63 6f 6c 75 6d 6e 5f 2a 28 29 20 41 50 49 20  _column_*() API 
1a770 2a 2f 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  */.     { "sqlit
1a780 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 22  e3_column_count"
1a790 2c 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f  ,          test_
1a7a0 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 20 2c 30  column_count  ,0
1a7b0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1a7c0 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 22 2c  te3_data_count",
1a7d0 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
1a7e0 5f 64 61 74 61 5f 63 6f 75 6e 74 20 20 20 20 2c  _data_count    ,
1a7f0 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
1a800 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  ite3_column_type
1a810 22 2c 20 20 20 20 20 20 20 20 20 20 20 74 65 73  ",           tes
1a820 74 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 20 20  t_column_type   
1a830 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
1a840 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f  lite3_column_blo
1a850 62 22 2c 20 20 20 20 20 20 20 20 20 20 20 74 65  b",           te
1a860 73 74 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 20  st_column_blob  
1a870 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
1a880 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
1a890 75 62 6c 65 22 2c 20 20 20 20 20 20 20 20 20 74  uble",         t
1a8a0 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  est_column_doubl
1a8b0 65 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22  e ,0 },.     { "
1a8c0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
1a8d0 6e 74 36 34 22 2c 20 20 20 20 20 20 20 20 20 20  nt64",          
1a8e0 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  test_column_int6
1a8f0 34 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20  4  ,0 },.     { 
1a900 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
1a910 74 65 78 74 22 2c 20 20 20 20 20 20 20 74 65 73  text",       tes
1a920 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 73 71  t_stmt_utf8,  sq
1a930 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
1a940 74 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b  t      },.     {
1a950 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
1a960 5f 64 65 63 6c 74 79 70 65 22 2c 20 20 20 74 65  _decltype",   te
1a970 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 73  st_stmt_utf8,  s
1a980 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
1a990 63 6c 74 79 70 65 20 20 7d 2c 0a 20 20 20 20 20  cltype  },.     
1a9a0 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
1a9b0 6e 5f 6e 61 6d 65 22 2c 20 20 20 20 20 20 20 74  n_name",       t
1a9c0 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20  est_stmt_utf8,  
1a9d0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
1a9e0 61 6d 65 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  ame      },.    
1a9f0 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
1aa00 6d 6e 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20  mn_int",        
1aa10 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 20  test_stmt_int,  
1aa20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1aa30 69 6e 74 20 20 20 20 20 20 20 7d 2c 0a 20 20 20  int       },.   
1aa40 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
1aa50 75 6d 6e 5f 62 79 74 65 73 22 2c 20 20 20 20 20  umn_bytes",     
1aa60 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20   test_stmt_int, 
1aa70 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
1aa80 5f 62 79 74 65 73 20 20 20 20 20 7d 2c 0a 23 69  _bytes     },.#i
1aa90 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1aaa0 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41  LE_COLUMN_METADA
1aab0 54 41 0a 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f  TA.{ "sqlite3_co
1aac0 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
1aad0 6d 65 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75  me", test_stmt_u
1aae0 74 66 38 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c  tf8, sqlite3_col
1aaf0 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
1ab00 65 7d 2c 0a 7b 20 22 73 71 6c 69 74 65 33 5f 63  e},.{ "sqlite3_c
1ab10 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
1ab20 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66  ", test_stmt_utf
1ab30 38 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  8, sqlite3_colum
1ab40 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 7d 2c 0a 7b  n_table_name},.{
1ab50 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
1ab60 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 22 2c 20 74  _origin_name", t
1ab70 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 73  est_stmt_utf8, s
1ab80 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
1ab90 69 67 69 6e 5f 6e 61 6d 65 7d 2c 0a 23 65 6e 64  igin_name},.#end
1aba0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
1abb0 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
1abc0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
1abd0 6c 75 6d 6e 5f 62 79 74 65 73 31 36 22 2c 20 20  lumn_bytes16",  
1abe0 20 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c    test_stmt_int,
1abf0 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d     sqlite3_colum
1ac00 6e 5f 62 79 74 65 73 31 36 20 20 20 7d 2c 0a 20  n_bytes16   },. 
1ac10 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
1ac20 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 22 2c 20 20  olumn_text16",  
1ac30 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66     test_stmt_utf
1ac40 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  16, sqlite3_colu
1ac50 6d 6e 5f 74 65 78 74 31 36 20 20 20 20 7d 2c 0a  mn_text16    },.
1ac60 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1ac70 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31  column_decltype1
1ac80 36 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74  6", test_stmt_ut
1ac90 66 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c  f16, sqlite3_col
1aca0 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 7d 2c  umn_decltype16},
1acb0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1acc0 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 22 2c  _column_name16",
1acd0 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 75       test_stmt_u
1ace0 74 66 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f  tf16, sqlite3_co
1acf0 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20 20 20 20 7d  lumn_name16    }
1ad00 2c 0a 20 20 20 20 20 7b 20 22 61 64 64 5f 61 6c  ,.     { "add_al
1ad10 69 67 6e 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c  ignment_test_col
1ad20 6c 61 74 69 6f 6e 73 22 2c 20 61 64 64 5f 61 6c  lations", add_al
1ad30 69 67 6e 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c  ignment_test_col
1ad40 6c 61 74 69 6f 6e 73 2c 20 30 20 20 20 20 20 20  lations, 0      
1ad50 7d 2c 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  },.#ifdef SQLITE
1ad60 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d  _ENABLE_COLUMN_M
1ad70 45 54 41 44 41 54 41 0a 7b 22 73 71 6c 69 74 65  ETADATA.{"sqlite
1ad80 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
1ad90 65 5f 6e 61 6d 65 31 36 22 2c 0a 20 20 74 65 73  e_name16",.  tes
1ada0 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73 71  t_stmt_utf16, sq
1adb0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
1adc0 61 62 61 73 65 5f 6e 61 6d 65 31 36 7d 2c 0a 7b  abase_name16},.{
1add0 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
1ade0 74 61 62 6c 65 5f 6e 61 6d 65 31 36 22 2c 20 74  table_name16", t
1adf0 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20  est_stmt_utf16, 
1ae00 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
1ae10 61 62 6c 65 5f 6e 61 6d 65 31 36 7d 2c 0a 7b 22  able_name16},.{"
1ae20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
1ae30 72 69 67 69 6e 5f 6e 61 6d 65 31 36 22 2c 20 74  rigin_name16", t
1ae40 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20  est_stmt_utf16, 
1ae50 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
1ae60 72 69 67 69 6e 5f 6e 61 6d 65 31 36 7d 2c 0a 23  rigin_name16},.#
1ae70 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 20 20 20  endif.#endif.   
1ae80 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 67 6c 6f    { "sqlite3_glo
1ae90 62 61 6c 5f 72 65 63 6f 76 65 72 22 2c 20 20 20  bal_recover",   
1aea0 20 74 65 73 74 5f 67 6c 6f 62 61 6c 5f 72 65 63   test_global_rec
1aeb0 6f 76 65 72 2c 20 30 20 20 20 7d 2c 0a 0a 20 20  over, 0   },..  
1aec0 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20     /* Functions 
1aed0 66 72 6f 6d 20 6f 73 2e 68 20 2a 2f 0a 23 69 66  from os.h */.#if
1aee0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1aef0 5f 44 49 53 4b 49 4f 0a 20 20 20 20 20 7b 20 22  _DISKIO.     { "
1af00 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61  sqlite3OsOpenRea
1af10 64 57 72 69 74 65 22 2c 74 65 73 74 5f 73 71 6c  dWrite",test_sql
1af20 69 74 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72  ite3OsOpenReadWr
1af30 69 74 65 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b  ite, 0 },.     {
1af40 20 22 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65   "sqlite3OsClose
1af50 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 73  ",        test_s
1af60 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65 2c 20 30  qlite3OsClose, 0
1af70 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1af80 74 65 33 4f 73 4c 6f 63 6b 22 2c 20 20 20 20 20  te3OsLock",     
1af90 20 20 20 20 74 65 73 74 5f 73 71 6c 69 74 65 33      test_sqlite3
1afa0 4f 73 4c 6f 63 6b 2c 20 30 20 7d 2c 0a 20 20 20  OsLock, 0 },.   
1afb0 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 54 65    { "sqlite3OsTe
1afc0 6d 70 46 69 6c 65 4e 61 6d 65 22 2c 20 74 65 73  mpFileName", tes
1afd0 74 5f 73 71 6c 69 74 65 33 4f 73 54 65 6d 70 46  t_sqlite3OsTempF
1afe0 69 6c 65 4e 61 6d 65 2c 20 30 20 7d 2c 0a 20 20  ileName, 0 },.  
1aff0 20 0a 20 20 20 20 20 2f 2a 20 43 75 73 74 6f 6d   .     /* Custom
1b000 20 74 65 73 74 20 69 6e 74 65 72 66 61 63 65 73   test interfaces
1b010 20 2a 2f 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   */.     { "sqli
1b020 74 65 33 4f 73 55 6e 6c 6f 63 6b 22 2c 20 20 20  te3OsUnlock",   
1b030 20 20 20 20 20 20 74 65 73 74 5f 73 71 6c 69 74        test_sqlit
1b040 65 33 4f 73 55 6e 6c 6f 63 6b 2c 20 30 20 20 20  e3OsUnlock, 0   
1b050 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   },.#endif.#ifnd
1b060 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
1b070 54 46 31 36 0a 20 20 20 20 20 7b 20 22 61 64 64  TF16.     { "add
1b080 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20  _test_collate", 
1b090 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 6c         test_coll
1b0a0 61 74 65 2c 20 30 20 20 20 20 20 20 20 20 20 20  ate, 0          
1b0b0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61 64 64    },.     { "add
1b0c0 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65  _test_collate_ne
1b0d0 65 64 65 64 22 2c 20 74 65 73 74 5f 63 6f 6c 6c  eded", test_coll
1b0e0 61 74 65 5f 6e 65 65 64 65 64 2c 20 30 20 20 20  ate_needed, 0   
1b0f0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61 64 64    },.     { "add
1b100 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c  _test_function",
1b110 20 20 20 20 20 20 20 74 65 73 74 5f 66 75 6e 63         test_func
1b120 74 69 6f 6e 2c 20 30 20 20 20 20 20 20 20 20 20  tion, 0         
1b130 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 64    },.#endif.#ifd
1b140 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
1b150 55 47 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  UG.     { "sqlit
1b160 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e  e_malloc_outstan
1b170 64 69 6e 67 22 2c 20 73 71 6c 69 74 65 5f 6d 61  ding", sqlite_ma
1b180 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67  lloc_outstanding
1b190 2c 20 30 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20  , 0},.#endif.   
1b1a0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 74 65 73    { "sqlite3_tes
1b1b0 74 5f 65 72 72 73 74 72 22 2c 20 20 20 20 20 74  t_errstr",     t
1b1c0 65 73 74 5f 65 72 72 73 74 72 2c 20 30 20 20 20  est_errstr, 0   
1b1d0 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
1b1e0 20 20 7b 20 22 74 63 6c 5f 76 61 72 69 61 62 6c    { "tcl_variabl
1b1f0 65 5f 74 79 70 65 22 2c 20 20 20 20 20 20 20 74  e_type",       t
1b200 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65  cl_variable_type
1b210 2c 20 30 20 20 20 20 20 20 20 7d 2c 0a 23 69 66  , 0       },.#if
1b220 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1b230 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
1b240 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 6e     { "sqlite3_en
1b250 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68  able_shared_cach
1b260 65 22 2c 20 74 65 73 74 5f 65 6e 61 62 6c 65 5f  e", test_enable_
1b270 73 68 61 72 65 64 2c 20 30 20 20 7d 2c 0a 23 65  shared, 0  },.#e
1b280 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71 6c  ndif.     { "sql
1b290 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f  ite3_libversion_
1b2a0 6e 75 6d 62 65 72 22 2c 20 74 65 73 74 5f 6c 69  number", test_li
1b2b0 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 2c  bversion_number,
1b2c0 20 30 20 20 7d 2c 0a 23 69 66 64 65 66 20 53 51   0  },.#ifdef SQ
1b2d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
1b2e0 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 20 20 20 20  MN_METADATA.    
1b2f0 20 7b 20 22 73 71 6c 69 74 65 33 5f 74 61 62 6c   { "sqlite3_tabl
1b300 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74  e_column_metadat
1b310 61 22 2c 20 74 65 73 74 5f 74 61 62 6c 65 5f 63  a", test_table_c
1b320 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 2c 20  olumn_metadata, 
1b330 30 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7d  0  },.#endif.  }
1b340 3b 0a 20 20 73 74 61 74 69 63 20 69 6e 74 20 62  ;.  static int b
1b350 69 74 6d 61 73 6b 5f 73 69 7a 65 20 3d 20 73 69  itmask_size = si
1b360 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 3b  zeof(Bitmask)*8;
1b370 0a 20 20 69 6e 74 20 69 3b 0a 20 20 65 78 74 65  .  int i;.  exte
1b380 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f  rn int sqlite3_o
1b390 73 5f 74 72 61 63 65 3b 0a 20 20 65 78 74 65 72  s_trace;.  exter
1b3a0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 68  n int sqlite3_wh
1b3b0 65 72 65 5f 74 72 61 63 65 3b 0a 20 20 65 78 74  ere_trace;.  ext
1b3c0 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
1b3d0 73 79 6e 63 5f 63 6f 75 6e 74 2c 20 73 71 6c 69  sync_count, sqli
1b3e0 74 65 33 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f 75  te3_fullsync_cou
1b3f0 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  nt;.  extern int
1b400 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 74 65 6d   sqlite3_opentem
1b410 70 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72  p_count;.  exter
1b420 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 65  n int sqlite3_me
1b430 6d 55 73 65 64 3b 0a 20 20 65 78 74 65 72 6e 20  mUsed;.  extern 
1b440 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  int sqlite3_mall
1b450 6f 63 5f 69 64 3b 0a 20 20 65 78 74 65 72 6e 20  oc_id;.  extern 
1b460 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 4d  int sqlite3_memM
1b470 61 78 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  ax;.  extern int
1b480 20 73 71 6c 69 74 65 33 5f 6c 69 6b 65 5f 63 6f   sqlite3_like_co
1b490 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  unt;.  extern in
1b4a0 74 20 73 71 6c 69 74 65 33 5f 74 73 64 5f 63 6f  t sqlite3_tsd_co
1b4b0 75 6e 74 3b 0a 23 69 66 20 4f 53 5f 55 4e 49 58  unt;.#if OS_UNIX
1b4c0 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
1b4d0 54 45 5f 54 45 53 54 29 20 26 26 20 64 65 66 69  TE_TEST) && defi
1b4e0 6e 65 64 28 54 48 52 45 41 44 53 41 46 45 29 20  ned(THREADSAFE) 
1b4f0 26 26 20 54 48 52 45 41 44 53 41 46 45 0a 20 20  && THREADSAFE.  
1b500 65 78 74 65 72 6e 20 69 6e 74 20 74 68 72 65 61  extern int threa
1b510 64 73 4f 76 65 72 72 69 64 65 45 61 63 68 4f 74  dsOverrideEachOt
1b520 68 65 72 73 4c 6f 63 6b 73 3b 0a 23 65 6e 64 69  hersLocks;.#endi
1b530 66 0a 23 69 66 20 4f 53 5f 57 49 4e 0a 20 20 65  f.#if OS_WIN.  e
1b540 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
1b550 33 5f 6f 73 5f 74 79 70 65 3b 0a 23 65 6e 64 69  3_os_type;.#endi
1b560 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
1b570 44 45 42 55 47 0a 20 20 65 78 74 65 72 6e 20 69  DEBUG.  extern i
1b580 6e 74 20 73 71 6c 69 74 65 33 5f 76 64 62 65 5f  nt sqlite3_vdbe_
1b590 61 64 64 6f 70 5f 74 72 61 63 65 3b 0a 23 65 6e  addop_trace;.#en
1b5a0 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
1b5b0 45 5f 54 45 53 54 0a 20 20 65 78 74 65 72 6e 20  E_TEST.  extern 
1b5c0 63 68 61 72 20 73 71 6c 69 74 65 33 5f 71 75 65  char sqlite3_que
1b5d0 72 79 5f 70 6c 61 6e 5b 5d 3b 0a 20 20 73 74 61  ry_plan[];.  sta
1b5e0 74 69 63 20 63 68 61 72 20 2a 71 75 65 72 79 5f  tic char *query_
1b5f0 70 6c 61 6e 20 3d 20 73 71 6c 69 74 65 33 5f 71  plan = sqlite3_q
1b600 75 65 72 79 5f 70 6c 61 6e 3b 0a 23 65 6e 64 69  uery_plan;.#endi
1b610 66 0a 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  f..  for(i=0; i<
1b620 73 69 7a 65 6f 66 28 61 43 6d 64 29 2f 73 69 7a  sizeof(aCmd)/siz
1b630 65 6f 66 28 61 43 6d 64 5b 30 5d 29 3b 20 69 2b  eof(aCmd[0]); i+
1b640 2b 29 7b 0a 20 20 20 20 54 63 6c 5f 43 72 65 61  +){.    Tcl_Crea
1b650 74 65 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70  teCommand(interp
1b660 2c 20 61 43 6d 64 5b 69 5d 2e 7a 4e 61 6d 65 2c  , aCmd[i].zName,
1b670 20 61 43 6d 64 5b 69 5d 2e 78 50 72 6f 63 2c 20   aCmd[i].xProc, 
1b680 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 66 6f 72  0, 0);.  }.  for
1b690 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 61  (i=0; i<sizeof(a
1b6a0 4f 62 6a 43 6d 64 29 2f 73 69 7a 65 6f 66 28 61  ObjCmd)/sizeof(a
1b6b0 4f 62 6a 43 6d 64 5b 30 5d 29 3b 20 69 2b 2b 29  ObjCmd[0]); i++)
1b6c0 7b 0a 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65  {.    Tcl_Create
1b6d0 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72  ObjCommand(inter
1b6e0 70 2c 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 7a 4e  p, aObjCmd[i].zN
1b6f0 61 6d 65 2c 20 0a 20 20 20 20 20 20 20 20 61 4f  ame, .        aO
1b700 62 6a 43 6d 64 5b 69 5d 2e 78 50 72 6f 63 2c 20  bjCmd[i].xProc, 
1b710 61 4f 62 6a 43 6d 64 5b 69 5d 2e 63 6c 69 65 6e  aObjCmd[i].clien
1b720 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 7d 0a 20  tData, 0);.  }. 
1b730 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1b740 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 65 61  erp, "sqlite_sea
1b750 72 63 68 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20  rch_count", .   
1b760 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
1b770 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2c  e3_search_count,
1b780 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
1b790 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
1b7a0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 6f  terp, "sqlite_so
1b7b0 72 74 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20  rt_count", .    
1b7c0 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
1b7d0 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2c 20 54 43  3_sort_count, TC
1b7e0 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54  L_LINK_INT);.  T
1b7f0 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
1b800 70 2c 20 22 73 71 6c 69 74 65 5f 6c 69 6b 65 5f  p, "sqlite_like_
1b810 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28  count", .      (
1b820 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6c  char*)&sqlite3_l
1b830 69 6b 65 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c  ike_count, TCL_L
1b840 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
1b850 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
1b860 22 73 71 6c 69 74 65 5f 69 6e 74 65 72 72 75 70  "sqlite_interrup
1b870 74 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20  t_count", .     
1b880 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
1b890 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
1b8a0 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
1b8b0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1b8c0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1b8d0 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 22 2c  pen_file_count",
1b8e0 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26   .      (char*)&
1b8f0 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 66 69 6c  sqlite3_open_fil
1b900 65 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e  e_count, TCL_LIN
1b910 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69  K_INT);.  Tcl_Li
1b920 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
1b930 71 6c 69 74 65 5f 63 75 72 72 65 6e 74 5f 74 69  qlite_current_ti
1b940 6d 65 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61  me", .      (cha
1b950 72 2a 29 26 73 71 6c 69 74 65 33 5f 63 75 72 72  r*)&sqlite3_curr
1b960 65 6e 74 5f 74 69 6d 65 2c 20 54 43 4c 5f 4c 49  ent_time, TCL_LI
1b970 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c  NK_INT);.  Tcl_L
1b980 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
1b990 73 71 6c 69 74 65 5f 6f 73 5f 74 72 61 63 65 22  sqlite_os_trace"
1b9a0 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
1b9b0 73 71 6c 69 74 65 33 5f 6f 73 5f 74 72 61 63 65  sqlite3_os_trace
1b9c0 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
1b9d0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1b9e0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33 5f  nterp, "sqlite3_
1b9f0 74 73 64 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20  tsd_count",.    
1ba00 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
1ba10 33 5f 74 73 64 5f 63 6f 75 6e 74 2c 20 54 43 4c  3_tsd_count, TCL
1ba20 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 69 66 6e  _LINK_INT);.#ifn
1ba30 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1ba40 55 54 46 31 36 0a 20 20 54 63 6c 5f 4c 69 6e 6b  UTF16.  Tcl_Link
1ba50 56 61 72 28 69 6e 74 65 72 70 2c 20 22 75 6e 61  Var(interp, "una
1ba60 6c 69 67 6e 65 64 5f 73 74 72 69 6e 67 5f 63 6f  ligned_string_co
1ba70 75 6e 74 65 72 22 2c 0a 20 20 20 20 20 20 28 63  unter",.      (c
1ba80 68 61 72 2a 29 26 75 6e 61 6c 69 67 6e 65 64 5f  har*)&unaligned_
1ba90 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72 2c 20  string_counter, 
1baa0 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23  TCL_LINK_INT);.#
1bab0 65 6e 64 69 66 0a 23 69 66 20 4f 53 5f 55 4e 49  endif.#if OS_UNI
1bac0 58 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  X && defined(SQL
1bad0 49 54 45 5f 54 45 53 54 29 20 26 26 20 64 65 66  ITE_TEST) && def
1bae0 69 6e 65 64 28 54 48 52 45 41 44 53 41 46 45 29  ined(THREADSAFE)
1baf0 20 26 26 20 54 48 52 45 41 44 53 41 46 45 0a 20   && THREADSAFE. 
1bb00 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1bb10 65 72 70 2c 20 22 74 68 72 65 61 64 73 4f 76 65  erp, "threadsOve
1bb20 72 72 69 64 65 45 61 63 68 4f 74 68 65 72 73 4c  rrideEachOthersL
1bb30 6f 63 6b 73 22 2c 0a 20 20 20 20 20 20 28 63 68  ocks",.      (ch
1bb40 61 72 2a 29 26 74 68 72 65 61 64 73 4f 76 65 72  ar*)&threadsOver
1bb50 72 69 64 65 45 61 63 68 4f 74 68 65 72 73 4c 6f  rideEachOthersLo
1bb60 63 6b 73 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  cks, TCL_LINK_IN
1bb70 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  T);.#endif.#ifnd
1bb80 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
1bb90 54 46 31 36 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  TF16.  Tcl_LinkV
1bba0 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1bbb0 74 65 5f 6c 61 73 74 5f 6e 65 65 64 65 64 5f 63  te_last_needed_c
1bbc0 6f 6c 6c 61 74 69 6f 6e 22 2c 0a 20 20 20 20 20  ollation",.     
1bbd0 20 28 63 68 61 72 2a 29 26 70 7a 4e 65 65 64 65   (char*)&pzNeede
1bbe0 64 43 6f 6c 6c 61 74 69 6f 6e 2c 20 54 43 4c 5f  dCollation, TCL_
1bbf0 4c 49 4e 4b 5f 53 54 52 49 4e 47 7c 54 43 4c 5f  LINK_STRING|TCL_
1bc00 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b  LINK_READ_ONLY);
1bc10 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
1bc20 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20  QLITE_MEMDEBUG. 
1bc30 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1bc40 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d 61 6c  erp, "sqlite_mal
1bc50 6c 6f 63 5f 69 64 22 2c 0a 20 20 20 20 20 20 28  loc_id",.      (
1bc60 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d  char*)&sqlite3_m
1bc70 61 6c 6c 6f 63 5f 69 64 2c 20 54 43 4c 5f 4c 49  alloc_id, TCL_LI
1bc80 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a 23 65 6e 64  NK_STRING);.#end
1bc90 69 66 0a 23 69 66 20 4f 53 5f 57 49 4e 0a 20 20  if.#if OS_WIN.  
1bca0 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1bcb0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 73 5f 74  rp, "sqlite_os_t
1bcc0 79 70 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61  ype",.      (cha
1bcd0 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 73 5f 74  r*)&sqlite3_os_t
1bce0 79 70 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  ype, TCL_LINK_IN
1bcf0 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  T);.#endif.#ifde
1bd00 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1bd10 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1bd20 72 70 2c 20 22 73 71 6c 69 74 65 5f 71 75 65 72  rp, "sqlite_quer
1bd30 79 5f 70 6c 61 6e 22 2c 0a 20 20 20 20 20 20 28  y_plan",.      (
1bd40 63 68 61 72 2a 29 26 71 75 65 72 79 5f 70 6c 61  char*)&query_pla
1bd50 6e 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49  n, TCL_LINK_STRI
1bd60 4e 47 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44  NG|TCL_LINK_READ
1bd70 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23  _ONLY);.#endif.#
1bd80 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1bd90 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  UG.  Tcl_LinkVar
1bda0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1bdb0 5f 61 64 64 6f 70 5f 74 72 61 63 65 22 2c 0a 20  _addop_trace",. 
1bdc0 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
1bdd0 69 74 65 33 5f 76 64 62 65 5f 61 64 64 6f 70 5f  ite3_vdbe_addop_
1bde0 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  trace, TCL_LINK_
1bdf0 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
1be00 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
1be10 69 74 65 5f 77 68 65 72 65 5f 74 72 61 63 65 22  ite_where_trace"
1be20 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
1be30 73 71 6c 69 74 65 33 5f 77 68 65 72 65 5f 74 72  sqlite3_where_tr
1be40 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  ace, TCL_LINK_IN
1be50 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  T);.#endif.#ifde
1be60 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
1be70 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  G.  Tcl_LinkVar(
1be80 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1be90 6d 65 6d 75 73 65 64 22 2c 0a 20 20 20 20 20 20  memused",.      
1bea0 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
1beb0 6d 65 6d 55 73 65 64 2c 20 54 43 4c 5f 4c 49 4e  memUsed, TCL_LIN
1bec0 4b 5f 49 4e 54 20 7c 20 54 43 4c 5f 4c 49 4e 4b  K_INT | TCL_LINK
1bed0 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 20 20 54  _READ_ONLY);.  T
1bee0 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
1bef0 70 2c 20 22 73 71 6c 69 74 65 5f 6d 65 6d 6d 61  p, "sqlite_memma
1bf00 78 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  x",.      (char*
1bf10 29 26 73 71 6c 69 74 65 33 5f 6d 65 6d 4d 61 78  )&sqlite3_memMax
1bf20 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 20 7c  , TCL_LINK_INT |
1bf30 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f   TCL_LINK_READ_O
1bf40 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  NLY);.#endif.#if
1bf50 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1bf60 5f 44 49 53 4b 49 4f 0a 20 20 54 63 6c 5f 4c 69  _DISKIO.  Tcl_Li
1bf70 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
1bf80 71 6c 69 74 65 5f 6f 70 65 6e 74 65 6d 70 5f 63  qlite_opentemp_c
1bf90 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68  ount",.      (ch
1bfa0 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 70 65  ar*)&sqlite3_ope
1bfb0 6e 74 65 6d 70 5f 63 6f 75 6e 74 2c 20 54 43 4c  ntemp_count, TCL
1bfc0 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64  _LINK_INT);.#end
1bfd0 69 66 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  if.  Tcl_LinkVar
1bfe0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1bff0 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c  _static_bind_val
1c000 75 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  ue",.      (char
1c010 2a 29 26 73 71 6c 69 74 65 5f 73 74 61 74 69 63  *)&sqlite_static
1c020 5f 62 69 6e 64 5f 76 61 6c 75 65 2c 20 54 43 4c  _bind_value, TCL
1c030 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a 20  _LINK_STRING);. 
1c040 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1c050 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 74 65 6d  erp, "sqlite_tem
1c060 70 5f 64 69 72 65 63 74 6f 72 79 22 2c 0a 20 20  p_directory",.  
1c070 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
1c080 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
1c090 72 79 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52  ry, TCL_LINK_STR
1c0a0 49 4e 47 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  ING);.  Tcl_Link
1c0b0 56 61 72 28 69 6e 74 65 72 70 2c 20 22 62 69 74  Var(interp, "bit
1c0c0 6d 61 73 6b 5f 73 69 7a 65 22 2c 0a 20 20 20 20  mask_size",.    
1c0d0 20 20 28 63 68 61 72 2a 29 26 62 69 74 6d 61 73    (char*)&bitmas
1c0e0 6b 5f 73 69 7a 65 2c 20 54 43 4c 5f 4c 49 4e 4b  k_size, TCL_LINK
1c0f0 5f 49 4e 54 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45  _INT|TCL_LINK_RE
1c100 41 44 5f 4f 4e 4c 59 29 3b 0a 23 69 66 20 4f 53  AD_ONLY);.#if OS
1c110 5f 55 4e 49 58 0a 20 20 54 63 6c 5f 4c 69 6e 6b  _UNIX.  Tcl_Link
1c120 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
1c130 69 74 65 5f 73 79 6e 63 5f 63 6f 75 6e 74 22 2c  ite_sync_count",
1c140 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1c150 71 6c 69 74 65 33 5f 73 79 6e 63 5f 63 6f 75 6e  qlite3_sync_coun
1c160 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
1c170 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
1c180 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1c190 66 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 22 2c  fullsync_count",
1c1a0 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1c1b0 71 6c 69 74 65 33 5f 66 75 6c 6c 73 79 6e 63 5f  qlite3_fullsync_
1c1c0 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
1c1d0 49 4e 54 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  INT);.#endif /* 
1c1e0 4f 53 5f 55 4e 49 58 20 2a 2f 0a 20 20 73 65 74  OS_UNIX */.  set
1c1f0 5f 6f 70 74 69 6f 6e 73 28 69 6e 74 65 72 70 29  _options(interp)
1c200 3b 0a 0a 20 20 7b 0a 23 69 66 64 65 66 20 53 51  ;..  {.#ifdef SQ
1c210 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 65  LITE_DEBUG.    e
1c220 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
1c230 33 5f 73 68 61 72 65 64 5f 63 61 63 68 65 5f 72  3_shared_cache_r
1c240 65 70 6f 72 74 28 76 6f 69 64 20 2a 2c 20 54 63  eport(void *, Tc
1c250 6c 5f 49 6e 74 65 72 70 20 2a 2c 0a 20 20 20 20  l_Interp *,.    
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c280 69 6e 74 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  int, Tcl_Obj *CO
1c290 4e 53 54 5b 5d 29 3b 0a 20 20 20 20 54 63 6c 5f  NST[]);.    Tcl_
1c2a0 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64  CreateObjCommand
1c2b0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1c2c0 5f 73 68 61 72 65 64 5f 63 61 63 68 65 5f 72 65  _shared_cache_re
1c2d0 70 6f 72 74 22 2c 20 0a 20 20 20 20 20 20 20 20  port", .        
1c2e0 73 71 6c 69 74 65 33 5f 73 68 61 72 65 64 5f 63  sqlite3_shared_c
1c2f0 61 63 68 65 5f 72 65 70 6f 72 74 2c 20 30 2c 20  ache_report, 0, 
1c300 30 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20  0);.#endif.  }. 
1c310 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
1c320 7d 0a                                            }.