/ Hex Artifact Content
Login

Artifact 6021cbcede9bfab986ade678efa7226180f3edff:


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 33 34 20 32 30 30 37 2f 30 34 2f 30   1.234 2007/04/0
0240: 35 20 31 37 3a 33 36 3a 31 39 20 64 72 68 20 45  5 17:36:19 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 2f 2a  rn TCL_OK;.}../*
0710: 0a 2a 2a 20 44 65 63 6f 64 65 20 61 20 70 6f 69  .** Decode a poi
0720: 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
0730: 65 33 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74  e3 object..*/.st
0740: 61 74 69 63 20 69 6e 74 20 67 65 74 44 62 50 6f  atic int getDbPo
0750: 69 6e 74 65 72 28 54 63 6c 5f 49 6e 74 65 72 70  inter(Tcl_Interp
0760: 20 2a 69 6e 74 65 72 70 2c 20 63 6f 6e 73 74 20   *interp, const 
0770: 63 68 61 72 20 2a 7a 41 2c 20 73 71 6c 69 74 65  char *zA, sqlite
0780: 33 20 2a 2a 70 70 44 62 29 7b 0a 20 20 73 74 72  3 **ppDb){.  str
0790: 75 63 74 20 53 71 6c 69 74 65 44 62 20 2a 70 3b  uct SqliteDb *p;
07a0: 0a 20 20 54 63 6c 5f 43 6d 64 49 6e 66 6f 20 63  .  Tcl_CmdInfo c
07b0: 6d 64 49 6e 66 6f 3b 0a 20 20 69 66 28 20 54 63  mdInfo;.  if( Tc
07c0: 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64 49 6e 66 6f  l_GetCommandInfo
07d0: 28 69 6e 74 65 72 70 2c 20 7a 41 2c 20 26 63 6d  (interp, zA, &cm
07e0: 64 49 6e 66 6f 29 20 29 7b 0a 20 20 20 20 70 20  dInfo) ){.    p 
07f0: 3d 20 28 73 74 72 75 63 74 20 53 71 6c 69 74 65  = (struct Sqlite
0800: 44 62 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62 6a 43  Db*)cmdInfo.objC
0810: 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 20 20 2a  lientData;.    *
0820: 70 70 44 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20  ppDb = p->db;.  
0830: 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 70 70 44 62  }else{.    *ppDb
0840: 20 3d 20 28 73 71 6c 69 74 65 33 2a 29 73 71 6c   = (sqlite3*)sql
0850: 69 74 65 33 54 65 78 74 54 6f 50 74 72 28 7a 41  ite3TextToPtr(zA
0860: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
0870: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 63 6f 6e 73  TCL_OK;.}...cons
0880: 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 54  t char *sqlite3T
0890: 65 73 74 45 72 72 6f 72 4e 61 6d 65 28 69 6e 74  estErrorName(int
08a0: 20 72 63 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68   rc){.  const ch
08b0: 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 30 3b 0a 20  ar *zName = 0;. 
08c0: 20 73 77 69 74 63 68 28 20 72 63 20 26 20 30 78   switch( rc & 0x
08d0: 66 66 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53  ff ){.    case S
08e0: 51 4c 49 54 45 5f 4f 4b 3a 20 20 20 20 20 20 20  QLITE_OK:       
08f0: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
0900: 45 5f 4f 4b 22 3b 20 20 20 20 20 20 20 20 20 20  E_OK";          
0910: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0920: 53 51 4c 49 54 45 5f 45 52 52 4f 52 3a 20 20 20  SQLITE_ERROR:   
0930: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0940: 54 45 5f 45 52 52 4f 52 22 3b 20 20 20 20 20 20  TE_ERROR";      
0950: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
0960: 20 53 51 4c 49 54 45 5f 50 45 52 4d 3a 20 20 20   SQLITE_PERM:   
0970: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
0980: 49 54 45 5f 50 45 52 4d 22 3b 20 20 20 20 20 20  ITE_PERM";      
0990: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
09a0: 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3a 20  e SQLITE_ABORT: 
09b0: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
09c0: 4c 49 54 45 5f 41 42 4f 52 54 22 3b 20 20 20 20  LITE_ABORT";    
09d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
09e0: 73 65 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20  se SQLITE_BUSY: 
09f0: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
0a00: 51 4c 49 54 45 5f 42 55 53 59 22 3b 20 20 20 20  QLITE_BUSY";    
0a10: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
0a20: 61 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  ase SQLITE_LOCKE
0a30: 44 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22  D:     zName = "
0a40: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 22 3b 20  SQLITE_LOCKED"; 
0a50: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
0a60: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  case SQLITE_NOME
0a70: 4d 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  M:      zName = 
0a80: 22 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 22 3b 20  "SQLITE_NOMEM"; 
0a90: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
0aa0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 45 41   case SQLITE_REA
0ab0: 44 4f 4e 4c 59 3a 20 20 20 7a 4e 61 6d 65 20 3d  DONLY:   zName =
0ac0: 20 22 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c   "SQLITE_READONL
0ad0: 59 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  Y";    break;.  
0ae0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e    case SQLITE_IN
0af0: 54 45 52 52 55 50 54 3a 20 20 7a 4e 61 6d 65 20  TERRUPT:  zName 
0b00: 3d 20 22 53 51 4c 49 54 45 5f 49 4e 54 45 52 52  = "SQLITE_INTERR
0b10: 55 50 54 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20  UPT";   break;. 
0b20: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49     case SQLITE_I
0b30: 4f 45 52 52 3a 20 20 20 20 20 20 7a 4e 61 6d 65  OERR:      zName
0b40: 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52   = "SQLITE_IOERR
0b50: 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ";       break;.
0b60: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
0b70: 43 4f 52 52 55 50 54 3a 20 20 20 20 7a 4e 61 6d  CORRUPT:    zNam
0b80: 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f 52 52  e = "SQLITE_CORR
0b90: 55 50 54 22 3b 20 20 20 20 20 62 72 65 61 6b 3b  UPT";     break;
0ba0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0bb0: 5f 46 55 4c 4c 3a 20 20 20 20 20 20 20 7a 4e 61  _FULL:       zNa
0bc0: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 46 55 4c  me = "SQLITE_FUL
0bd0: 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  L";        break
0be0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0bf0: 45 5f 43 41 4e 54 4f 50 45 4e 3a 20 20 20 7a 4e  E_CANTOPEN:   zN
0c00: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 41  ame = "SQLITE_CA
0c10: 4e 54 4f 50 45 4e 22 3b 20 20 20 20 62 72 65 61  NTOPEN";    brea
0c20: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
0c30: 54 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20 20 7a  TE_PROTOCOL:   z
0c40: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 50  Name = "SQLITE_P
0c50: 52 4f 54 4f 43 4f 4c 22 3b 20 20 20 20 62 72 65  ROTOCOL";    bre
0c60: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
0c70: 49 54 45 5f 45 4d 50 54 59 3a 20 20 20 20 20 20  ITE_EMPTY:      
0c80: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
0c90: 45 4d 50 54 59 22 3b 20 20 20 20 20 20 20 62 72  EMPTY";       br
0ca0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0cb0: 4c 49 54 45 5f 53 43 48 45 4d 41 3a 20 20 20 20  LITE_SCHEMA:    
0cc0: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0cd0: 5f 53 43 48 45 4d 41 22 3b 20 20 20 20 20 20 62  _SCHEMA";      b
0ce0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
0cf0: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
0d00: 3a 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54  : zName = "SQLIT
0d10: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 22 3b 20 20  E_CONSTRAINT";  
0d20: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0d30: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3a  SQLITE_MISMATCH:
0d40: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0d50: 54 45 5f 4d 49 53 4d 41 54 43 48 22 3b 20 20 20  TE_MISMATCH";   
0d60: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
0d70: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3a 20   SQLITE_MISUSE: 
0d80: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
0d90: 49 54 45 5f 4d 49 53 55 53 45 22 3b 20 20 20 20  ITE_MISUSE";    
0da0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0db0: 65 20 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 3a 20  e SQLITE_NOLFS: 
0dc0: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
0dd0: 4c 49 54 45 5f 4e 4f 4c 46 53 22 3b 20 20 20 20  LITE_NOLFS";    
0de0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
0df0: 73 65 20 53 51 4c 49 54 45 5f 41 55 54 48 3a 20  se SQLITE_AUTH: 
0e00: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
0e10: 51 4c 49 54 45 5f 41 55 54 48 22 3b 20 20 20 20  QLITE_AUTH";    
0e20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
0e30: 61 73 65 20 53 51 4c 49 54 45 5f 46 4f 52 4d 41  ase SQLITE_FORMA
0e40: 54 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22  T:     zName = "
0e50: 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 22 3b 20  SQLITE_FORMAT"; 
0e60: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
0e70: 63 61 73 65 20 53 51 4c 49 54 45 5f 52 41 4e 47  case SQLITE_RANG
0e80: 45 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  E:      zName = 
0e90: 22 53 51 4c 49 54 45 5f 52 41 4e 47 45 22 3b 20  "SQLITE_RANGE"; 
0ea0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
0eb0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 4f 57   case SQLITE_ROW
0ec0: 3a 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d  :        zName =
0ed0: 20 22 53 51 4c 49 54 45 5f 52 4f 57 22 3b 20 20   "SQLITE_ROW";  
0ee0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
0ef0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 44 4f    case SQLITE_DO
0f00: 4e 45 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  NE:       zName 
0f10: 3d 20 22 53 51 4c 49 54 45 5f 44 4f 4e 45 22 3b  = "SQLITE_DONE";
0f20: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
0f30: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e     case SQLITE_N
0f40: 4f 54 41 44 42 3a 20 20 20 20 20 7a 4e 61 6d 65  OTADB:     zName
0f50: 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 54 41 44   = "SQLITE_NOTAD
0f60: 42 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  B";      break;.
0f70: 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20      default:    
0f80: 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d              zNam
0f90: 65 20 3d 20 22 53 51 4c 49 54 45 5f 55 6e 6b 6e  e = "SQLITE_Unkn
0fa0: 6f 77 6e 22 3b 20 20 20 20 20 62 72 65 61 6b 3b  own";     break;
0fb0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e  .  }.  return zN
0fc0: 61 6d 65 3b 0a 7d 0a 23 64 65 66 69 6e 65 20 74  ame;.}.#define t
0fd0: 31 45 72 72 6f 72 4e 61 6d 65 20 73 71 6c 69 74  1ErrorName sqlit
0fe0: 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65 0a  e3TestErrorName.
0ff0: 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61  ./*.** Convert a
1000: 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 20  n sqlite3_stmt* 
1010: 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2a  into an sqlite3*
1020: 2e 20 20 54 68 69 73 20 64 65 70 65 6e 64 73 20  .  This depends 
1030: 6f 6e 20 74 68 65 0a 2a 2a 20 66 61 63 74 20 74  on the.** fact t
1040: 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33 2a  hat the sqlite3*
1050: 20 69 73 20 74 68 65 20 66 69 72 73 74 20 66 69   is the first fi
1060: 65 6c 64 20 69 6e 20 74 68 65 20 56 64 62 65 20  eld in the Vdbe 
1070: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 23 64  structure..*/.#d
1080: 65 66 69 6e 65 20 53 74 6d 74 54 6f 44 62 28 58  efine StmtToDb(X
1090: 29 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 68  )   sqlite3_db_h
10a0: 61 6e 64 6c 65 28 58 29 0a 0a 2f 2a 0a 2a 2a 20  andle(X)../*.** 
10b0: 43 68 65 63 6b 20 61 20 72 65 74 75 72 6e 20 76  Check a return v
10c0: 61 6c 75 65 20 74 6f 20 6d 61 6b 65 20 73 75 72  alue to make sur
10d0: 65 20 69 74 20 61 67 72 65 65 73 20 77 69 74 68  e it agrees with
10e0: 20 74 68 65 20 72 65 73 75 6c 74 73 0a 2a 2a 20   the results.** 
10f0: 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 65 72 72  from sqlite3_err
1100: 63 6f 64 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  code..*/.int sql
1110: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
1120: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
1130: 72 70 2c 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  rp, sqlite3 *db,
1140: 20 69 6e 74 20 72 63 29 7b 0a 20 20 69 66 28 20   int rc){.  if( 
1150: 72 63 21 3d 53 51 4c 49 54 45 5f 4d 49 53 55 53  rc!=SQLITE_MISUS
1160: 45 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f  E && rc!=SQLITE_
1170: 4f 4b 20 26 26 20 73 71 6c 69 74 65 33 5f 65 72  OK && sqlite3_er
1180: 72 63 6f 64 65 28 64 62 29 21 3d 72 63 20 29 7b  rcode(db)!=rc ){
1190: 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32  .    char zBuf[2
11a0: 30 30 5d 3b 0a 20 20 20 20 69 6e 74 20 72 32 20  00];.    int r2 
11b0: 3d 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  = sqlite3_errcod
11c0: 65 28 64 62 29 3b 0a 20 20 20 20 73 70 72 69 6e  e(db);.    sprin
11d0: 74 66 28 7a 42 75 66 2c 20 22 65 72 72 6f 72 20  tf(zBuf, "error 
11e0: 63 6f 64 65 20 25 73 20 28 25 64 29 20 64 6f 65  code %s (%d) doe
11f0: 73 20 6e 6f 74 20 6d 61 74 63 68 20 73 71 6c 69  s not match sqli
1200: 74 65 33 5f 65 72 72 63 6f 64 65 20 25 73 20 28  te3_errcode %s (
1210: 25 64 29 22 2c 0a 20 20 20 20 20 20 20 74 31 45  %d)",.       t1E
1220: 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 72 63  rrorName(rc), rc
1230: 2c 20 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 32  , t1ErrorName(r2
1240: 29 2c 20 72 32 29 3b 0a 20 20 20 20 54 63 6c 5f  ), r2);.    Tcl_
1250: 52 65 73 65 74 52 65 73 75 6c 74 28 69 6e 74 65  ResetResult(inte
1260: 72 70 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70  rp);.    Tcl_App
1270: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
1280: 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 20 20  , zBuf, 0);.    
1290: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20  return 1;.  }.  
12a0: 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a  return 0;.}../*.
12b0: 2a 2a 20 44 65 63 6f 64 65 20 61 20 70 6f 69 6e  ** Decode a poin
12c0: 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
12d0: 33 5f 73 74 6d 74 20 6f 62 6a 65 63 74 2e 0a 2a  3_stmt object..*
12e0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74  /.static int get
12f0: 53 74 6d 74 50 6f 69 6e 74 65 72 28 0a 20 20 54  StmtPointer(.  T
1300: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1310: 70 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  p, .  const char
1320: 20 2a 7a 41 72 67 2c 20 20 0a 20 20 73 71 6c 69   *zArg,  .  sqli
1330: 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53 74 6d  te3_stmt **ppStm
1340: 74 0a 29 7b 0a 20 20 2a 70 70 53 74 6d 74 20 3d  t.){.  *ppStmt =
1350: 20 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29   (sqlite3_stmt*)
1360: 73 71 6c 69 74 65 33 54 65 78 74 54 6f 50 74 72  sqlite3TextToPtr
1370: 28 7a 41 72 67 29 3b 0a 20 20 72 65 74 75 72 6e  (zArg);.  return
1380: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
1390: 2a 20 44 65 63 6f 64 65 20 61 20 70 6f 69 6e 74  * Decode a point
13a0: 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
13b0: 5f 73 74 6d 74 20 6f 62 6a 65 63 74 2e 0a 2a 2f  _stmt object..*/
13c0: 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 46  .static int getF
13d0: 69 6c 65 50 6f 69 6e 74 65 72 28 0a 20 20 54 63  ilePointer(.  Tc
13e0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
13f0: 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  , .  const char 
1400: 2a 7a 41 72 67 2c 20 20 0a 20 20 4f 73 46 69 6c  *zArg,  .  OsFil
1410: 65 20 2a 2a 70 70 46 69 6c 65 0a 29 7b 0a 20 20  e **ppFile.){.  
1420: 2a 70 70 46 69 6c 65 20 3d 20 28 4f 73 46 69 6c  *ppFile = (OsFil
1430: 65 2a 29 73 71 6c 69 74 65 33 54 65 78 74 54 6f  e*)sqlite3TextTo
1440: 50 74 72 28 7a 41 72 67 29 3b 0a 20 20 72 65 74  Ptr(zArg);.  ret
1450: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
1460: 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 20  *.** Generate a 
1470: 74 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74  text representat
1480: 69 6f 6e 20 6f 66 20 61 20 70 6f 69 6e 74 65 72  ion of a pointer
1490: 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 6e 64   that can be und
14a0: 65 72 73 74 6f 6f 64 0a 2a 2a 20 62 79 20 74 68  erstood.** by th
14b0: 65 20 67 65 74 44 62 50 6f 69 6e 74 65 72 20 61  e getDbPointer a
14c0: 6e 64 20 67 65 74 56 6d 50 6f 69 6e 74 65 72 20  nd getVmPointer 
14d0: 72 6f 75 74 69 6e 65 73 20 61 62 6f 76 65 2e 0a  routines above..
14e0: 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 6f 62 6c 65  **.** The proble
14f0: 6d 20 69 73 2c 20 6f 6e 20 73 6f 6d 65 20 6d 61  m is, on some ma
1500: 63 68 69 6e 65 73 20 28 53 6f 6c 61 72 69 73 29  chines (Solaris)
1510: 20 69 66 20 79 6f 75 20 64 6f 20 61 20 70 72 69   if you do a pri
1520: 6e 74 66 20 77 69 74 68 0a 2a 2a 20 22 25 70 22  ntf with.** "%p"
1530: 20 79 6f 75 20 63 61 6e 6e 6f 74 20 74 75 72 6e   you cannot turn
1540: 20 61 72 6f 75 6e 64 20 61 6e 64 20 64 6f 20 61   around and do a
1550: 20 73 63 61 6e 66 20 77 69 74 68 20 74 68 65 20   scanf with the 
1560: 73 61 6d 65 20 22 25 70 22 20 61 6e 64 0a 2a 2a  same "%p" and.**
1570: 20 67 65 74 20 79 6f 75 72 20 70 6f 69 6e 74 65   get your pointe
1580: 72 20 62 61 63 6b 2e 20 20 59 6f 75 20 68 61 76  r back.  You hav
1590: 65 20 74 6f 20 70 72 65 70 65 6e 64 20 61 20 22  e to prepend a "
15a0: 30 78 22 20 62 65 66 6f 72 65 20 69 74 20 77 69  0x" before it wi
15b0: 6c 6c 0a 2a 2a 20 77 6f 72 6b 2e 20 20 4f 72 20  ll.** work.  Or 
15c0: 61 74 20 6c 65 61 73 74 20 74 68 61 74 20 69 73  at least that is
15d0: 20 77 68 61 74 20 69 73 20 72 65 70 6f 72 74 65   what is reporte
15e0: 64 20 74 6f 20 6d 65 20 28 64 72 68 29 2e 20 20  d to me (drh).  
15f0: 42 75 74 20 74 68 69 73 0a 2a 2a 20 62 65 68 61  But this.** beha
1600: 76 69 6f 72 20 76 61 72 69 65 73 20 66 72 6f 6d  vior varies from
1610: 20 6d 61 63 68 69 6e 65 20 74 6f 20 6d 61 63 68   machine to mach
1620: 69 6e 65 2e 20 20 54 68 65 20 73 6f 6c 75 74 69  ine.  The soluti
1630: 6f 6e 20 75 73 65 64 20 68 65 72 20 69 73 0a 2a  on used her is.*
1640: 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20 73 74  * to test the st
1650: 72 69 6e 67 20 72 69 67 68 74 20 61 66 74 65 72  ring right after
1660: 20 69 74 20 69 73 20 67 65 6e 65 72 61 74 65 64   it is generated
1670: 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 63 61   to see if it ca
1680: 6e 20 62 65 0a 2a 2a 20 75 6e 64 65 72 73 74 6f  n be.** understo
1690: 6f 64 20 62 79 20 73 63 61 6e 66 2c 20 61 6e 64  od by scanf, and
16a0: 20 69 66 20 6e 6f 74 2c 20 74 72 79 20 70 72 65   if not, try pre
16b0: 70 65 6e 64 69 6e 67 20 61 6e 20 22 30 78 22 20  pending an "0x" 
16c0: 74 6f 20 73 65 65 20 69 66 0a 2a 2a 20 74 68 61  to see if.** tha
16d0: 74 20 68 65 6c 70 73 2e 20 20 49 66 20 6e 6f 74  t helps.  If not
16e0: 68 69 6e 67 20 77 6f 72 6b 73 2c 20 61 20 66 61  hing works, a fa
16f0: 74 61 6c 20 65 72 72 6f 72 20 69 73 20 67 65 6e  tal error is gen
1700: 65 72 61 74 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  erated..*/.int s
1710: 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
1720: 69 6e 74 65 72 53 74 72 28 54 63 6c 5f 49 6e 74  interStr(Tcl_Int
1730: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 63 68 61  erp *interp, cha
1740: 72 20 2a 7a 50 74 72 2c 20 76 6f 69 64 20 2a 70  r *zPtr, void *p
1750: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  ){.  sqlite3_snp
1760: 72 69 6e 74 66 28 31 30 30 2c 20 7a 50 74 72 2c  rintf(100, zPtr,
1770: 20 22 25 70 22 2c 20 70 29 3b 0a 20 20 72 65 74   "%p", p);.  ret
1780: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
1790: 2a 0a 2a 2a 20 54 68 65 20 63 61 6c 6c 62 61 63  *.** The callbac
17a0: 6b 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 73 71  k routine for sq
17b0: 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74  lite3_exec_print
17c0: 66 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  f()..*/.static i
17d0: 6e 74 20 65 78 65 63 5f 70 72 69 6e 74 66 5f 63  nt exec_printf_c
17e0: 62 28 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e  b(void *pArg, in
17f0: 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61  t argc, char **a
1800: 72 67 76 2c 20 63 68 61 72 20 2a 2a 6e 61 6d 65  rgv, char **name
1810: 29 7b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  ){.  Tcl_DString
1820: 20 2a 73 74 72 20 3d 20 28 54 63 6c 5f 44 53 74   *str = (Tcl_DSt
1830: 72 69 6e 67 2a 29 70 41 72 67 3b 0a 20 20 69 6e  ring*)pArg;.  in
1840: 74 20 69 3b 0a 0a 20 20 69 66 28 20 54 63 6c 5f  t i;..  if( Tcl_
1850: 44 53 74 72 69 6e 67 4c 65 6e 67 74 68 28 73 74  DStringLength(st
1860: 72 29 3d 3d 30 20 29 7b 0a 20 20 20 20 66 6f 72  r)==0 ){.    for
1870: 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b  (i=0; i<argc; i+
1880: 2b 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 44 53  +){.      Tcl_DS
1890: 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65 6d 65  tringAppendEleme
18a0: 6e 74 28 73 74 72 2c 20 6e 61 6d 65 5b 69 5d 20  nt(str, name[i] 
18b0: 3f 20 6e 61 6d 65 5b 69 5d 20 3a 20 22 4e 55 4c  ? name[i] : "NUL
18c0: 4c 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  L");.    }.  }. 
18d0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63   for(i=0; i<argc
18e0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f  ; i++){.    Tcl_
18f0: 44 53 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65  DStringAppendEle
1900: 6d 65 6e 74 28 73 74 72 2c 20 61 72 67 76 5b 69  ment(str, argv[i
1910: 5d 20 3f 20 61 72 67 76 5b 69 5d 20 3a 20 22 4e  ] ? argv[i] : "N
1920: 55 4c 4c 22 29 3b 0a 20 20 7d 0a 20 20 72 65 74  ULL");.  }.  ret
1930: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
1940: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
1950: 65 78 65 63 5f 70 72 69 6e 74 66 20 20 44 42 20  exec_printf  DB 
1960: 20 46 4f 52 4d 41 54 20 20 53 54 52 49 4e 47 0a   FORMAT  STRING.
1970: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  **.** Invoke the
1980: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 5f 70 72   sqlite3_exec_pr
1990: 69 6e 74 66 28 29 20 69 6e 74 65 72 66 61 63 65  intf() interface
19a0: 20 75 73 69 6e 67 20 74 68 65 20 6f 70 65 6e 20   using the open 
19b0: 64 61 74 61 62 61 73 65 0a 2a 2a 20 44 42 2e 20  database.** DB. 
19c0: 20 54 68 65 20 53 51 4c 20 69 73 20 74 68 65 20   The SQL is the 
19d0: 73 74 72 69 6e 67 20 46 4f 52 4d 41 54 2e 20 20  string FORMAT.  
19e0: 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e  The format strin
19f0: 67 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e  g should contain
1a00: 0a 2a 2a 20 6f 6e 65 20 25 73 20 6f 72 20 25 71  .** one %s or %q
1a10: 2e 20 20 53 54 52 49 4e 47 20 69 73 20 74 68 65  .  STRING is the
1a20: 20 76 61 6c 75 65 20 69 6e 73 65 72 74 65 64 20   value inserted 
1a30: 69 6e 74 6f 20 25 73 20 6f 72 20 25 71 2e 0a 2a  into %s or %q..*
1a40: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
1a50: 74 5f 65 78 65 63 5f 70 72 69 6e 74 66 28 0a 20  t_exec_printf(. 
1a60: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
1a70: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
1a80: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
1a90: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
1aa0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
1ab0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
1ac0: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
1ad0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1ae0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
1af0: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
1b00: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
1b10: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
1b20: 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  t */.){.  sqlite
1b30: 33 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53 74  3 *db;.  Tcl_DSt
1b40: 72 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74 20  ring str;.  int 
1b50: 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72  rc;.  char *zErr
1b60: 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 53   = 0;.  char *zS
1b70: 71 6c 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b  ql;.  char zBuf[
1b80: 33 30 5d 3b 0a 20 20 69 66 28 20 61 72 67 63 21  30];.  if( argc!
1b90: 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =4 ){.    Tcl_Ap
1ba0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
1bb0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
1bc0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
1bd0: 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
1be0: 20 20 22 20 44 42 20 46 4f 52 4d 41 54 20 53 54    " DB FORMAT ST
1bf0: 52 49 4e 47 22 2c 20 30 29 3b 0a 20 20 20 20 72  RING", 0);.    r
1c00: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1c10: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
1c20: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
1c30: 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
1c40: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1c50: 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 49  ;.  Tcl_DStringI
1c60: 6e 69 74 28 26 73 74 72 29 3b 0a 20 20 7a 53 71  nit(&str);.  zSq
1c70: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  l = sqlite3_mpri
1c80: 6e 74 66 28 61 72 67 76 5b 32 5d 2c 20 61 72 67  ntf(argv[2], arg
1c90: 76 5b 33 5d 29 3b 0a 20 20 72 63 20 3d 20 73 71  v[3]);.  rc = sq
1ca0: 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a  lite3_exec(db, z
1cb0: 53 71 6c 2c 20 65 78 65 63 5f 70 72 69 6e 74 66  Sql, exec_printf
1cc0: 5f 63 62 2c 20 26 73 74 72 2c 20 26 7a 45 72 72  _cb, &str, &zErr
1cd0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
1ce0: 65 28 7a 53 71 6c 29 3b 0a 20 20 73 70 72 69 6e  e(zSql);.  sprin
1cf0: 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 72  tf(zBuf, "%d", r
1d00: 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  c);.  Tcl_Append
1d10: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
1d20: 7a 42 75 66 29 3b 0a 20 20 54 63 6c 5f 41 70 70  zBuf);.  Tcl_App
1d30: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
1d40: 70 2c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p, rc==SQLITE_OK
1d50: 20 3f 20 54 63 6c 5f 44 53 74 72 69 6e 67 56 61   ? Tcl_DStringVa
1d60: 6c 75 65 28 26 73 74 72 29 20 3a 20 7a 45 72 72  lue(&str) : zErr
1d70: 29 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  );.  Tcl_DString
1d80: 46 72 65 65 28 26 73 74 72 29 3b 0a 20 20 69 66  Free(&str);.  if
1d90: 28 20 7a 45 72 72 20 29 20 73 71 6c 69 74 65 33  ( zErr ) sqlite3
1da0: 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 69  _free(zErr);.  i
1db0: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
1dc0: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
1dd0: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
1de0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75  CL_ERROR;.  retu
1df0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
1e00: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
1e10: 74 65 33 5f 65 78 65 63 20 20 44 42 20 20 53 51  te3_exec  DB  SQ
1e20: 4c 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  L.**.** Invoke t
1e30: 68 65 20 73 71 6c 69 74 65 33 5f 65 78 65 63 20  he sqlite3_exec 
1e40: 69 6e 74 65 72 66 61 63 65 20 75 73 69 6e 67 20  interface using 
1e50: 74 68 65 20 6f 70 65 6e 20 64 61 74 61 62 61 73  the open databas
1e60: 65 20 44 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69  e DB.*/.static i
1e70: 6e 74 20 74 65 73 74 5f 65 78 65 63 28 0a 20 20  nt test_exec(.  
1e80: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
1e90: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
1ea0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
1eb0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
1ec0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
1ed0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
1ee0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
1ef0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f00: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
1f10: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
1f20: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
1f30: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
1f40: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
1f50: 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53 74 72   *db;.  Tcl_DStr
1f60: 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74 20 72  ing str;.  int r
1f70: 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20  c;.  char *zErr 
1f80: 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 42 75 66  = 0;.  char zBuf
1f90: 5b 33 30 5d 3b 0a 20 20 69 66 28 20 61 72 67 63  [30];.  if( argc
1fa0: 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
1fb0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
1fc0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
1fd0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
1fe0: 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20  , argv[0], .    
1ff0: 20 20 20 22 20 44 42 20 53 51 4c 22 2c 20 30 29     " DB SQL", 0)
2000: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
2010: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
2020: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
2030: 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
2040: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
2050: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 44  L_ERROR;.  Tcl_D
2060: 53 74 72 69 6e 67 49 6e 69 74 28 26 73 74 72 29  StringInit(&str)
2070: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2080: 5f 65 78 65 63 28 64 62 2c 20 61 72 67 76 5b 32  _exec(db, argv[2
2090: 5d 2c 20 65 78 65 63 5f 70 72 69 6e 74 66 5f 63  ], exec_printf_c
20a0: 62 2c 20 26 73 74 72 2c 20 26 7a 45 72 72 29 3b  b, &str, &zErr);
20b0: 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c  .  sprintf(zBuf,
20c0: 20 22 25 64 22 2c 20 72 63 29 3b 0a 20 20 54 63   "%d", rc);.  Tc
20d0: 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  l_AppendElement(
20e0: 69 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20  interp, zBuf);. 
20f0: 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65   Tcl_AppendEleme
2100: 6e 74 28 69 6e 74 65 72 70 2c 20 72 63 3d 3d 53  nt(interp, rc==S
2110: 51 4c 49 54 45 5f 4f 4b 20 3f 20 54 63 6c 5f 44  QLITE_OK ? Tcl_D
2120: 53 74 72 69 6e 67 56 61 6c 75 65 28 26 73 74 72  StringValue(&str
2130: 29 20 3a 20 7a 45 72 72 29 3b 0a 20 20 54 63 6c  ) : zErr);.  Tcl
2140: 5f 44 53 74 72 69 6e 67 46 72 65 65 28 26 73 74  _DStringFree(&st
2150: 72 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29  r);.  if( zErr )
2160: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45   sqlite3_free(zE
2170: 72 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  rr);.  if( sqlit
2180: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
2190: 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20  terp, db, rc) ) 
21a0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
21b0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
21c0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
21d0: 65 3a 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63  e:  sqlite3_exec
21e0: 5f 6e 72 20 20 44 42 20 20 53 51 4c 0a 2a 2a 0a  _nr  DB  SQL.**.
21f0: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 73 71  ** Invoke the sq
2200: 6c 69 74 65 33 5f 65 78 65 63 20 69 6e 74 65 72  lite3_exec inter
2210: 66 61 63 65 20 75 73 69 6e 67 20 74 68 65 20 6f  face using the o
2220: 70 65 6e 20 64 61 74 61 62 61 73 65 20 44 42 2e  pen database DB.
2230: 20 20 44 69 73 63 61 72 64 0a 2a 2a 20 61 6c 6c    Discard.** all
2240: 20 72 65 73 75 6c 74 73 0a 2a 2f 0a 73 74 61 74   results.*/.stat
2250: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 78 65 63  ic int test_exec
2260: 5f 6e 72 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  _nr(.  void *Not
2270: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
2280: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
2290: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
22a0: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
22b0: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
22c0: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
22d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
22e0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
22f0: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
2300: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
2310: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
2320: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
2330: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
2340: 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a  nt rc;.  char *z
2350: 45 72 72 20 3d 20 30 3b 0a 20 20 69 66 28 20 61  Err = 0;.  if( a
2360: 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  rgc!=3 ){.    Tc
2370: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
2380: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
2390: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
23a0: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20  \"", argv[0], . 
23b0: 20 20 20 20 20 20 22 20 44 42 20 53 51 4c 22 2c        " DB SQL",
23c0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
23d0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
23e0: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
23f0: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
2400: 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
2410: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63   TCL_ERROR;.  rc
2420: 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
2430: 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 30 2c 20  db, argv[2], 0, 
2440: 30 2c 20 26 7a 45 72 72 29 3b 0a 20 20 69 66 28  0, &zErr);.  if(
2450: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
2460: 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
2470: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
2480: 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e  _ERROR;.  return
2490: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
24a0: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
24b0: 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f 74 65 73 74  3_mprintf_z_test
24c0: 20 20 53 45 50 41 52 41 54 4f 52 20 20 41 52 47    SEPARATOR  ARG
24d0: 30 20 20 41 52 47 31 20 2e 2e 2e 0a 2a 2a 0a 2a  0  ARG1 ....**.*
24e0: 2a 20 54 65 73 74 20 74 68 65 20 25 7a 20 66 6f  * Test the %z fo
24f0: 72 6d 61 74 20 6f 66 20 73 71 6c 69 74 65 4d 50  rmat of sqliteMP
2500: 72 69 6e 74 66 28 29 2e 20 20 55 73 65 20 6d 75  rintf().  Use mu
2510: 6c 74 69 70 6c 65 20 6d 70 72 69 6e 74 66 28 29  ltiple mprintf()
2520: 20 63 61 6c 6c 73 20 74 6f 20 0a 2a 2a 20 63 6f   calls to .** co
2530: 6e 63 61 74 65 6e 61 74 65 20 61 72 67 30 20 74  ncatenate arg0 t
2540: 68 72 6f 75 67 68 20 61 72 67 6e 20 75 73 69 6e  hrough argn usin
2550: 67 20 73 65 70 61 72 61 74 6f 72 20 61 73 20 74  g separator as t
2560: 68 65 20 73 65 70 61 72 61 74 6f 72 2e 0a 2a 2a  he separator..**
2570: 20 52 65 74 75 72 6e 20 74 68 65 20 72 65 73 75   Return the resu
2580: 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  lt..*/.static in
2590: 74 20 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f 7a  t test_mprintf_z
25a0: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
25b0: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
25c0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
25d0: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
25e0: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
25f0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
2600: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
2610: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
2620: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
2630: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
2640: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2650: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
2660: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61  ment */.){.  cha
2670: 72 20 2a 7a 52 65 73 75 6c 74 20 3d 20 30 3b 0a  r *zResult = 0;.
2680: 20 20 69 6e 74 20 69 3b 0a 0a 20 20 66 6f 72 28    int i;..  for(
2690: 69 3d 32 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b  i=2; i<argc; i++
26a0: 29 7b 0a 20 20 20 20 7a 52 65 73 75 6c 74 20 3d  ){.    zResult =
26b0: 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
26c0: 22 25 7a 25 73 25 73 22 2c 20 7a 52 65 73 75 6c  "%z%s%s", zResul
26d0: 74 2c 20 61 72 67 76 5b 31 5d 2c 20 61 72 67 76  t, argv[1], argv
26e0: 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  [i]);.  }.  Tcl_
26f0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
2700: 65 72 70 2c 20 7a 52 65 73 75 6c 74 2c 20 30 29  erp, zResult, 0)
2710: 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a  ;.  sqliteFree(z
2720: 52 65 73 75 6c 74 29 3b 0a 20 20 72 65 74 75 72  Result);.  retur
2730: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
2740: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
2750: 65 33 5f 6d 70 72 69 6e 74 66 5f 6e 5f 74 65 73  e3_mprintf_n_tes
2760: 74 20 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20  t  STRING.**.** 
2770: 54 65 73 74 20 74 68 65 20 25 6e 20 66 6f 72 6d  Test the %n form
2780: 61 74 20 6f 66 20 73 71 6c 69 74 65 4d 50 72 69  at of sqliteMPri
2790: 6e 74 66 28 29 2e 20 20 52 65 74 75 72 6e 20 74  ntf().  Return t
27a0: 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
27b0: 0a 2a 2a 20 69 6e 70 75 74 20 73 74 72 69 6e 67  .** input string
27c0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
27d0: 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f 6e 28 0a  test_mprintf_n(.
27e0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
27f0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
2800: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
2810: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
2820: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
2830: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
2840: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
2850: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
2860: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
2870: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
2880: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
2890: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
28a0: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20  nt */.){.  char 
28b0: 2a 7a 53 74 72 3b 0a 20 20 69 6e 74 20 6e 20 3d  *zStr;.  int n =
28c0: 20 30 3b 0a 20 20 7a 53 74 72 20 3d 20 73 71 6c   0;.  zStr = sql
28d0: 69 74 65 33 4d 50 72 69 6e 74 66 28 22 25 73 25  ite3MPrintf("%s%
28e0: 6e 22 2c 20 61 72 67 76 5b 31 5d 2c 20 26 6e 29  n", argv[1], &n)
28f0: 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a  ;.  sqliteFree(z
2900: 53 74 72 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  Str);.  Tcl_SetO
2910: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
2920: 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e   Tcl_NewIntObj(n
2930: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
2940: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
2950: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 67 65  age:  sqlite3_ge
2960: 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 20 20  t_table_printf  
2970: 44 42 20 20 46 4f 52 4d 41 54 20 20 53 54 52 49  DB  FORMAT  STRI
2980: 4e 47 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20  NG.**.** Invoke 
2990: 74 68 65 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  the sqlite3_get_
29a0: 74 61 62 6c 65 5f 70 72 69 6e 74 66 28 29 20 69  table_printf() i
29b0: 6e 74 65 72 66 61 63 65 20 75 73 69 6e 67 20 74  nterface using t
29c0: 68 65 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  he open database
29d0: 0a 2a 2a 20 44 42 2e 20 20 54 68 65 20 53 51 4c  .** DB.  The SQL
29e0: 20 69 73 20 74 68 65 20 73 74 72 69 6e 67 20 46   is the string F
29f0: 4f 52 4d 41 54 2e 20 20 54 68 65 20 66 6f 72 6d  ORMAT.  The form
2a00: 61 74 20 73 74 72 69 6e 67 20 73 68 6f 75 6c 64  at string should
2a10: 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 6f 6e 65 20   contain.** one 
2a20: 25 73 20 6f 72 20 25 71 2e 20 20 53 54 52 49 4e  %s or %q.  STRIN
2a30: 47 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 69  G is the value i
2a40: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 25 73 20  nserted into %s 
2a50: 6f 72 20 25 71 2e 0a 2a 2f 0a 73 74 61 74 69 63  or %q..*/.static
2a60: 20 69 6e 74 20 74 65 73 74 5f 67 65 74 5f 74 61   int test_get_ta
2a70: 62 6c 65 5f 70 72 69 6e 74 66 28 0a 20 20 76 6f  ble_printf(.  vo
2a80: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
2a90: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
2aa0: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
2ab0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
2ac0: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
2ad0: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
2ae0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
2af0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
2b00: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
2b10: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
2b20: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
2b30: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
2b40: 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  /.){.  sqlite3 *
2b50: 64 62 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e  db;.  Tcl_DStrin
2b60: 67 20 73 74 72 3b 0a 20 20 69 6e 74 20 72 63 3b  g str;.  int rc;
2b70: 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d 20  .  char *zErr = 
2b80: 30 3b 0a 20 20 69 6e 74 20 6e 52 6f 77 2c 20 6e  0;.  int nRow, n
2b90: 43 6f 6c 3b 0a 20 20 63 68 61 72 20 2a 2a 61 52  Col;.  char **aR
2ba0: 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20 69 3b 0a  esult;.  int i;.
2bb0: 20 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b    char zBuf[30];
2bc0: 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
2bd0: 20 69 66 28 20 61 72 67 63 21 3d 34 20 29 7b 0a   if( argc!=4 ){.
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 20 0a 20 20 20 20 20 20 20 22 20 44 42  0], .       " DB
2c30: 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47 22 2c   FORMAT STRING",
2c40: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
2c50: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
2c60: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
2c70: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
2c80: 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
2c90: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63   TCL_ERROR;.  Tc
2ca0: 6c 5f 44 53 74 72 69 6e 67 49 6e 69 74 28 26 73  l_DStringInit(&s
2cb0: 74 72 29 3b 0a 20 20 7a 53 71 6c 20 3d 20 73 71  tr);.  zSql = sq
2cc0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72  lite3_mprintf(ar
2cd0: 67 76 5b 32 5d 2c 61 72 67 76 5b 33 5d 29 3b 0a  gv[2],argv[3]);.
2ce0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 67    rc = sqlite3_g
2cf0: 65 74 5f 74 61 62 6c 65 28 64 62 2c 20 7a 53 71  et_table(db, zSq
2d00: 6c 2c 20 26 61 52 65 73 75 6c 74 2c 20 26 6e 52  l, &aResult, &nR
2d10: 6f 77 2c 20 26 6e 43 6f 6c 2c 20 26 7a 45 72 72  ow, &nCol, &zErr
2d20: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
2d30: 65 28 7a 53 71 6c 29 3b 0a 20 20 73 70 72 69 6e  e(zSql);.  sprin
2d40: 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 72  tf(zBuf, "%d", r
2d50: 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  c);.  Tcl_Append
2d60: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
2d70: 7a 42 75 66 29 3b 0a 20 20 69 66 28 20 72 63 3d  zBuf);.  if( rc=
2d80: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2d90: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
2da0: 22 25 64 22 2c 20 6e 52 6f 77 29 3b 0a 20 20 20  "%d", nRow);.   
2db0: 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65   Tcl_AppendEleme
2dc0: 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29  nt(interp, zBuf)
2dd0: 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42  ;.    sprintf(zB
2de0: 75 66 2c 20 22 25 64 22 2c 20 6e 43 6f 6c 29 3b  uf, "%d", nCol);
2df0: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45  .    Tcl_AppendE
2e00: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a  lement(interp, z
2e10: 42 75 66 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Buf);.    for(i=
2e20: 30 3b 20 69 3c 28 6e 52 6f 77 2b 31 29 2a 6e 43  0; i<(nRow+1)*nC
2e30: 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; i++){.      
2e40: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
2e50: 74 28 69 6e 74 65 72 70 2c 20 61 52 65 73 75 6c  t(interp, aResul
2e60: 74 5b 69 5d 20 3f 20 61 52 65 73 75 6c 74 5b 69  t[i] ? aResult[i
2e70: 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20 20  ] : "NULL");.   
2e80: 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
2e90: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
2ea0: 74 28 69 6e 74 65 72 70 2c 20 7a 45 72 72 29 3b  t(interp, zErr);
2eb0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66  .  }.  sqlite3_f
2ec0: 72 65 65 5f 74 61 62 6c 65 28 61 52 65 73 75 6c  ree_table(aResul
2ed0: 74 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29  t);.  if( zErr )
2ee0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45   sqlite3_free(zE
2ef0: 72 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  rr);.  if( sqlit
2f00: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
2f10: 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20  terp, db, rc) ) 
2f20: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
2f30: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
2f40: 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  K;.}.../*.** Usa
2f50: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6c 61 73  ge:  sqlite3_las
2f60: 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 20 44  t_insert_rowid D
2f70: 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 20  B.**.** Returns 
2f80: 74 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49  the integer ROWI
2f90: 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65  D of the most re
2fa0: 63 65 6e 74 20 69 6e 73 65 72 74 2e 0a 2a 2f 0a  cent insert..*/.
2fb0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
2fc0: 6c 61 73 74 5f 72 6f 77 69 64 28 0a 20 20 76 6f  last_rowid(.  vo
2fd0: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
2fe0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
2ff0: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
3000: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
3010: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
3020: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
3030: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
3040: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
3050: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
3060: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
3070: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
3080: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
3090: 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  /.){.  sqlite3 *
30a0: 64 62 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b  db;.  char zBuf[
30b0: 33 30 5d 3b 0a 0a 20 20 69 66 28 20 61 72 67 63  30];..  if( argc
30c0: 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
30d0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
30e0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
30f0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
3100: 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44 42 5c  , argv[0], " DB\
3110: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
3120: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
3130: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
3140: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
3150: 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
3160: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
3170: 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22   sprintf(zBuf, "
3180: 25 6c 6c 64 22 2c 20 73 71 6c 69 74 65 33 5f 6c  %lld", sqlite3_l
3190: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
31a0: 28 64 62 29 29 3b 0a 20 20 54 63 6c 5f 41 70 70  (db));.  Tcl_App
31b0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
31c0: 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65  , zBuf, 0);.  re
31d0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
31e0: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
31f0: 20 73 71 6c 69 74 65 33 5f 6b 65 79 20 44 42 20   sqlite3_key DB 
3200: 4b 45 59 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  KEY.**.** Set th
3210: 65 20 63 6f 64 65 63 20 6b 65 79 2e 0a 2a 2f 0a  e codec key..*/.
3220: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
3230: 6b 65 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  key(.  void *Not
3240: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
3250: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
3260: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
3270: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
3280: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
3290: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
32a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
32b0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
32c0: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
32d0: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
32e0: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
32f0: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
3300: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63  sqlite3 *db;.  c
3310: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b  onst char *zKey;
3320: 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 69  .  int nKey;.  i
3330: 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  f( argc!=3 ){.  
3340: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
3350: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
3360: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
3370: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
3380: 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c 45 4e  ,.       " FILEN
3390: 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  AME\"", 0);.    
33a0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
33b0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
33c0: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
33d0: 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
33e0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
33f0: 52 3b 0a 20 20 7a 4b 65 79 20 3d 20 61 72 67 76  R;.  zKey = argv
3400: 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20 3d 20 73 74  [2];.  nKey = st
3410: 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a 23 69 66 64  rlen(zKey);.#ifd
3420: 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ef SQLITE_HAS_CO
3430: 44 45 43 0a 20 20 73 71 6c 69 74 65 33 5f 6b 65  DEC.  sqlite3_ke
3440: 79 28 64 62 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79  y(db, zKey, nKey
3450: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75  );.#endif.  retu
3460: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
3470: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
3480: 74 65 33 5f 72 65 6b 65 79 20 44 42 20 4b 45 59  te3_rekey DB KEY
3490: 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  .**.** Change th
34a0: 65 20 63 6f 64 65 63 20 6b 65 79 2e 0a 2a 2f 0a  e codec key..*/.
34b0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
34c0: 72 65 6b 65 79 28 0a 20 20 76 6f 69 64 20 2a 4e  rekey(.  void *N
34d0: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
34e0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
34f0: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
3500: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
3510: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
3520: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3540: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
3550: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
3560: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
3570: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
3580: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
3590: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
35a0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
35b0: 79 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20  y;.  int nKey;. 
35c0: 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a   if( argc!=3 ){.
35d0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
35e0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
35f0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
3600: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
3610: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c  0],.       " FIL
3620: 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20  ENAME\"", 0);.  
3630: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
3640: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
3650: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
3660: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
3670: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
3680: 52 4f 52 3b 0a 20 20 7a 4b 65 79 20 3d 20 61 72  ROR;.  zKey = ar
3690: 67 76 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20 3d 20  gv[2];.  nKey = 
36a0: 73 74 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a 23 69  strlen(zKey);.#i
36b0: 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f  fdef SQLITE_HAS_
36c0: 43 4f 44 45 43 0a 20 20 73 71 6c 69 74 65 33 5f  CODEC.  sqlite3_
36d0: 72 65 6b 65 79 28 64 62 2c 20 7a 4b 65 79 2c 20  rekey(db, zKey, 
36e0: 6e 4b 65 79 29 3b 0a 23 65 6e 64 69 66 0a 20 20  nKey);.#endif.  
36f0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
3700: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
3710: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 44 42  sqlite3_close DB
3720: 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 73 20 74 68  .**.** Closes th
3730: 65 20 64 61 74 61 62 61 73 65 20 6f 70 65 6e 65  e database opene
3740: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6f 70 65  d by sqlite3_ope
3750: 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  n..*/.static int
3760: 20 73 71 6c 69 74 65 5f 74 65 73 74 5f 63 6c 6f   sqlite_test_clo
3770: 73 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  se(.  void *NotU
3780: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
3790: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
37a0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
37b0: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
37c0: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
37d0: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
37e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
37f0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
3800: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
3810: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
3820: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
3830: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73  gument */.){.  s
3840: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
3850: 74 20 72 63 3b 0a 20 20 69 66 28 20 61 72 67 63  t rc;.  if( argc
3860: 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
3870: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
3880: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
3890: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
38a0: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
38b0: 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c    " FILENAME\"",
38c0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
38d0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
38e0: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
38f0: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
3900: 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
3910: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63   TCL_ERROR;.  rc
3920: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65   = sqlite3_close
3930: 28 64 62 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52  (db);.  Tcl_SetR
3940: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
3950: 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d  har *)t1ErrorNam
3960: 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49  e(rc), TCL_STATI
3970: 43 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  C);.  return TCL
3980: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d  _OK;.}../*.** Im
3990: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
39a0: 74 68 65 20 78 5f 63 6f 61 6c 65 73 63 65 28 29  the x_coalesce()
39b0: 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 52 65   function..** Re
39c0: 74 75 72 6e 20 74 68 65 20 66 69 72 73 74 20 61  turn the first a
39d0: 72 67 75 6d 65 6e 74 20 6e 6f 6e 2d 4e 55 4c 4c  rgument non-NULL
39e0: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
39f0: 61 74 69 63 20 76 6f 69 64 20 74 31 5f 69 66 6e  atic void t1_ifn
3a00: 75 6c 6c 46 75 6e 63 28 0a 20 20 73 71 6c 69 74  ullFunc(.  sqlit
3a10: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74  e3_context *cont
3a20: 65 78 74 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c  ext,.  int argc,
3a30: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
3a40: 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74   **argv.){.  int
3a50: 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   i;.  for(i=0; i
3a60: 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20  <argc; i++){.   
3a70: 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   if( SQLITE_NULL
3a80: 21 3d 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  !=sqlite3_value_
3a90: 74 79 70 65 28 61 72 67 76 5b 69 5d 29 20 29 7b  type(argv[i]) ){
3aa0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  .      sqlite3_r
3ab0: 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65  esult_text(conte
3ac0: 78 74 2c 20 28 63 68 61 72 2a 29 73 71 6c 69 74  xt, (char*)sqlit
3ad0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72  e3_value_text(ar
3ae0: 67 76 5b 69 5d 29 2c 0a 20 20 20 20 20 20 20 20  gv[i]),.        
3af0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f    sqlite3_value_
3b00: 62 79 74 65 73 28 61 72 67 76 5b 69 5d 29 2c 20  bytes(argv[i]), 
3b10: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
3b20: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
3b30: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a      }.  }.}../*.
3b40: 2a 2a 20 54 68 65 73 65 20 61 72 65 20 74 65 73  ** These are tes
3b50: 74 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 20 20  t functions.    
3b60: 68 65 78 38 28 29 20 69 6e 74 65 72 70 72 65 74  hex8() interpret
3b70: 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74 20 61  s its argument a
3b80: 73 0a 2a 2a 20 55 54 46 38 20 61 6e 64 20 72 65  s.** UTF8 and re
3b90: 74 75 72 6e 73 20 61 20 68 65 78 20 65 6e 63 6f  turns a hex enco
3ba0: 64 69 6e 67 2e 20 20 68 65 78 31 36 6c 65 28 29  ding.  hex16le()
3bb0: 20 69 6e 74 65 72 70 72 65 74 73 20 69 74 73 20   interprets its 
3bc0: 61 72 67 75 6d 65 6e 74 0a 2a 2a 20 61 73 20 55  argument.** as U
3bd0: 54 46 31 36 6c 65 20 61 6e 64 20 72 65 74 75 72  TF16le and retur
3be0: 6e 73 20 61 20 68 65 78 20 65 6e 63 6f 64 69 6e  ns a hex encodin
3bf0: 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  g..*/.static voi
3c00: 64 20 68 65 78 38 46 75 6e 63 28 73 71 6c 69 74  d hex8Func(sqlit
3c10: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 2c 20 69  e3_context *p, i
3c20: 6e 74 20 61 72 67 63 2c 20 73 71 6c 69 74 65 33  nt argc, sqlite3
3c30: 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a  _value **argv){.
3c40: 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64    const unsigned
3c50: 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 6e 74 20   char *z;.  int 
3c60: 69 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 32  i;.  char zBuf[2
3c70: 30 30 5d 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  00];.  z = sqlit
3c80: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72  e3_value_text(ar
3c90: 67 76 5b 30 5d 29 3b 0a 20 20 66 6f 72 28 69 3d  gv[0]);.  for(i=
3ca0: 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 42 75 66  0; i<sizeof(zBuf
3cb0: 29 2f 32 20 2d 20 32 20 26 26 20 7a 5b 69 5d 3b  )/2 - 2 && z[i];
3cc0: 20 69 2b 2b 29 7b 0a 20 20 20 20 73 70 72 69 6e   i++){.    sprin
3cd0: 74 66 28 26 7a 42 75 66 5b 69 2a 32 5d 2c 20 22  tf(&zBuf[i*2], "
3ce0: 25 30 32 78 22 2c 20 7a 5b 69 5d 26 30 78 66 66  %02x", z[i]&0xff
3cf0: 29 3b 0a 20 20 7d 0a 20 20 7a 42 75 66 5b 69 2a  );.  }.  zBuf[i*
3d00: 32 5d 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  2] = 0;.  sqlite
3d10: 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 70 2c  3_result_text(p,
3d20: 20 28 63 68 61 72 2a 29 7a 42 75 66 2c 20 2d 31   (char*)zBuf, -1
3d30: 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
3d40: 4e 54 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f  NT);.}.static vo
3d50: 69 64 20 68 65 78 31 36 46 75 6e 63 28 73 71 6c  id hex16Func(sql
3d60: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 2c  ite3_context *p,
3d70: 20 69 6e 74 20 61 72 67 63 2c 20 73 71 6c 69 74   int argc, sqlit
3d80: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 29  e3_value **argv)
3d90: 7b 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  {.  const unsign
3da0: 65 64 20 73 68 6f 72 74 20 69 6e 74 20 2a 7a 3b  ed short int *z;
3db0: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68 61 72  .  int i;.  char
3dc0: 20 7a 42 75 66 5b 34 30 30 5d 3b 0a 20 20 7a 20   zBuf[400];.  z 
3dd0: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
3de0: 74 65 78 74 31 36 28 61 72 67 76 5b 30 5d 29 3b  text16(argv[0]);
3df0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69  .  for(i=0; i<si
3e00: 7a 65 6f 66 28 7a 42 75 66 29 2f 34 20 2d 20 34  zeof(zBuf)/4 - 4
3e10: 20 26 26 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a   && z[i]; i++){.
3e20: 20 20 20 20 73 70 72 69 6e 74 66 28 26 7a 42 75      sprintf(&zBu
3e30: 66 5b 69 2a 34 5d 2c 20 22 25 30 34 78 22 2c 20  f[i*4], "%04x", 
3e40: 7a 5b 69 5d 26 30 78 66 66 29 3b 0a 20 20 7d 0a  z[i]&0xff);.  }.
3e50: 20 20 7a 42 75 66 5b 69 2a 34 5d 20 3d 20 30 3b    zBuf[i*4] = 0;
3e60: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
3e70: 74 5f 74 65 78 74 28 70 2c 20 28 63 68 61 72 2a  t_text(p, (char*
3e80: 29 7a 42 75 66 2c 20 2d 31 2c 20 53 51 4c 49 54  )zBuf, -1, SQLIT
3e90: 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 7d 0a  E_TRANSIENT);.}.
3ea0: 0a 2f 2a 0a 2a 2a 20 41 20 73 74 72 75 63 74 75  ./*.** A structu
3eb0: 72 65 20 69 6e 74 6f 20 77 68 69 63 68 20 74 6f  re into which to
3ec0: 20 61 63 63 75 6d 75 6c 61 74 65 20 74 65 78 74   accumulate text
3ed0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 64 73 74 72  ..*/.struct dstr
3ee0: 20 7b 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b   {.  int nAlloc;
3ef0: 20 20 2f 2a 20 53 70 61 63 65 20 61 6c 6c 6f 63    /* Space alloc
3f00: 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 55  ated */.  int nU
3f10: 73 65 64 3b 20 20 20 2f 2a 20 53 70 61 63 65 20  sed;   /* Space 
3f20: 75 73 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  used */.  char *
3f30: 7a 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 73 70  z;     /* The sp
3f40: 61 63 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ace */.};../*.**
3f50: 20 41 70 70 65 6e 64 20 74 65 78 74 20 74 6f 20   Append text to 
3f60: 61 20 64 73 74 72 0a 2a 2f 0a 73 74 61 74 69 63  a dstr.*/.static
3f70: 20 76 6f 69 64 20 64 73 74 72 41 70 70 65 6e 64   void dstrAppend
3f80: 28 73 74 72 75 63 74 20 64 73 74 72 20 2a 70 2c  (struct dstr *p,
3f90: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
3fa0: 69 6e 74 20 64 69 76 69 64 65 72 29 7b 0a 20 20  int divider){.  
3fb0: 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a  int n = strlen(z
3fc0: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 6e 55 73 65  );.  if( p->nUse
3fd0: 64 20 2b 20 6e 20 2b 20 32 20 3e 20 70 2d 3e 6e  d + n + 2 > p->n
3fe0: 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 63 68 61  Alloc ){.    cha
3ff0: 72 20 2a 7a 4e 65 77 3b 0a 20 20 20 20 70 2d 3e  r *zNew;.    p->
4000: 6e 41 6c 6c 6f 63 20 3d 20 70 2d 3e 6e 41 6c 6c  nAlloc = p->nAll
4010: 6f 63 2a 32 20 2b 20 6e 20 2b 20 32 30 30 3b 0a  oc*2 + n + 200;.
4020: 20 20 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74      zNew = sqlit
4030: 65 52 65 61 6c 6c 6f 63 28 70 2d 3e 7a 2c 20 70  eRealloc(p->z, p
4040: 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20 20 69  ->nAlloc);.    i
4050: 66 28 20 7a 4e 65 77 3d 3d 30 20 29 7b 0a 20 20  f( zNew==0 ){.  
4060: 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 70      sqliteFree(p
4070: 2d 3e 7a 29 3b 0a 20 20 20 20 20 20 6d 65 6d 73  ->z);.      mems
4080: 65 74 28 70 2c 20 30 2c 20 73 69 7a 65 6f 66 28  et(p, 0, sizeof(
4090: 2a 70 29 29 3b 0a 20 20 20 20 20 20 72 65 74 75  *p));.      retu
40a0: 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  rn;.    }.    p-
40b0: 3e 7a 20 3d 20 7a 4e 65 77 3b 0a 20 20 7d 0a 20  >z = zNew;.  }. 
40c0: 20 69 66 28 20 64 69 76 69 64 65 72 20 26 26 20   if( divider && 
40d0: 70 2d 3e 6e 55 73 65 64 3e 30 20 29 7b 0a 20 20  p->nUsed>0 ){.  
40e0: 20 20 70 2d 3e 7a 5b 70 2d 3e 6e 55 73 65 64 2b    p->z[p->nUsed+
40f0: 2b 5d 20 3d 20 64 69 76 69 64 65 72 3b 0a 20 20  +] = divider;.  
4100: 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 2d 3e 7a  }.  memcpy(&p->z
4110: 5b 70 2d 3e 6e 55 73 65 64 5d 2c 20 7a 2c 20 6e  [p->nUsed], z, n
4120: 2b 31 29 3b 0a 20 20 70 2d 3e 6e 55 73 65 64 20  +1);.  p->nUsed 
4130: 2b 3d 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  += n;.}../*.** I
4140: 6e 76 6f 6b 65 64 20 66 6f 72 20 65 61 63 68 20  nvoked for each 
4150: 63 61 6c 6c 62 61 63 6b 20 66 72 6f 6d 20 73 71  callback from sq
4160: 6c 69 74 65 33 45 78 65 63 46 75 6e 63 0a 2a 2f  lite3ExecFunc.*/
4170: 0a 73 74 61 74 69 63 20 69 6e 74 20 65 78 65 63  .static int exec
4180: 46 75 6e 63 43 61 6c 6c 62 61 63 6b 28 76 6f 69  FuncCallback(voi
4190: 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 61 72  d *pData, int ar
41a0: 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 2c  gc, char **argv,
41b0: 20 63 68 61 72 20 2a 2a 4e 6f 74 55 73 65 64 29   char **NotUsed)
41c0: 7b 0a 20 20 73 74 72 75 63 74 20 64 73 74 72 20  {.  struct dstr 
41d0: 2a 70 20 3d 20 28 73 74 72 75 63 74 20 64 73 74  *p = (struct dst
41e0: 72 2a 29 70 44 61 74 61 3b 0a 20 20 69 6e 74 20  r*)pData;.  int 
41f0: 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  i;.  for(i=0; i<
4200: 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  argc; i++){.    
4210: 69 66 28 20 61 72 67 76 5b 69 5d 3d 3d 30 20 29  if( argv[i]==0 )
4220: 7b 0a 20 20 20 20 20 20 64 73 74 72 41 70 70 65  {.      dstrAppe
4230: 6e 64 28 70 2c 20 22 4e 55 4c 4c 22 2c 20 27 20  nd(p, "NULL", ' 
4240: 27 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ');.    }else{. 
4250: 20 20 20 20 20 64 73 74 72 41 70 70 65 6e 64 28       dstrAppend(
4260: 70 2c 20 61 72 67 76 5b 69 5d 2c 20 27 20 27 29  p, argv[i], ' ')
4270: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
4280: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 0;.}../*.**
4290: 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   Implementation 
42a0: 6f 66 20 74 68 65 20 78 5f 73 71 6c 69 74 65 5f  of the x_sqlite_
42b0: 65 78 65 63 28 29 20 66 75 6e 63 74 69 6f 6e 2e  exec() function.
42c0: 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20    This function 
42d0: 74 61 6b 65 73 0a 2a 2a 20 61 20 73 69 6e 67 6c  takes.** a singl
42e0: 65 20 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 61  e argument and a
42f0: 74 74 65 6d 70 74 73 20 74 6f 20 65 78 65 63 75  ttempts to execu
4300: 74 65 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74  te that argument
4310: 20 61 73 20 53 51 4c 20 63 6f 64 65 2e 0a 2a 2a   as SQL code..**
4320: 20 54 68 69 73 20 69 73 20 69 6c 6c 65 67 61 6c   This is illegal
4330: 20 61 6e 64 20 73 68 6f 75 6c 64 20 73 65 74 20   and should set 
4340: 74 68 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  the SQLITE_MISUS
4350: 45 20 66 6c 61 67 20 6f 6e 20 74 68 65 20 64 61  E flag on the da
4360: 74 61 62 61 73 65 2e 0a 2a 2a 0a 2a 2a 20 32 30  tabase..**.** 20
4370: 30 34 2d 4a 61 6e 2d 30 37 3a 20 20 57 65 20 68  04-Jan-07:  We h
4380: 61 76 65 20 63 68 61 6e 67 65 64 20 74 68 69 73  ave changed this
4390: 20 74 6f 20 6d 61 6b 65 20 69 74 20 6c 65 67 61   to make it lega
43a0: 6c 20 74 6f 20 63 61 6c 6c 20 73 71 6c 69 74 65  l to call sqlite
43b0: 33 5f 65 78 65 63 28 29 0a 2a 2a 20 66 72 6f 6d  3_exec().** from
43c0: 20 77 69 74 68 69 6e 20 61 20 66 75 6e 63 74 69   within a functi
43d0: 6f 6e 20 63 61 6c 6c 2e 20 20 0a 2a 2a 20 0a 2a  on call.  .** .*
43e0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73  * This routine s
43f0: 69 6d 75 6c 61 74 65 73 20 74 68 65 20 65 66 66  imulates the eff
4400: 65 63 74 20 6f 66 20 68 61 76 69 6e 67 20 74 77  ect of having tw
4410: 6f 20 74 68 72 65 61 64 73 20 61 74 74 65 6d 70  o threads attemp
4420: 74 20 74 6f 0a 2a 2a 20 75 73 65 20 74 68 65 20  t to.** use the 
4430: 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61 74  same database at
4440: 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a   the same time..
4450: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73  */.static void s
4460: 71 6c 69 74 65 33 45 78 65 63 46 75 6e 63 28 0a  qlite3ExecFunc(.
4470: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
4480: 74 20 2a 63 6f 6e 74 65 78 74 2c 20 0a 20 20 69  t *context, .  i
4490: 6e 74 20 61 72 67 63 2c 20 20 0a 20 20 73 71 6c  nt argc,  .  sql
44a0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67  ite3_value **arg
44b0: 76 0a 29 7b 0a 20 20 73 74 72 75 63 74 20 64 73  v.){.  struct ds
44c0: 74 72 20 78 3b 0a 20 20 6d 65 6d 73 65 74 28 26  tr x;.  memset(&
44d0: 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28 78 29 29  x, 0, sizeof(x))
44e0: 3b 0a 20 20 28 76 6f 69 64 29 73 71 6c 69 74 65  ;.  (void)sqlite
44f0: 33 5f 65 78 65 63 28 28 73 71 6c 69 74 65 33 2a  3_exec((sqlite3*
4500: 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  )sqlite3_user_da
4510: 74 61 28 63 6f 6e 74 65 78 74 29 2c 0a 20 20 20  ta(context),.   
4520: 20 20 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65     (char*)sqlite
4530: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
4540: 76 5b 30 5d 29 2c 0a 20 20 20 20 20 20 65 78 65  v[0]),.      exe
4550: 63 46 75 6e 63 43 61 6c 6c 62 61 63 6b 2c 20 26  cFuncCallback, &
4560: 78 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  x, 0);.  sqlite3
4570: 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e  _result_text(con
4580: 74 65 78 74 2c 20 78 2e 7a 2c 20 78 2e 6e 55 73  text, x.z, x.nUs
4590: 65 64 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  ed, SQLITE_TRANS
45a0: 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65 46  IENT);.  sqliteF
45b0: 72 65 65 28 78 2e 7a 29 3b 0a 7d 0a 0a 2f 2a 0a  ree(x.z);.}../*.
45c0: 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** Implementatio
45d0: 6e 20 6f 66 20 74 6b 74 32 32 31 33 66 75 6e 63  n of tkt2213func
45e0: 28 29 2c 20 61 20 73 63 61 6c 61 72 20 66 75 6e  (), a scalar fun
45f0: 63 74 69 6f 6e 20 74 68 61 74 20 74 61 6b 65 73  ction that takes
4600: 20 65 78 61 63 74 6c 79 0a 2a 2a 20 6f 6e 65 20   exactly.** one 
4610: 61 72 67 75 6d 65 6e 74 2e 20 49 74 20 68 61 73  argument. It has
4620: 20 74 77 6f 20 69 6e 74 65 72 65 73 74 69 6e 67   two interesting
4630: 20 66 65 61 74 75 72 65 73 3a 0a 2a 2a 0a 2a 2a   features:.**.**
4640: 20 2a 20 49 74 20 63 61 6c 6c 73 20 73 71 6c 69   * It calls sqli
4650: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 29  te3_value_text()
4660: 20 33 20 74 69 6d 65 73 20 6f 6e 20 74 68 65 20   3 times on the 
4670: 61 72 67 75 6d 65 6e 74 20 73 71 6c 69 74 65 33  argument sqlite3
4680: 5f 76 61 6c 75 65 2a 2e 0a 2a 2a 20 20 20 49 66  _value*..**   If
4690: 20 74 68 65 20 74 68 72 65 65 20 70 6f 69 6e 74   the three point
46a0: 65 72 73 20 72 65 74 75 72 6e 65 64 20 61 72 65  ers returned are
46b0: 20 6e 6f 74 20 74 68 65 20 73 61 6d 65 20 61 6e   not the same an
46c0: 20 53 51 4c 20 65 72 72 6f 72 20 69 73 20 72 61   SQL error is ra
46d0: 69 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 2a 20 4f 74  ised..**.** * Ot
46e0: 68 65 72 77 69 73 65 20 69 74 20 72 65 74 75 72  herwise it retur
46f0: 6e 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  ns a copy of the
4700: 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74 61   text representa
4710: 74 69 6f 6e 20 6f 66 20 69 74 27 73 20 0a 2a 2a  tion of it's .**
4720: 20 20 20 61 72 67 75 6d 65 6e 74 20 69 6e 20 73     argument in s
4730: 75 63 68 20 61 20 77 61 79 20 61 73 20 74 68 65  uch a way as the
4740: 20 56 44 42 45 20 72 65 70 72 65 73 65 6e 74 61   VDBE representa
4750: 74 69 6f 6e 20 69 73 20 61 20 4d 65 6d 2a 20 63  tion is a Mem* c
4760: 65 6c 6c 20 0a 2a 2a 20 20 20 77 69 74 68 20 74  ell .**   with t
4770: 68 65 20 4d 45 4d 5f 54 65 72 6d 20 66 6c 61 67  he MEM_Term flag
4780: 20 63 6c 65 61 72 2e 20 0a 2a 2a 0a 2a 2a 20 54   clear. .**.** T
4790: 69 63 6b 65 74 20 23 32 32 31 33 20 63 61 6e 20  icket #2213 can 
47a0: 74 68 65 72 65 66 6f 72 65 20 62 65 20 74 65 73  therefore be tes
47b0: 74 65 64 20 62 79 20 65 76 61 6c 75 61 74 69 6e  ted by evaluatin
47c0: 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  g the following.
47d0: 2a 2a 20 53 51 4c 20 65 78 70 72 65 73 73 69 6f  ** SQL expressio
47e0: 6e 3a 0a 2a 2a 0a 2a 2a 20 20 20 74 6b 74 32 32  n:.**.**   tkt22
47f0: 31 33 66 75 6e 63 28 74 6b 74 32 32 31 33 66 75  13func(tkt2213fu
4800: 6e 63 28 27 61 20 73 74 72 69 6e 67 27 29 29 3b  nc('a string'));
4810: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
4820: 74 6b 74 32 32 31 33 46 75 6e 63 74 69 6f 6e 28  tkt2213Function(
4830: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
4840: 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20 0a 20 20  xt *context, .  
4850: 69 6e 74 20 61 72 67 63 2c 20 20 0a 20 20 73 71  int argc,  .  sq
4860: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
4870: 67 76 0a 29 7b 0a 20 20 69 6e 74 20 6e 54 65 78  gv.){.  int nTex
4880: 74 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68  t;.  unsigned ch
4890: 61 72 20 63 6f 6e 73 74 20 2a 7a 54 65 78 74 31  ar const *zText1
48a0: 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61  ;.  unsigned cha
48b0: 72 20 63 6f 6e 73 74 20 2a 7a 54 65 78 74 32 3b  r const *zText2;
48c0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  .  unsigned char
48d0: 20 63 6f 6e 73 74 20 2a 7a 54 65 78 74 33 3b 0a   const *zText3;.
48e0: 0a 20 20 6e 54 65 78 74 20 3d 20 73 71 6c 69 74  .  nText = sqlit
48f0: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 61  e3_value_bytes(a
4900: 72 67 76 5b 30 5d 29 3b 0a 20 20 7a 54 65 78 74  rgv[0]);.  zText
4910: 31 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  1 = sqlite3_valu
4920: 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b  e_text(argv[0]);
4930: 0a 20 20 7a 54 65 78 74 32 20 3d 20 73 71 6c 69  .  zText2 = sqli
4940: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61  te3_value_text(a
4950: 72 67 76 5b 30 5d 29 3b 0a 20 20 7a 54 65 78 74  rgv[0]);.  zText
4960: 33 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  3 = sqlite3_valu
4970: 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b  e_text(argv[0]);
4980: 0a 0a 20 20 69 66 28 20 7a 54 65 78 74 31 21 3d  ..  if( zText1!=
4990: 7a 54 65 78 74 32 20 7c 7c 20 7a 54 65 78 74 32  zText2 || zText2
49a0: 21 3d 7a 54 65 78 74 33 20 29 7b 0a 20 20 20 20  !=zText3 ){.    
49b0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
49c0: 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 22 74  rror(context, "t
49d0: 6b 74 32 32 31 33 20 69 73 20 6e 6f 74 20 66 69  kt2213 is not fi
49e0: 78 65 64 22 2c 20 2d 31 29 3b 0a 20 20 7d 65 6c  xed", -1);.  }el
49f0: 73 65 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 43  se{.    char *zC
4a00: 6f 70 79 20 3d 20 28 63 68 61 72 20 2a 29 73 71  opy = (char *)sq
4a10: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 6e 54 65  lite3_malloc(nTe
4a20: 78 74 29 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28  xt);.    memcpy(
4a30: 7a 43 6f 70 79 2c 20 7a 54 65 78 74 31 2c 20 6e  zCopy, zText1, n
4a40: 54 65 78 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  Text);.    sqlit
4a50: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63  e3_result_text(c
4a60: 6f 6e 74 65 78 74 2c 20 7a 43 6f 70 79 2c 20 6e  ontext, zCopy, n
4a70: 54 65 78 74 2c 20 73 71 6c 69 74 65 33 5f 66 72  Text, sqlite3_fr
4a80: 65 65 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ee);.  }.}../*.*
4a90: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
4aa0: 5f 74 65 73 74 5f 63 72 65 61 74 65 5f 66 75 6e  _test_create_fun
4ab0: 63 74 69 6f 6e 20 44 42 0a 2a 2a 0a 2a 2a 20 43  ction DB.**.** C
4ac0: 61 6c 6c 20 74 68 65 20 73 71 6c 69 74 65 33 5f  all the sqlite3_
4ad0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20  create_function 
4ae0: 41 50 49 20 6f 6e 20 74 68 65 20 67 69 76 65 6e  API on the given
4af0: 20 64 61 74 61 62 61 73 65 20 69 6e 20 6f 72 64   database in ord
4b00: 65 72 0a 2a 2a 20 74 6f 20 63 72 65 61 74 65 20  er.** to create 
4b10: 61 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64  a function named
4b20: 20 22 78 5f 63 6f 61 6c 65 73 63 65 22 2e 20 20   "x_coalesce".  
4b30: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 64 6f  This function do
4b40: 65 73 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  es the same thin
4b50: 67 0a 2a 2a 20 61 73 20 74 68 65 20 22 63 6f 61  g.** as the "coa
4b60: 6c 65 73 63 65 22 20 66 75 6e 63 74 69 6f 6e 2e  lesce" function.
4b70: 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20    This function 
4b80: 61 6c 73 6f 20 72 65 67 69 73 74 65 72 73 20 61  also registers a
4b90: 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 0a 2a  n SQL function.*
4ba0: 2a 20 6e 61 6d 65 64 20 22 78 5f 73 71 6c 69 74  * named "x_sqlit
4bb0: 65 5f 65 78 65 63 22 20 74 68 61 74 20 69 6e 76  e_exec" that inv
4bc0: 6f 6b 65 73 20 73 71 6c 69 74 65 33 5f 65 78 65  okes sqlite3_exe
4bd0: 63 28 29 2e 20 20 49 6e 76 6f 6b 69 6e 67 20 73  c().  Invoking s
4be0: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a 2a 2a  qlite3_exec().**
4bf0: 20 69 6e 20 74 68 69 73 20 77 61 79 20 69 73 20   in this way is 
4c00: 69 6c 6c 65 67 61 6c 20 72 65 63 75 72 73 69 6f  illegal recursio
4c10: 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20 72 61 69  n and should rai
4c20: 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53  se an SQLITE_MIS
4c30: 55 53 45 20 65 72 72 6f 72 2e 0a 2a 2a 20 54 68  USE error..** Th
4c40: 65 20 65 66 66 65 63 74 20 69 73 20 73 69 6d 69  e effect is simi
4c50: 6c 61 72 20 74 6f 20 74 72 79 69 6e 67 20 74 6f  lar to trying to
4c60: 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 64 61   use the same da
4c70: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
4c80: 6e 20 66 72 6f 6d 0a 2a 2a 20 74 77 6f 20 74 68  n from.** two th
4c90: 72 65 61 64 73 20 61 74 20 74 68 65 20 73 61 6d  reads at the sam
4ca0: 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e time..**.** Th
4cb0: 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f 74 69 76  e original motiv
4cc0: 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 72  ation for this r
4cd0: 6f 75 74 69 6e 65 20 77 61 73 20 74 6f 20 62 65  outine was to be
4ce0: 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c 20 74 68   able to call th
4cf0: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 72 65  e.** sqlite3_cre
4d00: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 66 75 6e  ate_function fun
4d10: 63 74 69 6f 6e 20 77 68 69 6c 65 20 61 20 71 75  ction while a qu
4d20: 65 72 79 20 69 73 20 69 6e 20 70 72 6f 67 72 65  ery is in progre
4d30: 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74  ss in order.** t
4d40: 6f 20 74 65 73 74 20 74 68 65 20 53 51 4c 49 54  o test the SQLIT
4d50: 45 5f 4d 49 53 55 53 45 20 64 65 74 65 63 74 69  E_MISUSE detecti
4d60: 6f 6e 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73 74 61  on logic..*/.sta
4d70: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 72 65  tic int test_cre
4d80: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20 20  ate_function(.  
4d90: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
4da0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
4db0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
4dc0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
4dd0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
4de0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
4df0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
4e00: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4e10: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
4e20: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
4e30: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
4e40: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
4e50: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b   */.){.  int rc;
4e60: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
4e70: 20 20 65 78 74 65 72 6e 20 76 6f 69 64 20 4d 64    extern void Md
4e80: 35 5f 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  5_Register(sqlit
4e90: 65 33 2a 29 3b 0a 0a 20 20 69 66 28 20 61 72 67  e3*);..  if( arg
4ea0: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
4eb0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
4ec0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
4ed0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
4ee0: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
4ef0: 20 20 20 22 20 44 42 5c 22 22 2c 20 30 29 3b 0a     " DB\"", 0);.
4f00: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
4f10: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
4f20: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
4f30: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
4f40: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
4f50: 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71  ERROR;.  rc = sq
4f60: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
4f70: 63 74 69 6f 6e 28 64 62 2c 20 22 78 5f 63 6f 61  ction(db, "x_coa
4f80: 6c 65 73 63 65 22 2c 20 2d 31 2c 20 53 51 4c 49  lesce", -1, SQLI
4f90: 54 45 5f 41 4e 59 2c 20 30 2c 20 0a 20 20 20 20  TE_ANY, 0, .    
4fa0: 20 20 20 20 74 31 5f 69 66 6e 75 6c 6c 46 75 6e      t1_ifnullFun
4fb0: 63 2c 20 30 2c 20 30 29 3b 0a 20 20 69 66 28 20  c, 0, 0);.  if( 
4fc0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
4fd0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
4fe0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
4ff0: 6e 28 64 62 2c 20 22 68 65 78 38 22 2c 20 31 2c  n(db, "hex8", 1,
5000: 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c 20   SQLITE_ANY, 0, 
5010: 0a 20 20 20 20 20 20 20 20 20 20 68 65 78 38 46  .          hex8F
5020: 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a  unc, 0, 0);.  }.
5030: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
5040: 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
5050: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
5060: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 68 65 78  unction(db, "hex
5070: 31 36 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 41  16", 1, SQLITE_A
5080: 4e 59 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20  NY, 0, .        
5090: 20 20 68 65 78 31 36 46 75 6e 63 2c 20 30 2c 20    hex16Func, 0, 
50a0: 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  0);.  }.  if( rc
50b0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
50c0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
50d0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
50e0: 64 62 2c 20 22 74 6b 74 32 32 31 33 66 75 6e 63  db, "tkt2213func
50f0: 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59  ", 1, SQLITE_ANY
5100: 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20  , 0, .          
5110: 74 6b 74 32 32 31 33 46 75 6e 63 74 69 6f 6e 2c  tkt2213Function,
5120: 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a 23 69 66   0, 0);.  }..#if
5130: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
5140: 5f 55 54 46 31 36 0a 20 20 2f 2a 20 55 73 65 20  _UTF16.  /* Use 
5150: 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72 65 61  the sqlite3_crea
5160: 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28 29 20  te_function16() 
5170: 41 50 49 20 68 65 72 65 2e 20 4d 61 69 6e 6c 79  API here. Mainly
5180: 20 66 6f 72 20 66 75 6e 2c 20 62 75 74 20 61 6c   for fun, but al
5190: 73 6f 20 0a 20 20 2a 2a 20 62 65 63 61 75 73 65  so .  ** because
51a0: 20 69 74 20 69 73 20 6e 6f 74 20 74 65 73 74 65   it is not teste
51b0: 64 20 61 6e 79 77 68 65 72 65 20 65 6c 73 65 2e  d anywhere else.
51c0: 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
51d0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73  LITE_OK ){.    s
51e0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
51f0: 61 6c 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  al;.#ifdef SQLIT
5200: 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 20 20 69  E_MEMDEBUG.    i
5210: 66 28 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c  f( sqlite3_iMall
5220: 6f 63 46 61 69 6c 3e 30 20 29 7b 0a 20 20 20 20  ocFail>0 ){.    
5230: 20 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f    sqlite3_iMallo
5240: 63 46 61 69 6c 2b 2b 3b 0a 20 20 20 20 7d 0a 23  cFail++;.    }.#
5250: 65 6e 64 69 66 20 0a 20 20 20 20 70 56 61 6c 20  endif .    pVal 
5260: 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65  = sqlite3ValueNe
5270: 77 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  w();.    sqlite3
5280: 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c  ValueSetStr(pVal
5290: 2c 20 2d 31 2c 20 22 78 5f 73 71 6c 69 74 65 5f  , -1, "x_sqlite_
52a0: 65 78 65 63 22 2c 20 53 51 4c 49 54 45 5f 55 54  exec", SQLITE_UT
52b0: 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
52c0: 43 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  C);.    rc = sql
52d0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
52e0: 74 69 6f 6e 31 36 28 64 62 2c 20 0a 20 20 20 20  tion16(db, .    
52f0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
5300: 33 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c  3ValueText(pVal,
5310: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
5320: 49 56 45 29 2c 0a 20 20 20 20 20 20 20 20 20 20  IVE),.          
5330: 20 20 20 20 31 2c 20 53 51 4c 49 54 45 5f 55 54      1, SQLITE_UT
5340: 46 31 36 2c 20 64 62 2c 20 73 71 6c 69 74 65 33  F16, db, sqlite3
5350: 45 78 65 63 46 75 6e 63 2c 20 30 2c 20 30 29 3b  ExecFunc, 0, 0);
5360: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75  .    sqlite3Valu
5370: 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20 7d  eFree(pVal);.  }
5380: 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 73  .#endif..  if( s
5390: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
53a0: 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63  e(interp, db, rc
53b0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
53c0: 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 52  RROR;.  Tcl_SetR
53d0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
53e0: 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d  har *)t1ErrorNam
53f0: 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74  e(rc), 0);.  ret
5400: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
5410: 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f  *.** Routines to
5420: 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 78   implement the x
5430: 5f 63 6f 75 6e 74 28 29 20 61 67 67 72 65 67 61  _count() aggrega
5440: 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  te function..**.
5450: 2a 2a 20 78 5f 63 6f 75 6e 74 28 29 20 63 6f 75  ** x_count() cou
5460: 6e 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  nts the number o
5470: 66 20 6e 6f 6e 2d 6e 75 6c 6c 20 61 72 67 75 6d  f non-null argum
5480: 65 6e 74 73 2e 20 20 42 75 74 20 74 68 65 72 65  ents.  But there
5490: 20 61 72 65 0a 2a 2a 20 73 6f 6d 65 20 74 77 69   are.** some twi
54a0: 73 74 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  sts for testing 
54b0: 70 75 72 70 6f 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  purposes..**.** 
54c0: 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  If the argument 
54d0: 74 6f 20 78 5f 63 6f 75 6e 74 28 29 20 69 73 20  to x_count() is 
54e0: 34 30 20 74 68 65 6e 20 61 20 55 54 46 2d 38 20  40 then a UTF-8 
54f0: 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65  error is reporte
5500: 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 74 65 70  d.** on the step
5510: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 49 66 20 78   function.  If x
5520: 5f 63 6f 75 6e 74 28 34 31 29 20 69 73 20 73 65  _count(41) is se
5530: 65 6e 2c 20 74 68 65 6e 20 61 20 55 54 46 2d 31  en, then a UTF-1
5540: 36 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65  6 error.** is re
5550: 70 6f 72 74 65 64 20 6f 6e 20 74 68 65 20 73 74  ported on the st
5560: 65 70 20 66 75 6e 63 74 69 6f 6e 2e 20 20 49 66  ep function.  If
5570: 20 74 68 65 20 74 6f 74 61 6c 20 63 6f 75 6e 74   the total count
5580: 20 69 73 20 34 32 2c 20 74 68 65 6e 0a 2a 2a 20   is 42, then.** 
5590: 61 20 55 54 46 2d 38 20 65 72 72 6f 72 20 69 73  a UTF-8 error is
55a0: 20 72 65 70 6f 72 74 65 64 20 6f 6e 20 74 68 65   reported on the
55b0: 20 66 69 6e 61 6c 69 7a 65 20 66 75 6e 63 74 69   finalize functi
55c0: 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  on..*/.typedef s
55d0: 74 72 75 63 74 20 74 31 43 6f 75 6e 74 43 74 78  truct t1CountCtx
55e0: 20 74 31 43 6f 75 6e 74 43 74 78 3b 0a 73 74 72   t1CountCtx;.str
55f0: 75 63 74 20 74 31 43 6f 75 6e 74 43 74 78 20 7b  uct t1CountCtx {
5600: 0a 20 20 69 6e 74 20 6e 3b 0a 7d 3b 0a 73 74 61  .  int n;.};.sta
5610: 74 69 63 20 76 6f 69 64 20 74 31 43 6f 75 6e 74  tic void t1Count
5620: 53 74 65 70 28 0a 20 20 73 71 6c 69 74 65 33 5f  Step(.  sqlite3_
5630: 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74  context *context
5640: 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20  ,.  int argc,.  
5650: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
5660: 61 72 67 76 0a 29 7b 0a 20 20 74 31 43 6f 75 6e  argv.){.  t1Coun
5670: 74 43 74 78 20 2a 70 3b 0a 20 20 70 20 3d 20 73  tCtx *p;.  p = s
5680: 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65  qlite3_aggregate
5690: 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74  _context(context
56a0: 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 20  , sizeof(*p));. 
56b0: 20 69 66 28 20 28 61 72 67 63 3d 3d 30 20 7c 7c   if( (argc==0 ||
56c0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d 73 71   SQLITE_NULL!=sq
56d0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
56e0: 28 61 72 67 76 5b 30 5d 29 20 29 20 26 26 20 70  (argv[0]) ) && p
56f0: 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 2b 2b 3b 0a   ){.    p->n++;.
5700: 20 20 7d 0a 20 20 69 66 28 20 61 72 67 63 3e 30    }.  if( argc>0
5710: 20 29 7b 0a 20 20 20 20 69 6e 74 20 76 20 3d 20   ){.    int v = 
5720: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
5730: 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20  t(argv[0]);.    
5740: 69 66 28 20 76 3d 3d 34 30 20 29 7b 0a 20 20 20  if( v==40 ){.   
5750: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
5760: 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c  t_error(context,
5770: 20 22 76 61 6c 75 65 20 6f 66 20 34 30 20 68 61   "value of 40 ha
5780: 6e 64 65 64 20 74 6f 20 78 5f 63 6f 75 6e 74 22  nded to x_count"
5790: 2c 20 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53  , -1);.#ifndef S
57a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
57b0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 76  .    }else if( v
57c0: 3d 3d 34 31 20 29 7b 0a 20 20 20 20 20 20 63 6f  ==41 ){.      co
57d0: 6e 73 74 20 63 68 61 72 20 7a 55 74 66 31 36 45  nst char zUtf16E
57e0: 72 72 4d 73 67 5b 5d 20 3d 20 7b 20 30 2c 20 30  rrMsg[] = { 0, 0
57f0: 78 36 31 2c 20 30 2c 20 30 78 36 32 2c 20 30 2c  x61, 0, 0x62, 0,
5800: 20 30 78 36 33 2c 20 30 2c 20 30 2c 20 30 7d 3b   0x63, 0, 0, 0};
5810: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  .      sqlite3_r
5820: 65 73 75 6c 74 5f 65 72 72 6f 72 31 36 28 63 6f  esult_error16(co
5830: 6e 74 65 78 74 2c 20 26 7a 55 74 66 31 36 45 72  ntext, &zUtf16Er
5840: 72 4d 73 67 5b 31 2d 53 51 4c 49 54 45 5f 42 49  rMsg[1-SQLITE_BI
5850: 47 45 4e 44 49 41 4e 5d 2c 20 2d 31 29 3b 0a 23  GENDIAN], -1);.#
5860: 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20 7d 0a  endif.    }.  }.
5870: 7d 20 20 20 0a 73 74 61 74 69 63 20 76 6f 69 64  }   .static void
5880: 20 74 31 43 6f 75 6e 74 46 69 6e 61 6c 69 7a 65   t1CountFinalize
5890: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
58a0: 20 2a 63 6f 6e 74 65 78 74 29 7b 0a 20 20 74 31   *context){.  t1
58b0: 43 6f 75 6e 74 43 74 78 20 2a 70 3b 0a 20 20 70  CountCtx *p;.  p
58c0: 20 3d 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65   = sqlite3_aggre
58d0: 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e  gate_context(con
58e0: 74 65 78 74 2c 20 73 69 7a 65 6f 66 28 2a 70 29  text, sizeof(*p)
58f0: 29 3b 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20  );.  if( p ){.  
5900: 20 20 69 66 28 20 70 2d 3e 6e 3d 3d 34 32 20 29    if( p->n==42 )
5910: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
5920: 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e  result_error(con
5930: 74 65 78 74 2c 20 22 78 5f 63 6f 75 6e 74 20 74  text, "x_count t
5940: 6f 74 61 6c 73 20 74 6f 20 34 32 22 2c 20 2d 31  otals to 42", -1
5950: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
5960: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
5970: 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20  lt_int(context, 
5980: 70 20 3f 20 70 2d 3e 6e 20 3a 20 30 29 3b 0a 20  p ? p->n : 0);. 
5990: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a     }.  }.}../*.*
59a0: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
59b0: 5f 74 65 73 74 5f 63 72 65 61 74 65 5f 61 67 67  _test_create_agg
59c0: 72 65 67 61 74 65 20 44 42 0a 2a 2a 0a 2a 2a 20  regate DB.**.** 
59d0: 43 61 6c 6c 20 74 68 65 20 73 71 6c 69 74 65 33  Call the sqlite3
59e0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
59f0: 20 41 50 49 20 6f 6e 20 74 68 65 20 67 69 76 65   API on the give
5a00: 6e 20 64 61 74 61 62 61 73 65 20 69 6e 20 6f 72  n database in or
5a10: 64 65 72 0a 2a 2a 20 74 6f 20 63 72 65 61 74 65  der.** to create
5a20: 20 61 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65   a function name
5a30: 64 20 22 78 5f 63 6f 75 6e 74 22 2e 20 20 54 68  d "x_count".  Th
5a40: 69 73 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73  is function does
5a50: 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 0a   the same thing.
5a60: 2a 2a 20 61 73 20 74 68 65 20 22 6d 64 35 73 75  ** as the "md5su
5a70: 6d 22 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  m" function..**.
5a80: 2a 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  ** The original 
5a90: 6d 6f 74 69 76 61 74 69 6f 6e 20 66 6f 72 20 74  motivation for t
5aa0: 68 69 73 20 72 6f 75 74 69 6e 65 20 77 61 73 20  his routine was 
5ab0: 74 6f 20 62 65 20 61 62 6c 65 20 74 6f 20 63 61  to be able to ca
5ac0: 6c 6c 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ll the.** sqlite
5ad0: 33 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61  3_create_aggrega
5ae0: 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 68 69 6c  te function whil
5af0: 65 20 61 20 71 75 65 72 79 20 69 73 20 69 6e 20  e a query is in 
5b00: 70 72 6f 67 72 65 73 73 20 69 6e 20 6f 72 64 65  progress in orde
5b10: 72 0a 2a 2a 20 74 6f 20 74 65 73 74 20 74 68 65  r.** to test the
5b20: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 64   SQLITE_MISUSE d
5b30: 65 74 65 63 74 69 6f 6e 20 6c 6f 67 69 63 2e 20  etection logic. 
5b40: 20 53 65 65 20 6d 69 73 75 73 65 2e 74 65 73 74   See misuse.test
5b50: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
5b60: 74 69 6e 65 20 77 61 73 20 6c 61 74 65 72 20 65  tine was later e
5b70: 78 74 65 6e 64 65 64 20 74 6f 20 74 65 73 74 20  xtended to test 
5b80: 74 68 65 20 75 73 65 20 6f 66 20 73 71 6c 69 74  the use of sqlit
5b90: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
5ba0: 29 0a 2a 2a 20 77 69 74 68 69 6e 20 61 67 67 72  ).** within aggr
5bb0: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
5bc0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
5bd0: 65 73 74 5f 63 72 65 61 74 65 5f 61 67 67 72 65  est_create_aggre
5be0: 67 61 74 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  gate(.  void *No
5bf0: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
5c00: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
5c10: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
5c20: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
5c30: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
5c40: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
5c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
5c60: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
5c70: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
5c80: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
5c90: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
5ca0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
5cb0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
5cc0: 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 61 72  int rc;.  if( ar
5cd0: 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
5ce0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
5cf0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
5d00: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
5d10: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
5d20: 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22      " FILENAME\"
5d30: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
5d40: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
5d50: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
5d60: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
5d70: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
5d80: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
5d90: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
5da0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
5db0: 20 22 78 5f 63 6f 75 6e 74 22 2c 20 30 2c 20 53   "x_count", 0, S
5dc0: 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 30  QLITE_UTF8, 0, 0
5dd0: 2c 0a 20 20 20 20 20 20 74 31 43 6f 75 6e 74 53  ,.      t1CountS
5de0: 74 65 70 2c 74 31 43 6f 75 6e 74 46 69 6e 61 6c  tep,t1CountFinal
5df0: 69 7a 65 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  ize);.  if( rc==
5e00: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
5e10: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
5e20: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78 5f  function(db, "x_
5e30: 63 6f 75 6e 74 22 2c 20 31 2c 20 53 51 4c 49 54  count", 1, SQLIT
5e40: 45 5f 55 54 46 38 2c 20 30 2c 20 30 2c 0a 20 20  E_UTF8, 0, 0,.  
5e50: 20 20 20 20 20 20 74 31 43 6f 75 6e 74 53 74 65        t1CountSte
5e60: 70 2c 74 31 43 6f 75 6e 74 46 69 6e 61 6c 69 7a  p,t1CountFinaliz
5e70: 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  e);.  }.  if( sq
5e80: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
5e90: 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
5ea0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
5eb0: 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  ROR;.  return TC
5ec0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  L_OK;.}.../*.** 
5ed0: 55 73 61 67 65 3a 20 20 70 72 69 6e 74 66 20 54  Usage:  printf T
5ee0: 45 58 54 0a 2a 2a 0a 2a 2a 20 53 65 6e 64 20 6f  EXT.**.** Send o
5ef0: 75 74 70 75 74 20 74 6f 20 70 72 69 6e 74 66 2e  utput to printf.
5f00: 20 20 55 73 65 20 74 68 69 73 20 72 61 74 68 65    Use this rathe
5f10: 72 20 74 68 61 6e 20 70 75 74 73 20 74 6f 20 6d  r than puts to m
5f20: 65 72 67 65 20 74 68 65 20 6f 75 74 70 75 74 0a  erge the output.
5f30: 2a 2a 20 69 6e 20 74 68 65 20 63 6f 72 72 65 63  ** in the correc
5f40: 74 20 73 65 71 75 65 6e 63 65 20 77 69 74 68 20  t sequence with 
5f50: 64 65 62 75 67 67 69 6e 67 20 70 72 69 6e 74 66  debugging printf
5f60: 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
5f70: 43 20 63 6f 64 65 2e 0a 2a 2a 20 50 75 74 73 20  C code..** Puts 
5f80: 75 73 65 73 20 61 20 73 65 70 61 72 61 74 65 20  uses a separate 
5f90: 62 75 66 66 65 72 20 61 6e 64 20 64 65 62 75 67  buffer and debug
5fa0: 67 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 20  ging statements 
5fb0: 77 69 6c 6c 20 62 65 20 6f 75 74 20 6f 66 0a 2a  will be out of.*
5fc0: 2a 20 73 65 71 75 65 6e 63 65 20 69 66 20 69 74  * sequence if it
5fd0: 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 61   is used..*/.sta
5fe0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 70 72 69  tic int test_pri
5ff0: 6e 74 66 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  ntf(.  void *Not
6000: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
6010: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
6020: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
6030: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
6040: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
6050: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
6060: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
6070: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
6080: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
6090: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
60a0: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
60b0: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
60c0: 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20  if( argc!=2 ){. 
60d0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
60e0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
60f0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
6100: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
6110: 5d 2c 0a 20 20 20 20 20 20 20 22 20 54 45 58 54  ],.       " TEXT
6120: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
6130: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
6140: 20 7d 0a 20 20 70 72 69 6e 74 66 28 22 25 73 5c   }.  printf("%s\
6150: 6e 22 2c 20 61 72 67 76 5b 31 5d 29 3b 0a 20 20  n", argv[1]);.  
6160: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
6170: 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  ..../*.** Usage:
6180: 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74    sqlite3_mprint
6190: 66 5f 69 6e 74 20 46 4f 52 4d 41 54 20 49 4e 54  f_int FORMAT INT
61a0: 45 47 45 52 20 49 4e 54 45 47 45 52 20 49 4e 54  EGER INTEGER INT
61b0: 45 47 45 52 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20  EGER.**.** Call 
61c0: 6d 70 72 69 6e 74 66 20 77 69 74 68 20 74 68 72  mprintf with thr
61d0: 65 65 20 69 6e 74 65 67 65 72 20 61 72 67 75 6d  ee integer argum
61e0: 65 6e 74 73 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ents.*/.static i
61f0: 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  nt sqlite3_mprin
6200: 74 66 5f 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a  tf_int(.  void *
6210: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
6220: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
6230: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
6240: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
6250: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
6260: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
6270: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
6280: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
6290: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
62a0: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
62b0: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
62c0: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
62d0: 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a  .  int a[3], i;.
62e0: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28    char *z;.  if(
62f0: 20 61 72 67 63 21 3d 35 20 29 7b 0a 20 20 20 20   argc!=5 ){.    
6300: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
6310: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
6320: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
6330: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a  e \"", argv[0],.
6340: 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20         " FORMAT 
6350: 49 4e 54 20 49 4e 54 20 49 4e 54 5c 22 22 2c 20  INT INT INT\"", 
6360: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
6370: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
6380: 66 6f 72 28 69 3d 32 3b 20 69 3c 35 3b 20 69 2b  for(i=2; i<5; i+
6390: 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f  +){.    if( Tcl_
63a0: 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61  GetInt(interp, a
63b0: 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29  rgv[i], &a[i-2])
63c0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
63d0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73  ROR;.  }.  z = s
63e0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61  qlite3_mprintf(a
63f0: 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b  rgv[1], a[0], a[
6400: 31 5d 2c 20 61 5b 32 5d 29 3b 0a 20 20 54 63 6c  1], a[2]);.  Tcl
6410: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
6420: 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73  terp, z, 0);.  s
6430: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a  qlite3_free(z);.
6440: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
6450: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 7a 4e 75  .}../*.** If zNu
6460: 6d 20 72 65 70 72 65 73 65 6e 74 73 20 61 6e 20  m represents an 
6470: 69 6e 74 65 67 65 72 20 74 68 61 74 20 77 69 6c  integer that wil
6480: 6c 20 66 69 74 20 69 6e 20 36 34 2d 62 69 74 73  l fit in 64-bits
6490: 2c 20 74 68 65 6e 20 73 65 74 0a 2a 2a 20 2a 70  , then set.** *p
64a0: 56 61 6c 75 65 20 74 6f 20 74 68 61 74 20 69 6e  Value to that in
64b0: 74 65 67 65 72 20 61 6e 64 20 72 65 74 75 72 6e  teger and return
64c0: 20 74 72 75 65 2e 20 20 4f 74 68 65 72 77 69 73   true.  Otherwis
64d0: 65 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0a  e return false..
64e0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
64f0: 6c 69 74 65 33 47 65 74 49 6e 74 36 34 28 63 6f  lite3GetInt64(co
6500: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75 6d 2c 20  nst char *zNum, 
6510: 69 36 34 20 2a 70 56 61 6c 75 65 29 7b 0a 20 20  i64 *pValue){.  
6520: 69 66 28 20 73 71 6c 69 74 65 33 46 69 74 73 49  if( sqlite3FitsI
6530: 6e 36 34 42 69 74 73 28 7a 4e 75 6d 29 20 29 7b  n64Bits(zNum) ){
6540: 0a 20 20 20 20 73 71 6c 69 74 65 33 61 74 6f 69  .    sqlite3atoi
6550: 36 34 28 7a 4e 75 6d 2c 20 70 56 61 6c 75 65 29  64(zNum, pValue)
6560: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a  ;.    return 1;.
6570: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
6580: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
6590: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
65a0: 5f 69 6e 74 36 34 20 46 4f 52 4d 41 54 20 49 4e  _int64 FORMAT IN
65b0: 54 45 47 45 52 20 49 4e 54 45 47 45 52 20 49 4e  TEGER INTEGER IN
65c0: 54 45 47 45 52 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c  TEGER.**.** Call
65d0: 20 6d 70 72 69 6e 74 66 20 77 69 74 68 20 74 68   mprintf with th
65e0: 72 65 65 20 36 34 2d 62 69 74 20 69 6e 74 65 67  ree 64-bit integ
65f0: 65 72 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2f 0a  er arguments.*/.
6600: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
6610: 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34  e3_mprintf_int64
6620: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
6630: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
6640: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
6650: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
6660: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
6670: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
6680: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
6690: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
66a0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
66b0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
66c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
66d0: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
66e0: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ment */.){.  int
66f0: 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74   i;.  sqlite_int
6700: 36 34 20 61 5b 33 5d 3b 0a 20 20 63 68 61 72 20  64 a[3];.  char 
6710: 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  *z;.  if( argc!=
6720: 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  5 ){.    Tcl_App
6730: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
6740: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
6750: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
6760: 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
6770: 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54  " FORMAT INT INT
6780: 20 49 4e 54 5c 22 22 2c 20 30 29 3b 0a 20 20 20   INT\"", 0);.   
6790: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
67a0: 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32  R;.  }.  for(i=2
67b0: 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<5; i++){.   
67c0: 20 69 66 28 20 21 73 71 6c 69 74 65 33 47 65 74   if( !sqlite3Get
67d0: 49 6e 74 36 34 28 61 72 67 76 5b 69 5d 2c 20 26  Int64(argv[i], &
67e0: 61 5b 69 2d 32 5d 29 20 29 7b 0a 20 20 20 20 20  a[i-2]) ){.     
67f0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
6800: 74 28 69 6e 74 65 72 70 2c 20 22 61 72 67 75 6d  t(interp, "argum
6810: 65 6e 74 20 69 73 20 6e 6f 74 20 61 20 76 61 6c  ent is not a val
6820: 69 64 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65  id 64-bit intege
6830: 72 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 72 65  r", 0);.      re
6840: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
6850: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 7a 20 3d 20      }.  }.  z = 
6860: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
6870: 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61  argv[1], a[0], a
6880: 5b 31 5d 2c 20 61 5b 32 5d 29 3b 0a 20 20 54 63  [1], a[2]);.  Tc
6890: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
68a0: 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20  nterp, z, 0);.  
68b0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b  sqlite3_free(z);
68c0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
68d0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
68e0: 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  :  sqlite3_mprin
68f0: 74 66 5f 73 74 72 20 46 4f 52 4d 41 54 20 49 4e  tf_str FORMAT IN
6900: 54 45 47 45 52 20 49 4e 54 45 47 45 52 20 53 54  TEGER INTEGER ST
6910: 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20  RING.**.** Call 
6920: 6d 70 72 69 6e 74 66 20 77 69 74 68 20 74 77 6f  mprintf with two
6930: 20 69 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e   integer argumen
6940: 74 73 20 61 6e 64 20 6f 6e 65 20 73 74 72 69 6e  ts and one strin
6950: 67 20 61 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74  g argument.*/.st
6960: 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33  atic int sqlite3
6970: 5f 6d 70 72 69 6e 74 66 5f 73 74 72 28 0a 20 20  _mprintf_str(.  
6980: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
6990: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
69a0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
69b0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
69c0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
69d0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
69e0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
69f0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
6a00: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
6a10: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
6a20: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
6a30: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
6a40: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33   */.){.  int a[3
6a50: 5d 2c 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 3b  ], i;.  char *z;
6a60: 0a 20 20 69 66 28 20 61 72 67 63 3c 34 20 7c 7c  .  if( argc<4 ||
6a70: 20 61 72 67 63 3e 35 20 29 7b 0a 20 20 20 20 54   argc>5 ){.    T
6a80: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
6a90: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
6aa0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
6ab0: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
6ac0: 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20 49        " FORMAT I
6ad0: 4e 54 20 49 4e 54 20 3f 53 54 52 49 4e 47 3f 5c  NT INT ?STRING?\
6ae0: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
6af0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
6b00: 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 34  }.  for(i=2; i<4
6b10: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
6b20: 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72  Tcl_GetInt(inter
6b30: 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69  p, argv[i], &a[i
6b40: 2d 32 5d 29 20 29 20 72 65 74 75 72 6e 20 54 43  -2]) ) return TC
6b50: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a  L_ERROR;.  }.  z
6b60: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
6b70: 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d  tf(argv[1], a[0]
6b80: 2c 20 61 5b 31 5d 2c 20 61 72 67 63 3e 34 20 3f  , a[1], argc>4 ?
6b90: 20 61 72 67 76 5b 34 5d 20 3a 20 4e 55 4c 4c 29   argv[4] : NULL)
6ba0: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  ;.  Tcl_AppendRe
6bb0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20  sult(interp, z, 
6bc0: 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  0);.  sqlite3_fr
6bd0: 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20  ee(z);.  return 
6be0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
6bf0: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
6c00: 5f 73 6e 70 72 69 6e 74 66 5f 73 74 72 20 49 4e  _snprintf_str IN
6c10: 54 45 47 45 52 20 46 4f 52 4d 41 54 20 49 4e 54  TEGER FORMAT INT
6c20: 45 47 45 52 20 49 4e 54 45 47 45 52 20 53 54 52  EGER INTEGER STR
6c30: 49 4e 47 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d  ING.**.** Call m
6c40: 70 72 69 6e 74 66 20 77 69 74 68 20 74 77 6f 20  printf with two 
6c50: 69 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74  integer argument
6c60: 73 20 61 6e 64 20 6f 6e 65 20 73 74 72 69 6e 67  s and one string
6c70: 20 61 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61   argument.*/.sta
6c80: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  tic int sqlite3_
6c90: 73 6e 70 72 69 6e 74 66 5f 73 74 72 28 0a 20 20  snprintf_str(.  
6ca0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
6cb0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
6cc0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
6cd0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
6ce0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
6cf0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
6d00: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
6d10: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
6d20: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
6d30: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
6d40: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
6d50: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
6d60: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33   */.){.  int a[3
6d70: 5d 2c 20 69 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20  ], i;.  int n;. 
6d80: 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20   char *z;.  if( 
6d90: 61 72 67 63 3c 35 20 7c 7c 20 61 72 67 63 3e 36  argc<5 || argc>6
6da0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
6db0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
6dc0: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
6dd0: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
6de0: 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22  rgv[0],.       "
6df0: 20 49 4e 54 20 46 4f 52 4d 41 54 20 49 4e 54 20   INT FORMAT INT 
6e00: 49 4e 54 20 3f 53 54 52 49 4e 47 3f 5c 22 22 2c  INT ?STRING?\"",
6e10: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
6e20: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
6e30: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28   if( Tcl_GetInt(
6e40: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
6e50: 20 26 6e 29 20 29 20 72 65 74 75 72 6e 20 54 43   &n) ) return TC
6e60: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 6e  L_ERROR;.  if( n
6e70: 3c 30 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  <0 ){.    Tcl_Ap
6e80: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
6e90: 70 2c 20 22 4e 20 6d 75 73 74 20 62 65 20 6e 6f  p, "N must be no
6ea0: 6e 2d 6e 65 67 61 74 69 76 65 22 2c 20 30 29 3b  n-negative", 0);
6eb0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
6ec0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72  ERROR;.  }.  for
6ed0: 28 69 3d 33 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b  (i=3; i<5; i++){
6ee0: 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74  .    if( Tcl_Get
6ef0: 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76  Int(interp, argv
6f00: 5b 69 5d 2c 20 26 61 5b 69 2d 33 5d 29 20 29 20  [i], &a[i-3]) ) 
6f10: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
6f20: 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69  ;.  }.  z = sqli
6f30: 74 65 33 5f 6d 61 6c 6c 6f 63 28 20 6e 2b 31 20  te3_malloc( n+1 
6f40: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  );.  sqlite3_snp
6f50: 72 69 6e 74 66 28 6e 2c 20 7a 2c 20 61 72 67 76  rintf(n, z, argv
6f60: 5b 32 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c  [2], a[0], a[1],
6f70: 20 61 72 67 63 3e 34 20 3f 20 61 72 67 76 5b 35   argc>4 ? argv[5
6f80: 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 20 20 54 63 6c  ] : NULL);.  Tcl
6f90: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
6fa0: 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73  terp, z, 0);.  s
6fb0: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a  qlite3_free(z);.
6fc0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
6fd0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
6fe0: 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74    sqlite3_mprint
6ff0: 66 5f 64 6f 75 62 6c 65 20 46 4f 52 4d 41 54 20  f_double FORMAT 
7000: 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 20  INTEGER INTEGER 
7010: 44 4f 55 42 4c 45 0a 2a 2a 0a 2a 2a 20 43 61 6c  DOUBLE.**.** Cal
7020: 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68 20 74  l mprintf with t
7030: 77 6f 20 69 6e 74 65 67 65 72 20 61 72 67 75 6d  wo integer argum
7040: 65 6e 74 73 20 61 6e 64 20 6f 6e 65 20 64 6f 75  ents and one dou
7050: 62 6c 65 20 61 72 67 75 6d 65 6e 74 0a 2a 2f 0a  ble argument.*/.
7060: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
7070: 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c  e3_mprintf_doubl
7080: 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  e(.  void *NotUs
7090: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
70a0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
70b0: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
70c0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
70d0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
70e0: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
70f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7100: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
7110: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
7120: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
7130: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
7140: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ument */.){.  in
7150: 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 64 6f 75  t a[3], i;.  dou
7160: 62 6c 65 20 72 3b 0a 20 20 63 68 61 72 20 2a 7a  ble r;.  char *z
7170: 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 35 20  ;.  if( argc!=5 
7180: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
7190: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
71a0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
71b0: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
71c0: 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20  gv[0],.       " 
71d0: 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 44  FORMAT INT INT D
71e0: 4f 55 42 4c 45 5c 22 22 2c 20 30 29 3b 0a 20 20  OUBLE\"", 0);.  
71f0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
7200: 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d  OR;.  }.  for(i=
7210: 32 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20  2; i<4; i++){.  
7220: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
7230: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d  (interp, argv[i]
7240: 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72 65 74  , &a[i-2]) ) ret
7250: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
7260: 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74   }.  if( Tcl_Get
7270: 44 6f 75 62 6c 65 28 69 6e 74 65 72 70 2c 20 61  Double(interp, a
7280: 72 67 76 5b 34 5d 2c 20 26 72 29 20 29 20 72 65  rgv[4], &r) ) re
7290: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
72a0: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70    z = sqlite3_mp
72b0: 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 61  rintf(argv[1], a
72c0: 5b 30 5d 2c 20 61 5b 31 5d 2c 20 72 29 3b 0a 20  [0], a[1], r);. 
72d0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
72e0: 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b  t(interp, z, 0);
72f0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
7300: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  z);.  return TCL
7310: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
7320: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
7330: 72 69 6e 74 66 5f 73 63 61 6c 65 64 20 46 4f 52  rintf_scaled FOR
7340: 4d 41 54 20 44 4f 55 42 4c 45 20 44 4f 55 42 4c  MAT DOUBLE DOUBL
7350: 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72  E.**.** Call mpr
7360: 69 6e 74 66 20 77 69 74 68 20 61 20 73 69 6e 67  intf with a sing
7370: 6c 65 20 64 6f 75 62 6c 65 20 61 72 67 75 6d 65  le double argume
7380: 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
7390: 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 0a 2a  product of the.*
73a0: 2a 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20  * two arguments 
73b0: 67 69 76 65 6e 20 61 62 6f 76 65 2e 20 20 54 68  given above.  Th
73c0: 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 67 65  is is used to ge
73d0: 6e 65 72 61 74 65 20 6f 76 65 72 66 6c 6f 77 20  nerate overflow 
73e0: 61 6e 64 20 75 6e 64 65 72 66 6c 6f 77 0a 2a 2a  and underflow.**
73f0: 20 64 6f 75 62 6c 65 73 20 74 6f 20 74 65 73 74   doubles to test
7400: 20 74 68 61 74 20 74 68 65 79 20 61 72 65 20 63   that they are c
7410: 6f 6e 76 65 72 74 65 64 20 70 72 6f 70 65 72 6c  onverted properl
7420: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  y..*/.static int
7430: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
7440: 5f 73 63 61 6c 65 64 28 0a 20 20 76 6f 69 64 20  _scaled(.  void 
7450: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
7460: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
7470: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
7480: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
7490: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
74a0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
74b0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
74c0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
74d0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
74e0: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
74f0: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
7500: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
7510: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 64 6f 75  {.  int i;.  dou
7520: 62 6c 65 20 72 5b 32 5d 3b 0a 20 20 63 68 61 72  ble r[2];.  char
7530: 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 21   *z;.  if( argc!
7540: 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =4 ){.    Tcl_Ap
7550: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
7560: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
7570: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
7580: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
7590: 20 22 20 46 4f 52 4d 41 54 20 44 4f 55 42 4c 45   " FORMAT DOUBLE
75a0: 20 44 4f 55 42 4c 45 5c 22 22 2c 20 30 29 3b 0a   DOUBLE\"", 0);.
75b0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
75c0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28  RROR;.  }.  for(
75d0: 69 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a  i=2; i<4; i++){.
75e0: 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 44      if( Tcl_GetD
75f0: 6f 75 62 6c 65 28 69 6e 74 65 72 70 2c 20 61 72  ouble(interp, ar
7600: 67 76 5b 69 5d 2c 20 26 72 5b 69 2d 32 5d 29 20  gv[i], &r[i-2]) 
7610: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
7620: 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71  OR;.  }.  z = sq
7630: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72  lite3_mprintf(ar
7640: 67 76 5b 31 5d 2c 20 72 5b 30 5d 2a 72 5b 31 5d  gv[1], r[0]*r[1]
7650: 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  );.  Tcl_AppendR
7660: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c  esult(interp, z,
7670: 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66   0);.  sqlite3_f
7680: 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  ree(z);.  return
7690: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
76a0: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
76b0: 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c  3_mprintf_stronl
76c0: 79 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47 0a  y FORMAT STRING.
76d0: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
76e0: 74 66 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  tf with a single
76f0: 20 64 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74   double argument
7700: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 70 72   which is the pr
7710: 6f 64 75 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20  oduct of the.** 
7720: 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 67 69  two arguments gi
7730: 76 65 6e 20 61 62 6f 76 65 2e 20 20 54 68 69 73  ven above.  This
7740: 20 69 73 20 75 73 65 64 20 74 6f 20 67 65 6e 65   is used to gene
7750: 72 61 74 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e  rate overflow an
7760: 64 20 75 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64  d underflow.** d
7770: 6f 75 62 6c 65 73 20 74 6f 20 74 65 73 74 20 74  oubles to test t
7780: 68 61 74 20 74 68 65 79 20 61 72 65 20 63 6f 6e  hat they are con
7790: 76 65 72 74 65 64 20 70 72 6f 70 65 72 6c 79 2e  verted properly.
77a0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
77b0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73  qlite3_mprintf_s
77c0: 74 72 6f 6e 6c 79 28 0a 20 20 76 6f 69 64 20 2a  tronly(.  void *
77d0: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
77e0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
77f0: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
7800: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
7810: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
7820: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
7830: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
7840: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
7850: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
7860: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
7870: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
7880: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
7890: 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66  .  char *z;.  if
78a0: 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20  ( argc!=3 ){.   
78b0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
78c0: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
78d0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
78e0: 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
78f0: 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54  .       " FORMAT
7900: 20 53 54 52 49 4e 47 5c 22 22 2c 20 30 29 3b 0a   STRING\"", 0);.
7910: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
7920: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20  RROR;.  }.  z = 
7930: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
7940: 61 72 67 76 5b 31 5d 2c 20 61 72 67 76 5b 32 5d  argv[1], argv[2]
7950: 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  );.  Tcl_AppendR
7960: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c  esult(interp, z,
7970: 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66   0);.  sqlite3_f
7980: 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  ree(z);.  return
7990: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
79a0: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
79b0: 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78 64 6f 75  3_mprintf_hexdou
79c0: 62 6c 65 20 46 4f 52 4d 41 54 20 48 45 58 0a 2a  ble FORMAT HEX.*
79d0: 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74  *.** Call mprint
79e0: 66 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  f with a single 
79f0: 64 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20  double argument 
7a00: 77 68 69 63 68 20 69 73 20 64 65 72 69 76 65 64  which is derived
7a10: 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 68 65 78   from the.** hex
7a20: 61 64 65 63 69 6d 61 6c 20 65 6e 63 6f 64 69 6e  adecimal encodin
7a30: 67 20 6f 66 20 61 6e 20 49 45 45 45 20 64 6f 75  g of an IEEE dou
7a40: 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ble..*/.static i
7a50: 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  nt sqlite3_mprin
7a60: 74 66 5f 68 65 78 64 6f 75 62 6c 65 28 0a 20 20  tf_hexdouble(.  
7a70: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
7a80: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
7a90: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
7aa0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
7ab0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
7ac0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
7ad0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
7ae0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7af0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
7b00: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
7b10: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
7b20: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
7b30: 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a   */.){.  char *z
7b40: 3b 0a 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20  ;.  double r;.  
7b50: 75 6e 73 69 67 6e 65 64 20 20 78 31 2c 20 78 32  unsigned  x1, x2
7b60: 3b 0a 20 20 6c 6f 6e 67 20 6c 6f 6e 67 20 75 6e  ;.  long long un
7b70: 73 69 67 6e 65 64 20 64 3b 0a 20 20 69 66 28 20  signed d;.  if( 
7b80: 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
7b90: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
7ba0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
7bb0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
7bc0: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
7bd0: 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20 53        " FORMAT S
7be0: 54 52 49 4e 47 5c 22 22 2c 20 30 29 3b 0a 20 20  TRING\"", 0);.  
7bf0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
7c00: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 73  OR;.  }.  if( ss
7c10: 63 61 6e 66 28 61 72 67 76 5b 32 5d 2c 20 22 25  canf(argv[2], "%
7c20: 30 38 78 25 30 38 78 22 2c 20 26 78 32 2c 20 26  08x%08x", &x2, &
7c30: 78 31 29 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  x1)!=2 ){.    Tc
7c40: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
7c50: 6e 74 65 72 70 2c 20 22 32 6e 64 20 61 72 67 75  nterp, "2nd argu
7c60: 6d 65 6e 74 20 73 68 6f 75 6c 64 20 62 65 20 31  ment should be 1
7c70: 36 2d 63 68 61 72 61 63 74 65 72 73 20 6f 66 20  6-characters of 
7c80: 68 65 78 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  hex", 0);.    re
7c90: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
7ca0: 20 20 7d 0a 20 20 64 20 3d 20 78 32 3b 0a 20 20    }.  d = x2;.  
7cb0: 64 20 3d 20 28 64 3c 3c 33 32 29 20 2b 20 78 31  d = (d<<32) + x1
7cc0: 3b 0a 20 20 6d 65 6d 63 70 79 28 26 72 2c 20 26  ;.  memcpy(&r, &
7cd0: 64 2c 20 73 69 7a 65 6f 66 28 72 29 29 3b 0a 20  d, sizeof(r));. 
7ce0: 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72   z = sqlite3_mpr
7cf0: 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 72 29  intf(argv[1], r)
7d00: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  ;.  Tcl_AppendRe
7d10: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20  sult(interp, z, 
7d20: 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  0);.  sqlite3_fr
7d30: 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20  ee(z);.  return 
7d40: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
7d50: 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f 6d   Usage: sqlite_m
7d60: 61 6c 6c 6f 63 5f 66 61 69 6c 20 4e 20 20 3f 52  alloc_fail N  ?R
7d70: 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 3f 0a  EPEAT-INTERVAL?.
7d80: 2a 2a 0a 2a 2a 20 52 69 67 20 73 71 6c 69 74 65  **.** Rig sqlite
7d90: 4d 61 6c 6c 6f 63 28 29 20 74 6f 20 66 61 69 6c  Malloc() to fail
7da0: 20 6f 6e 20 74 68 65 20 4e 2d 74 68 20 63 61 6c   on the N-th cal
7db0: 6c 20 61 6e 64 20 65 76 65 72 79 20 52 45 50 45  l and every REPE
7dc0: 41 54 2d 49 4e 54 45 52 56 41 4c 20 63 61 6c 6c  AT-INTERVAL call
7dd0: 0a 2a 2a 20 61 66 74 65 72 20 74 68 61 74 2e 20  .** after that. 
7de0: 20 49 66 20 52 45 50 45 41 54 2d 49 4e 54 45 52   If REPEAT-INTER
7df0: 56 41 4c 20 69 73 20 30 20 6f 72 20 69 73 20 6f  VAL is 0 or is o
7e00: 6d 69 74 74 65 64 2c 20 74 68 65 6e 20 6f 6e 6c  mitted, then onl
7e10: 79 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 6d 61  y a single.** ma
7e20: 6c 6c 6f 63 20 77 69 6c 6c 20 66 61 69 6c 2e 20  lloc will fail. 
7e30: 20 49 66 20 52 45 50 45 41 54 2d 49 4e 54 45 52   If REPEAT-INTER
7e40: 56 41 4c 20 69 73 20 31 20 74 68 65 6e 20 61 6c  VAL is 1 then al
7e50: 6c 20 6d 61 6c 6c 6f 63 73 20 61 66 74 65 72 20  l mallocs after 
7e60: 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 66 61 69  the.** first fai
7e70: 6c 75 72 65 20 77 69 6c 6c 20 63 6f 6e 74 69 6e  lure will contin
7e80: 75 65 20 74 6f 20 66 61 69 6c 20 6f 6e 20 65 76  ue to fail on ev
7e90: 65 72 79 20 63 61 6c 6c 2e 20 20 49 66 20 52 45  ery call.  If RE
7ea0: 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20 69 73  PEAT-INTERVAL is
7eb0: 0a 2a 2a 20 32 20 74 68 65 6e 20 65 76 65 72 79  .** 2 then every
7ec0: 20 6f 74 68 65 72 20 6d 61 6c 6c 6f 63 20 77 69   other malloc wi
7ed0: 6c 6c 20 66 61 69 6c 2e 20 20 41 6e 64 20 73 6f  ll fail.  And so
7ee0: 20 66 6f 72 74 68 2e 0a 2a 2a 0a 2a 2a 20 54 75   forth..**.** Tu
7ef0: 72 6e 20 6f 66 66 20 74 68 69 73 20 6d 65 63 68  rn off this mech
7f00: 61 6e 69 73 6d 20 61 6e 64 20 72 65 73 65 74 20  anism and reset 
7f10: 74 68 65 20 73 71 6c 69 74 65 33 54 68 72 65 61  the sqlite3Threa
7f20: 64 44 61 74 61 28 29 2d 3e 6d 61 6c 6c 6f 63 46  dData()->mallocF
7f30: 61 69 6c 65 64 20 0a 2a 2a 20 76 61 72 69 61 62  ailed .** variab
7f40: 6c 65 20 69 66 20 4e 3d 3d 30 2e 0a 2a 2f 0a 23  le if N==0..*/.#
7f50: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
7f60: 44 45 42 55 47 0a 73 74 61 74 69 63 20 69 6e 74  DEBUG.static int
7f70: 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66   sqlite_malloc_f
7f80: 61 69 6c 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  ail(.  void *Not
7f90: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
7fa0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
7fb0: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
7fc0: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
7fd0: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
7fe0: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
8000: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
8010: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
8020: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
8030: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
8040: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
8050: 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 72 65 70  int n;.  int rep
8060: 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20  ;.  if( argc!=2 
8070: 26 26 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  && argc!=3 ){.  
8080: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
8090: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
80a0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
80b0: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
80c0: 2c 20 22 20 4e 5c 22 22 2c 20 30 29 3b 0a 20 20  , " N\"", 0);.  
80d0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
80e0: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 63  OR;.  }.  if( Tc
80f0: 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c  l_GetInt(interp,
8100: 20 61 72 67 76 5b 31 5d 2c 20 26 6e 29 20 29 20   argv[1], &n) ) 
8110: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
8120: 3b 0a 20 20 69 66 28 20 61 72 67 63 3d 3d 33 20  ;.  if( argc==3 
8130: 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47  ){.    if( Tcl_G
8140: 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72  etInt(interp, ar
8150: 67 76 5b 32 5d 2c 20 26 72 65 70 29 20 29 20 72  gv[2], &rep) ) r
8160: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
8170: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65  .  }else{.    re
8180: 70 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 73 71 6c  p = 0;.  }.  sql
8190: 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c  ite3_iMallocFail
81a0: 20 3d 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = n;.  sqlite3_
81b0: 69 4d 61 6c 6c 6f 63 52 65 73 65 74 20 3d 20 72  iMallocReset = r
81c0: 65 70 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ep;.  return TCL
81d0: 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  _OK;.}.#endif../
81e0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
81f0: 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 0a 2a  te_malloc_stat.*
8200: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
8210: 6e 75 6d 62 65 72 20 6f 66 20 70 72 69 6f 72 20  number of prior 
8220: 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 4d  calls to sqliteM
8230: 61 6c 6c 6f 63 28 29 20 61 6e 64 20 73 71 6c 69  alloc() and sqli
8240: 74 65 46 72 65 65 28 29 2e 0a 2a 2f 0a 23 69 66  teFree()..*/.#if
8250: 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
8260: 42 55 47 0a 73 74 61 74 69 63 20 69 6e 74 20 73  BUG.static int s
8270: 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61  qlite_malloc_sta
8280: 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  t(.  void *NotUs
8290: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
82a0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
82b0: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
82c0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
82d0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
82e0: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
82f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
8300: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
8310: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
8320: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
8330: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
8340: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68  ument */.){.  ch
8350: 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20  ar zBuf[200];.  
8360: 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25  sprintf(zBuf, "%
8370: 64 20 25 64 20 25 64 22 2c 20 73 71 6c 69 74 65  d %d %d", sqlite
8380: 33 5f 6e 4d 61 6c 6c 6f 63 2c 73 71 6c 69 74 65  3_nMalloc,sqlite
8390: 33 5f 6e 46 72 65 65 2c 73 71 6c 69 74 65 33 5f  3_nFree,sqlite3_
83a0: 69 4d 61 6c 6c 6f 63 46 61 69 6c 29 3b 0a 20 20  iMallocFail);.  
83b0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
83c0: 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30  (interp, zBuf, 0
83d0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
83e0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  OK;.}../*.** Thi
83f0: 73 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  s function imple
8400: 6d 65 6e 74 73 20 61 20 54 63 6c 20 63 6f 6d 6d  ments a Tcl comm
8410: 61 6e 64 20 74 68 61 74 20 6d 61 79 20 62 65 20  and that may be 
8420: 69 6e 76 6f 6b 65 64 20 75 73 69 6e 67 20 61 6e  invoked using an
8430: 79 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 75 72  y of.** the four
8440: 20 66 6f 72 6d 73 20 65 6e 75 6d 65 72 61 74 65   forms enumerate
8450: 64 20 62 65 6c 6f 77 2e 0a 2a 2a 0a 2a 2a 20 73  d below..**.** s
8460: 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74  qlite_malloc_out
8470: 73 74 61 6e 64 69 6e 67 0a 2a 2a 20 20 20 20 20  standing.**     
8480: 52 65 74 75 72 6e 20 61 20 73 75 6d 6d 61 72 79  Return a summary
8490: 20 6f 66 20 61 6c 6c 20 75 6e 66 72 65 65 64 20   of all unfreed 
84a0: 62 6c 6f 63 6b 73 20 6f 66 20 6d 65 6d 6f 72 79  blocks of memory
84b0: 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 74 68   allocated by th
84c0: 65 0a 2a 2a 20 20 20 20 20 63 75 72 72 65 6e 74  e.**     current
84d0: 20 74 68 72 65 61 64 2e 20 53 65 65 20 63 6f 6d   thread. See com
84e0: 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63  ments above func
84f0: 74 69 6f 6e 20 73 71 6c 69 74 65 33 4f 75 74 73  tion sqlite3Outs
8500: 74 61 6e 64 69 6e 67 4d 61 6c 6c 6f 63 73 28 29  tandingMallocs()
8510: 20 0a 2a 2a 20 20 20 20 20 69 6e 20 75 74 69 6c   .**     in util
8520: 2e 63 20 66 6f 72 20 61 20 64 65 73 63 72 69 70  .c for a descrip
8530: 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65 74 75  tion of the retu
8540: 72 6e 65 64 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a  rned value..**.*
8550: 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  * sqlite_malloc_
8560: 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d 62 79 74  outstanding -byt
8570: 65 73 0a 2a 2a 20 20 20 20 20 52 65 74 75 72 6e  es.**     Return
8580: 20 74 68 65 20 74 6f 74 61 6c 20 61 6d 6f 75 6e   the total amoun
8590: 74 20 6f 66 20 75 6e 66 72 65 65 64 20 6d 65 6d  t of unfreed mem
85a0: 6f 72 79 20 28 69 6e 20 62 79 74 65 73 29 20 61  ory (in bytes) a
85b0: 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20  llocated by .** 
85c0: 20 20 20 20 74 68 69 73 20 74 68 72 65 61 64 2e      this thread.
85d0: 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 5f 6d 61  .**.** sqlite_ma
85e0: 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67  lloc_outstanding
85f0: 20 2d 6d 61 78 62 79 74 65 73 0a 2a 2a 20 20 20   -maxbytes.**   
8600: 20 20 52 65 74 75 72 6e 20 74 68 65 20 6d 61 78    Return the max
8610: 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 64  imum amount of d
8620: 79 6e 61 6d 69 63 20 6d 65 6d 6f 72 79 20 69 6e  ynamic memory in
8630: 20 75 73 65 20 61 74 20 6f 6e 65 20 74 69 6d 65   use at one time
8640: 20 0a 2a 2a 20 20 20 20 20 62 79 20 74 68 69 73   .**     by this
8650: 20 74 68 72 65 61 64 2e 0a 2a 2a 0a 2a 2a 20 73   thread..**.** s
8660: 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74  qlite_malloc_out
8670: 73 74 61 6e 64 69 6e 67 20 2d 63 6c 65 61 72 6d  standing -clearm
8680: 61 78 62 79 74 65 73 0a 2a 2a 20 20 20 20 20 53  axbytes.**     S
8690: 65 74 20 74 68 65 20 76 61 6c 75 65 20 72 65 74  et the value ret
86a0: 75 72 6e 65 64 20 62 79 20 5b 73 71 6c 69 74 65  urned by [sqlite
86b0: 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64  _malloc_outstand
86c0: 69 6e 67 20 2d 6d 61 78 62 79 74 65 73 5d 0a 2a  ing -maxbytes].*
86d0: 2a 20 20 20 20 20 74 6f 20 74 68 65 20 63 75 72  *     to the cur
86e0: 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 5b 73  rent value of [s
86f0: 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74  qlite_malloc_out
8700: 73 74 61 6e 64 69 6e 67 20 2d 62 79 74 65 73 5d  standing -bytes]
8710: 2e 20 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  . .*/.static int
8720: 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f   sqlite_malloc_o
8730: 75 74 73 74 61 6e 64 69 6e 67 28 0a 20 20 43 6c  utstanding(.  Cl
8740: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
8750: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
8760: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
8770: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
8780: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
8790: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
87a0: 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
87b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
87c0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
87d0: 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
87e0: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
87f0: 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
8800: 74 73 20 2a 2f 0a 29 7b 0a 20 20 65 78 74 65 72  ts */.){.  exter
8810: 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 4f 75 74  n int sqlite3Out
8820: 73 74 61 6e 64 69 6e 67 4d 61 6c 6c 6f 63 73 28  standingMallocs(
8830: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
8840: 72 70 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  rp);..#if define
8850: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
8860: 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
8870: 45 5f 4d 45 4d 44 45 42 55 47 29 20 26 26 20 53  E_MEMDEBUG) && S
8880: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 3e 31  QLITE_MEMDEBUG>1
8890: 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d 32 20 29  .  if( objc==2 )
88a0: 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
88b0: 20 2a 7a 41 72 67 20 3d 20 54 63 6c 5f 47 65 74   *zArg = Tcl_Get
88c0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b  String(objv[1]);
88d0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
88e0: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
88f0: 41 47 45 4d 45 4e 54 0a 20 20 20 20 54 68 72 65  AGEMENT.    Thre
8900: 61 64 44 61 74 61 20 63 6f 6e 73 74 20 2a 70 54  adData const *pT
8910: 64 20 3d 20 73 71 6c 69 74 65 33 54 68 72 65 61  d = sqlite3Threa
8920: 64 44 61 74 61 52 65 61 64 4f 6e 6c 79 28 29 3b  dDataReadOnly();
8930: 0a 20 20 20 20 69 66 28 20 30 3d 3d 73 74 72 63  .    if( 0==strc
8940: 6d 70 28 7a 41 72 67 2c 20 22 2d 62 79 74 65 73  mp(zArg, "-bytes
8950: 22 29 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f  ") ){.      Tcl_
8960: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
8970: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
8980: 62 6a 28 70 54 64 2d 3e 6e 41 6c 6c 6f 63 29 29  bj(pTd->nAlloc))
8990: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
89a0: 30 3d 3d 73 74 72 63 6d 70 28 7a 41 72 67 2c 20  0==strcmp(zArg, 
89b0: 22 2d 63 6c 65 61 72 6d 61 78 62 79 74 65 73 22  "-clearmaxbytes"
89c0: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
89d0: 65 33 5f 6e 4d 61 78 41 6c 6c 6f 63 20 3d 20 70  e3_nMaxAlloc = p
89e0: 54 64 2d 3e 6e 41 6c 6c 6f 63 3b 0a 20 20 20 20  Td->nAlloc;.    
89f0: 7d 65 6c 73 65 20 0a 23 65 6e 64 69 66 0a 20 20  }else .#endif.  
8a00: 20 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28    if( 0==strcmp(
8a10: 7a 41 72 67 2c 20 22 2d 6d 61 78 62 79 74 65 73  zArg, "-maxbytes
8a20: 22 29 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f  ") ){.      Tcl_
8a30: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
8a40: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 57 69 64 65  erp, Tcl_NewWide
8a50: 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 6e  IntObj(sqlite3_n
8a60: 4d 61 78 41 6c 6c 6f 63 29 29 3b 0a 20 20 20 20  MaxAlloc));.    
8a70: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 54 63 6c  }else{.      Tcl
8a80: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
8a90: 74 65 72 70 2c 20 22 62 61 64 20 6f 70 74 69 6f  terp, "bad optio
8aa0: 6e 20 5c 22 22 2c 20 7a 41 72 67 2c 20 0a 20 20  n \"", zArg, .  
8ab0: 20 20 20 20 20 20 22 5c 22 3a 20 6d 75 73 74 20        "\": must 
8ac0: 62 65 20 2d 62 79 74 65 73 2c 20 2d 6d 61 78 62  be -bytes, -maxb
8ad0: 79 74 65 73 20 6f 72 20 2d 63 6c 65 61 72 6d 61  ytes or -clearma
8ae0: 78 62 79 74 65 73 22 2c 20 30 0a 20 20 20 20 20  xbytes", 0.     
8af0: 20 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   );.      return
8b00: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20   TCL_ERROR;.    
8b10: 7d 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  }..    return TC
8b20: 4c 5f 4f 4b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  L_OK;.  }..  if(
8b30: 20 6f 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20 20   objc!=1 ){.    
8b40: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
8b50: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
8b60: 2c 20 22 3f 2d 62 79 74 65 73 3f 22 29 3b 0a 20  , "?-bytes?");. 
8b70: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
8b80: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75  ROR;.  }..  retu
8b90: 72 6e 20 73 71 6c 69 74 65 33 4f 75 74 73 74 61  rn sqlite3Outsta
8ba0: 6e 64 69 6e 67 4d 61 6c 6c 6f 63 73 28 69 6e 74  ndingMallocs(int
8bb0: 65 72 70 29 3b 0a 23 65 6c 73 65 0a 20 20 72 65  erp);.#else.  re
8bc0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 23 65 6e  turn TCL_OK;.#en
8bd0: 64 69 66 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  dif.}.#endif../*
8be0: 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
8bf0: 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64  e3_enable_shared
8c00: 5f 63 61 63 68 65 20 20 20 20 20 20 42 4f 4f 4c  _cache      BOOL
8c10: 45 41 4e 0a 2a 2a 0a 2a 2f 0a 23 69 66 20 21 64  EAN.**.*/.#if !d
8c20: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
8c30: 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 29  IT_SHARED_CACHE)
8c40: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
8c50: 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 28 0a  _enable_shared(.
8c60: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69    ClientData cli
8c70: 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e  entData, /* Poin
8c80: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65  ter to sqlite3_e
8c90: 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69  nable_XXX functi
8ca0: 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  on */.  Tcl_Inte
8cb0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
8cc0: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
8cd0: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
8ce0: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
8cf0: 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20  */.  int objc,  
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
8d10: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
8d20: 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20  ts */.  Tcl_Obj 
8d30: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f  *CONST objv[]  /
8d40: 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65  * Command argume
8d50: 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  nts */.){.  int 
8d60: 72 63 3b 0a 20 20 69 6e 74 20 65 6e 61 62 6c 65  rc;.  int enable
8d70: 3b 0a 20 20 69 6e 74 20 72 65 74 20 3d 20 30 3b  ;.  int ret = 0;
8d80: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
8d90: 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
8da0: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
8db0: 31 2c 20 6f 62 6a 76 2c 20 22 42 4f 4f 4c 45 41  1, objv, "BOOLEA
8dc0: 4e 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  N");.    return 
8dd0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
8de0: 20 69 66 28 20 54 63 6c 5f 47 65 74 42 6f 6f 6c   if( Tcl_GetBool
8df0: 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  eanFromObj(inter
8e00: 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 65 6e 61  p, objv[1], &ena
8e10: 62 6c 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75  ble) ){.    retu
8e20: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
8e30: 7d 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65  }.  ret = sqlite
8e40: 33 54 68 72 65 61 64 44 61 74 61 52 65 61 64 4f  3ThreadDataReadO
8e50: 6e 6c 79 28 29 2d 3e 75 73 65 53 68 61 72 65 64  nly()->useShared
8e60: 44 61 74 61 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Data;.  rc = sql
8e70: 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72  ite3_enable_shar
8e80: 65 64 5f 63 61 63 68 65 28 65 6e 61 62 6c 65 29  ed_cache(enable)
8e90: 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
8ea0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c  TE_OK ){.    Tcl
8eb0: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
8ec0: 70 2c 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74  p, (char *)sqlit
8ed0: 65 33 45 72 72 53 74 72 28 72 63 29 2c 20 54 43  e3ErrStr(rc), TC
8ee0: 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72  L_STATIC);.    r
8ef0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
8f00: 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62  .  }.  Tcl_SetOb
8f10: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
8f20: 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65 61 6e 4f 62  Tcl_NewBooleanOb
8f30: 6a 28 72 65 74 29 29 3b 0a 20 20 72 65 74 75 72  j(ret));.  retur
8f40: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64  n TCL_OK;.}.#end
8f50: 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  if../*.** Usage:
8f60: 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
8f70: 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 20 20  d_result_codes  
8f80: 20 44 42 20 20 20 20 42 4f 4f 4c 45 41 4e 0a 2a   DB    BOOLEAN.*
8f90: 2a 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  *.*/.static int 
8fa0: 74 65 73 74 5f 65 78 74 65 6e 64 65 64 5f 72 65  test_extended_re
8fb0: 73 75 6c 74 5f 63 6f 64 65 73 28 0a 20 20 43 6c  sult_codes(.  Cl
8fc0: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
8fd0: 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20  ata, /* Pointer 
8fe0: 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  to sqlite3_enabl
8ff0: 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a  e_XXX function *
9000: 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
9010: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
9020: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
9030: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
9040: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
9050: 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20   int objc,      
9060: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
9070: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
9080: 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  /.  Tcl_Obj *CON
9090: 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f  ST objv[]  /* Co
90a0: 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20  mmand arguments 
90b0: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 65 6e 61 62  */.){.  int enab
90c0: 6c 65 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  le;.  sqlite3 *d
90d0: 62 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  b;..  if( objc!=
90e0: 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  3 ){.    Tcl_Wro
90f0: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
9100: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42 20 42  , 1, objv, "DB B
9110: 4f 4f 4c 45 41 4e 22 29 3b 0a 20 20 20 20 72 65  OOLEAN");.    re
9120: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
9130: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
9140: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
9150: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
9160: 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
9170: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
9180: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 42 6f 6f    if( Tcl_GetBoo
9190: 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  leanFromObj(inte
91a0: 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 65 6e  rp, objv[2], &en
91b0: 61 62 6c 65 29 20 29 20 72 65 74 75 72 6e 20 54  able) ) return T
91c0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c 69  CL_ERROR;.  sqli
91d0: 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73  te3_extended_res
91e0: 75 6c 74 5f 63 6f 64 65 73 28 64 62 2c 20 65 6e  ult_codes(db, en
91f0: 61 62 6c 65 29 3b 0a 20 20 72 65 74 75 72 6e 20  able);.  return 
9200: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
9210: 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
9220: 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65  libversion_numbe
9230: 72 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 20 69  r.**.*/.static i
9240: 6e 74 20 74 65 73 74 5f 6c 69 62 76 65 72 73 69  nt test_libversi
9250: 6f 6e 5f 6e 75 6d 62 65 72 28 0a 20 20 43 6c 69  on_number(.  Cli
9260: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
9270: 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  ta, /* Pointer t
9280: 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  o sqlite3_enable
9290: 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  _XXX function */
92a0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
92b0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
92c0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
92d0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
92e0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
92f0: 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
9300: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
9310: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
9320: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
9330: 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
9340: 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
9350: 2f 0a 29 7b 0a 20 20 54 63 6c 5f 53 65 74 4f 62  /.){.  Tcl_SetOb
9360: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
9370: 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71  Tcl_NewIntObj(sq
9380: 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e  lite3_libversion
9390: 5f 6e 75 6d 62 65 72 28 29 29 29 3b 0a 20 20 72  _number()));.  r
93a0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
93b0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
93c0: 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
93d0: 6d 6e 5f 6d 65 74 61 64 61 74 61 20 44 42 20 64  mn_metadata DB d
93e0: 62 6e 61 6d 65 20 74 62 6c 6e 61 6d 65 20 63 6f  bname tblname co
93f0: 6c 6e 61 6d 65 0a 2a 2a 0a 2a 2f 0a 23 69 66 64  lname.**.*/.#ifd
9400: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
9410: 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41  _COLUMN_METADATA
9420: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
9430: 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
9440: 74 61 64 61 74 61 28 0a 20 20 43 6c 69 65 6e 74  tadata(.  Client
9450: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c  Data clientData,
9460: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73   /* Pointer to s
9470: 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58  qlite3_enable_XX
9480: 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  X function */.  
9490: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
94a0: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
94b0: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
94c0: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
94d0: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
94e0: 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20   objc,          
94f0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
9500: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
9510: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
9520: 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e  bjv[]  /* Comman
9530: 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29  d arguments */.)
9540: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
9550: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
9560: 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  Db;.  const char
9570: 20 2a 7a 54 62 6c 3b 0a 20 20 63 6f 6e 73 74 20   *zTbl;.  const 
9580: 63 68 61 72 20 2a 7a 43 6f 6c 3b 0a 20 20 69 6e  char *zCol;.  in
9590: 74 20 72 63 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20  t rc;.  Tcl_Obj 
95a0: 2a 70 52 65 74 3b 0a 0a 20 20 63 6f 6e 73 74 20  *pRet;..  const 
95b0: 63 68 61 72 20 2a 7a 44 61 74 61 74 79 70 65 3b  char *zDatatype;
95c0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
95d0: 43 6f 6c 6c 73 65 71 3b 0a 20 20 69 6e 74 20 6e  Collseq;.  int n
95e0: 6f 74 6e 75 6c 6c 3b 0a 20 20 69 6e 74 20 70 72  otnull;.  int pr
95f0: 69 6d 61 72 79 6b 65 79 3b 0a 20 20 69 6e 74 20  imarykey;.  int 
9600: 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 3b 0a 0a  autoincrement;..
9610: 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b    if( objc!=5 ){
9620: 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75  .    Tcl_WrongNu
9630: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
9640: 20 6f 62 6a 76 2c 20 22 44 42 20 64 62 6e 61 6d   objv, "DB dbnam
9650: 65 20 74 62 6c 6e 61 6d 65 20 63 6f 6c 6e 61 6d  e tblname colnam
9660: 65 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  e");.    return 
9670: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
9680: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
9690: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
96a0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
96b0: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
96c0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 44 62  TCL_ERROR;.  zDb
96d0: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
96e0: 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20 7a 54 62  (objv[2]);.  zTb
96f0: 6c 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  l = Tcl_GetStrin
9700: 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 7a 43  g(objv[3]);.  zC
9710: 6f 6c 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  ol = Tcl_GetStri
9720: 6e 67 28 6f 62 6a 76 5b 34 5d 29 3b 0a 0a 20 20  ng(objv[4]);..  
9730: 69 66 28 20 73 74 72 6c 65 6e 28 7a 44 62 29 3d  if( strlen(zDb)=
9740: 3d 30 20 29 20 7a 44 62 20 3d 20 30 3b 0a 0a 20  =0 ) zDb = 0;.. 
9750: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 74 61   rc = sqlite3_ta
9760: 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64  ble_column_metad
9770: 61 74 61 28 64 62 2c 20 7a 44 62 2c 20 7a 54 62  ata(db, zDb, zTb
9780: 6c 2c 20 7a 43 6f 6c 2c 20 0a 20 20 20 20 20 20  l, zCol, .      
9790: 26 7a 44 61 74 61 74 79 70 65 2c 20 26 7a 43 6f  &zDatatype, &zCo
97a0: 6c 6c 73 65 71 2c 20 26 6e 6f 74 6e 75 6c 6c 2c  llseq, &notnull,
97b0: 20 26 70 72 69 6d 61 72 79 6b 65 79 2c 20 26 61   &primarykey, &a
97c0: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 29 3b 0a 0a  utoincrement);..
97d0: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
97e0: 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  _OK ){.    Tcl_A
97f0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
9800: 72 70 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d  rp, sqlite3_errm
9810: 73 67 28 64 62 29 2c 20 30 29 3b 0a 20 20 20 20  sg(db), 0);.    
9820: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
9830: 3b 0a 20 20 7d 0a 0a 20 20 70 52 65 74 20 3d 20  ;.  }..  pRet = 
9840: 54 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a 20 20  Tcl_NewObj();.  
9850: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
9860: 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65 74  dElement(0, pRet
9870: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
9880: 62 6a 28 7a 44 61 74 61 74 79 70 65 2c 20 2d 31  bj(zDatatype, -1
9890: 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
98a0: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30  jAppendElement(0
98b0: 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 53  , pRet, Tcl_NewS
98c0: 74 72 69 6e 67 4f 62 6a 28 7a 43 6f 6c 6c 73 65  tringObj(zCollse
98d0: 71 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c  q, -1));.  Tcl_L
98e0: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
98f0: 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63 6c  ent(0, pRet, Tcl
9900: 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e 6f 74 6e 75  _NewIntObj(notnu
9910: 6c 6c 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74  ll));.  Tcl_List
9920: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
9930: 28 30 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65  (0, pRet, Tcl_Ne
9940: 77 49 6e 74 4f 62 6a 28 70 72 69 6d 61 72 79 6b  wIntObj(primaryk
9950: 65 79 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74  ey));.  Tcl_List
9960: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
9970: 28 30 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65  (0, pRet, Tcl_Ne
9980: 77 49 6e 74 4f 62 6a 28 61 75 74 6f 69 6e 63 72  wIntObj(autoincr
9990: 65 6d 65 6e 74 29 29 3b 0a 20 20 54 63 6c 5f 53  ement));.  Tcl_S
99a0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
99b0: 72 70 2c 20 70 52 65 74 29 3b 0a 0a 20 20 72 65  rp, pRet);..  re
99c0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23  turn TCL_OK;.}.#
99d0: 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73  endif.../*.** Us
99e0: 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 6c 6f 61  age: sqlite3_loa
99f0: 64 5f 65 78 74 65 6e 73 69 6f 6e 20 44 42 2d 48  d_extension DB-H
9a00: 41 4e 44 4c 45 20 46 49 4c 45 20 3f 50 52 4f 43  ANDLE FILE ?PROC
9a10: 3f 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ?.*/.static int 
9a20: 74 65 73 74 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  test_load_extens
9a30: 69 6f 6e 28 0a 20 20 43 6c 69 65 6e 74 44 61 74  ion(.  ClientDat
9a40: 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a  a clientData, /*
9a50: 20 4e 6f 74 20 75 73 65 64 20 2a 2f 0a 20 20 54   Not used */.  T
9a60: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
9a70: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
9a80: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
9a90: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
9aa0: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
9ab0: 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20  objc,           
9ac0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9ad0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54  arguments */.  T
9ae0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
9af0: 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64  jv[]  /* Command
9b00: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b   arguments */.){
9b10: 0a 20 20 54 63 6c 5f 43 6d 64 49 6e 66 6f 20 63  .  Tcl_CmdInfo c
9b20: 6d 64 49 6e 66 6f 3b 0a 20 20 73 71 6c 69 74 65  mdInfo;.  sqlite
9b30: 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
9b40: 0a 20 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20  .  char *zDb;.  
9b50: 63 68 61 72 20 2a 7a 46 69 6c 65 3b 0a 20 20 63  char *zFile;.  c
9b60: 68 61 72 20 2a 7a 50 72 6f 63 20 3d 20 30 3b 0a  har *zProc = 0;.
9b70: 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d 20 30    char *zErr = 0
9b80: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34  ;..  if( objc!=4
9b90: 20 26 26 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20   && objc!=3 ){. 
9ba0: 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
9bb0: 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
9bc0: 62 6a 76 2c 20 22 44 42 2d 48 41 4e 44 4c 45 20  bjv, "DB-HANDLE 
9bd0: 46 49 4c 45 20 3f 50 52 4f 43 3f 22 29 3b 0a 20  FILE ?PROC?");. 
9be0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
9bf0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 44 62 20 3d  ROR;.  }.  zDb =
9c00: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
9c10: 62 6a 76 5b 31 5d 29 3b 0a 20 20 7a 46 69 6c 65  bjv[1]);.  zFile
9c20: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
9c30: 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20 69 66 28  (objv[2]);.  if(
9c40: 20 6f 62 6a 63 3d 3d 34 20 29 7b 0a 20 20 20 20   objc==4 ){.    
9c50: 7a 50 72 6f 63 20 3d 20 54 63 6c 5f 47 65 74 53  zProc = Tcl_GetS
9c60: 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a  tring(objv[3]);.
9c70: 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63    }..  /* Extrac
9c80: 74 20 74 68 65 20 43 20 64 61 74 61 62 61 73 65  t the C database
9c90: 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74 68 65   handle from the
9ca0: 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d   Tcl command nam
9cb0: 65 20 2a 2f 0a 20 20 69 66 28 20 21 54 63 6c 5f  e */.  if( !Tcl_
9cc0: 47 65 74 43 6f 6d 6d 61 6e 64 49 6e 66 6f 28 69  GetCommandInfo(i
9cd0: 6e 74 65 72 70 2c 20 7a 44 62 2c 20 26 63 6d 64  nterp, zDb, &cmd
9ce0: 49 6e 66 6f 29 20 29 7b 0a 20 20 20 20 54 63 6c  Info) ){.    Tcl
9cf0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
9d00: 74 65 72 70 2c 20 22 63 6f 6d 6d 61 6e 64 20 6e  terp, "command n
9d10: 6f 74 20 66 6f 75 6e 64 3a 20 22 2c 20 7a 44 62  ot found: ", zDb
9d20: 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20  , (char*)0);.   
9d30: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
9d40: 52 3b 0a 20 20 7d 0a 20 20 64 62 20 3d 20 28 28  R;.  }.  db = ((
9d50: 73 74 72 75 63 74 20 53 71 6c 69 74 65 44 62 2a  struct SqliteDb*
9d60: 29 63 6d 64 49 6e 66 6f 2e 6f 62 6a 43 6c 69 65  )cmdInfo.objClie
9d70: 6e 74 44 61 74 61 29 2d 3e 64 62 3b 0a 20 20 61  ntData)->db;.  a
9d80: 73 73 65 72 74 28 64 62 29 3b 0a 0a 20 20 2f 2a  ssert(db);..  /*
9d90: 20 43 61 6c 6c 20 74 68 65 20 75 6e 64 65 72 6c   Call the underl
9da0: 79 69 6e 67 20 43 20 66 75 6e 63 74 69 6f 6e 2e  ying C function.
9db0: 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   If an error occ
9dc0: 75 72 73 2c 20 73 65 74 20 72 63 20 74 6f 20 0a  urs, set rc to .
9dd0: 20 20 2a 2a 20 54 43 4c 5f 45 52 52 4f 52 20 61    ** TCL_ERROR a
9de0: 6e 64 20 6c 6f 61 64 20 61 6e 79 20 65 72 72 6f  nd load any erro
9df0: 72 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 74 68  r string into th
9e00: 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 20 49  e interpreter. I
9e10: 66 20 6e 6f 20 0a 20 20 2a 2a 20 65 72 72 6f 72  f no .  ** error
9e20: 20 6f 63 63 75 72 73 2c 20 73 65 74 20 72 63 20   occurs, set rc 
9e30: 74 6f 20 54 43 4c 5f 4f 4b 2e 0a 20 20 2a 2f 0a  to TCL_OK..  */.
9e40: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
9e50: 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
9e60: 4e 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  N.  rc = SQLITE_
9e70: 45 52 52 4f 52 3b 0a 20 20 7a 45 72 72 20 3d 20  ERROR;.  zErr = 
9e80: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
9e90: 22 74 68 69 73 20 62 75 69 6c 64 20 6f 6d 69 74  "this build omit
9ea0: 73 20 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65  s sqlite3_load_e
9eb0: 78 74 65 6e 73 69 6f 6e 28 29 22 29 3b 0a 23 65  xtension()");.#e
9ec0: 6c 73 65 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  lse.  rc = sqlit
9ed0: 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  e3_load_extensio
9ee0: 6e 28 64 62 2c 20 7a 46 69 6c 65 2c 20 7a 50 72  n(db, zFile, zPr
9ef0: 6f 63 2c 20 26 7a 45 72 72 29 3b 0a 23 65 6e 64  oc, &zErr);.#end
9f00: 69 66 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  if.  if( rc!=SQL
9f10: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63  ITE_OK ){.    Tc
9f20: 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
9f30: 72 70 2c 20 7a 45 72 72 20 3f 20 7a 45 72 72 20  rp, zErr ? zErr 
9f40: 3a 20 22 22 2c 20 54 43 4c 5f 56 4f 4c 41 54 49  : "", TCL_VOLATI
9f50: 4c 45 29 3b 0a 20 20 20 20 72 63 20 3d 20 54 43  LE);.    rc = TC
9f60: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65  L_ERROR;.  }else
9f70: 7b 0a 20 20 20 20 72 63 20 3d 20 54 43 4c 5f 4f  {.    rc = TCL_O
9f80: 4b 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  K;.  }.  sqlite3
9f90: 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 0a 20 20  _free(zErr);..  
9fa0: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
9fb0: 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
9fc0: 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65  e3_enable_load_e
9fd0: 78 74 65 6e 73 69 6f 6e 20 44 42 2d 48 41 4e 44  xtension DB-HAND
9fe0: 4c 45 20 4f 4e 4f 46 46 0a 2a 2f 0a 73 74 61 74  LE ONOFF.*/.stat
9ff0: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 6e 61 62  ic int test_enab
a000: 6c 65 5f 6c 6f 61 64 28 0a 20 20 43 6c 69 65 6e  le_load(.  Clien
a010: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
a020: 2c 20 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f  , /* Not used */
a030: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
a040: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
a050: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
a060: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
a070: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
a080: 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
a090: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a0a0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
a0b0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
a0c0: 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
a0d0: 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
a0e0: 2f 0a 29 7b 0a 20 20 54 63 6c 5f 43 6d 64 49 6e  /.){.  Tcl_CmdIn
a0f0: 66 6f 20 63 6d 64 49 6e 66 6f 3b 0a 20 20 73 71  fo cmdInfo;.  sq
a100: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 68 61  lite3 *db;.  cha
a110: 72 20 2a 7a 44 62 3b 0a 20 20 69 6e 74 20 6f 6e  r *zDb;.  int on
a120: 6f 66 66 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  off;..  if( objc
a130: 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=3 ){.    Tcl_W
a140: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
a150: 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42  rp, 1, objv, "DB
a160: 2d 48 41 4e 44 4c 45 20 4f 4e 4f 46 46 22 29 3b  -HANDLE ONOFF");
a170: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
a180: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 44 62  ERROR;.  }.  zDb
a190: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
a1a0: 28 6f 62 6a 76 5b 31 5d 29 3b 0a 0a 20 20 2f 2a  (objv[1]);..  /*
a1b0: 20 45 78 74 72 61 63 74 20 74 68 65 20 43 20 64   Extract the C d
a1c0: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 66  atabase handle f
a1d0: 72 6f 6d 20 74 68 65 20 54 63 6c 20 63 6f 6d 6d  rom the Tcl comm
a1e0: 61 6e 64 20 6e 61 6d 65 20 2a 2f 0a 20 20 69 66  and name */.  if
a1f0: 28 20 21 54 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e  ( !Tcl_GetComman
a200: 64 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 7a 44  dInfo(interp, zD
a210: 62 2c 20 26 63 6d 64 49 6e 66 6f 29 20 29 7b 0a  b, &cmdInfo) ){.
a220: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
a230: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 63 6f  sult(interp, "co
a240: 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f 75 6e 64 3a  mmand not found:
a250: 20 22 2c 20 7a 44 62 2c 20 28 63 68 61 72 2a 29   ", zDb, (char*)
a260: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
a270: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
a280: 64 62 20 3d 20 28 28 73 74 72 75 63 74 20 53 71  db = ((struct Sq
a290: 6c 69 74 65 44 62 2a 29 63 6d 64 49 6e 66 6f 2e  liteDb*)cmdInfo.
a2a0: 6f 62 6a 43 6c 69 65 6e 74 44 61 74 61 29 2d 3e  objClientData)->
a2b0: 64 62 3b 0a 20 20 61 73 73 65 72 74 28 64 62 29  db;.  assert(db)
a2c0: 3b 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65 20  ;..  /* Get the 
a2d0: 6f 6e 6f 66 66 20 70 61 72 61 6d 65 74 65 72 20  onoff parameter 
a2e0: 2a 2f 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  */.  if( Tcl_Get
a2f0: 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69  BooleanFromObj(i
a300: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
a310: 26 6f 6e 6f 66 66 29 20 29 7b 0a 20 20 20 20 72  &onoff) ){.    r
a320: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
a330: 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
a340: 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58  ITE_OMIT_LOAD_EX
a350: 54 45 4e 53 49 4f 4e 0a 20 20 54 63 6c 5f 41 70  TENSION.  Tcl_Ap
a360: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
a370: 70 2c 20 22 74 68 69 73 20 62 75 69 6c 64 20 6f  p, "this build o
a380: 6d 69 74 73 20 73 71 6c 69 74 65 33 5f 6c 6f 61  mits sqlite3_loa
a390: 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 22 29 3b  d_extension()");
a3a0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52  .  return TCL_ER
a3b0: 52 4f 52 3b 0a 23 65 6c 73 65 0a 20 20 73 71 6c  ROR;.#else.  sql
a3c0: 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64  ite3_enable_load
a3d0: 5f 65 78 74 65 6e 73 69 6f 6e 28 64 62 2c 20 6f  _extension(db, o
a3e0: 6e 6f 66 66 29 3b 0a 20 20 72 65 74 75 72 6e 20  noff);.  return 
a3f0: 54 43 4c 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 7d  TCL_OK;.#endif.}
a400: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
a410: 73 71 6c 69 74 65 5f 61 62 6f 72 74 0a 2a 2a 0a  sqlite_abort.**.
a420: 2a 2a 20 53 68 75 74 64 6f 77 6e 20 74 68 65 20  ** Shutdown the 
a430: 70 72 6f 63 65 73 73 20 69 6d 6d 65 64 69 61 74  process immediat
a440: 65 6c 79 2e 20 20 54 68 69 73 20 69 73 20 6e 6f  ely.  This is no
a450: 74 20 61 20 63 6c 65 61 6e 20 73 68 75 74 64 6f  t a clean shutdo
a460: 77 6e 2e 0a 2a 2a 20 54 68 69 73 20 63 6f 6d 6d  wn..** This comm
a470: 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 74  and is used to t
a480: 65 73 74 20 74 68 65 20 72 65 63 6f 76 65 72 61  est the recovera
a490: 62 69 6c 69 74 79 20 6f 66 20 61 20 64 61 74 61  bility of a data
a4a0: 62 61 73 65 20 69 6e 0a 2a 2a 20 74 68 65 20 65  base in.** the e
a4b0: 76 65 6e 74 20 6f 66 20 61 20 70 72 6f 67 72 61  vent of a progra
a4c0: 6d 20 63 72 61 73 68 2e 0a 2a 2f 0a 73 74 61 74  m crash..*/.stat
a4d0: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 5f 61 62  ic int sqlite_ab
a4e0: 6f 72 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  ort(.  void *Not
a4f0: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
a500: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
a510: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
a520: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
a530: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
a540: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
a550: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a560: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
a570: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
a580: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
a590: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
a5a0: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
a5b0: 61 73 73 65 72 74 28 20 69 6e 74 65 72 70 3d 3d  assert( interp==
a5c0: 30 20 29 3b 20 20 20 2f 2a 20 54 68 69 73 20 77  0 );   /* This w
a5d0: 69 6c 6c 20 61 6c 77 61 79 73 20 66 61 69 6c 20  ill always fail 
a5e0: 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
a5f0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  OK;.}../*.** The
a600: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74 69   following routi
a610: 6e 65 20 69 73 20 61 20 75 73 65 72 2d 64 65 66  ne is a user-def
a620: 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69 6f  ined SQL functio
a630: 6e 20 77 68 6f 73 65 20 70 75 72 70 6f 73 65 0a  n whose purpose.
a640: 2a 2a 20 69 73 20 74 6f 20 74 65 73 74 20 74 68  ** is to test th
a650: 65 20 73 71 6c 69 74 65 5f 73 65 74 5f 72 65 73  e sqlite_set_res
a660: 75 6c 74 28 29 20 41 50 49 2e 0a 2a 2f 0a 73 74  ult() API..*/.st
a670: 61 74 69 63 20 76 6f 69 64 20 74 65 73 74 46 75  atic void testFu
a680: 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  nc(sqlite3_conte
a690: 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20 69 6e 74  xt *context, int
a6a0: 20 61 72 67 63 2c 20 73 71 6c 69 74 65 33 5f 76   argc, sqlite3_v
a6b0: 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a 20 20  alue **argv){.  
a6c0: 77 68 69 6c 65 28 20 61 72 67 63 3e 3d 32 20 29  while( argc>=2 )
a6d0: 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
a6e0: 20 2a 7a 41 72 67 30 20 3d 20 28 63 68 61 72 2a   *zArg0 = (char*
a6f0: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
a700: 65 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20  ext(argv[0]);.  
a710: 20 20 69 66 28 20 7a 41 72 67 30 20 29 7b 0a 20    if( zArg0 ){. 
a720: 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69       if( 0==sqli
a730: 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30  te3StrICmp(zArg0
a740: 2c 20 22 69 6e 74 22 29 20 29 7b 0a 20 20 20 20  , "int") ){.    
a750: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
a760: 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20  lt_int(context, 
a770: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
a780: 74 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20  t(argv[1]));.   
a790: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
a7a0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67  ite3StrICmp(zArg
a7b0: 30 2c 22 69 6e 74 36 34 22 29 3d 3d 30 20 29 7b  0,"int64")==0 ){
a7c0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a7d0: 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 63 6f  _result_int64(co
a7e0: 6e 74 65 78 74 2c 20 73 71 6c 69 74 65 33 5f 76  ntext, sqlite3_v
a7f0: 61 6c 75 65 5f 69 6e 74 36 34 28 61 72 67 76 5b  alue_int64(argv[
a800: 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  1]));.      }els
a810: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
a820: 49 43 6d 70 28 7a 41 72 67 30 2c 22 73 74 72 69  ICmp(zArg0,"stri
a830: 6e 67 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ng")==0 ){.     
a840: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
a850: 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20  t_text(context, 
a860: 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76  (char*)sqlite3_v
a870: 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 31  alue_text(argv[1
a880: 5d 29 2c 20 2d 31 2c 0a 20 20 20 20 20 20 20 20  ]), -1,.        
a890: 20 20 20 20 53 51 4c 49 54 45 5f 54 52 41 4e 53      SQLITE_TRANS
a8a0: 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 7d 65 6c  IENT);.      }el
a8b0: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
a8c0: 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 64 6f 75  rICmp(zArg0,"dou
a8d0: 62 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ble")==0 ){.    
a8e0: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
a8f0: 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78  lt_double(contex
a900: 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
a910: 5f 64 6f 75 62 6c 65 28 61 72 67 76 5b 31 5d 29  _double(argv[1])
a920: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  );.      }else i
a930: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
a940: 70 28 7a 41 72 67 30 2c 22 6e 75 6c 6c 22 29 3d  p(zArg0,"null")=
a950: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
a960: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c  lite3_result_nul
a970: 6c 28 63 6f 6e 74 65 78 74 29 3b 0a 20 20 20 20  l(context);.    
a980: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
a990: 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30  te3StrICmp(zArg0
a9a0: 2c 22 76 61 6c 75 65 22 29 3d 3d 30 20 29 7b 0a  ,"value")==0 ){.
a9b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
a9c0: 72 65 73 75 6c 74 5f 76 61 6c 75 65 28 63 6f 6e  result_value(con
a9d0: 74 65 78 74 2c 20 61 72 67 76 5b 73 71 6c 69 74  text, argv[sqlit
a9e0: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72 67  e3_value_int(arg
a9f0: 76 5b 31 5d 29 5d 29 3b 0a 20 20 20 20 20 20 7d  v[1])]);.      }
aa00: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f  else{.        go
aa10: 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b 0a 20 20  to error_out;.  
aa20: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
aa30: 0a 20 20 20 20 20 20 67 6f 74 6f 20 65 72 72 6f  .      goto erro
aa40: 72 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 20  r_out;.    }.   
aa50: 20 61 72 67 63 20 2d 3d 20 32 3b 0a 20 20 20 20   argc -= 2;.    
aa60: 61 72 67 76 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20  argv += 2;.  }. 
aa70: 20 72 65 74 75 72 6e 3b 0a 0a 65 72 72 6f 72 5f   return;..error_
aa80: 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65 33 5f 72  out:.  sqlite3_r
aa90: 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74  esult_error(cont
aaa0: 65 78 74 2c 22 66 69 72 73 74 20 61 72 67 75 6d  ext,"first argum
aab0: 65 6e 74 20 73 68 6f 75 6c 64 20 62 65 20 6f 6e  ent should be on
aac0: 65 20 6f 66 3a 20 22 0a 20 20 20 20 20 20 22 69  e of: ".      "i
aad0: 6e 74 20 69 6e 74 36 34 20 73 74 72 69 6e 67 20  nt int64 string 
aae0: 64 6f 75 62 6c 65 20 6e 75 6c 6c 20 76 61 6c 75  double null valu
aaf0: 65 22 2c 20 2d 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  e", -1);.}../*.*
ab00: 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
ab10: 65 5f 72 65 67 69 73 74 65 72 5f 74 65 73 74 5f  e_register_test_
ab20: 66 75 6e 63 74 69 6f 6e 20 20 44 42 20 20 4e 41  function  DB  NA
ab30: 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  ME.**.** Registe
ab40: 72 20 74 68 65 20 74 65 73 74 20 53 51 4c 20 66  r the test SQL f
ab50: 75 6e 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64  unction on the d
ab60: 61 74 61 62 61 73 65 20 44 42 20 75 6e 64 65 72  atabase DB under
ab70: 20 74 68 65 20 6e 61 6d 65 20 4e 41 4d 45 2e 0a   the name NAME..
ab80: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
ab90: 73 74 5f 72 65 67 69 73 74 65 72 5f 66 75 6e 63  st_register_func
aba0: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
abb0: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
abc0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
abd0: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
abe0: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
abf0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
ac00: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
ac10: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
ac20: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
ac30: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
ac40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
ac50: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
ac60: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  ment */.){.  sql
ac70: 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
ac80: 72 63 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  rc;.  if( argc!=
ac90: 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
aca0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
acb0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
acc0: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
acd0: 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20  argv[0], .      
ace0: 20 22 20 44 42 20 46 55 4e 43 54 49 4f 4e 2d 4e   " DB FUNCTION-N
acf0: 41 4d 45 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  AME", 0);.    re
ad00: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
ad10: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
ad20: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
ad30: 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
ad40: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
ad50: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
ad60: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
ad70: 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 2d 31 2c  db, argv[2], -1,
ad80: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c   SQLITE_UTF8, 0,
ad90: 20 0a 20 20 20 20 20 20 74 65 73 74 46 75 6e 63   .      testFunc
ada0: 2c 20 30 2c 20 30 29 3b 0a 20 20 69 66 28 20 72  , 0, 0);.  if( r
adb0: 63 21 3d 30 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=0 ){.    Tcl_
adc0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
add0: 65 72 70 2c 20 73 71 6c 69 74 65 33 45 72 72 53  erp, sqlite3ErrS
ade0: 74 72 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20  tr(rc), 0);.    
adf0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
ae00: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
ae10: 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
ae20: 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29  nterp, db, rc) )
ae30: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
ae40: 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  R;.  return TCL_
ae50: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
ae60: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  ge:  sqlite3_fin
ae70: 61 6c 69 7a 65 20 20 53 54 4d 54 20 0a 2a 2a 0a  alize  STMT .**.
ae80: 2a 2a 20 46 69 6e 61 6c 69 7a 65 20 61 20 73 74  ** Finalize a st
ae90: 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 0a  atement handle..
aea0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
aeb0: 73 74 5f 66 69 6e 61 6c 69 7a 65 28 0a 20 20 76  st_finalize(.  v
aec0: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
aed0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
aee0: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
aef0: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
af00: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
af10: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
af20: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  Stmt;.  int rc;.
af30: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
af40: 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  0;..  if( objc!=
af50: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
af60: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
af70: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
af80: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
af90: 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53          Tcl_GetS
afa0: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
afb0: 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54 4d  v[0], 0), " <STM
afc0: 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  T>", 0);.    ret
afd0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
afe0: 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
aff0: 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
b000: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
b010: 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
b020: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
b030: 52 4f 52 3b 0a 0a 20 20 69 66 28 20 70 53 74 6d  ROR;..  if( pStm
b040: 74 20 29 7b 0a 20 20 20 20 64 62 20 3d 20 53 74  t ){.    db = St
b050: 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 3b 0a 20  mtToDb(pStmt);. 
b060: 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
b070: 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
b080: 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75  );.  Tcl_SetResu
b090: 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72  lt(interp, (char
b0a0: 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72   *)t1ErrorName(r
b0b0: 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  c), TCL_STATIC);
b0c0: 0a 20 20 69 66 28 20 64 62 20 26 26 20 73 71 6c  .  if( db && sql
b0d0: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
b0e0: 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20  interp, db, rc) 
b0f0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
b100: 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  OR;.  return TCL
b110: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
b120: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 72 65  age:  sqlite3_re
b130: 73 65 74 20 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a  set  STMT .**.**
b140: 20 52 65 73 65 74 20 61 20 73 74 61 74 65 6d 65   Reset a stateme
b150: 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73 74  nt handle..*/.st
b160: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65  atic int test_re
b170: 73 65 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  set(.  void * cl
b180: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
b190: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
b1a0: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
b1b0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
b1c0: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
b1d0: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
b1e0: 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
b1f0: 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
b200: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
b210: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
b220: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
b230: 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c  \"",.        Tcl
b240: 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
b250: 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
b260: 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20 20   <STMT>", 0);.  
b270: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
b280: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
b290: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
b2a0: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
b2b0: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
b2c0: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
b2d0: 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20  CL_ERROR;..  rc 
b2e0: 3d 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28  = sqlite3_reset(
b2f0: 70 53 74 6d 74 29 3b 0a 20 20 69 66 28 20 70 53  pStmt);.  if( pS
b300: 74 6d 74 20 26 26 20 73 71 6c 69 74 65 33 54 65  tmt && sqlite3Te
b310: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
b320: 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74  , StmtToDb(pStmt
b330: 29 2c 20 72 63 29 20 29 7b 0a 20 20 20 20 72 65  ), rc) ){.    re
b340: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
b350: 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74 52 65 73    }.  Tcl_SetRes
b360: 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
b370: 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28  r *)t1ErrorName(
b380: 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  rc), TCL_STATIC)
b390: 3b 0a 2f 2a 0a 20 20 69 66 28 20 72 63 20 29 7b  ;./*.  if( rc ){
b3a0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
b3b0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 2a 2f 0a 20 20  ERROR;.  }.*/.  
b3c0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
b3d0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
b3e0: 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64 20  sqlite3_expired 
b3f0: 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75  STMT .**.** Retu
b400: 72 6e 20 54 52 55 45 20 69 66 20 61 20 72 65 63  rn TRUE if a rec
b410: 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 66 20 74 68  ompilation of th
b420: 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 72  e statement is r
b430: 65 63 6f 6d 6d 65 6e 64 65 64 2e 0a 2a 2f 0a 73  ecommended..*/.s
b440: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65  tatic int test_e
b450: 78 70 69 72 65 64 28 0a 20 20 76 6f 69 64 20 2a  xpired(.  void *
b460: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
b470: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
b480: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
b490: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
b4a0: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
b4b0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
b4c0: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
b4d0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
b4e0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
b4f0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
b500: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
b510: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
b520: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
b530: 5d 2c 20 30 29 2c 20 22 20 3c 53 54 4d 54 3e 22  ], 0), " <STMT>"
b540: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
b550: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
b560: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
b570: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
b580: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
b590: 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
b5a0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
b5b0: 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
b5c0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
b5d0: 4e 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 73 71  NewBooleanObj(sq
b5e0: 6c 69 74 65 33 5f 65 78 70 69 72 65 64 28 70 53  lite3_expired(pS
b5f0: 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e  tmt)));.  return
b600: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
b610: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
b620: 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 69  3_transfer_bindi
b630: 6e 67 73 20 46 52 4f 4d 53 54 4d 54 20 54 4f 53  ngs FROMSTMT TOS
b640: 54 4d 54 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66  TMT.**.** Transf
b650: 65 72 20 61 6c 6c 20 62 69 6e 64 69 6e 67 73 20  er all bindings 
b660: 66 72 6f 6d 20 46 52 4f 4d 53 54 4d 54 20 6f 76  from FROMSTMT ov
b670: 65 72 20 74 6f 20 54 4f 53 54 4d 54 0a 2a 2f 0a  er to TOSTMT.*/.
b680: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
b690: 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 28 0a 20  transfer_bind(. 
b6a0: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
b6b0: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
b6c0: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
b6d0: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
b6e0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
b6f0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
b700: 2a 70 53 74 6d 74 31 2c 20 2a 70 53 74 6d 74 32  *pStmt1, *pStmt2
b710: 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ;.  if( objc!=3 
b720: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
b730: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
b740: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
b750: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
b760: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
b770: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
b780: 30 5d 2c 20 30 29 2c 20 22 20 46 52 4f 4d 2d 53  0], 0), " FROM-S
b790: 54 4d 54 20 54 4f 2d 53 54 4d 54 22 2c 20 30 29  TMT TO-STMT", 0)
b7a0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
b7b0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
b7c0: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
b7d0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
b7e0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
b7f0: 20 26 70 53 74 6d 74 31 29 29 20 72 65 74 75 72   &pStmt1)) retur
b800: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
b810: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
b820: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
b830: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29  tString(objv[2])
b840: 2c 20 26 70 53 74 6d 74 32 29 29 20 72 65 74 75  , &pStmt2)) retu
b850: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
b860: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
b870: 28 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54  (interp, .     T
b880: 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
b890: 69 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69  ite3_transfer_bi
b8a0: 6e 64 69 6e 67 73 28 70 53 74 6d 74 31 2c 70 53  ndings(pStmt1,pS
b8b0: 74 6d 74 32 29 29 29 3b 0a 20 20 72 65 74 75 72  tmt2)));.  retur
b8c0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
b8d0: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
b8e0: 65 33 5f 63 68 61 6e 67 65 73 20 44 42 0a 2a 2a  e3_changes DB.**
b8f0: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
b900: 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65 73  umber of changes
b910: 20 6d 61 64 65 20 74 6f 20 74 68 65 20 64 61 74   made to the dat
b920: 61 62 61 73 65 20 62 79 20 74 68 65 20 6c 61 73  abase by the las
b930: 74 20 53 51 4c 0a 2a 2a 20 65 78 65 63 75 74 69  t SQL.** executi
b940: 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  on..*/.static in
b950: 74 20 74 65 73 74 5f 63 68 61 6e 67 65 73 28 0a  t test_changes(.
b960: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
b970: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
b980: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
b990: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
b9a0: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
b9b0: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
b9c0: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
b9d0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
b9e0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
b9f0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
ba00: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
ba10: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
ba20: 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42  g(objv[0]), " DB
ba30: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
ba40: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
ba50: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
ba60: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
ba70: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
ba80: 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  ]), &db) ) retur
ba90: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
baa0: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
bab0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49  interp, Tcl_NewI
bac0: 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 68  ntObj(sqlite3_ch
bad0: 61 6e 67 65 73 28 64 62 29 29 29 3b 0a 20 20 72  anges(db)));.  r
bae0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
baf0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74  ./*.** This is t
bb00: 68 65 20 22 73 74 61 74 69 63 5f 62 69 6e 64 5f  he "static_bind_
bb10: 76 61 6c 75 65 22 20 74 68 61 74 20 76 61 72 69  value" that vari
bb20: 61 62 6c 65 73 20 61 72 65 20 62 6f 75 6e 64 20  ables are bound 
bb30: 74 6f 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 46  to when.** the F
bb40: 4c 41 47 20 6f 70 74 69 6f 6e 20 6f 66 20 73 71  LAG option of sq
bb50: 6c 69 74 65 33 5f 62 69 6e 64 20 69 73 20 22 73  lite3_bind is "s
bb60: 74 61 74 69 63 22 0a 2a 2f 0a 73 74 61 74 69 63  tatic".*/.static
bb70: 20 63 68 61 72 20 2a 73 71 6c 69 74 65 5f 73 74   char *sqlite_st
bb80: 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 20  atic_bind_value 
bb90: 3d 20 30 3b 0a 73 74 61 74 69 63 20 69 6e 74 20  = 0;.static int 
bba0: 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69  sqlite_static_bi
bbb0: 6e 64 5f 6e 62 79 74 65 20 3d 20 30 3b 0a 0a 2f  nd_nbyte = 0;../
bbc0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
bbd0: 69 74 65 33 5f 62 69 6e 64 20 20 56 4d 20 20 49  ite3_bind  VM  I
bbe0: 44 58 20 20 56 41 4c 55 45 20 20 46 4c 41 47 53  DX  VALUE  FLAGS
bbf0: 0a 2a 2a 0a 2a 2a 20 53 65 74 73 20 74 68 65 20  .**.** Sets the 
bc00: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 49 44 58  value of the IDX
bc10: 2d 74 68 20 6f 63 63 75 72 61 6e 63 65 20 6f 66  -th occurance of
bc20: 20 22 3f 22 20 69 6e 20 74 68 65 20 6f 72 69 67   "?" in the orig
bc30: 69 6e 61 6c 20 53 51 4c 0a 2a 2a 20 73 74 72 69  inal SQL.** stri
bc40: 6e 67 2e 20 20 56 41 4c 55 45 20 69 73 20 74 68  ng.  VALUE is th
bc50: 65 20 6e 65 77 20 76 61 6c 75 65 2e 20 20 49 66  e new value.  If
bc60: 20 46 4c 41 47 53 3d 3d 22 6e 75 6c 6c 22 20 74   FLAGS=="null" t
bc70: 68 65 6e 20 56 41 4c 55 45 20 69 73 0a 2a 2a 20  hen VALUE is.** 
bc80: 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20  ignored and the 
bc90: 76 61 6c 75 65 20 69 73 20 73 65 74 20 74 6f 20  value is set to 
bca0: 4e 55 4c 4c 2e 20 20 49 66 20 46 4c 41 47 53 3d  NULL.  If FLAGS=
bcb0: 3d 22 73 74 61 74 69 63 22 20 74 68 65 6e 0a 2a  ="static" then.*
bcc0: 2a 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 73  * the value is s
bcd0: 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
bce0: 6f 66 20 61 20 73 74 61 74 69 63 20 76 61 72 69  of a static vari
bcf0: 61 62 6c 65 20 6e 61 6d 65 64 0a 2a 2a 20 22 73  able named.** "s
bd00: 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e  qlite_static_bin
bd10: 64 5f 76 61 6c 75 65 22 2e 20 20 49 66 20 46 4c  d_value".  If FL
bd20: 41 47 53 3d 3d 22 6e 6f 72 6d 61 6c 22 20 74 68  AGS=="normal" th
bd30: 65 6e 20 61 20 63 6f 70 79 0a 2a 2a 20 6f 66 20  en a copy.** of 
bd40: 74 68 65 20 56 41 4c 55 45 20 69 73 20 6d 61 64  the VALUE is mad
bd50: 65 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 62  e.  If FLAGS=="b
bd60: 6c 6f 62 31 30 22 20 74 68 65 6e 20 61 20 56 41  lob10" then a VA
bd70: 4c 55 45 20 69 73 20 69 67 6e 6f 72 65 64 0a 2a  LUE is ignored.*
bd80: 2a 20 61 6e 20 61 20 31 30 2d 62 79 74 65 20 62  * an a 10-byte b
bd90: 6c 6f 62 20 22 61 62 63 5c 30 30 30 78 79 7a 5c  lob "abc\000xyz\
bda0: 30 30 30 70 71 22 20 69 73 20 69 6e 73 65 72 74  000pq" is insert
bdb0: 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ed..*/.static in
bdc0: 74 20 74 65 73 74 5f 62 69 6e 64 28 0a 20 20 76  t test_bind(.  v
bdd0: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
bde0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
bdf0: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
be00: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
be10: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
be20: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
be30: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
be40: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
be50: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
be60: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
be70: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
be80: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
be90: 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  */.){.  sqlite3_
bea0: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
beb0: 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 69 64 78  nt rc;.  int idx
bec0: 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 35 20  ;.  if( argc!=5 
bed0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
bee0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
bef0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
bf00: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
bf10: 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22  gv[0], .       "
bf20: 20 56 4d 20 49 44 58 20 56 41 4c 55 45 20 28 6e   VM IDX VALUE (n
bf30: 75 6c 6c 7c 73 74 61 74 69 63 7c 6e 6f 72 6d 61  ull|static|norma
bf40: 6c 29 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  l)\"", 0);.    r
bf50: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
bf60: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74  .  }.  if( getSt
bf70: 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
bf80: 2c 20 61 72 67 76 5b 31 5d 2c 20 26 70 53 74 6d  , argv[1], &pStm
bf90: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
bfa0: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
bfb0: 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20  _GetInt(interp, 
bfc0: 61 72 67 76 5b 32 5d 2c 20 26 69 64 78 29 20 29  argv[2], &idx) )
bfd0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
bfe0: 52 3b 0a 20 20 69 66 28 20 73 74 72 63 6d 70 28  R;.  if( strcmp(
bff0: 61 72 67 76 5b 34 5d 2c 22 6e 75 6c 6c 22 29 3d  argv[4],"null")=
c000: 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  =0 ){.    rc = s
c010: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c  qlite3_bind_null
c020: 28 70 53 74 6d 74 2c 20 69 64 78 29 3b 0a 20 20  (pStmt, idx);.  
c030: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
c040: 28 61 72 67 76 5b 34 5d 2c 22 73 74 61 74 69 63  (argv[4],"static
c050: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  ")==0 ){.    rc 
c060: 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  = sqlite3_bind_t
c070: 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20  ext(pStmt, idx, 
c080: 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69  sqlite_static_bi
c090: 6e 64 5f 76 61 6c 75 65 2c 20 2d 31 2c 20 30 29  nd_value, -1, 0)
c0a0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
c0b0: 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 73 74  rcmp(argv[4],"st
c0c0: 61 74 69 63 2d 6e 62 79 74 65 73 22 29 3d 3d 30  atic-nbytes")==0
c0d0: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
c0e0: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70  ite3_bind_text(p
c0f0: 53 74 6d 74 2c 20 69 64 78 2c 20 73 71 6c 69 74  Stmt, idx, sqlit
c100: 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61  e_static_bind_va
c110: 6c 75 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  lue,.           
c120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c130: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
c140: 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 6e  te_static_bind_n
c150: 62 79 74 65 2c 20 30 29 3b 0a 20 20 7d 65 6c 73  byte, 0);.  }els
c160: 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67  e if( strcmp(arg
c170: 76 5b 34 5d 2c 22 6e 6f 72 6d 61 6c 22 29 3d 3d  v[4],"normal")==
c180: 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
c190: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
c1a0: 70 53 74 6d 74 2c 20 69 64 78 2c 20 61 72 67 76  pStmt, idx, argv
c1b0: 5b 33 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  [3], -1, SQLITE_
c1c0: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 7d 65  TRANSIENT);.  }e
c1d0: 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61  lse if( strcmp(a
c1e0: 72 67 76 5b 34 5d 2c 22 62 6c 6f 62 31 30 22 29  rgv[4],"blob10")
c1f0: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
c200: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
c210: 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 22 61  t(pStmt, idx, "a
c220: 62 63 5c 30 30 30 78 79 7a 5c 30 30 30 70 71 22  bc\000xyz\000pq"
c230: 2c 20 31 30 2c 20 53 51 4c 49 54 45 5f 53 54 41  , 10, SQLITE_STA
c240: 54 49 43 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  TIC);.  }else{. 
c250: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
c260: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 34 74 68  ult(interp, "4th
c270: 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64   argument should
c280: 20 62 65 20 22 0a 20 20 20 20 20 20 20 20 22 5c   be ".        "\
c290: 22 6e 75 6c 6c 5c 22 20 6f 72 20 5c 22 73 74 61  "null\" or \"sta
c2a0: 74 69 63 5c 22 20 6f 72 20 5c 22 6e 6f 72 6d 61  tic\" or \"norma
c2b0: 6c 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  l\"", 0);.    re
c2c0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
c2d0: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
c2e0: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
c2f0: 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53  erp, StmtToDb(pS
c300: 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75  tmt), rc) ) retu
c310: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
c320: 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 63 68  if( rc ){.    ch
c330: 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20 20  ar zBuf[50];.   
c340: 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22   sprintf(zBuf, "
c350: 28 25 64 29 20 22 2c 20 72 63 29 3b 0a 20 20 20  (%d) ", rc);.   
c360: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
c370: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
c380: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
c390: 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ), 0);.    retur
c3a0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
c3b0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
c3c0: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
c3d0: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f  ITE_OMIT_UTF16./
c3e0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f  *.** Usage: add_
c3f0: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 3c 64 62  test_collate <db
c400: 20 70 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75 74   ptr> <utf8> <ut
c410: 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e  f16le> <utf16be>
c420: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  .**.** This func
c430: 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
c440: 74 65 73 74 20 74 68 61 74 20 53 51 4c 69 74 65  test that SQLite
c450: 20 73 65 6c 65 63 74 73 20 74 68 65 20 63 6f 72   selects the cor
c460: 72 65 63 74 20 63 6f 6c 6c 61 74 69 6f 6e 0a 2a  rect collation.*
c470: 2a 20 73 65 71 75 65 6e 63 65 20 63 61 6c 6c 62  * sequence callb
c480: 61 63 6b 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c  ack when multipl
c490: 65 20 76 65 72 73 69 6f 6e 73 20 28 66 6f 72 20  e versions (for 
c4a0: 64 69 66 66 65 72 65 6e 74 20 74 65 78 74 20 65  different text e
c4b0: 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a 20 61 72 65  ncodings).** are
c4c0: 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a   available..**.*
c4d0: 2a 20 43 61 6c 6c 69 6e 67 20 74 68 69 73 20 72  * Calling this r
c4e0: 6f 75 74 69 6e 65 20 72 65 67 69 73 74 65 72 73  outine registers
c4f0: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
c500: 65 71 75 65 6e 63 65 20 22 74 65 73 74 5f 63 6f  equence "test_co
c510: 6c 6c 61 74 65 22 0a 2a 2a 20 77 69 74 68 20 64  llate".** with d
c520: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c  atabase handle <
c530: 64 62 3e 2e 20 54 68 65 20 73 65 63 6f 6e 64 20  db>. The second 
c540: 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65  argument must be
c550: 20 61 20 6c 69 73 74 20 6f 66 20 74 68 72 65 65   a list of three
c560: 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  .** boolean valu
c570: 65 73 2e 20 49 66 20 74 68 65 20 66 69 72 73 74  es. If the first
c580: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 61   is true, then a
c590: 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 65 73 74   version of test
c5a0: 5f 63 6f 6c 6c 61 74 65 20 69 73 0a 2a 2a 20 72  _collate is.** r
c5b0: 65 67 69 73 74 65 72 65 64 20 66 6f 72 20 55 54  egistered for UT
c5c0: 46 2d 38 2c 20 69 66 20 74 68 65 20 73 65 63 6f  F-8, if the seco
c5d0: 6e 64 20 69 73 20 74 72 75 65 2c 20 61 20 76 65  nd is true, a ve
c5e0: 72 73 69 6f 6e 20 69 73 20 72 65 67 69 73 74 65  rsion is registe
c5f0: 72 65 64 20 66 6f 72 0a 2a 2a 20 55 54 46 2d 31  red for.** UTF-1
c600: 36 6c 65 2c 20 69 66 20 74 68 65 20 74 68 69 72  6le, if the thir
c610: 64 20 69 73 20 74 72 75 65 2c 20 61 20 55 54 46  d is true, a UTF
c620: 2d 31 36 62 65 20 76 65 72 73 69 6f 6e 20 69 73  -16be version is
c630: 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 20 50   available..** P
c640: 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73  revious versions
c650: 20 6f 66 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65   of test_collate
c660: 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a 2a   are deleted..**
c670: 0a 2a 2a 20 54 68 65 20 63 6f 6c 6c 61 74 69 6f  .** The collatio
c680: 6e 20 73 65 71 75 65 6e 63 65 20 74 65 73 74 5f  n sequence test_
c690: 63 6f 6c 6c 61 74 65 20 69 73 20 69 6d 70 6c 65  collate is imple
c6a0: 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e  mented by callin
c6b0: 67 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69  g the.** followi
c6c0: 6e 67 20 54 43 4c 20 73 63 72 69 70 74 3a 0a 2a  ng TCL script:.*
c6d0: 2a 0a 2a 2a 20 20 20 22 74 65 73 74 5f 63 6f 6c  *.**   "test_col
c6e0: 6c 61 74 65 20 3c 65 6e 63 3e 20 3c 6c 68 73 3e  late <enc> <lhs>
c6f0: 20 3c 72 68 73 3e 22 0a 2a 2a 0a 2a 2a 20 54 68   <rhs>".**.** Th
c700: 65 20 3c 6c 68 73 3e 20 61 6e 64 20 3c 72 68 73  e <lhs> and <rhs
c710: 3e 20 61 72 65 20 74 68 65 20 74 77 6f 20 76 61  > are the two va
c720: 6c 75 65 73 20 62 65 69 6e 67 20 63 6f 6d 70 61  lues being compa
c730: 72 65 64 2c 20 65 6e 63 6f 64 65 64 20 69 6e 20  red, encoded in 
c740: 55 54 46 2d 38 2e 0a 2a 2a 20 54 68 65 20 3c 65  UTF-8..** The <e
c750: 6e 63 3e 20 70 61 72 61 6d 65 74 65 72 20 69 73  nc> parameter is
c760: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
c770: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 66   the collation f
c780: 75 6e 63 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  unction that.** 
c790: 53 51 4c 69 74 65 20 73 65 6c 65 63 74 65 64 20  SQLite selected 
c7a0: 74 6f 20 63 61 6c 6c 2e 20 54 68 65 20 54 43 4c  to call. The TCL
c7b0: 20 74 65 73 74 20 73 63 72 69 70 74 20 69 6d 70   test script imp
c7c0: 6c 65 6d 65 6e 74 73 20 74 68 65 0a 2a 2a 20 22  lements the.** "
c7d0: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 20 70 72  test_collate" pr
c7e0: 6f 63 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74  oc..**.** Note t
c7f0: 68 61 74 20 74 68 69 73 20 77 69 6c 6c 20 6f 6e  hat this will on
c800: 6c 79 20 77 6f 72 6b 20 77 69 74 68 20 6f 6e 65  ly work with one
c810: 20 69 6e 74 65 70 72 65 74 65 72 20 61 74 20 61   intepreter at a
c820: 20 74 69 6d 65 2c 20 61 73 20 74 68 65 0a 2a 2a   time, as the.**
c830: 20 69 6e 74 65 72 70 20 70 6f 69 6e 74 65 72 20   interp pointer 
c840: 74 6f 20 75 73 65 20 77 68 65 6e 20 65 76 61 6c  to use when eval
c850: 75 61 74 69 6e 67 20 74 68 65 20 54 43 4c 20 73  uating the TCL s
c860: 63 72 69 70 74 20 69 73 20 73 74 6f 72 65 64 20  cript is stored 
c870: 69 6e 0a 2a 2a 20 70 54 65 73 74 43 6f 6c 6c 61  in.** pTestColla
c880: 74 65 49 6e 74 65 72 70 2e 0a 2a 2f 0a 73 74 61  teInterp..*/.sta
c890: 74 69 63 20 54 63 6c 5f 49 6e 74 65 72 70 2a 20  tic Tcl_Interp* 
c8a0: 70 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65  pTestCollateInte
c8b0: 72 70 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 74  rp;.static int t
c8c0: 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63  est_collate_func
c8d0: 28 0a 20 20 76 6f 69 64 20 2a 70 43 74 78 2c 20  (.  void *pCtx, 
c8e0: 0a 20 20 69 6e 74 20 6e 41 2c 20 63 6f 6e 73 74  .  int nA, const
c8f0: 20 76 6f 69 64 20 2a 7a 41 2c 0a 20 20 69 6e 74   void *zA,.  int
c900: 20 6e 42 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20   nB, const void 
c910: 2a 7a 42 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74  *zB.){.  Tcl_Int
c920: 65 72 70 20 2a 69 20 3d 20 70 54 65 73 74 43 6f  erp *i = pTestCo
c930: 6c 6c 61 74 65 49 6e 74 65 72 70 3b 0a 20 20 69  llateInterp;.  i
c940: 6e 74 20 65 6e 63 69 6e 20 3d 20 28 69 6e 74 29  nt encin = (int)
c950: 70 43 74 78 3b 0a 20 20 69 6e 74 20 72 65 73 3b  pCtx;.  int res;
c960: 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 73 71 6c  .  int n;..  sql
c970: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
c980: 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b  ;.  Tcl_Obj *pX;
c990: 0a 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77  ..  pX = Tcl_New
c9a0: 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f  StringObj("test_
c9b0: 63 6f 6c 6c 61 74 65 22 2c 20 2d 31 29 3b 0a 20  collate", -1);. 
c9c0: 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e   Tcl_IncrRefCoun
c9d0: 74 28 70 58 29 3b 0a 0a 20 20 73 77 69 74 63 68  t(pX);..  switch
c9e0: 28 20 65 6e 63 69 6e 20 29 7b 0a 20 20 20 20 63  ( encin ){.    c
c9f0: 61 73 65 20 53 51 4c 49 54 45 5f 55 54 46 38 3a  ase SQLITE_UTF8:
ca00: 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f  .      Tcl_ListO
ca10: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
ca20: 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69  i,pX,Tcl_NewStri
ca30: 6e 67 4f 62 6a 28 22 55 54 46 2d 38 22 2c 2d 31  ngObj("UTF-8",-1
ca40: 29 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ));.      break;
ca50: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
ca60: 5f 55 54 46 31 36 4c 45 3a 0a 20 20 20 20 20 20  _UTF16LE:.      
ca70: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
ca80: 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63  dElement(i,pX,Tc
ca90: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
caa0: 55 54 46 2d 31 36 4c 45 22 2c 2d 31 29 29 3b 0a  UTF-16LE",-1));.
cab0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
cac0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 55 54 46   case SQLITE_UTF
cad0: 31 36 42 45 3a 0a 20 20 20 20 20 20 54 63 6c 5f  16BE:.      Tcl_
cae0: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
caf0: 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e 65  ment(i,pX,Tcl_Ne
cb00: 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d  wStringObj("UTF-
cb10: 31 36 42 45 22 2c 2d 31 29 29 3b 0a 20 20 20 20  16BE",-1));.    
cb20: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66    break;.    def
cb30: 61 75 6c 74 3a 0a 20 20 20 20 20 20 61 73 73 65  ault:.      asse
cb40: 72 74 28 30 29 3b 0a 20 20 7d 0a 0a 20 20 70 56  rt(0);.  }..  pV
cb50: 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75  al = sqlite3Valu
cb60: 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65  eNew();.  sqlite
cb70: 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61  3ValueSetStr(pVa
cb80: 6c 2c 20 6e 41 2c 20 7a 41 2c 20 65 6e 63 69 6e  l, nA, zA, encin
cb90: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
cba0: 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f  ;.  n = sqlite3_
cbb0: 76 61 6c 75 65 5f 62 79 74 65 73 28 70 56 61 6c  value_bytes(pVal
cbc0: 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  );.  Tcl_ListObj
cbd0: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c  AppendElement(i,
cbe0: 70 58 2c 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65  pX,.      Tcl_Ne
cbf0: 77 53 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72  wStringObj((char
cc00: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
cc10: 74 65 78 74 28 70 56 61 6c 29 2c 6e 29 29 3b 0a  text(pVal),n));.
cc20: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
cc30: 74 53 74 72 28 70 56 61 6c 2c 20 6e 42 2c 20 7a  tStr(pVal, nB, z
cc40: 42 2c 20 65 6e 63 69 6e 2c 20 53 51 4c 49 54 45  B, encin, SQLITE
cc50: 5f 53 54 41 54 49 43 29 3b 0a 20 20 6e 20 3d 20  _STATIC);.  n = 
cc60: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
cc70: 74 65 73 28 70 56 61 6c 29 3b 0a 20 20 54 63 6c  tes(pVal);.  Tcl
cc80: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
cc90: 65 6d 65 6e 74 28 69 2c 70 58 2c 0a 20 20 20 20  ement(i,pX,.    
cca0: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
ccb0: 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65  bj((char*)sqlite
ccc0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61  3_value_text(pVa
ccd0: 6c 29 2c 6e 29 29 3b 0a 20 20 73 71 6c 69 74 65  l),n));.  sqlite
cce0: 33 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29  3ValueFree(pVal)
ccf0: 3b 0a 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a  ;..  Tcl_EvalObj
cd00: 45 78 28 69 2c 20 70 58 2c 20 30 29 3b 0a 20 20  Ex(i, pX, 0);.  
cd10: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
cd20: 28 70 58 29 3b 0a 20 20 54 63 6c 5f 47 65 74 49  (pX);.  Tcl_GetI
cd30: 6e 74 46 72 6f 6d 4f 62 6a 28 69 2c 20 54 63 6c  ntFromObj(i, Tcl
cd40: 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 29  _GetObjResult(i)
cd50: 2c 20 26 72 65 73 29 3b 0a 20 20 72 65 74 75 72  , &res);.  retur
cd60: 6e 20 72 65 73 3b 0a 7d 0a 73 74 61 74 69 63 20  n res;.}.static 
cd70: 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65  int test_collate
cd80: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
cd90: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
cda0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
cdb0: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
cdc0: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
cdd0: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
cde0: 62 3b 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 20 20  b;.  int val;.  
cdf0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
ce00: 56 61 6c 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  Val;.  int rc;..
ce10: 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 20    if( objc!=5 ) 
ce20: 67 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20  goto bad_args;. 
ce30: 20 70 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74   pTestCollateInt
ce40: 65 72 70 20 3d 20 69 6e 74 65 72 70 3b 0a 20 20  erp = interp;.  
ce50: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
ce60: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
ce70: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
ce80: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
ce90: 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66 28  CL_ERROR;..  if(
cea0: 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74   TCL_OK!=Tcl_Get
ceb0: 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69  BooleanFromObj(i
cec0: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
ced0: 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54  &val) ) return T
cee0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
cef0: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
cf00: 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 74  collation(db, "t
cf10: 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 53 51  est_collate", SQ
cf20: 4c 49 54 45 5f 55 54 46 38 2c 20 0a 20 20 20 20  LITE_UTF8, .    
cf30: 20 20 20 20 20 20 28 76 6f 69 64 20 2a 29 53 51        (void *)SQ
cf40: 4c 49 54 45 5f 55 54 46 38 2c 20 76 61 6c 3f 74  LITE_UTF8, val?t
cf50: 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63  est_collate_func
cf60: 3a 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  :0);.  if( rc==S
cf70: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
cf80: 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f  if( TCL_OK!=Tcl_
cf90: 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62  GetBooleanFromOb
cfa0: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33  j(interp, objv[3
cfb0: 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75 72  ], &val) ) retur
cfc0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
cfd0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
cfe0: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64  eate_collation(d
cff0: 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65  b, "test_collate
d000: 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  ", SQLITE_UTF16L
d010: 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  E, .            
d020: 28 76 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f 55  (void *)SQLITE_U
d030: 54 46 31 36 4c 45 2c 20 76 61 6c 3f 74 65 73 74  TF16LE, val?test
d040: 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29  _collate_func:0)
d050: 3b 0a 20 20 20 20 69 66 28 20 54 43 4c 5f 4f 4b  ;.    if( TCL_OK
d060: 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e  !=Tcl_GetBoolean
d070: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
d080: 6f 62 6a 76 5b 34 5d 2c 20 26 76 61 6c 29 20 29  objv[4], &val) )
d090: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
d0a0: 52 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  R;..#ifdef SQLIT
d0b0: 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 20 20 69  E_MEMDEBUG.    i
d0c0: 66 28 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c  f( sqlite3_iMall
d0d0: 6f 63 46 61 69 6c 3e 30 20 29 7b 0a 20 20 20 20  ocFail>0 ){.    
d0e0: 20 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f    sqlite3_iMallo
d0f0: 63 46 61 69 6c 2b 2b 3b 0a 20 20 20 20 7d 0a 23  cFail++;.    }.#
d100: 65 6e 64 69 66 0a 20 20 20 20 70 56 61 6c 20 3d  endif.    pVal =
d110: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77   sqlite3ValueNew
d120: 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  ();.    sqlite3V
d130: 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
d140: 20 2d 31 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61   -1, "test_colla
d150: 74 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  te", SQLITE_UTF8
d160: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d170: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
d180: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
d190: 69 6f 6e 31 36 28 64 62 2c 20 0a 20 20 20 20 20  ion16(db, .     
d1a0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75       sqlite3Valu
d1b0: 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49  eText(pVal, SQLI
d1c0: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 29 2c  TE_UTF16NATIVE),
d1d0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c   SQLITE_UTF16BE,
d1e0: 20 0a 20 20 20 20 20 20 20 20 20 20 28 76 6f 69   .          (voi
d1f0: 64 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 31 36  d *)SQLITE_UTF16
d200: 42 45 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f 6c  BE, val?test_col
d210: 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20 20  late_func:0);.  
d220: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72    sqlite3ValueFr
d230: 65 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20  ee(pVal);.  }.  
d240: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
d250: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
d260: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
d270: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 0a 20 20  TCL_ERROR;.  .  
d280: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
d290: 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  K ){.    Tcl_App
d2a0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
d2b0: 2c 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  , sqlite3TestErr
d2c0: 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a  orName(rc), 0);.
d2d0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
d2e0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75  RROR;.  }.  retu
d2f0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f  rn TCL_OK;..bad_
d300: 61 72 67 73 3a 0a 20 20 54 63 6c 5f 41 70 70 65  args:.  Tcl_Appe
d310: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
d320: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
d330: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
d340: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
d350: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
d360: 5d 2c 20 30 29 2c 20 22 20 3c 44 42 3e 20 3c 75  ], 0), " <DB> <u
d370: 74 66 38 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c  tf8> <utf16le> <
d380: 75 74 66 31 36 62 65 3e 22 2c 20 30 29 3b 0a 20  utf16be>", 0);. 
d390: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
d3a0: 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e  R;.}../*.** When
d3b0: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 6e   the collation n
d3c0: 65 65 64 65 64 20 63 61 6c 6c 62 61 63 6b 20 69  eeded callback i
d3d0: 73 20 69 6e 76 6f 6b 65 64 2c 20 72 65 63 6f 72  s invoked, recor
d3e0: 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 0a 2a  d the name of .*
d3f0: 2a 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20  * the requested 
d400: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
d410: 6f 6e 20 68 65 72 65 2e 20 20 54 68 65 20 72 65  on here.  The re
d420: 63 6f 72 64 65 64 20 6e 61 6d 65 20 69 73 20 6c  corded name is l
d430: 69 6e 6b 65 64 0a 2a 2a 20 74 6f 20 61 20 54 43  inked.** to a TC
d440: 4c 20 76 61 72 69 61 62 6c 65 20 61 6e 64 20 75  L variable and u
d450: 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  sed to make sure
d460: 20 74 68 61 74 20 74 68 65 20 72 65 71 75 65 73   that the reques
d470: 74 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 0a 2a 2a  ted collation.**
d480: 20 6e 61 6d 65 20 69 73 20 63 6f 72 72 65 63 74   name is correct
d490: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72  ..*/.static char
d4a0: 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f   zNeededCollatio
d4b0: 6e 5b 32 30 30 5d 3b 0a 73 74 61 74 69 63 20 63  n[200];.static c
d4c0: 68 61 72 20 2a 70 7a 4e 65 65 64 65 64 43 6f 6c  har *pzNeededCol
d4d0: 6c 61 74 69 6f 6e 20 3d 20 7a 4e 65 65 64 65 64  lation = zNeeded
d4e0: 43 6f 6c 6c 61 74 69 6f 6e 3b 0a 0a 0a 2f 2a 0a  Collation;.../*.
d4f0: 2a 2a 20 43 61 6c 6c 65 64 20 77 68 65 6e 20 61  ** Called when a
d500: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
d510: 6e 63 65 20 69 73 20 6e 65 65 64 65 64 2e 20 20  nce is needed.  
d520: 52 65 67 69 73 74 65 72 65 64 20 75 73 69 6e 67  Registered using
d530: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c  .** sqlite3_coll
d540: 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31 36 28 29  ation_needed16()
d550: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
d560: 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65   test_collate_ne
d570: 65 64 65 64 5f 63 62 28 0a 20 20 76 6f 69 64 20  eded_cb(.  void 
d580: 2a 70 43 74 78 2c 20 0a 20 20 73 71 6c 69 74 65  *pCtx, .  sqlite
d590: 33 20 2a 64 62 2c 0a 20 20 69 6e 74 20 65 54 65  3 *db,.  int eTe
d5a0: 78 74 52 65 70 2c 0a 20 20 63 6f 6e 73 74 20 76  xtRep,.  const v
d5b0: 6f 69 64 20 2a 70 4e 61 6d 65 0a 29 7b 0a 20 20  oid *pName.){.  
d5c0: 69 6e 74 20 65 6e 63 20 3d 20 45 4e 43 28 64 62  int enc = ENC(db
d5d0: 29 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68  );.  int i;.  ch
d5e0: 61 72 20 2a 7a 3b 0a 20 20 66 6f 72 28 7a 20 3d  ar *z;.  for(z =
d5f0: 20 28 63 68 61 72 2a 29 70 4e 61 6d 65 2c 20 69   (char*)pName, i
d600: 3d 30 3b 20 2a 7a 20 7c 7c 20 7a 5b 31 5d 3b 20  =0; *z || z[1]; 
d610: 7a 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 2a 7a  z++){.    if( *z
d620: 20 29 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74   ) zNeededCollat
d630: 69 6f 6e 5b 69 2b 2b 5d 20 3d 20 2a 7a 3b 0a 20  ion[i++] = *z;. 
d640: 20 7d 0a 20 20 7a 4e 65 65 64 65 64 43 6f 6c 6c   }.  zNeededColl
d650: 61 74 69 6f 6e 5b 69 5d 20 3d 20 30 3b 0a 20 20  ation[i] = 0;.  
d660: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
d670: 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 20 20 20 20  ollation(.      
d680: 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74  db, "test_collat
d690: 65 22 2c 20 45 4e 43 28 64 62 29 2c 20 28 76 6f  e", ENC(db), (vo
d6a0: 69 64 20 2a 29 65 6e 63 2c 20 74 65 73 74 5f 63  id *)enc, test_c
d6b0: 6f 6c 6c 61 74 65 5f 66 75 6e 63 29 3b 0a 7d 0a  ollate_func);.}.
d6c0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64  ./*.** Usage: ad
d6d0: 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e  d_test_collate_n
d6e0: 65 65 64 65 64 20 44 42 0a 2a 2f 0a 73 74 61 74  eeded DB.*/.stat
d6f0: 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c  ic int test_coll
d700: 61 74 65 5f 6e 65 65 64 65 64 28 0a 20 20 76 6f  ate_needed(.  vo
d710: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
d720: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
d730: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
d740: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
d750: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
d760: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
d770: 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
d780: 6a 63 21 3d 32 20 29 20 67 6f 74 6f 20 62 61 64  jc!=2 ) goto bad
d790: 5f 61 72 67 73 3b 0a 20 20 69 66 28 20 67 65 74  _args;.  if( get
d7a0: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
d7b0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
d7c0: 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
d7d0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
d7e0: 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
d7f0: 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64  3_collation_need
d800: 65 64 31 36 28 64 62 2c 20 30 2c 20 74 65 73 74  ed16(db, 0, test
d810: 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 5f  _collate_needed_
d820: 63 62 29 3b 0a 20 20 7a 4e 65 65 64 65 64 43 6f  cb);.  zNeededCo
d830: 6c 6c 61 74 69 6f 6e 5b 30 5d 20 3d 20 30 3b 0a  llation[0] = 0;.
d840: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
d850: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
d860: 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
d870: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
d880: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 62  eturn TCL_OK;..b
d890: 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 57  ad_args:.  Tcl_W
d8a0: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
d8b0: 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42  rp, 1, objv, "DB
d8c0: 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ");.  return TCL
d8d0: 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  _ERROR;.}../*.**
d8e0: 20 74 63 6c 63 6d 64 3a 20 20 20 61 64 64 5f 61   tclcmd:   add_a
d8f0: 6c 69 67 6e 6d 65 6e 74 5f 74 65 73 74 5f 63 6f  lignment_test_co
d900: 6c 6c 61 74 69 6f 6e 73 20 20 44 42 0a 2a 2a 0a  llations  DB.**.
d910: 2a 2a 20 41 64 64 20 74 77 6f 20 6e 65 77 20 63  ** Add two new c
d920: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
d930: 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
d940: 73 65 20 44 42 0a 2a 2a 0a 2a 2a 20 20 20 20 20  se DB.**.**     
d950: 75 74 66 31 36 5f 61 6c 69 67 6e 65 64 0a 2a 2a  utf16_aligned.**
d960: 20 20 20 20 20 75 74 66 31 36 5f 75 6e 61 6c 69       utf16_unali
d970: 67 6e 65 64 0a 2a 2a 0a 2a 2a 20 42 6f 74 68 20  gned.**.** Both 
d980: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
d990: 63 65 73 20 75 73 65 20 74 68 65 20 73 61 6d 65  ces use the same
d9a0: 20 73 6f 72 74 20 6f 72 64 65 72 20 61 73 20 42   sort order as B
d9b0: 49 4e 41 52 59 2e 0a 2a 2a 20 54 68 65 20 6f 6e  INARY..** The on
d9c0: 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  ly difference is
d9d0: 20 74 68 61 74 20 74 68 65 20 75 74 66 31 36 5f   that the utf16_
d9e0: 61 6c 69 67 6e 65 64 20 63 6f 6c 6c 61 74 69 6e  aligned collatin
d9f0: 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 69 73  g.** sequence is
da00: 20 64 65 63 6c 61 72 65 64 20 77 69 74 68 20 74   declared with t
da10: 68 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 5f  he SQLITE_UTF16_
da20: 41 4c 49 47 4e 45 44 20 66 6c 61 67 2e 0a 2a 2a  ALIGNED flag..**
da30: 20 42 6f 74 68 20 63 6f 6c 6c 61 74 69 6e 67 20   Both collating 
da40: 66 75 6e 63 74 69 6f 6e 73 20 69 6e 63 72 65 6d  functions increm
da50: 65 6e 74 20 74 68 65 20 75 6e 61 6c 69 67 6e 65  ent the unaligne
da60: 64 20 75 74 66 31 36 20 63 6f 75 6e 74 65 72 0a  d utf16 counter.
da70: 2a 2a 20 77 68 65 6e 65 76 65 72 20 74 68 65 79  ** whenever they
da80: 20 73 65 65 20 61 20 73 74 72 69 6e 67 20 74 68   see a string th
da90: 61 74 20 62 65 67 69 6e 73 20 6f 6e 20 61 6e 20  at begins on an 
daa0: 6f 64 64 20 62 79 74 65 20 62 6f 75 6e 64 61 72  odd byte boundar
dab0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  y..*/.static int
dac0: 20 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e   unaligned_strin
dad0: 67 5f 63 6f 75 6e 74 65 72 20 3d 20 30 3b 0a 73  g_counter = 0;.s
dae0: 74 61 74 69 63 20 69 6e 74 20 61 6c 69 67 6e 6d  tatic int alignm
daf0: 65 6e 74 43 6f 6c 6c 46 75 6e 63 28 0a 20 20 76  entCollFunc(.  v
db00: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
db10: 69 6e 74 20 6e 4b 65 79 31 2c 20 63 6f 6e 73 74  int nKey1, const
db20: 20 76 6f 69 64 20 2a 70 4b 65 79 31 2c 0a 20 20   void *pKey1,.  
db30: 69 6e 74 20 6e 4b 65 79 32 2c 20 63 6f 6e 73 74  int nKey2, const
db40: 20 76 6f 69 64 20 2a 70 4b 65 79 32 0a 29 7b 0a   void *pKey2.){.
db50: 20 20 69 6e 74 20 72 63 2c 20 6e 3b 0a 20 20 6e    int rc, n;.  n
db60: 20 3d 20 6e 4b 65 79 31 3c 6e 4b 65 79 32 20 3f   = nKey1<nKey2 ?
db70: 20 6e 4b 65 79 31 20 3a 20 6e 4b 65 79 32 3b 0a   nKey1 : nKey2;.
db80: 20 20 69 66 28 20 6e 4b 65 79 31 3e 30 20 26 26    if( nKey1>0 &&
db90: 20 31 3d 3d 28 31 26 28 69 6e 74 29 70 4b 65 79   1==(1&(int)pKey
dba0: 31 29 20 29 20 75 6e 61 6c 69 67 6e 65 64 5f 73  1) ) unaligned_s
dbb0: 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72 2b 2b 3b  tring_counter++;
dbc0: 0a 20 20 69 66 28 20 6e 4b 65 79 32 3e 30 20 26  .  if( nKey2>0 &
dbd0: 26 20 31 3d 3d 28 31 26 28 69 6e 74 29 70 4b 65  & 1==(1&(int)pKe
dbe0: 79 32 29 20 29 20 75 6e 61 6c 69 67 6e 65 64 5f  y2) ) unaligned_
dbf0: 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72 2b 2b  string_counter++
dc00: 3b 0a 20 20 72 63 20 3d 20 6d 65 6d 63 6d 70 28  ;.  rc = memcmp(
dc10: 70 4b 65 79 31 2c 20 70 4b 65 79 32 2c 20 6e 29  pKey1, pKey2, n)
dc20: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30 20 29 7b  ;.  if( rc==0 ){
dc30: 0a 20 20 20 20 72 63 20 3d 20 6e 4b 65 79 31 20  .    rc = nKey1 
dc40: 2d 20 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20 20 72  - nKey2;.  }.  r
dc50: 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 73 74 61 74  eturn rc;.}.stat
dc60: 69 63 20 69 6e 74 20 61 64 64 5f 61 6c 69 67 6e  ic int add_align
dc70: 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61 74  ment_test_collat
dc80: 69 6f 6e 73 28 0a 20 20 76 6f 69 64 20 2a 20 63  ions(.  void * c
dc90: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
dca0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
dcb0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
dcc0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
dcd0: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
dce0: 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 6f 62 6a  3 *db;.  if( obj
dcf0: 63 3e 3d 32 20 29 7b 0a 20 20 20 20 69 66 28 20  c>=2 ){.    if( 
dd00: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
dd10: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
dd20: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
dd30: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
dd40: 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65  RROR;.    sqlite
dd50: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
dd60: 6f 6e 28 64 62 2c 20 22 75 74 66 31 36 5f 75 6e  on(db, "utf16_un
dd70: 61 6c 69 67 6e 65 64 22 2c 0a 20 20 20 20 20 20  aligned",.      
dd80: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 2c 20    SQLITE_UTF16, 
dd90: 0a 20 20 20 20 20 20 20 20 30 2c 20 61 6c 69 67  .        0, alig
dda0: 6e 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63 29 3b 0a  nmentCollFunc);.
ddb0: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
ddc0: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  te_collation(db,
ddd0: 20 22 75 74 66 31 36 5f 61 6c 69 67 6e 65 64 22   "utf16_aligned"
dde0: 2c 0a 20 20 20 20 20 20 20 20 53 51 4c 49 54 45  ,.        SQLITE
ddf0: 5f 55 54 46 31 36 20 7c 20 53 51 4c 49 54 45 5f  _UTF16 | SQLITE_
de00: 55 54 46 31 36 5f 41 4c 49 47 4e 45 44 2c 20 0a  UTF16_ALIGNED, .
de10: 20 20 20 20 20 20 20 20 30 2c 20 61 6c 69 67 6e          0, align
de20: 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63 29 3b 0a 20  mentCollFunc);. 
de30: 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49   }.  return SQLI
de40: 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20  TE_OK;.}.#endif 
de50: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
de60: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 29 20 2a  TE_OMIT_UTF16) *
de70: 2f 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  /../*.** Usage: 
de80: 61 64 64 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  add_test_functio
de90: 6e 20 3c 64 62 20 70 74 72 3e 20 3c 75 74 66 38  n <db ptr> <utf8
dea0: 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66  > <utf16le> <utf
deb0: 31 36 62 65 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  16be>.**.** This
dec0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
ded0: 64 20 74 6f 20 74 65 73 74 20 74 68 61 74 20 53  d to test that S
dee0: 51 4c 69 74 65 20 73 65 6c 65 63 74 73 20 74 68  QLite selects th
def0: 65 20 63 6f 72 72 65 63 74 20 75 73 65 72 0a 2a  e correct user.*
df00: 2a 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 62  * function callb
df10: 61 63 6b 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c  ack when multipl
df20: 65 20 76 65 72 73 69 6f 6e 73 20 28 66 6f 72 20  e versions (for 
df30: 64 69 66 66 65 72 65 6e 74 20 74 65 78 74 20 65  different text e
df40: 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a 20 61 72 65  ncodings).** are
df50: 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a   available..**.*
df60: 2a 20 43 61 6c 6c 69 6e 67 20 74 68 69 73 20 72  * Calling this r
df70: 6f 75 74 69 6e 65 20 72 65 67 69 73 74 65 72 73  outine registers
df80: 20 75 70 20 74 6f 20 74 68 72 65 65 20 76 65 72   up to three ver
df90: 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 75 73 65  sions of the use
dfa0: 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 22 74  r function.** "t
dfb0: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 20 77 69  est_function" wi
dfc0: 74 68 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  th database hand
dfd0: 6c 65 20 3c 64 62 3e 2e 20 20 49 66 20 74 68 65  le <db>.  If the
dfe0: 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74   second argument
dff0: 20 69 73 0a 2a 2a 20 74 72 75 65 2c 20 74 68 65   is.** true, the
e000: 6e 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  n a version of t
e010: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 69 73 20  est_function is 
e020: 72 65 67 69 73 74 65 72 65 64 20 66 6f 72 20 55  registered for U
e030: 54 46 2d 38 2c 20 69 66 20 74 68 65 0a 2a 2a 20  TF-8, if the.** 
e040: 74 68 69 72 64 20 69 73 20 74 72 75 65 2c 20 61  third is true, a
e050: 20 76 65 72 73 69 6f 6e 20 69 73 20 72 65 67 69   version is regi
e060: 73 74 65 72 65 64 20 66 6f 72 20 55 54 46 2d 31  stered for UTF-1
e070: 36 6c 65 2c 20 69 66 20 74 68 65 20 66 6f 75 72  6le, if the four
e080: 74 68 20 69 73 0a 2a 2a 20 74 72 75 65 2c 20 61  th is.** true, a
e090: 20 55 54 46 2d 31 36 62 65 20 76 65 72 73 69 6f   UTF-16be versio
e0a0: 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20  n is available. 
e0b0: 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f   Previous versio
e0c0: 6e 73 20 6f 66 0a 2a 2a 20 74 65 73 74 5f 66 75  ns of.** test_fu
e0d0: 6e 63 74 69 6f 6e 20 61 72 65 20 64 65 6c 65 74  nction are delet
e0e0: 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 73  ed..**.** The us
e0f0: 65 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69  er function is i
e100: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61  mplemented by ca
e110: 6c 6c 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77  lling the follow
e120: 69 6e 67 20 54 43 4c 20 73 63 72 69 70 74 3a 0a  ing TCL script:.
e130: 2a 2a 0a 2a 2a 20 20 20 22 74 65 73 74 5f 66 75  **.**   "test_fu
e140: 6e 63 74 69 6f 6e 20 3c 65 6e 63 3e 20 3c 61 72  nction <enc> <ar
e150: 67 3e 22 0a 2a 2a 0a 2a 2a 20 57 68 65 72 65 20  g>".**.** Where 
e160: 3c 65 6e 63 3e 20 69 73 20 6f 6e 65 20 6f 66 20  <enc> is one of 
e170: 55 54 46 2d 38 2c 20 55 54 46 2d 31 36 4c 45 20  UTF-8, UTF-16LE 
e180: 6f 72 20 55 54 46 31 36 42 45 2c 20 61 6e 64 20  or UTF16BE, and 
e190: 3c 61 72 67 3e 20 69 73 20 74 68 65 0a 2a 2a 20  <arg> is the.** 
e1a0: 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 20  single argument 
e1b0: 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 53 51  passed to the SQ
e1c0: 4c 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 65 20  L function. The 
e1d0: 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  value returned b
e1e0: 79 0a 2a 2a 20 74 68 65 20 54 43 4c 20 73 63 72  y.** the TCL scr
e1f0: 69 70 74 20 69 73 20 75 73 65 64 20 61 73 20 74  ipt is used as t
e200: 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  he return value 
e210: 6f 66 20 74 68 65 20 53 51 4c 20 66 75 6e 63 74  of the SQL funct
e220: 69 6f 6e 2e 20 49 74 0a 2a 2a 20 69 73 20 70 61  ion. It.** is pa
e230: 73 73 65 64 20 74 6f 20 53 51 4c 69 74 65 20 75  ssed to SQLite u
e240: 73 69 6e 67 20 55 54 46 2d 31 36 42 45 20 66 6f  sing UTF-16BE fo
e250: 72 20 61 20 55 54 46 2d 38 20 74 65 73 74 5f 66  r a UTF-8 test_f
e260: 75 6e 63 74 69 6f 6e 28 29 2c 20 55 54 46 2d 38  unction(), UTF-8
e270: 0a 2a 2a 20 66 6f 72 20 61 20 55 54 46 2d 31 36  .** for a UTF-16
e280: 4c 45 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  LE test_function
e290: 28 29 2c 20 61 6e 64 20 55 54 46 2d 31 36 4c 45  (), and UTF-16LE
e2a0: 20 66 6f 72 20 61 6e 20 69 6d 70 6c 65 6d 65 6e   for an implemen
e2b0: 74 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 70  tation that.** p
e2c0: 72 65 66 65 72 73 20 55 54 46 2d 31 36 42 45 2e  refers UTF-16BE.
e2d0: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
e2e0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 73 74  TE_OMIT_UTF16.st
e2f0: 61 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f 66  atic void test_f
e300: 75 6e 63 74 69 6f 6e 5f 75 74 66 38 28 0a 20 20  unction_utf8(.  
e310: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
e320: 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41  *pCtx, .  int nA
e330: 72 67 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg,.  sqlite3_va
e340: 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  lue **argv.){.  
e350: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
e360: 72 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  rp;.  Tcl_Obj *p
e370: 58 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  X;.  sqlite3_val
e380: 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65  ue *pVal;.  inte
e390: 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70  rp = (Tcl_Interp
e3a0: 20 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f   *)sqlite3_user_
e3b0: 64 61 74 61 28 70 43 74 78 29 3b 0a 20 20 70 58  data(pCtx);.  pX
e3c0: 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67   = Tcl_NewString
e3d0: 4f 62 6a 28 22 74 65 73 74 5f 66 75 6e 63 74 69  Obj("test_functi
e3e0: 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f  on", -1);.  Tcl_
e3f0: 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29  IncrRefCount(pX)
e400: 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
e410: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
e420: 65 72 70 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77  erp, pX, Tcl_New
e430: 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 38  StringObj("UTF-8
e440: 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c  ", -1));.  Tcl_L
e450: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
e460: 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20  ent(interp, pX, 
e470: 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74  .      Tcl_NewSt
e480: 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73  ringObj((char*)s
e490: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
e4a0: 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29  t(argv[0]), -1))
e4b0: 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45  ;.  Tcl_EvalObjE
e4c0: 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30 29  x(interp, pX, 0)
e4d0: 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  ;.  Tcl_DecrRefC
e4e0: 6f 75 6e 74 28 70 58 29 3b 0a 20 20 73 71 6c 69  ount(pX);.  sqli
e4f0: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
e500: 70 43 74 78 2c 20 54 63 6c 5f 47 65 74 53 74 72  pCtx, Tcl_GetStr
e510: 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ingResult(interp
e520: 29 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52  ), -1, SQLITE_TR
e530: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 70 56 61 6c  ANSIENT);.  pVal
e540: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
e550: 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ew();.  sqlite3V
e560: 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
e570: 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72 69   -1, Tcl_GetStri
e580: 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  ngResult(interp)
e590: 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  , .      SQLITE_
e5a0: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
e5b0: 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  TIC);.  sqlite3_
e5c0: 72 65 73 75 6c 74 5f 74 65 78 74 31 36 62 65 28  result_text16be(
e5d0: 70 43 74 78 2c 20 73 71 6c 69 74 65 33 5f 76 61  pCtx, sqlite3_va
e5e0: 6c 75 65 5f 74 65 78 74 31 36 62 65 28 70 56 61  lue_text16be(pVa
e5f0: 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c 20 53 51  l),.      -1, SQ
e600: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
e610: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  .  sqlite3ValueF
e620: 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a 73 74 61  ree(pVal);.}.sta
e630: 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f 66 75  tic void test_fu
e640: 6e 63 74 69 6f 6e 5f 75 74 66 31 36 6c 65 28 0a  nction_utf16le(.
e650: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
e660: 74 20 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74 20  t *pCtx, .  int 
e670: 6e 41 72 67 2c 0a 20 20 73 71 6c 69 74 65 33 5f  nArg,.  sqlite3_
e680: 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a  value **argv.){.
e690: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
e6a0: 74 65 72 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20  terp;.  Tcl_Obj 
e6b0: 2a 70 58 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  *pX;.  sqlite3_v
e6c0: 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e  alue *pVal;.  in
e6d0: 74 65 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74 65  terp = (Tcl_Inte
e6e0: 72 70 20 2a 29 73 71 6c 69 74 65 33 5f 75 73 65  rp *)sqlite3_use
e6f0: 72 5f 64 61 74 61 28 70 43 74 78 29 3b 0a 20 20  r_data(pCtx);.  
e700: 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69  pX = Tcl_NewStri
e710: 6e 67 4f 62 6a 28 22 74 65 73 74 5f 66 75 6e 63  ngObj("test_func
e720: 74 69 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20 54 63  tion", -1);.  Tc
e730: 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70  l_IncrRefCount(p
e740: 58 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  X);.  Tcl_ListOb
e750: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
e760: 6e 74 65 72 70 2c 20 70 58 2c 20 54 63 6c 5f 4e  nterp, pX, Tcl_N
e770: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46  ewStringObj("UTF
e780: 2d 31 36 4c 45 22 2c 20 2d 31 29 29 3b 0a 20 20  -16LE", -1));.  
e790: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
e7a0: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
e7b0: 20 70 58 2c 20 0a 20 20 20 20 20 20 54 63 6c 5f   pX, .      Tcl_
e7c0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28 63 68  NewStringObj((ch
e7d0: 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
e7e0: 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c  e_text(argv[0]),
e7f0: 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 45 76 61   -1));.  Tcl_Eva
e800: 6c 4f 62 6a 45 78 28 69 6e 74 65 72 70 2c 20 70  lObjEx(interp, p
e810: 58 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63  X, 0);.  Tcl_Dec
e820: 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20  rRefCount(pX);. 
e830: 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56   pVal = sqlite3V
e840: 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c  alueNew();.  sql
e850: 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
e860: 70 56 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f 47 65  pVal, -1, Tcl_Ge
e870: 74 53 74 72 69 6e 67 52 65 73 75 6c 74 28 69 6e  tStringResult(in
e880: 74 65 72 70 29 2c 20 0a 20 20 20 20 20 20 53 51  terp), .      SQ
e890: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
e8a0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 73 71 6c  E_STATIC);.  sql
e8b0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
e8c0: 28 70 43 74 78 2c 28 63 68 61 72 2a 29 73 71 6c  (pCtx,(char*)sql
e8d0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
e8e0: 70 56 61 6c 29 2c 2d 31 2c 53 51 4c 49 54 45 5f  pVal),-1,SQLITE_
e8f0: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71  TRANSIENT);.  sq
e900: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
e910: 56 61 6c 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76  Val);.}.static v
e920: 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  oid test_functio
e930: 6e 5f 75 74 66 31 36 62 65 28 0a 20 20 73 71 6c  n_utf16be(.  sql
e940: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
e950: 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c  tx, .  int nArg,
e960: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
e970: 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c   **argv.){.  Tcl
e980: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b  _Interp *interp;
e990: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a  .  Tcl_Obj *pX;.
e9a0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
e9b0: 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20  *pVal;.  interp 
e9c0: 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29  = (Tcl_Interp *)
e9d0: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
e9e0: 61 28 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20  a(pCtx);.  pX = 
e9f0: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
ea00: 28 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22  ("test_function"
ea10: 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63  , -1);.  Tcl_Inc
ea20: 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20  rRefCount(pX);. 
ea30: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
ea40: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
ea50: 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72  , pX, Tcl_NewStr
ea60: 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 42 45  ingObj("UTF-16BE
ea70: 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c  ", -1));.  Tcl_L
ea80: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
ea90: 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20  ent(interp, pX, 
eaa0: 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74  .      Tcl_NewSt
eab0: 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73  ringObj((char*)s
eac0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
ead0: 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29  t(argv[0]), -1))
eae0: 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45  ;.  Tcl_EvalObjE
eaf0: 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30 29  x(interp, pX, 0)
eb00: 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  ;.  Tcl_DecrRefC
eb10: 6f 75 6e 74 28 70 58 29 3b 0a 20 20 70 56 61 6c  ount(pX);.  pVal
eb20: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
eb30: 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ew();.  sqlite3V
eb40: 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
eb50: 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72 69   -1, Tcl_GetStri
eb60: 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  ngResult(interp)
eb70: 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  , .      SQLITE_
eb80: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
eb90: 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  TIC);.  sqlite3_
eba0: 72 65 73 75 6c 74 5f 74 65 78 74 31 36 6c 65 28  result_text16le(
ebb0: 70 43 74 78 2c 20 73 71 6c 69 74 65 33 5f 76 61  pCtx, sqlite3_va
ebc0: 6c 75 65 5f 74 65 78 74 31 36 6c 65 28 70 56 61  lue_text16le(pVa
ebd0: 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c 20 53 51  l),.      -1, SQ
ebe0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
ebf0: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  .  sqlite3ValueF
ec00: 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a 23 65 6e  ree(pVal);.}.#en
ec10: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
ec20: 49 54 5f 55 54 46 31 36 20 2a 2f 0a 73 74 61 74  IT_UTF16 */.stat
ec30: 69 63 20 69 6e 74 20 74 65 73 74 5f 66 75 6e 63  ic int test_func
ec40: 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63  tion(.  void * c
ec50: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
ec60: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
ec70: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
ec80: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
ec90: 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
eca0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
ecb0: 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  6.  sqlite3 *db;
ecc0: 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 0a 20 20 69  .  int val;..  i
ecd0: 66 28 20 6f 62 6a 63 21 3d 35 20 29 20 67 6f 74  f( objc!=5 ) got
ece0: 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20 20 69 66  o bad_args;.  if
ecf0: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
ed00: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
ed10: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
ed20: 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
ed30: 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66 28 20 54  _ERROR;..  if( T
ed40: 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
ed50: 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
ed60: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 76  erp, objv[2], &v
ed70: 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
ed80: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61  _ERROR;.  if( va
ed90: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
eda0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
edb0: 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74  (db, "test_funct
edc0: 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f  ion", 1, SQLITE_
edd0: 55 54 46 38 2c 20 0a 20 20 20 20 20 20 20 20 69  UTF8, .        i
ede0: 6e 74 65 72 70 2c 20 74 65 73 74 5f 66 75 6e 63  nterp, test_func
edf0: 74 69 6f 6e 5f 75 74 66 38 2c 20 30 2c 20 30 29  tion_utf8, 0, 0)
ee00: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 43 4c 5f  ;.  }.  if( TCL_
ee10: 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65  OK!=Tcl_GetBoole
ee20: 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  anFromObj(interp
ee30: 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 29  , objv[3], &val)
ee40: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
ee50: 52 4f 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29  ROR;.  if( val )
ee60: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72  {.    sqlite3_cr
ee70: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62  eate_function(db
ee80: 2c 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  , "test_function
ee90: 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  ", 1, SQLITE_UTF
eea0: 31 36 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 69  16LE, .        i
eeb0: 6e 74 65 72 70 2c 20 74 65 73 74 5f 66 75 6e 63  nterp, test_func
eec0: 74 69 6f 6e 5f 75 74 66 31 36 6c 65 2c 20 30 2c  tion_utf16le, 0,
eed0: 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54   0);.  }.  if( T
eee0: 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
eef0: 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
ef00: 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 76  erp, objv[4], &v
ef10: 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
ef20: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61  _ERROR;.  if( va
ef30: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
ef40: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
ef50: 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74  (db, "test_funct
ef60: 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f  ion", 1, SQLITE_
ef70: 55 54 46 31 36 42 45 2c 20 0a 20 20 20 20 20 20  UTF16BE, .      
ef80: 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66    interp, test_f
ef90: 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 62 65 2c  unction_utf16be,
efa0: 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 72   0, 0);.  }..  r
efb0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 62 61  eturn TCL_OK;.ba
efc0: 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 41 70  d_args:.  Tcl_Ap
efd0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
efe0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
eff0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
f000: 0a 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74  .      Tcl_GetSt
f010: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
f020: 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44 42 3e 20  [0], 0), " <DB> 
f030: 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c 65 3e  <utf8> <utf16le>
f040: 20 3c 75 74 66 31 36 62 65 3e 22 2c 20 30 29 3b   <utf16be>", 0);
f050: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
f060: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
f070: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
f080: 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OR;.}../*.** Usa
f090: 67 65 3a 20 20 20 20 20 20 20 20 20 74 65 73 74  ge:         test
f0a0: 5f 65 72 72 73 74 72 20 3c 65 72 72 20 63 6f 64  _errstr <err cod
f0b0: 65 3e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  e>.**.** Test th
f0c0: 61 74 20 74 68 65 20 65 6e 67 6c 69 73 68 20 6c  at the english l
f0d0: 61 6e 67 75 61 67 65 20 73 74 72 69 6e 67 20 65  anguage string e
f0e0: 71 75 69 76 61 6c 65 6e 74 73 20 66 6f 72 20 73  quivalents for s
f0f0: 71 6c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65  qlite error code
f100: 73 0a 2a 2a 20 61 72 65 20 73 61 6e 65 2e 20 54  s.** are sane. T
f110: 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  he parameter is 
f120: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
f130: 73 65 6e 74 69 6e 67 20 61 6e 20 73 71 6c 69 74  senting an sqlit
f140: 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a  e error code..**
f150: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
f160: 20 6c 69 73 74 20 6f 66 20 74 77 6f 20 65 6c 65   list of two ele
f170: 6d 65 6e 74 73 2c 20 74 68 65 20 73 74 72 69 6e  ments, the strin
f180: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
f190: 20 6f 66 20 74 68 65 0a 2a 2a 20 65 72 72 6f 72   of the.** error
f1a0: 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20 65 6e   code and the en
f1b0: 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20 65  glish language e
f1c0: 78 70 6c 61 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  xplanation..*/.s
f1d0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65  tatic int test_e
f1e0: 72 72 73 74 72 28 0a 20 20 76 6f 69 64 20 2a 20  rrstr(.  void * 
f1f0: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
f200: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
f210: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
f220: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
f230: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 68 61 72 20  bjv[].){.  char 
f240: 2a 7a 43 6f 64 65 3b 0a 20 20 69 6e 74 20 69 3b  *zCode;.  int i;
f250: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 31 20 29  .  if( objc!=1 )
f260: 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
f270: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
f280: 2c 20 6f 62 6a 76 2c 20 22 3c 65 72 72 6f 72 20  , objv, "<error 
f290: 63 6f 64 65 3e 22 29 3b 0a 20 20 7d 0a 0a 20 20  code>");.  }..  
f2a0: 7a 43 6f 64 65 20 3d 20 54 63 6c 5f 47 65 74 53  zCode = Tcl_GetS
f2b0: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a  tring(objv[1]);.
f2c0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 32 30 30    for(i=0; i<200
f2d0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
f2e0: 30 3d 3d 73 74 72 63 6d 70 28 74 31 45 72 72 6f  0==strcmp(t1Erro
f2f0: 72 4e 61 6d 65 28 69 29 2c 20 7a 43 6f 64 65 29  rName(i), zCode)
f300: 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20   ) break;.  }.  
f310: 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
f320: 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 73 71  terp, (char *)sq
f330: 6c 69 74 65 33 45 72 72 53 74 72 28 69 29 2c 20  lite3ErrStr(i), 
f340: 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  0);.  return TCL
f350: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
f360: 61 67 65 3a 20 20 20 20 62 72 65 61 6b 70 6f 69  age:    breakpoi
f370: 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  nt.**.** This ro
f380: 75 74 69 6e 65 20 65 78 69 73 74 73 20 66 6f 72  utine exists for
f390: 20 6f 6e 65 20 70 75 72 70 6f 73 65 20 2d 20 74   one purpose - t
f3a0: 6f 20 70 72 6f 76 69 64 65 20 61 20 70 6c 61 63  o provide a plac
f3b0: 65 20 74 6f 20 70 75 74 20 61 0a 2a 2a 20 62 72  e to put a.** br
f3c0: 65 61 6b 70 6f 69 6e 74 20 77 69 74 68 20 47 44  eakpoint with GD
f3d0: 42 20 74 68 61 74 20 63 61 6e 20 62 65 20 74 72  B that can be tr
f3e0: 69 67 67 65 72 65 64 20 75 73 69 6e 67 20 54 43  iggered using TC
f3f0: 4c 20 63 6f 64 65 2e 20 20 54 68 65 20 75 73 65  L code.  The use
f400: 0a 2a 2a 20 66 6f 72 20 74 68 69 73 20 69 73 20  .** for this is 
f410: 77 68 65 6e 20 61 20 70 61 72 74 69 63 75 6c 61  when a particula
f420: 72 20 74 65 73 74 20 66 61 69 6c 73 20 6f 6e 20  r test fails on 
f430: 28 73 61 79 29 20 74 68 65 20 31 34 38 35 74 68  (say) the 1485th
f440: 20 69 74 65 72 61 74 69 6f 6e 2e 0a 2a 2a 20 49   iteration..** I
f450: 6e 20 74 68 65 20 54 43 4c 20 74 65 73 74 20 73  n the TCL test s
f460: 63 72 69 70 74 2c 20 77 65 20 63 61 6e 20 61 64  cript, we can ad
f470: 64 20 63 6f 64 65 20 6c 69 6b 65 20 74 68 69 73  d code like this
f480: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 69 66 20 7b  :.**.**     if {
f490: 24 69 3d 3d 31 34 38 35 7d 20 62 72 65 61 6b 70  $i==1485} breakp
f4a0: 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 65 6e 20  oint.**.** Then 
f4b0: 72 75 6e 20 74 65 73 74 66 69 78 74 75 72 65 20  run testfixture 
f4c0: 69 6e 20 74 68 65 20 64 65 62 75 67 67 65 72 20  in the debugger 
f4d0: 61 6e 64 20 77 61 69 74 20 66 6f 72 20 74 68 65  and wait for the
f4e0: 20 62 72 65 61 6b 70 6f 69 6e 74 20 74 6f 0a 2a   breakpoint to.*
f4f0: 2a 20 66 69 72 65 2e 20 20 54 68 65 6e 20 61 64  * fire.  Then ad
f500: 64 69 74 69 6f 6e 61 6c 20 62 72 65 61 6b 70 6f  ditional breakpo
f510: 69 6e 74 73 20 63 61 6e 20 62 65 20 73 65 74 20  ints can be set 
f520: 74 6f 20 74 72 61 63 65 20 64 6f 77 6e 20 74 68  to trace down th
f530: 65 20 62 75 67 2e 0a 2a 2f 0a 73 74 61 74 69 63  e bug..*/.static
f540: 20 69 6e 74 20 74 65 73 74 5f 62 72 65 61 6b 70   int test_breakp
f550: 6f 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  oint(.  void *No
f560: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
f570: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
f580: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
f590: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
f5a0: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
f5b0: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
f5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f5d0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
f5e0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
f5f0: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
f600: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
f610: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
f620: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 20   return TCL_OK; 
f630: 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f          /* Do no
f640: 74 68 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f 2a 0a 2a  thing */.}../*.*
f650: 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
f660: 65 33 5f 62 69 6e 64 5f 69 6e 74 20 20 53 54 4d  e3_bind_int  STM
f670: 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20  T N VALUE.**.** 
f680: 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33  Test the sqlite3
f690: 5f 62 69 6e 64 5f 69 6e 74 20 69 6e 74 65 72 66  _bind_int interf
f6a0: 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20  ace.  STMT is a 
f6b0: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
f6c0: 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20  nt..** N is the 
f6d0: 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63  index of a wildc
f6e0: 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61  ard in the prepa
f6f0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  red statement.  
f700: 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20  This command.** 
f710: 62 69 6e 64 73 20 61 20 33 32 2d 62 69 74 20 69  binds a 32-bit i
f720: 6e 74 65 67 65 72 20 56 41 4c 55 45 20 74 6f 20  nteger VALUE to 
f730: 74 68 61 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a  that wildcard..*
f740: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
f750: 74 5f 62 69 6e 64 5f 69 6e 74 28 0a 20 20 76 6f  t_bind_int(.  vo
f760: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
f770: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
f780: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
f790: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
f7a0: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
f7b0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
f7c0: 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  tmt;.  int idx;.
f7d0: 20 20 69 6e 74 20 76 61 6c 75 65 3b 0a 20 20 69    int value;.  i
f7e0: 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
f7f0: 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=4 ){.    Tcl
f800: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
f810: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
f820: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
f830: 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  "",.        Tcl_
f840: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
f850: 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20  (objv[0], 0), " 
f860: 53 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20 30  STMT N VALUE", 0
f870: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
f880: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
f890: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
f8a0: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
f8b0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
f8c0: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
f8d0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
f8e0: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
f8f0: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
f900: 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20  bjv[2], &idx) ) 
f910: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f920: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
f930: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
f940: 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75  , objv[3], &valu
f950: 65 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  e) ) return TCL_
f960: 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73  ERROR;..  rc = s
f970: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28  qlite3_bind_int(
f980: 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75  pStmt, idx, valu
f990: 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  e);.  if( sqlite
f9a0: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
f9b0: 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53  erp, StmtToDb(pS
f9c0: 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75  tmt), rc) ) retu
f9d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
f9e0: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
f9f0: 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
fa00: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
fa10: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
fa20: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  .}.../*.** Usage
fa30: 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
fa40: 5f 69 6e 74 36 34 20 20 53 54 4d 54 20 4e 20 56  _int64  STMT N V
fa50: 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20  ALUE.**.** Test 
fa60: 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  the sqlite3_bind
fa70: 5f 69 6e 74 36 34 20 69 6e 74 65 72 66 61 63 65  _int64 interface
fa80: 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65  .  STMT is a pre
fa90: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
faa0: 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64  .** N is the ind
fab0: 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64  ex of a wildcard
fac0: 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
fad0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69   statement.  Thi
fae0: 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e  s command.** bin
faf0: 64 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ds a 64-bit inte
fb00: 67 65 72 20 56 41 4c 55 45 20 74 6f 20 74 68 61  ger VALUE to tha
fb10: 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73  t wildcard..*/.s
fb20: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62  tatic int test_b
fb30: 69 6e 64 5f 69 6e 74 36 34 28 0a 20 20 76 6f 69  ind_int64(.  voi
fb40: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
fb50: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
fb60: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
fb70: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
fb80: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
fb90: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
fba0: 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  mt;.  int idx;. 
fbb0: 20 69 36 34 20 76 61 6c 75 65 3b 0a 20 20 69 6e   i64 value;.  in
fbc0: 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
fbd0: 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=4 ){.    Tcl_
fbe0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
fbf0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
fc00: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
fc10: 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
fc20: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
fc30: 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53  objv[0], 0), " S
fc40: 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20 30 29  TMT N VALUE", 0)
fc50: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
fc60: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
fc70: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
fc80: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
fc90: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
fca0: 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
fcb0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
fcc0: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
fcd0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
fce0: 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72  jv[2], &idx) ) r
fcf0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
fd00: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 57 69  .  if( Tcl_GetWi
fd10: 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  deIntFromObj(int
fd20: 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76  erp, objv[3], &v
fd30: 61 6c 75 65 29 20 29 20 72 65 74 75 72 6e 20 54  alue) ) return T
fd40: 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20  CL_ERROR;..  rc 
fd50: 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  = sqlite3_bind_i
fd60: 6e 74 36 34 28 70 53 74 6d 74 2c 20 69 64 78 2c  nt64(pStmt, idx,
fd70: 20 76 61 6c 75 65 29 3b 0a 20 20 69 66 28 20 73   value);.  if( s
fd80: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
fd90: 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f  e(interp, StmtTo
fda0: 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29  Db(pStmt), rc) )
fdb0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
fdc0: 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  R;.  if( rc!=SQL
fdd0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
fde0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
fdf0: 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43    }..  return TC
fe00: 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  L_OK;.}.../*.** 
fe10: 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
fe20: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 20 20 53 54  _bind_double  ST
fe30: 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a  MT N VALUE.**.**
fe40: 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65   Test the sqlite
fe50: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 20 69 6e  3_bind_double in
fe60: 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69  terface.  STMT i
fe70: 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  s a prepared sta
fe80: 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20  tement..** N is 
fe90: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77  the index of a w
fea0: 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70  ildcard in the p
feb0: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
fec0: 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  t.  This command
fed0: 0a 2a 2a 20 62 69 6e 64 73 20 61 20 36 34 2d 62  .** binds a 64-b
fee0: 69 74 20 69 6e 74 65 67 65 72 20 56 41 4c 55 45  it integer VALUE
fef0: 20 74 6f 20 74 68 61 74 20 77 69 6c 64 63 61 72   to that wildcar
ff00: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
ff10: 20 74 65 73 74 5f 62 69 6e 64 5f 64 6f 75 62 6c   test_bind_doubl
ff20: 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
ff30: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
ff40: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
ff50: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
ff60: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
ff70: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
ff80: 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
ff90: 74 20 69 64 78 3b 0a 20 20 64 6f 75 62 6c 65 20  t idx;.  double 
ffa0: 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b  value;.  int rc;
ffb0: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20  ..  if( objc!=4 
ffc0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
ffd0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
ffe0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
fff0: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
10000 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
10010 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
10020 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e  0], 0), " STMT N
10030 20 56 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20   VALUE", 0);.   
10040 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
10050 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
10060 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
10070 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
10080 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
10090 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
100a0 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
100b0 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
100c0 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
100d0 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e  , &idx) ) return
100e0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
100f0 28 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65 46  ( Tcl_GetDoubleF
10100 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
10110 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29 20  bjv[3], &value) 
10120 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
10130 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  OR;..  rc = sqli
10140 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28  te3_bind_double(
10150 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75  pStmt, idx, valu
10160 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  e);.  if( sqlite
10170 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
10180 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53  erp, StmtToDb(pS
10190 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75  tmt), rc) ) retu
101a0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
101b0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
101c0 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
101d0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
101e0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
101f0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
10200 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
10210 6e 75 6c 6c 20 20 53 54 4d 54 20 4e 0a 2a 2a 0a  null  STMT N.**.
10220 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69  ** Test the sqli
10230 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 69 6e  te3_bind_null in
10240 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69  terface.  STMT i
10250 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  s a prepared sta
10260 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20  tement..** N is 
10270 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77  the index of a w
10280 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70  ildcard in the p
10290 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
102a0 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  t.  This command
102b0 0a 2a 2a 20 62 69 6e 64 73 20 61 20 4e 55 4c 4c  .** binds a NULL
102c0 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72 64   to the wildcard
102d0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
102e0 74 65 73 74 5f 62 69 6e 64 5f 6e 75 6c 6c 28 0a  test_bind_null(.
102f0 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
10300 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
10310 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
10320 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
10330 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
10340 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
10350 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69   *pStmt;.  int i
10360 64 78 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  dx;.  int rc;.. 
10370 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
10380 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
10390 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
103a0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
103b0 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
103c0 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
103d0 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
103e0 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 22 2c 20   0), " STMT N", 
103f0 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
10400 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
10410 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
10420 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
10430 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
10440 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
10450 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10460 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
10470 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
10480 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29  objv[2], &idx) )
10490 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
104a0 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  R;..  rc = sqlit
104b0 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53 74  e3_bind_null(pSt
104c0 6d 74 2c 20 69 64 78 29 3b 0a 20 20 69 66 28 20  mt, idx);.  if( 
104d0 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
104e0 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54  de(interp, StmtT
104f0 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20  oDb(pStmt), rc) 
10500 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
10510 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  OR;.  if( rc!=SQ
10520 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
10530 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
10540 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54  .  }..  return T
10550 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
10560 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
10570 5f 62 69 6e 64 5f 74 65 78 74 20 20 53 54 4d 54  _bind_text  STMT
10580 20 4e 20 53 54 52 49 4e 47 20 42 59 54 45 53 0a   N STRING BYTES.
10590 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73  **.** Test the s
105a0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
105b0 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d   interface.  STM
105c0 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20  T is a prepared 
105d0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20  statement..** N 
105e0 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
105f0 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68  a wildcard in th
10600 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
10610 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d  ment.  This comm
10620 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55  and.** binds a U
10630 54 46 2d 38 20 73 74 72 69 6e 67 20 53 54 52 49  TF-8 string STRI
10640 4e 47 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61  NG to the wildca
10650 72 64 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20  rd.  The string 
10660 69 73 20 42 59 54 45 53 20 62 79 74 65 73 0a 2a  is BYTES bytes.*
10670 2a 20 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69  * long..*/.stati
10680 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
10690 74 65 78 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  text(.  void * c
106a0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
106b0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
106c0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
106d0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
106e0 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
106f0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
10700 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20   int idx;.  int 
10710 62 79 74 65 73 3b 0a 20 20 63 68 61 72 20 2a 76  bytes;.  char *v
10720 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  alue;.  int rc;.
10730 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29  .  if( objc!=5 )
10740 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
10750 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
10760 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
10770 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
10780 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
10790 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
107a0 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20  ], 0), " STMT N 
107b0 56 41 4c 55 45 20 42 59 54 45 53 22 2c 20 30 29  VALUE BYTES", 0)
107c0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
107d0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
107e0 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
107f0 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
10800 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
10810 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
10820 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
10830 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
10840 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
10850 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72  jv[2], &idx) ) r
10860 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
10870 0a 20 20 76 61 6c 75 65 20 3d 20 54 63 6c 5f 47  .  value = Tcl_G
10880 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d  etString(objv[3]
10890 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  );.  if( Tcl_Get
108a0 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
108b0 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 62 79 74  p, objv[4], &byt
108c0 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  es) ) return TCL
108d0 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
108e0 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
108f0 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61  t(pStmt, idx, va
10900 6c 75 65 2c 20 62 79 74 65 73 2c 20 53 51 4c 49  lue, bytes, SQLI
10910 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
10920 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
10930 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
10940 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c  StmtToDb(pStmt),
10950 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
10960 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  L_ERROR;.  if( r
10970 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
10980 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
10990 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c  sult(interp, sql
109a0 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d  ite3TestErrorNam
109b0 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72  e(rc), 0);.    r
109c0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
109d0 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54  .  }..  return T
109e0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
109f0 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
10a00 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 3f 2d 73  _bind_text16 ?-s
10a10 74 61 74 69 63 3f 20 53 54 4d 54 20 4e 20 53 54  tatic? STMT N ST
10a20 52 49 4e 47 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a  RING BYTES.**.**
10a30 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65   Test the sqlite
10a40 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 69 6e  3_bind_text16 in
10a50 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69  terface.  STMT i
10a60 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  s a prepared sta
10a70 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20  tement..** N is 
10a80 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77  the index of a w
10a90 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70  ildcard in the p
10aa0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
10ab0 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  t.  This command
10ac0 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55 54 46 2d  .** binds a UTF-
10ad0 31 36 20 73 74 72 69 6e 67 20 53 54 52 49 4e 47  16 string STRING
10ae0 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72 64   to the wildcard
10af0 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20 69 73  .  The string is
10b00 20 42 59 54 45 53 20 62 79 74 65 73 0a 2a 2a 20   BYTES bytes.** 
10b10 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  long..*/.static 
10b20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 74 65  int test_bind_te
10b30 78 74 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  xt16(.  void * c
10b40 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
10b50 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
10b60 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
10b70 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
10b80 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
10b90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
10ba0 36 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  6.  sqlite3_stmt
10bb0 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69   *pStmt;.  int i
10bc0 64 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b  dx;.  int bytes;
10bd0 0a 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a  .  char *value;.
10be0 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 76 6f 69    int rc;..  voi
10bf0 64 20 28 2a 78 44 65 6c 29 28 29 20 3d 20 28 6f  d (*xDel)() = (o
10c00 62 6a 63 3d 3d 36 3f 53 51 4c 49 54 45 5f 53 54  bjc==6?SQLITE_ST
10c10 41 54 49 43 3a 53 51 4c 49 54 45 5f 54 52 41 4e  ATIC:SQLITE_TRAN
10c20 53 49 45 4e 54 29 3b 0a 20 20 54 63 6c 5f 4f 62  SIENT);.  Tcl_Ob
10c30 6a 20 2a 6f 53 74 6d 74 20 20 20 20 3d 20 6f 62  j *oStmt    = ob
10c40 6a 76 5b 6f 62 6a 63 2d 34 5d 3b 0a 20 20 54 63  jv[objc-4];.  Tc
10c50 6c 5f 4f 62 6a 20 2a 6f 4e 20 20 20 20 20 20 20  l_Obj *oN       
10c60 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 33 5d 3b 0a  = objv[objc-3];.
10c70 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 53 74 72 69    Tcl_Obj *oStri
10c80 6e 67 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d  ng  = objv[objc-
10c90 32 5d 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f  2];.  Tcl_Obj *o
10ca0 42 79 74 65 73 20 20 20 3d 20 6f 62 6a 76 5b 6f  Bytes   = objv[o
10cb0 62 6a 63 2d 31 5d 3b 0a 0a 20 20 69 66 28 20 6f  bjc-1];..  if( o
10cc0 62 6a 63 21 3d 35 20 26 26 20 6f 62 6a 63 21 3d  bjc!=5 && objc!=
10cd0 36 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  6){.    Tcl_Appe
10ce0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
10cf0 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
10d00 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
10d10 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
10d20 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
10d30 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20  [0], 0), " STMT 
10d40 4e 20 56 41 4c 55 45 20 42 59 54 45 53 22 2c 20  N VALUE BYTES", 
10d50 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
10d60 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
10d70 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
10d80 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
10d90 47 65 74 53 74 72 69 6e 67 28 6f 53 74 6d 74 29  GetString(oStmt)
10da0 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
10db0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
10dc0 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
10dd0 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 4e  omObj(interp, oN
10de0 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e  , &idx) ) return
10df0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61   TCL_ERROR;.  va
10e00 6c 75 65 20 3d 20 28 63 68 61 72 2a 29 54 63 6c  lue = (char*)Tcl
10e10 5f 47 65 74 42 79 74 65 41 72 72 61 79 46 72 6f  _GetByteArrayFro
10e20 6d 4f 62 6a 28 6f 53 74 72 69 6e 67 2c 20 30 29  mObj(oString, 0)
10e30 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
10e40 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
10e50 2c 20 6f 42 79 74 65 73 2c 20 26 62 79 74 65 73  , oBytes, &bytes
10e60 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
10e70 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71  RROR;..  rc = sq
10e80 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31  lite3_bind_text1
10e90 36 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 28 76  6(pStmt, idx, (v
10ea0 6f 69 64 20 2a 29 76 61 6c 75 65 2c 20 62 79 74  oid *)value, byt
10eb0 65 73 2c 20 78 44 65 6c 29 3b 0a 20 20 69 66 28  es, xDel);.  if(
10ec0 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
10ed0 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74  ode(interp, Stmt
10ee0 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29  ToDb(pStmt), rc)
10ef0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
10f00 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  ROR;.  if( rc!=S
10f10 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
10f20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
10f30 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  ;.  }..#endif /*
10f40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
10f50 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54  16 */.  return T
10f60 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
10f70 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
10f80 5f 62 69 6e 64 5f 62 6c 6f 62 20 20 53 54 4d 54  _bind_blob  STMT
10f90 20 4e 20 44 41 54 41 20 42 59 54 45 53 0a 2a 2a   N DATA BYTES.**
10fa0 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c  .** Test the sql
10fb0 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 20 69  ite3_bind_blob i
10fc0 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20  nterface.  STMT 
10fd0 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74  is a prepared st
10fe0 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73  atement..** N is
10ff0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
11000 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20  wildcard in the 
11010 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
11020 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e  nt.  This comman
11030 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 42 4c 4f  d.** binds a BLO
11040 42 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72  B to the wildcar
11050 64 2e 20 20 54 68 65 20 42 4c 4f 42 20 69 73 20  d.  The BLOB is 
11060 42 59 54 45 53 20 62 79 74 65 73 20 69 6e 20 73  BYTES bytes in s
11070 69 7a 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ize..*/.static i
11080 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 62 6c 6f  nt test_bind_blo
11090 62 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  b(.  void * clie
110a0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
110b0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
110c0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
110d0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
110e0 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
110f0 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
11100 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 62 79 74  t idx;.  int byt
11110 65 73 3b 0a 20 20 63 68 61 72 20 2a 76 61 6c 75  es;.  char *valu
11120 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  e;.  int rc;..  
11130 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20  if( objc!=5 ){. 
11140 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
11150 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
11160 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
11170 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
11180 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
11190 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
111a0 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 44 41 54  0), " STMT N DAT
111b0 41 20 42 59 54 45 53 22 2c 20 30 29 3b 0a 20 20  A BYTES", 0);.  
111c0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
111d0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
111e0 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
111f0 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
11200 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
11210 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
11220 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
11230 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
11240 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
11250 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72  ], &idx) ) retur
11260 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76  n TCL_ERROR;.  v
11270 61 6c 75 65 20 3d 20 54 63 6c 5f 47 65 74 53 74  alue = Tcl_GetSt
11280 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20  ring(objv[3]);. 
11290 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
112a0 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
112b0 62 6a 76 5b 34 5d 2c 20 26 62 79 74 65 73 29 20  bjv[4], &bytes) 
112c0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
112d0 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  OR;..  rc = sqli
112e0 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 70 53  te3_bind_blob(pS
112f0 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65 2c  tmt, idx, value,
11300 20 62 79 74 65 73 2c 20 53 51 4c 49 54 45 5f 54   bytes, SQLITE_T
11310 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 69 66 28  RANSIENT);.  if(
11320 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
11330 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74  ode(interp, Stmt
11340 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29  ToDb(pStmt), rc)
11350 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
11360 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  ROR;.  if( rc!=S
11370 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
11380 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
11390 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20  ;.  }..  return 
113a0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
113b0 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65   Usage:   sqlite
113c0 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
113d0 5f 63 6f 75 6e 74 20 20 53 54 4d 54 0a 2a 2a 0a  _count  STMT.**.
113e0 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
113f0 6d 62 65 72 20 6f 66 20 77 69 6c 64 63 61 72 64  mber of wildcard
11400 73 20 69 6e 20 74 68 65 20 67 69 76 65 6e 20 73  s in the given s
11410 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61  tatement..*/.sta
11420 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
11430 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e  d_parameter_coun
11440 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  t(.  void * clie
11450 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
11460 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
11470 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
11480 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
11490 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
114a0 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69  tmt *pStmt;..  i
114b0 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
114c0 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
114d0 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
114e0 6a 76 2c 20 22 53 54 4d 54 22 29 3b 0a 20 20 20  jv, "STMT");.   
114f0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11500 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
11510 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
11520 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
11530 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
11540 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
11550 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65  _ERROR;.  Tcl_Se
11560 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
11570 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a  p, Tcl_NewIntObj
11580 28 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  (sqlite3_bind_pa
11590 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 70 53  rameter_count(pS
115a0 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e  tmt)));.  return
115b0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
115c0 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
115d0 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
115e0 72 5f 6e 61 6d 65 20 20 53 54 4d 54 20 20 4e 0a  r_name  STMT  N.
115f0 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
11600 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 4e 74 68   name of the Nth
11610 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20   wildcard.  The 
11620 66 69 72 73 74 20 77 69 6c 64 63 61 72 64 20 69  first wildcard i
11630 73 20 31 2e 0a 2a 2a 20 41 6e 20 65 6d 70 74 79  s 1..** An empty
11640 20 73 74 72 69 6e 67 20 69 73 20 72 65 74 75 72   string is retur
11650 6e 65 64 20 69 66 20 4e 20 69 73 20 6f 75 74 20  ned if N is out 
11660 6f 66 20 72 61 6e 67 65 20 6f 72 20 69 66 20 74  of range or if t
11670 68 65 20 77 69 6c 64 63 61 72 64 0a 2a 2a 20 69  he wildcard.** i
11680 73 20 6e 61 6d 65 6c 65 73 73 2e 0a 2a 2f 0a 73  s nameless..*/.s
11690 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62  tatic int test_b
116a0 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
116b0 6d 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  me(.  void * cli
116c0 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
116d0 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
116e0 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
116f0 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
11700 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
11710 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
11720 6e 74 20 69 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  nt i;..  if( obj
11730 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
11740 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
11750 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53  erp, 1, objv, "S
11760 54 4d 54 20 4e 22 29 3b 0a 20 20 20 20 72 65 74  TMT N");.    ret
11770 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
11780 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74   }.  if( getStmt
11790 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
117a0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
117b0 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
117c0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
117d0 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
117e0 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
117f0 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 29  rp, objv[2], &i)
11800 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
11810 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62  ROR;.  Tcl_SetOb
11820 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
11830 0a 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72  .     Tcl_NewStr
11840 69 6e 67 4f 62 6a 28 73 71 6c 69 74 65 33 5f 62  ingObj(sqlite3_b
11850 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
11860 6d 65 28 70 53 74 6d 74 2c 69 29 2c 2d 31 29 0a  me(pStmt,i),-1).
11870 20 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43    );.  return TC
11880 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
11890 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f  sage:   sqlite3_
118a0 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69  bind_parameter_i
118b0 6e 64 65 78 20 20 53 54 4d 54 20 20 4e 41 4d 45  ndex  STMT  NAME
118c0 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
118d0 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 77  e index of the w
118e0 69 6c 64 63 61 72 64 20 63 61 6c 6c 65 64 20 4e  ildcard called N
118f0 41 4d 45 2e 20 20 52 65 74 75 72 6e 20 30 20 69  AME.  Return 0 i
11900 66 20 74 68 65 72 65 20 69 73 0a 2a 2a 20 6e 6f  f there is.** no
11910 20 73 75 63 68 20 77 69 6c 64 63 61 72 64 2e 0a   such wildcard..
11920 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
11930 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  st_bind_paramete
11940 72 5f 69 6e 64 65 78 28 0a 20 20 76 6f 69 64 20  r_index(.  void 
11950 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
11960 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
11970 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
11980 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
11990 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
119a0 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
119b0 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  ;..  if( objc!=3
119c0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
119d0 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
119e0 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 20   1, objv, "STMT 
119f0 4e 41 4d 45 22 29 3b 0a 20 20 20 20 72 65 74 75  NAME");.    retu
11a00 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
11a10 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  }.  if( getStmtP
11a20 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
11a30 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
11a40 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
11a50 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11a60 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  R;.  Tcl_SetObjR
11a70 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a 20  esult(interp, . 
11a80 20 20 20 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62      Tcl_NewIntOb
11a90 6a 28 0a 20 20 20 20 20 20 20 73 71 6c 69 74 65  j(.       sqlite
11aa0 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
11ab0 5f 69 6e 64 65 78 28 70 53 74 6d 74 2c 54 63 6c  _index(pStmt,Tcl
11ac0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
11ad0 32 5d 29 29 0a 20 20 20 20 20 29 0a 20 20 29 3b  2])).     ).  );
11ae0 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
11af0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
11b00 3a 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 65 61  :   sqlite3_clea
11b10 72 5f 62 69 6e 64 69 6e 67 73 20 53 54 4d 54 0a  r_bindings STMT.
11b20 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  **.*/.static int
11b30 20 74 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64   test_clear_bind
11b40 69 6e 67 73 28 0a 20 20 76 6f 69 64 20 2a 20 63  ings(.  void * c
11b50 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
11b60 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
11b70 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
11b80 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
11b90 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
11ba0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a  3_stmt *pStmt;..
11bb0 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
11bc0 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75  .    Tcl_WrongNu
11bd0 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
11be0 20 6f 62 6a 76 2c 20 22 53 54 4d 54 22 29 3b 0a   objv, "STMT");.
11bf0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
11c00 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
11c10 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
11c20 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
11c30 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
11c40 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
11c50 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
11c60 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
11c70 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
11c80 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 6c 65 61  Obj(sqlite3_clea
11c90 72 5f 62 69 6e 64 69 6e 67 73 28 70 53 74 6d 74  r_bindings(pStmt
11ca0 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  )));.  return TC
11cb0 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
11cc0 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f  sage:   sqlite3_
11cd0 73 6c 65 65 70 20 4d 49 4c 4c 49 53 45 43 4f 4e  sleep MILLISECON
11ce0 44 53 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  DS.*/.static int
11cf0 20 74 65 73 74 5f 73 6c 65 65 70 28 0a 20 20 76   test_sleep(.  v
11d00 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
11d10 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
11d20 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
11d30 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
11d40 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
11d50 20 69 6e 74 20 6d 73 3b 0a 0a 20 20 69 66 28 20   int ms;..  if( 
11d60 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
11d70 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
11d80 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
11d90 20 22 4d 49 4c 4c 49 53 45 43 4f 4e 44 53 22 29   "MILLISECONDS")
11da0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
11db0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
11dc0 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
11dd0 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
11de0 5b 31 5d 2c 20 26 6d 73 29 20 29 7b 0a 20 20 20  [1], &ms) ){.   
11df0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11e00 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74  R;.  }.  Tcl_Set
11e10 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
11e20 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
11e30 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 28 6d 73  sqlite3_sleep(ms
11e40 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  )));.  return TC
11e50 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
11e60 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 65 72  sage: sqlite3_er
11e70 72 63 6f 64 65 20 44 42 0a 2a 2a 0a 2a 2a 20 52  rcode DB.**.** R
11e80 65 74 75 72 6e 20 74 68 65 20 73 74 72 69 6e 67  eturn the string
11e90 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
11ea0 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  of the most rece
11eb0 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20 41 50 49  nt sqlite3_* API
11ec0 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65 2e 20  .** error code. 
11ed0 65 2e 67 2e 20 22 53 51 4c 49 54 45 5f 45 52 52  e.g. "SQLITE_ERR
11ee0 4f 52 22 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  OR"..*/.static i
11ef0 6e 74 20 74 65 73 74 5f 65 72 72 63 6f 64 65 28  nt test_errcode(
11f00 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
11f10 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
11f20 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
11f30 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
11f40 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
11f50 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
11f60 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68  ;.  int rc;.  ch
11f70 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 0a 20 20  ar zBuf[30];..  
11f80 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
11f90 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
11fa0 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
11fb0 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
11fc0 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
11fd0 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
11fe0 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c  objv[0]), " DB",
11ff0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
12000 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
12010 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
12020 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
12030 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
12040 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
12050 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
12060 3d 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  = sqlite3_errcod
12070 65 28 64 62 29 3b 0a 20 20 69 66 28 20 28 72 63  e(db);.  if( (rc
12080 26 30 78 66 66 29 3d 3d 72 63 20 29 7b 0a 20 20  &0xff)==rc ){.  
12090 20 20 7a 42 75 66 5b 30 5d 20 3d 20 30 3b 0a 20    zBuf[0] = 0;. 
120a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 70 72 69   }else{.    spri
120b0 6e 74 66 28 7a 42 75 66 2c 22 2b 25 64 22 2c 20  ntf(zBuf,"+%d", 
120c0 72 63 3e 3e 38 29 3b 0a 20 20 7d 0a 20 20 54 63  rc>>8);.  }.  Tc
120d0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
120e0 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74  nterp, (char *)t
120f0 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  1ErrorName(rc), 
12100 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75  zBuf, 0);.  retu
12110 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
12120 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 74 65 73  .** Usage:   tes
12130 74 5f 65 72 72 6d 73 67 20 44 42 0a 2a 2a 0a 2a  t_errmsg DB.**.*
12140 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 55 54  * Returns the UT
12150 46 2d 38 20 72 65 70 72 65 73 65 6e 74 61 74 69  F-8 representati
12160 6f 6e 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20  on of the error 
12170 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 20 66  message string f
12180 6f 72 20 74 68 65 0a 2a 2a 20 6d 6f 73 74 20 72  or the.** most r
12190 65 63 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20  ecent sqlite3_* 
121a0 41 50 49 20 63 61 6c 6c 2e 0a 2a 2f 0a 73 74 61  API call..*/.sta
121b0 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72  tic int test_err
121c0 6d 73 67 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  msg(.  void * cl
121d0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
121e0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
121f0 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
12200 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
12210 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
12220 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   *db;.  const ch
12230 61 72 20 2a 7a 45 72 72 3b 0a 0a 20 20 69 66 28  ar *zErr;..  if(
12240 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20   objc!=2 ){.    
12250 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
12260 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
12270 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
12280 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
12290 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
122a0 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30 29  v[0]), " DB", 0)
122b0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
122c0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
122d0 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
122e0 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
122f0 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
12300 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
12310 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a 45 72 72 20  _ERROR;..  zErr 
12320 3d 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  = sqlite3_errmsg
12330 28 64 62 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  (db);.  Tcl_SetO
12340 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
12350 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
12360 6a 28 7a 45 72 72 2c 20 2d 31 29 29 3b 0a 20 20  j(zErr, -1));.  
12370 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
12380 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
12390 20 74 65 73 74 5f 65 72 72 6d 73 67 31 36 20 44   test_errmsg16 D
123a0 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 20  B.**.** Returns 
123b0 74 68 65 20 55 54 46 2d 31 36 20 72 65 70 72 65  the UTF-16 repre
123c0 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
123d0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   error message s
123e0 74 72 69 6e 67 20 66 6f 72 20 74 68 65 0a 2a 2a  tring for the.**
123f0 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71 6c   most recent sql
12400 69 74 65 33 5f 2a 20 41 50 49 20 63 61 6c 6c 2e  ite3_* API call.
12410 20 54 68 69 73 20 69 73 20 61 20 62 79 74 65 20   This is a byte 
12420 61 72 72 61 79 20 6f 62 6a 65 63 74 20 61 74 20  array object at 
12430 74 68 65 20 54 43 4c 20 0a 2a 2a 20 6c 65 76 65  the TCL .** leve
12440 6c 2c 20 61 6e 64 20 69 74 20 69 6e 63 6c 75 64  l, and it includ
12450 65 73 20 74 68 65 20 30 78 30 30 20 30 78 30 30  es the 0x00 0x00
12460 20 74 65 72 6d 69 6e 61 74 6f 72 20 62 79 74 65   terminator byte
12470 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
12480 74 68 65 0a 2a 2a 20 55 54 46 2d 31 36 20 73 74  the.** UTF-16 st
12490 72 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ring..*/.static 
124a0 69 6e 74 20 74 65 73 74 5f 65 72 72 6d 73 67 31  int test_errmsg1
124b0 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  6(.  void * clie
124c0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
124d0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
124e0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
124f0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
12500 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ].){.#ifndef SQL
12510 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
12520 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
12530 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 45 72 72  const void *zErr
12540 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 20 3d 20  ;.  int bytes = 
12550 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  0;..  if( objc!=
12560 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
12570 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
12580 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
12590 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
125a0 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
125b0 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
125c0 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72  " DB", 0);.    r
125d0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
125e0 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
125f0 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
12600 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
12610 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
12620 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12630 0a 0a 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74  ..  zErr = sqlit
12640 65 33 5f 65 72 72 6d 73 67 31 36 28 64 62 29 3b  e3_errmsg16(db);
12650 0a 20 20 69 66 28 20 7a 45 72 72 20 29 7b 0a 20  .  if( zErr ){. 
12660 20 20 20 62 79 74 65 73 20 3d 20 73 71 6c 69 74     bytes = sqlit
12670 65 33 75 74 66 31 36 42 79 74 65 4c 65 6e 28 7a  e3utf16ByteLen(z
12680 45 72 72 2c 20 2d 31 29 3b 0a 20 20 7d 0a 20 20  Err, -1);.  }.  
12690 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
126a0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
126b0 42 79 74 65 41 72 72 61 79 4f 62 6a 28 7a 45 72  ByteArrayObj(zEr
126c0 72 2c 20 62 79 74 65 73 29 29 3b 0a 23 65 6e 64  r, bytes));.#end
126d0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
126e0 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74  T_UTF16 */.  ret
126f0 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
12700 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
12710 74 65 33 5f 70 72 65 70 61 72 65 20 44 42 20 73  te3_prepare DB s
12720 71 6c 20 62 79 74 65 73 20 74 61 69 6c 76 61 72  ql bytes tailvar
12730 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 75  .**.** Compile u
12740 70 20 74 6f 20 3c 62 79 74 65 73 3e 20 62 79 74  p to <bytes> byt
12750 65 73 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69  es of the suppli
12760 65 64 20 53 51 4c 20 73 74 72 69 6e 67 20 3c 73  ed SQL string <s
12770 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20 64 61 74  ql> using.** dat
12780 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 44 42  abase handle <DB
12790 3e 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72  >. The parameter
127a0 20 3c 74 61 69 6c 76 61 6c 3e 20 69 73 20 74 68   <tailval> is th
127b0 65 20 6e 61 6d 65 20 6f 66 20 61 20 67 6c 6f 62  e name of a glob
127c0 61 6c 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 74  al.** variable t
127d0 68 61 74 20 69 73 20 73 65 74 20 74 6f 20 74 68  hat is set to th
127e0 65 20 75 6e 75 73 65 64 20 70 6f 72 74 69 6f 6e  e unused portion
127f0 20 6f 66 20 3c 73 71 6c 3e 20 28 69 66 20 61 6e   of <sql> (if an
12800 79 29 2e 20 41 0a 2a 2a 20 53 54 4d 54 20 68 61  y). A.** STMT ha
12810 6e 64 6c 65 20 69 73 20 72 65 74 75 72 6e 65 64  ndle is returned
12820 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
12830 74 65 73 74 5f 70 72 65 70 61 72 65 28 0a 20 20  test_prepare(.  
12840 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
12850 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
12860 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
12870 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
12880 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
12890 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
128a0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71   const char *zSq
128b0 6c 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a  l;.  int bytes;.
128c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
128d0 61 69 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  ail = 0;.  sqlit
128e0 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d  e3_stmt *pStmt =
128f0 20 30 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b   0;.  char zBuf[
12900 35 30 5d 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  50];.  int rc;..
12910 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b    if( objc!=5 ){
12920 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
12930 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
12940 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
12950 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
12960 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
12970 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42  g(objv[0]), " DB
12980 20 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c 76   sql bytes tailv
12990 61 72 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  ar", 0);.    ret
129a0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
129b0 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
129c0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
129d0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
129e0 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
129f0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
12a00 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65 74 53   zSql = Tcl_GetS
12a10 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a  tring(objv[2]);.
12a20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
12a30 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
12a40 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74 65 73 29  objv[3], &bytes)
12a50 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
12a60 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
12a70 69 74 65 33 5f 70 72 65 70 61 72 65 28 64 62 2c  ite3_prepare(db,
12a80 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c 20 26 70   zSql, bytes, &p
12a90 53 74 6d 74 2c 20 26 7a 54 61 69 6c 29 3b 0a 20  Stmt, &zTail);. 
12aa0 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
12ab0 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
12ac0 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
12ad0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
12ae0 28 20 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20 69  ( zTail ){.    i
12af0 66 28 20 62 79 74 65 73 3e 3d 30 20 29 7b 0a 20  f( bytes>=0 ){. 
12b00 20 20 20 20 20 62 79 74 65 73 20 3d 20 62 79 74       bytes = byt
12b10 65 73 20 2d 20 28 7a 54 61 69 6c 2d 7a 53 71 6c  es - (zTail-zSql
12b20 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54 63 6c  );.    }.    Tcl
12b30 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65  _ObjSetVar2(inte
12b40 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30 2c 20  rp, objv[4], 0, 
12b50 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
12b60 28 7a 54 61 69 6c 2c 20 62 79 74 65 73 29 2c 20  (zTail, bytes), 
12b70 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  0);.  }.  if( rc
12b80 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
12b90 20 20 20 61 73 73 65 72 74 28 20 70 53 74 6d 74     assert( pStmt
12ba0 3d 3d 30 20 29 3b 0a 20 20 20 20 73 70 72 69 6e  ==0 );.    sprin
12bb0 74 66 28 7a 42 75 66 2c 20 22 28 25 64 29 20 22  tf(zBuf, "(%d) "
12bc0 2c 20 72 63 29 3b 0a 20 20 20 20 54 63 6c 5f 41  , rc);.    Tcl_A
12bd0 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
12be0 72 70 2c 20 7a 42 75 66 2c 20 73 71 6c 69 74 65  rp, zBuf, sqlite
12bf0 33 5f 65 72 72 6d 73 67 28 64 62 29 2c 20 30 29  3_errmsg(db), 0)
12c00 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
12c10 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
12c20 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20 20  f( pStmt ){.    
12c30 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 4d  if( sqlite3TestM
12c40 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e  akePointerStr(in
12c50 74 65 72 70 2c 20 7a 42 75 66 2c 20 70 53 74 6d  terp, zBuf, pStm
12c60 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
12c70 45 52 52 4f 52 3b 0a 20 20 20 20 54 63 6c 5f 41  ERROR;.    Tcl_A
12c80 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
12c90 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20  rp, zBuf, 0);.  
12ca0 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  }.  return TCL_O
12cb0 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
12cc0 65 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  e: sqlite3_prepa
12cd0 72 65 5f 76 32 20 44 42 20 73 71 6c 20 62 79 74  re_v2 DB sql byt
12ce0 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a 2a  es tailvar.**.**
12cf0 20 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f 20 3c   Compile up to <
12d00 62 79 74 65 73 3e 20 62 79 74 65 73 20 6f 66 20  bytes> bytes of 
12d10 74 68 65 20 73 75 70 70 6c 69 65 64 20 53 51 4c  the supplied SQL
12d20 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20 75 73   string <sql> us
12d30 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  ing.** database 
12d40 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54 68 65  handle <DB>. The
12d50 20 70 61 72 61 6d 65 74 65 72 20 3c 74 61 69 6c   parameter <tail
12d60 76 61 6c 3e 20 69 73 20 74 68 65 20 6e 61 6d 65  val> is the name
12d70 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20   of a global.** 
12d80 76 61 72 69 61 62 6c 65 20 74 68 61 74 20 69 73  variable that is
12d90 20 73 65 74 20 74 6f 20 74 68 65 20 75 6e 75 73   set to the unus
12da0 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20 3c 73  ed portion of <s
12db0 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20 41 0a  ql> (if any). A.
12dc0 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65 20 69  ** STMT handle i
12dd0 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73  s returned..*/.s
12de0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 70  tatic int test_p
12df0 72 65 70 61 72 65 5f 76 32 28 0a 20 20 76 6f 69  repare_v2(.  voi
12e00 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
12e10 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
12e20 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
12e30 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
12e40 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
12e50 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f  qlite3 *db;.  co
12e60 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a  nst char *zSql;.
12e70 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 20 20 63    int bytes;.  c
12e80 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c  onst char *zTail
12e90 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = 0;.  sqlite3_
12ea0 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b  stmt *pStmt = 0;
12eb0 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d  .  char zBuf[50]
12ec0 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69  ;.  int rc;..  i
12ed0 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20  f( objc!=5 ){.  
12ee0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
12ef0 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
12f00 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
12f10 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
12f20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
12f30 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 20 73 71  bjv[0]), " DB sq
12f40 6c 20 62 79 74 65 73 20 74 61 69 6c 76 61 72 22  l bytes tailvar"
12f50 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
12f60 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
12f70 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
12f80 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
12f90 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
12fa0 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ), &db) ) return
12fb0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53   TCL_ERROR;.  zS
12fc0 71 6c 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  ql = Tcl_GetStri
12fd0 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20 69  ng(objv[2]);.  i
12fe0 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
12ff0 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
13000 76 5b 33 5d 2c 20 26 62 79 74 65 73 29 20 29 20  v[3], &bytes) ) 
13010 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13020 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
13030 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c  3_prepare_v2(db,
13040 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c 20 26 70   zSql, bytes, &p
13050 53 74 6d 74 2c 20 26 7a 54 61 69 6c 29 3b 0a 20  Stmt, &zTail);. 
13060 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
13070 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
13080 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
13090 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
130a0 28 20 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20 69  ( zTail ){.    i
130b0 66 28 20 62 79 74 65 73 3e 3d 30 20 29 7b 0a 20  f( bytes>=0 ){. 
130c0 20 20 20 20 20 62 79 74 65 73 20 3d 20 62 79 74       bytes = byt
130d0 65 73 20 2d 20 28 7a 54 61 69 6c 2d 7a 53 71 6c  es - (zTail-zSql
130e0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54 63 6c  );.    }.    Tcl
130f0 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65  _ObjSetVar2(inte
13100 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30 2c 20  rp, objv[4], 0, 
13110 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
13120 28 7a 54 61 69 6c 2c 20 62 79 74 65 73 29 2c 20  (zTail, bytes), 
13130 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  0);.  }.  if( rc
13140 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
13150 20 20 20 61 73 73 65 72 74 28 20 70 53 74 6d 74     assert( pStmt
13160 3d 3d 30 20 29 3b 0a 20 20 20 20 73 70 72 69 6e  ==0 );.    sprin
13170 74 66 28 7a 42 75 66 2c 20 22 28 25 64 29 20 22  tf(zBuf, "(%d) "
13180 2c 20 72 63 29 3b 0a 20 20 20 20 54 63 6c 5f 41  , rc);.    Tcl_A
13190 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
131a0 72 70 2c 20 7a 42 75 66 2c 20 73 71 6c 69 74 65  rp, zBuf, sqlite
131b0 33 5f 65 72 72 6d 73 67 28 64 62 29 2c 20 30 29  3_errmsg(db), 0)
131c0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
131d0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
131e0 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20 20  f( pStmt ){.    
131f0 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 4d  if( sqlite3TestM
13200 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e  akePointerStr(in
13210 74 65 72 70 2c 20 7a 42 75 66 2c 20 70 53 74 6d  terp, zBuf, pStm
13220 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
13230 45 52 52 4f 52 3b 0a 20 20 20 20 54 63 6c 5f 41  ERROR;.    Tcl_A
13240 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
13250 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20  rp, zBuf, 0);.  
13260 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  }.  return TCL_O
13270 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
13280 65 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  e: sqlite3_prepa
13290 72 65 31 36 20 44 42 20 73 71 6c 20 62 79 74 65  re16 DB sql byte
132a0 73 20 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a 2a 20  s tailvar.**.** 
132b0 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f 20 3c 62  Compile up to <b
132c0 79 74 65 73 3e 20 62 79 74 65 73 20 6f 66 20 74  ytes> bytes of t
132d0 68 65 20 73 75 70 70 6c 69 65 64 20 53 51 4c 20  he supplied SQL 
132e0 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20 75 73 69  string <sql> usi
132f0 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 68  ng.** database h
13300 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54 68 65 20  andle <DB>. The 
13310 70 61 72 61 6d 65 74 65 72 20 3c 74 61 69 6c 76  parameter <tailv
13320 61 6c 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  al> is the name 
13330 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20 76  of a global.** v
13340 61 72 69 61 62 6c 65 20 74 68 61 74 20 69 73 20  ariable that is 
13350 73 65 74 20 74 6f 20 74 68 65 20 75 6e 75 73 65  set to the unuse
13360 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20 3c 73 71  d portion of <sq
13370 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20 41 0a 2a  l> (if any). A.*
13380 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65 20 69 73  * STMT handle is
13390 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74   returned..*/.st
133a0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 70 72  atic int test_pr
133b0 65 70 61 72 65 31 36 28 0a 20 20 76 6f 69 64 20  epare16(.  void 
133c0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
133d0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
133e0 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
133f0 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
13400 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
13410 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
13420 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33 20 2a  TF16.  sqlite3 *
13430 64 62 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  db;.  const void
13440 20 2a 7a 53 71 6c 3b 0a 20 20 63 6f 6e 73 74 20   *zSql;.  const 
13450 76 6f 69 64 20 2a 7a 54 61 69 6c 20 3d 20 30 3b  void *zTail = 0;
13460 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 54 61 69  .  Tcl_Obj *pTai
13470 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33  l = 0;.  sqlite3
13480 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30  _stmt *pStmt = 0
13490 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30  ;.  char zBuf[50
134a0 5d 3b 20 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  ]; .  int rc;.  
134b0 69 6e 74 20 62 79 74 65 73 3b 20 20 20 20 20 20  int bytes;      
134c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
134d0 20 69 6e 74 65 67 65 72 20 73 70 65 63 69 66 69   integer specifi
134e0 65 64 20 61 73 20 61 72 67 20 33 20 2a 2f 0a 20  ed as arg 3 */. 
134f0 20 69 6e 74 20 6f 62 6a 6c 65 6e 3b 20 20 20 20   int objlen;    
13500 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
13510 65 20 62 79 74 65 2d 61 72 72 61 79 20 6c 65 6e  e byte-array len
13520 67 74 68 20 6f 66 20 61 72 67 20 32 20 2a 2f 0a  gth of arg 2 */.
13530 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29  .  if( objc!=5 )
13540 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
13550 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
13560 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
13570 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
13580 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
13590 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44  ng(objv[0]), " D
135a0 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c  B sql bytes tail
135b0 76 61 72 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  var", 0);.    re
135c0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
135d0 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
135e0 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
135f0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
13600 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
13610 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
13620 20 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65 74    zSql = Tcl_Get
13630 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a  ByteArrayFromObj
13640 28 6f 62 6a 76 5b 32 5d 2c 20 26 6f 62 6a 6c 65  (objv[2], &objle
13650 6e 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  n);.  if( Tcl_Ge
13660 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
13670 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62 79  rp, objv[3], &by
13680 74 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43  tes) ) return TC
13690 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d  L_ERROR;..  rc =
136a0 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
136b0 31 36 28 64 62 2c 20 7a 53 71 6c 2c 20 62 79 74  16(db, zSql, byt
136c0 65 73 2c 20 26 70 53 74 6d 74 2c 20 26 7a 54 61  es, &pStmt, &zTa
136d0 69 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  il);.  if( sqlit
136e0 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
136f0 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20  terp, db, rc) ) 
13700 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13710 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ;.  if( rc ){.  
13720 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
13730 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 7a  OR;.  }..  if( z
13740 54 61 69 6c 20 29 7b 0a 20 20 20 20 6f 62 6a 6c  Tail ){.    objl
13750 65 6e 20 3d 20 6f 62 6a 6c 65 6e 20 2d 20 28 28  en = objlen - ((
13760 75 38 20 2a 29 7a 54 61 69 6c 2d 28 75 38 20 2a  u8 *)zTail-(u8 *
13770 29 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b  )zSql);.  }else{
13780 0a 20 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 30 3b  .    objlen = 0;
13790 0a 20 20 7d 0a 20 20 70 54 61 69 6c 20 3d 20 54  .  }.  pTail = T
137a0 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79 4f  cl_NewByteArrayO
137b0 62 6a 28 28 75 38 20 2a 29 7a 54 61 69 6c 2c 20  bj((u8 *)zTail, 
137c0 6f 62 6a 6c 65 6e 29 3b 0a 20 20 54 63 6c 5f 49  objlen);.  Tcl_I
137d0 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 54 61 69  ncrRefCount(pTai
137e0 6c 29 3b 0a 20 20 54 63 6c 5f 4f 62 6a 53 65 74  l);.  Tcl_ObjSet
137f0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6f 62 6a  Var2(interp, obj
13800 76 5b 34 5d 2c 20 30 2c 20 70 54 61 69 6c 2c 20  v[4], 0, pTail, 
13810 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65  0);.  Tcl_DecrRe
13820 66 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a 0a  fCount(pTail);..
13830 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20    if( pStmt ){. 
13840 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65     if( sqlite3Te
13850 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72  stMakePointerStr
13860 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70  (interp, zBuf, p
13870 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
13880 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
13890 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
138a0 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30  (interp, zBuf, 0
138b0 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  );.#endif /* SQL
138c0 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
138d0 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  /.  return TCL_O
138e0 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
138f0 65 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  e: sqlite3_prepa
13900 72 65 31 36 5f 76 32 20 44 42 20 73 71 6c 20 62  re16_v2 DB sql b
13910 79 74 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a 0a  ytes tailvar.**.
13920 2a 2a 20 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f  ** Compile up to
13930 20 3c 62 79 74 65 73 3e 20 62 79 74 65 73 20 6f   <bytes> bytes o
13940 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 53  f the supplied S
13950 51 4c 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20  QL string <sql> 
13960 75 73 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73  using.** databas
13970 65 20 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54  e handle <DB>. T
13980 68 65 20 70 61 72 61 6d 65 74 65 72 20 3c 74 61  he parameter <ta
13990 69 6c 76 61 6c 3e 20 69 73 20 74 68 65 20 6e 61  ilval> is the na
139a0 6d 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a  me of a global.*
139b0 2a 20 76 61 72 69 61 62 6c 65 20 74 68 61 74 20  * variable that 
139c0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 75 6e  is set to the un
139d0 75 73 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20  used portion of 
139e0 3c 73 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20  <sql> (if any). 
139f0 41 0a 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65  A.** STMT handle
13a00 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f   is returned..*/
13a10 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
13a20 5f 70 72 65 70 61 72 65 31 36 5f 76 32 28 0a 20  _prepare16_v2(. 
13a30 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
13a40 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
13a50 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
13a60 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
13a70 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
13a80 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
13a90 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c  OMIT_UTF16.  sql
13aa0 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73  ite3 *db;.  cons
13ab0 74 20 76 6f 69 64 20 2a 7a 53 71 6c 3b 0a 20 20  t void *zSql;.  
13ac0 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 54 61 69  const void *zTai
13ad0 6c 20 3d 20 30 3b 0a 20 20 54 63 6c 5f 4f 62 6a  l = 0;.  Tcl_Obj
13ae0 20 2a 70 54 61 69 6c 20 3d 20 30 3b 0a 20 20 73   *pTail = 0;.  s
13af0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
13b00 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a  mt = 0;.  char z
13b10 42 75 66 5b 35 30 5d 3b 20 0a 20 20 69 6e 74 20  Buf[50]; .  int 
13b20 72 63 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b  rc;.  int bytes;
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b40 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 73  /* The integer s
13b50 70 65 63 69 66 69 65 64 20 61 73 20 61 72 67 20  pecified as arg 
13b60 33 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 6c 65  3 */.  int objle
13b70 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
13b80 20 2f 2a 20 54 68 65 20 62 79 74 65 2d 61 72 72   /* The byte-arr
13b90 61 79 20 6c 65 6e 67 74 68 20 6f 66 20 61 72 67  ay length of arg
13ba0 20 32 20 2a 2f 0a 0a 20 20 69 66 28 20 6f 62 6a   2 */..  if( obj
13bb0 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=5 ){.    Tcl_
13bc0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
13bd0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
13be0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
13bf0 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
13c00 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
13c10 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79 74 65  ), " DB sql byte
13c20 73 20 74 61 69 6c 76 61 72 22 2c 20 30 29 3b 0a  s tailvar", 0);.
13c30 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
13c40 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
13c50 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
13c60 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
13c70 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
13c80 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
13c90 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d 20 54  RROR;.  zSql = T
13ca0 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79 46  cl_GetByteArrayF
13cb0 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20  romObj(objv[2], 
13cc0 26 6f 62 6a 6c 65 6e 29 3b 0a 20 20 69 66 28 20  &objlen);.  if( 
13cd0 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
13ce0 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33  j(interp, objv[3
13cf0 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74  ], &bytes) ) ret
13d00 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
13d10 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
13d20 72 65 70 61 72 65 31 36 5f 76 32 28 64 62 2c 20  repare16_v2(db, 
13d30 7a 53 71 6c 2c 20 62 79 74 65 73 2c 20 26 70 53  zSql, bytes, &pS
13d40 74 6d 74 2c 20 26 7a 54 61 69 6c 29 3b 0a 20 20  tmt, &zTail);.  
13d50 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
13d60 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
13d70 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
13d80 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
13d90 20 72 63 20 29 7b 0a 20 20 20 20 72 65 74 75 72   rc ){.    retur
13da0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
13db0 0a 0a 20 20 69 66 28 20 7a 54 61 69 6c 20 29 7b  ..  if( zTail ){
13dc0 0a 20 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 6f 62  .    objlen = ob
13dd0 6a 6c 65 6e 20 2d 20 28 28 75 38 20 2a 29 7a 54  jlen - ((u8 *)zT
13de0 61 69 6c 2d 28 75 38 20 2a 29 7a 53 71 6c 29 3b  ail-(u8 *)zSql);
13df0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6f 62  .  }else{.    ob
13e00 6a 6c 65 6e 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  jlen = 0;.  }.  
13e10 70 54 61 69 6c 20 3d 20 54 63 6c 5f 4e 65 77 42  pTail = Tcl_NewB
13e20 79 74 65 41 72 72 61 79 4f 62 6a 28 28 75 38 20  yteArrayObj((u8 
13e30 2a 29 7a 54 61 69 6c 2c 20 6f 62 6a 6c 65 6e 29  *)zTail, objlen)
13e40 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43  ;.  Tcl_IncrRefC
13e50 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a 20 20 54  ount(pTail);.  T
13e60 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e  cl_ObjSetVar2(in
13e70 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30  terp, objv[4], 0
13e80 2c 20 70 54 61 69 6c 2c 20 30 29 3b 0a 20 20 54  , pTail, 0);.  T
13e90 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
13ea0 70 54 61 69 6c 29 3b 0a 0a 20 20 69 66 28 20 70  pTail);..  if( p
13eb0 53 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28 20  Stmt ){.    if( 
13ec0 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50  sqlite3TestMakeP
13ed0 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70  ointerStr(interp
13ee0 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20 29  , zBuf, pStmt) )
13ef0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
13f00 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70  R;.  }.  Tcl_App
13f10 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
13f20 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23 65 6e 64  , zBuf, 0);.#end
13f30 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
13f40 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74  T_UTF16 */.  ret
13f50 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
13f60 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
13f70 74 65 33 5f 6f 70 65 6e 20 66 69 6c 65 6e 61 6d  te3_open filenam
13f80 65 20 3f 6f 70 74 69 6f 6e 73 2d 6c 69 73 74 3f  e ?options-list?
13f90 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
13fa0 65 73 74 5f 6f 70 65 6e 28 0a 20 20 76 6f 69 64  est_open(.  void
13fb0 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
13fc0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
13fd0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
13fe0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
13ff0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 6f  T objv[].){.  co
14000 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e  nst char *zFilen
14010 61 6d 65 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ame;.  sqlite3 *
14020 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  db;.  int rc;.  
14030 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a  char zBuf[100];.
14040 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 26  .  if( objc!=3 &
14050 26 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  & objc!=2 ){.   
14060 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
14070 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
14080 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
14090 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
140a0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
140b0 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65 6e 61  jv[0]), " filena
140c0 6d 65 20 6f 70 74 69 6f 6e 73 2d 6c 69 73 74 22  me options-list"
140d0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
140e0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
140f0 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 54  .  zFilename = T
14100 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
14110 76 5b 31 5d 29 3b 0a 20 20 72 63 20 3d 20 73 71  v[1]);.  rc = sq
14120 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 46 69 6c 65  lite3_open(zFile
14130 6e 61 6d 65 2c 20 26 64 62 29 3b 0a 20 20 0a 20  name, &db);.  . 
14140 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
14150 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69  MakePointerStr(i
14160 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 64 62 29  nterp, zBuf, db)
14170 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
14180 52 4f 52 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  ROR;.  Tcl_Appen
14190 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
141a0 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75  zBuf, 0);.  retu
141b0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
141c0 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
141d0 65 33 5f 6f 70 65 6e 31 36 20 66 69 6c 65 6e 61  e3_open16 filena
141e0 6d 65 20 6f 70 74 69 6f 6e 73 0a 2a 2f 0a 73 74  me options.*/.st
141f0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6f 70  atic int test_op
14200 65 6e 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  en16(.  void * c
14210 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
14220 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
14230 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
14240 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
14250 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
14260 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
14270 36 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  6.  const void *
14280 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20 20 73 71 6c  zFilename;.  sql
14290 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
142a0 72 63 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b  rc;.  char zBuf[
142b0 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  100];..  if( obj
142c0 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
142d0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
142e0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
142f0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
14300 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
14310 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
14320 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65 20 6f 70  ), " filename op
14330 74 69 6f 6e 73 2d 6c 69 73 74 22 2c 20 30 29 3b  tions-list", 0);
14340 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
14350 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 46  ERROR;.  }..  zF
14360 69 6c 65 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65  ilename = Tcl_Ge
14370 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62  tByteArrayFromOb
14380 6a 28 6f 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a 20  j(objv[1], 0);. 
14390 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
143a0 65 6e 31 36 28 7a 46 69 6c 65 6e 61 6d 65 2c 20  en16(zFilename, 
143b0 26 64 62 29 3b 0a 20 20 0a 20 20 69 66 28 20 73  &db);.  .  if( s
143c0 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
143d0 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c  interStr(interp,
143e0 20 7a 42 75 66 2c 20 64 62 29 20 29 20 72 65 74   zBuf, db) ) ret
143f0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
14400 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
14410 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
14420 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  0);.#endif /* SQ
14430 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
14440 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
14450 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
14460 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70  ge: sqlite3_comp
14470 6c 65 74 65 31 36 20 3c 55 54 46 2d 31 36 20 73  lete16 <UTF-16 s
14480 74 72 69 6e 67 3e 0a 2a 2a 0a 2a 2a 20 52 65 74  tring>.**.** Ret
14490 75 72 6e 20 31 20 69 66 20 74 68 65 20 73 75 70  urn 1 if the sup
144a0 70 6c 69 65 64 20 61 72 67 75 6d 65 6e 74 20 69  plied argument i
144b0 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 53 51 4c  s a complete SQL
144c0 20 73 74 61 74 65 6d 65 6e 74 2c 20 6f 72 20 7a   statement, or z
144d0 65 72 6f 0a 2a 2a 20 6f 74 68 65 72 77 69 73 65  ero.** otherwise
144e0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
144f0 74 65 73 74 5f 63 6f 6d 70 6c 65 74 65 31 36 28  test_complete16(
14500 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
14510 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
14520 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
14530 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
14540 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
14550 29 7b 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ){.#if !defined(
14560 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
14570 4c 45 54 45 29 20 26 26 20 21 64 65 66 69 6e 65  LETE) && !define
14580 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  d(SQLITE_OMIT_UT
14590 46 31 36 29 0a 20 20 63 68 61 72 20 2a 7a 42 75  F16).  char *zBu
145a0 66 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  f;..  if( objc!=
145b0 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  2 ){.    Tcl_Wro
145c0 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
145d0 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3c 75 74 66  , 1, objv, "<utf
145e0 2d 31 36 20 73 71 6c 3e 22 29 3b 0a 20 20 20 20  -16 sql>");.    
145f0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
14600 3b 0a 20 20 7d 0a 0a 20 20 7a 42 75 66 20 3d 20  ;.  }..  zBuf = 
14610 28 63 68 61 72 2a 29 54 63 6c 5f 47 65 74 42 79  (char*)Tcl_GetBy
14620 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f  teArrayFromObj(o
14630 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a 20 20 54 63  bjv[1], 0);.  Tc
14640 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
14650 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
14660 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 6f 6d  tObj(sqlite3_com
14670 70 6c 65 74 65 31 36 28 7a 42 75 66 29 29 29 3b  plete16(zBuf)));
14680 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
14690 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 20  E_OMIT_COMPLETE 
146a0 26 26 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  && SQLITE_OMIT_U
146b0 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e  TF16 */.  return
146c0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
146d0 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
146e0 5f 73 74 65 70 20 53 54 4d 54 0a 2a 2a 0a 2a 2a  _step STMT.**.**
146f0 20 41 64 76 61 6e 63 65 20 74 68 65 20 73 74 61   Advance the sta
14700 74 65 6d 65 6e 74 20 74 6f 20 74 68 65 20 6e 65  tement to the ne
14710 78 74 20 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74 69  xt row..*/.stati
14720 63 20 69 6e 74 20 74 65 73 74 5f 73 74 65 70 28  c int test_step(
14730 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
14740 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
14750 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
14760 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
14770 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
14780 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
14790 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
147a0 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
147b0 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
147c0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
147d0 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
147e0 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
147f0 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
14800 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
14810 20 22 20 53 54 4d 54 22 2c 20 30 29 3b 0a 20 20   " STMT", 0);.  
14820 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
14830 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
14840 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
14850 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
14860 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
14870 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
14880 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
14890 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53   sqlite3_step(pS
148a0 74 6d 74 29 3b 0a 0a 20 20 2f 2a 20 69 66 28 20  tmt);..  /* if( 
148b0 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc!=SQLITE_DONE 
148c0 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f  && rc!=SQLITE_RO
148d0 57 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  W ) return TCL_E
148e0 52 52 4f 52 3b 20 2a 2f 0a 20 20 54 63 6c 5f 53  RROR; */.  Tcl_S
148f0 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
14900 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72   (char *)t1Error
14910 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20  Name(rc), 0);.  
14920 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
14930 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
14940 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
14950 75 6e 74 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20  unt STMT .**.** 
14960 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
14970 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74  r of columns ret
14980 75 72 6e 65 64 20 62 79 20 74 68 65 20 73 71 6c  urned by the sql
14990 20 73 74 61 74 65 6d 65 6e 74 20 53 54 4d 54 2e   statement STMT.
149a0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
149b0 65 73 74 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  est_column_count
149c0 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
149d0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
149e0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
149f0 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
14a00 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
14a10 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
14a20 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66  mt *pStmt;..  if
14a30 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
14a40 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
14a50 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
14a60 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
14a70 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
14a80 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
14a90 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
14aa0 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
14ab0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
14ac0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
14ad0 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
14ae0 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
14af0 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
14b00 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
14b10 5f 45 52 52 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53  _ERROR;..  Tcl_S
14b20 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
14b30 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
14b40 6a 28 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  j(sqlite3_column
14b50 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 29 29 3b  _count(pStmt)));
14b60 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
14b70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
14b80 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
14b90 5f 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75 6d  _type STMT colum
14ba0 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  n.**.** Return t
14bb0 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 64  he type of the d
14bc0 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e 20 27 63  ata in column 'c
14bd0 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65 20 63 75  olumn' of the cu
14be0 72 72 65 6e 74 20 72 6f 77 2e 0a 2a 2f 0a 73 74  rrent row..*/.st
14bf0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f  atic int test_co
14c00 6c 75 6d 6e 5f 74 79 70 65 28 0a 20 20 76 6f 69  lumn_type(.  voi
14c10 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
14c20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
14c30 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
14c40 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
14c50 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
14c60 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
14c70 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20  mt;.  int col;. 
14c80 20 69 6e 74 20 74 70 3b 0a 0a 20 20 69 66 28 20   int tp;..  if( 
14c90 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
14ca0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
14cb0 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
14cc0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
14cd0 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
14ce0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
14cf0 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c  [0]), " STMT col
14d00 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  umn", 0);.    re
14d10 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
14d20 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
14d30 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
14d40 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
14d50 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
14d60 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
14d70 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
14d80 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
14d90 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
14da0 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  col) ) return TC
14db0 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 74 70 20 3d  L_ERROR;..  tp =
14dc0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
14dd0 74 79 70 65 28 70 53 74 6d 74 2c 20 63 6f 6c 29  type(pStmt, col)
14de0 3b 0a 20 20 73 77 69 74 63 68 28 20 74 70 20 29  ;.  switch( tp )
14df0 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  {.    case SQLIT
14e00 45 5f 49 4e 54 45 47 45 52 3a 20 0a 20 20 20 20  E_INTEGER: .    
14e10 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
14e20 69 6e 74 65 72 70 2c 20 22 49 4e 54 45 47 45 52  interp, "INTEGER
14e30 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20  ", TCL_STATIC); 
14e40 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
14e50 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 55    case SQLITE_NU
14e60 4c 4c 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53 65  LL:.      Tcl_Se
14e70 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
14e80 22 4e 55 4c 4c 22 2c 20 54 43 4c 5f 53 54 41 54  "NULL", TCL_STAT
14e90 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72 65 61  IC); .      brea
14ea0 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
14eb0 54 45 5f 46 4c 4f 41 54 3a 0a 20 20 20 20 20 20  TE_FLOAT:.      
14ec0 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
14ed0 74 65 72 70 2c 20 22 46 4c 4f 41 54 22 2c 20 54  terp, "FLOAT", T
14ee0 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20  CL_STATIC); .   
14ef0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
14f00 73 65 20 53 51 4c 49 54 45 5f 54 45 58 54 3a 0a  se SQLITE_TEXT:.
14f10 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73        Tcl_SetRes
14f20 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 54 45 58  ult(interp, "TEX
14f30 54 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  T", TCL_STATIC);
14f40 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20   .      break;. 
14f50 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42     case SQLITE_B
14f60 4c 4f 42 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53  LOB:.      Tcl_S
14f70 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
14f80 20 22 42 4c 4f 42 22 2c 20 54 43 4c 5f 53 54 41   "BLOB", TCL_STA
14f90 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72 65  TIC); .      bre
14fa0 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
14fb0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 30 29  .      assert(0)
14fc0 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20  ;.  }..  return 
14fd0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
14fe0 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
14ff0 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20 53 54 4d  column_int64 STM
15000 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52  T column.**.** R
15010 65 74 75 72 6e 20 74 68 65 20 64 61 74 61 20 69  eturn the data i
15020 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e  n column 'column
15030 27 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  ' of the current
15040 20 72 6f 77 20 63 61 73 74 20 61 73 20 61 6e 0a   row cast as an.
15050 2a 2a 20 77 69 64 65 20 28 36 34 2d 62 69 74 29  ** wide (64-bit)
15060 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 73 74 61   integer..*/.sta
15070 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c  tic int test_col
15080 75 6d 6e 5f 69 6e 74 36 34 28 0a 20 20 76 6f 69  umn_int64(.  voi
15090 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
150a0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
150b0 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
150c0 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
150d0 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
150e0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
150f0 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20  mt;.  int col;. 
15100 20 69 36 34 20 69 56 61 6c 3b 0a 0a 20 20 69 66   i64 iVal;..  if
15110 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
15120 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
15130 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
15140 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
15150 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
15160 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
15170 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
15180 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
15190 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
151a0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
151b0 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
151c0 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
151d0 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
151e0 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
151f0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
15200 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
15210 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
15220 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20   &col) ) return 
15230 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 56  TCL_ERROR;..  iV
15240 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  al = sqlite3_col
15250 75 6d 6e 5f 69 6e 74 36 34 28 70 53 74 6d 74 2c  umn_int64(pStmt,
15260 20 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53 65 74   col);.  Tcl_Set
15270 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
15280 2c 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74  , Tcl_NewWideInt
15290 4f 62 6a 28 69 56 61 6c 29 29 3b 0a 20 20 72 65  Obj(iVal));.  re
152a0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
152b0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
152c0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
152d0 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a   STMT column.*/.
152e0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
152f0 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 0a 20 20 76  column_blob(.  v
15300 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
15310 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
15320 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
15330 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
15340 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
15350 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
15360 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b  Stmt;.  int col;
15370 0a 0a 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 63  ..  int len;.  c
15380 6f 6e 73 74 20 76 6f 69 64 20 2a 70 42 6c 6f 62  onst void *pBlob
15390 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  ;..  if( objc!=3
153a0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
153b0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
153c0 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
153d0 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
153e0 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
153f0 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
15400 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30   STMT column", 0
15410 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
15420 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
15430 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
15440 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
15450 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
15460 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
15470 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
15480 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
15490 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
154a0 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20  bjv[2], &col) ) 
154b0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
154c0 3b 0a 0a 20 20 70 42 6c 6f 62 20 3d 20 73 71 6c  ;..  pBlob = sql
154d0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
154e0 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20  (pStmt, col);.  
154f0 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  len = sqlite3_co
15500 6c 75 6d 6e 5f 62 79 74 65 73 28 70 53 74 6d 74  lumn_bytes(pStmt
15510 2c 20 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53 65  , col);.  Tcl_Se
15520 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
15530 70 2c 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72  p, Tcl_NewByteAr
15540 72 61 79 4f 62 6a 28 70 42 6c 6f 62 2c 20 6c 65  rayObj(pBlob, le
15550 6e 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  n));.  return TC
15560 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
15570 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
15580 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 53 54 4d 54  lumn_double STMT
15590 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65   column.**.** Re
155a0 74 75 72 6e 20 74 68 65 20 64 61 74 61 20 69 6e  turn the data in
155b0 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27   column 'column'
155c0 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
155d0 72 6f 77 20 63 61 73 74 20 61 73 20 61 20 64 6f  row cast as a do
155e0 75 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  uble..*/.static 
155f0 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f  int test_column_
15600 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a  double(.  void *
15610 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
15620 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
15630 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
15640 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
15650 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
15660 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
15670 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 64 6f  .  int col;.  do
15680 75 62 6c 65 20 72 56 61 6c 3b 0a 0a 20 20 69 66  uble rVal;..  if
15690 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
156a0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
156b0 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
156c0 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
156d0 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
156e0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
156f0 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
15700 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
15710 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
15720 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
15730 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
15740 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
15750 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
15760 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
15770 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
15780 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
15790 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
157a0 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20   &col) ) return 
157b0 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 56  TCL_ERROR;..  rV
157c0 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  al = sqlite3_col
157d0 75 6d 6e 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74  umn_double(pStmt
157e0 2c 20 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53 65  , col);.  Tcl_Se
157f0 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
15800 70 2c 20 54 63 6c 5f 4e 65 77 44 6f 75 62 6c 65  p, Tcl_NewDouble
15810 4f 62 6a 28 72 56 61 6c 29 29 3b 0a 20 20 72 65  Obj(rVal));.  re
15820 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
15830 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
15840 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 20  ite3_data_count 
15850 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75  STMT .**.** Retu
15860 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
15870 20 63 6f 6c 75 6d 6e 73 20 72 65 74 75 72 6e 65   columns returne
15880 64 20 62 79 20 74 68 65 20 73 71 6c 20 73 74 61  d by the sql sta
15890 74 65 6d 65 6e 74 20 53 54 4d 54 2e 0a 2a 2f 0a  tement STMT..*/.
158a0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
158b0 64 61 74 61 5f 63 6f 75 6e 74 28 0a 20 20 76 6f  data_count(.  vo
158c0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
158d0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
158e0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
158f0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
15900 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
15910 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
15920 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  tmt;..  if( objc
15930 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
15940 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
15950 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
15960 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
15970 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
15980 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
15990 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22  , " STMT column"
159a0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
159b0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
159c0 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
159d0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
159e0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
159f0 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
15a00 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
15a10 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  ;..  Tcl_SetObjR
15a20 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
15a30 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69  l_NewIntObj(sqli
15a40 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 28 70  te3_data_count(p
15a50 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72  Stmt)));.  retur
15a60 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
15a70 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
15a80 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 53 54  3_column_text ST
15a90 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20  MT column.**.** 
15aa0 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63  Usage: sqlite3_c
15ab0 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 53  olumn_decltype S
15ac0 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a  TMT column.**.**
15ad0 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
15ae0 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 53 54 4d 54  column_name STMT
15af0 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69   column.*/.stati
15b00 63 20 69 6e 74 20 74 65 73 74 5f 73 74 6d 74 5f  c int test_stmt_
15b10 75 74 66 38 28 0a 20 20 76 6f 69 64 20 2a 20 63  utf8(.  void * c
15b20 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20 20  lientData,      
15b30 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
15b40 53 51 4c 69 74 65 20 41 50 49 20 66 75 6e 63 74  SQLite API funct
15b50 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  ion to be invoke
15b60 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
15b70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
15b80 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
15b90 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
15ba0 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
15bb0 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f  *pStmt;.  int co
15bc0 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  l;.  const char 
15bd0 2a 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65  *(*xFunc)(sqlite
15be0 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 20 3d 20  3_stmt*, int) = 
15bf0 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 63 6f  clientData;.  co
15c00 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74 3b 0a  nst char *zRet;.
15c10 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
15c20 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
15c30 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
15c40 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
15c50 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
15c60 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
15c70 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53  ng(objv[0]), " S
15c80 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b  TMT column", 0);
15c90 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
15ca0 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
15cb0 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
15cc0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
15cd0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
15ce0 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
15cf0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
15d00 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
15d10 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
15d20 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65  v[2], &col) ) re
15d30 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
15d40 20 20 7a 52 65 74 20 3d 20 78 46 75 6e 63 28 70    zRet = xFunc(p
15d50 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 69 66  Stmt, col);.  if
15d60 28 20 7a 52 65 74 20 29 7b 0a 20 20 20 20 54 63  ( zRet ){.    Tc
15d70 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
15d80 72 70 2c 20 28 63 68 61 72 20 2a 29 7a 52 65 74  rp, (char *)zRet
15d90 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  , 0);.  }.  retu
15da0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74  rn TCL_OK;.}..st
15db0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 67 6c  atic int test_gl
15dc0 6f 62 61 6c 5f 72 65 63 6f 76 65 72 28 0a 20 20  obal_recover(.  
15dd0 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
15de0 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
15df0 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
15e00 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
15e10 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
15e20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
15e30 4d 49 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56 45  MIT_GLOBALRECOVE
15e40 52 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66  R.  int rc;.  if
15e50 28 20 6f 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20  ( objc!=1 ){.   
15e60 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
15e70 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
15e80 76 2c 20 22 22 29 3b 0a 20 20 20 20 72 65 74 75  v, "");.    retu
15e90 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
15ea0 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
15eb0 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 28  _global_recover(
15ec0 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75  );.  Tcl_SetResu
15ed0 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72  lt(interp, (char
15ee0 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72   *)t1ErrorName(r
15ef0 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  c), TCL_STATIC);
15f00 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e  .#endif.  return
15f10 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
15f20 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
15f30 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 53 54 4d  _column_text STM
15f40 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55  T column.**.** U
15f50 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
15f60 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 53 54  lumn_decltype ST
15f70 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20  MT column.**.** 
15f80 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63  Usage: sqlite3_c
15f90 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 53 54 4d 54 20  olumn_name STMT 
15fa0 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63  column.*/.static
15fb0 20 69 6e 74 20 74 65 73 74 5f 73 74 6d 74 5f 75   int test_stmt_u
15fc0 74 66 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  tf16(.  void * c
15fd0 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20 2f  lientData,     /
15fe0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c  * Pointer to SQL
15ff0 69 74 65 20 41 50 49 20 66 75 6e 63 74 69 6f 6e  ite API function
16000 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 2a   to be invoked *
16010 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
16020 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
16030 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
16040 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23  ONST objv[].){.#
16050 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
16060 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69 74  IT_UTF16.  sqlit
16070 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
16080 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 54 63 6c    int col;.  Tcl
16090 5f 4f 62 6a 20 2a 70 52 65 74 3b 0a 20 20 63 6f  _Obj *pRet;.  co
160a0 6e 73 74 20 76 6f 69 64 20 2a 7a 4e 61 6d 65 31  nst void *zName1
160b0 36 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  6;.  const void 
160c0 2a 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65  *(*xFunc)(sqlite
160d0 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 20 3d 20  3_stmt*, int) = 
160e0 63 6c 69 65 6e 74 44 61 74 61 3b 0a 0a 20 20 69  clientData;..  i
160f0 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20  f( objc!=3 ){.  
16100 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
16110 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
16120 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
16130 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
16140 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
16150 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20  bjv[0]), " STMT 
16160 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20  column", 0);.   
16170 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
16180 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
16190 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
161a0 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
161b0 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
161c0 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
161d0 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
161e0 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
161f0 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
16200 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e  , &col) ) return
16210 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a   TCL_ERROR;..  z
16220 4e 61 6d 65 31 36 20 3d 20 78 46 75 6e 63 28 70  Name16 = xFunc(p
16230 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 69 66  Stmt, col);.  if
16240 28 20 7a 4e 61 6d 65 31 36 20 29 7b 0a 20 20 20  ( zName16 ){.   
16250 20 70 52 65 74 20 3d 20 54 63 6c 5f 4e 65 77 42   pRet = Tcl_NewB
16260 79 74 65 41 72 72 61 79 4f 62 6a 28 7a 4e 61 6d  yteArrayObj(zNam
16270 65 31 36 2c 20 73 71 6c 69 74 65 33 75 74 66 31  e16, sqlite3utf1
16280 36 42 79 74 65 4c 65 6e 28 7a 4e 61 6d 65 31 36  6ByteLen(zName16
16290 2c 20 2d 31 29 2b 32 29 3b 0a 20 20 20 20 54 63  , -1)+2);.    Tc
162a0 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
162b0 6e 74 65 72 70 2c 20 70 52 65 74 29 3b 0a 20 20  nterp, pRet);.  
162c0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
162d0 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
162e0 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ..  return TCL_O
162f0 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
16300 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
16310 6e 5f 69 6e 74 20 53 54 4d 54 20 63 6f 6c 75 6d  n_int STMT colum
16320 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  n.**.** Usage: s
16330 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
16340 74 65 73 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  tes STMT column.
16350 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  **.** Usage: sql
16360 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
16370 73 31 36 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  s16 STMT column.
16380 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  **.*/.static int
16390 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 28 0a   test_stmt_int(.
163a0 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
163b0 61 74 61 2c 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ata,    /* Point
163c0 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41 50 49  er to SQLite API
163d0 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
163e0 69 6e 76 6f 6b 65 64 20 2a 2f 0a 20 20 54 63 6c  invoked */.  Tcl
163f0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
16400 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
16410 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
16420 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
16430 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
16440 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 6e 74 20   int col;.  int 
16450 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33  (*xFunc)(sqlite3
16460 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 20 3d 20 63  _stmt*, int) = c
16470 6c 69 65 6e 74 44 61 74 61 3b 0a 0a 20 20 69 66  lientData;..  if
16480 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
16490 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
164a0 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
164b0 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
164c0 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
164d0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
164e0 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
164f0 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
16500 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
16510 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
16520 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
16530 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
16540 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
16550 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
16560 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
16570 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
16580 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
16590 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20   &col) ) return 
165a0 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 54 63  TCL_ERROR;..  Tc
165b0 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
165c0 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
165d0 74 4f 62 6a 28 78 46 75 6e 63 28 70 53 74 6d 74  tObj(xFunc(pStmt
165e0 2c 20 63 6f 6c 29 29 29 3b 0a 20 20 72 65 74 75  , col)));.  retu
165f0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 23 69  rn TCL_OK;.}..#i
16600 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
16610 54 5f 44 49 53 4b 49 4f 0a 2f 2a 0a 2a 2a 20 55  T_DISKIO./*.** U
16620 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73  sage:  sqlite3Os
16630 4f 70 65 6e 52 65 61 64 57 72 69 74 65 20 3c 66  OpenReadWrite <f
16640 69 6c 65 6e 61 6d 65 3e 0a 2a 2f 0a 73 74 61 74  ilename>.*/.stat
16650 69 63 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69  ic int test_sqli
16660 74 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69  te3OsOpenReadWri
16670 74 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  te(.  void * cli
16680 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
16690 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
166a0 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
166b0 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
166c0 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a  [].){.  OsFile *
166d0 70 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b  pFile;.  int rc;
166e0 0a 20 20 69 6e 74 20 64 75 6d 6d 79 3b 0a 20 20  .  int dummy;.  
166f0 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a  char zBuf[100];.
16700 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
16710 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
16720 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
16730 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
16740 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
16750 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
16760 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66  ng(objv[0]), " f
16770 69 6c 65 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20  ilename", 0);.  
16780 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
16790 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 63 20 3d 20  OR;.  }..  rc = 
167a0 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61  sqlite3OsOpenRea
167b0 64 57 72 69 74 65 28 54 63 6c 5f 47 65 74 53 74  dWrite(Tcl_GetSt
167c0 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
167d0 70 46 69 6c 65 2c 20 26 64 75 6d 6d 79 29 3b 0a  pFile, &dummy);.
167e0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
167f0 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53  _OK ){.    Tcl_S
16800 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
16810 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72   (char *)t1Error
16820 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
16830 41 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72  ATIC);.    retur
16840 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
16850 0a 20 20 73 71 6c 69 74 65 33 54 65 73 74 4d 61  .  sqlite3TestMa
16860 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74  kePointerStr(int
16870 65 72 70 2c 20 7a 42 75 66 2c 20 70 46 69 6c 65  erp, zBuf, pFile
16880 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75  );.  Tcl_SetResu
16890 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
168a0 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
168b0 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a  L_ERROR;.}../*.*
168c0 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
168d0 33 4f 73 43 6c 6f 73 65 20 3c 66 69 6c 65 20 68  3OsClose <file h
168e0 61 6e 64 6c 65 3e 0a 2a 2f 0a 73 74 61 74 69 63  andle>.*/.static
168f0 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65   int test_sqlite
16900 33 4f 73 43 6c 6f 73 65 28 0a 20 20 76 6f 69 64  3OsClose(.  void
16910 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
16920 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
16930 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
16940 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
16950 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73  T objv[].){.  Os
16960 46 69 6c 65 20 2a 70 46 69 6c 65 3b 0a 20 20 69  File *pFile;.  i
16970 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
16980 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
16990 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
169a0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
169b0 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
169c0 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
169d0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
169e0 5d 29 2c 20 22 20 66 69 6c 65 68 61 6e 64 6c 65  ]), " filehandle
169f0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
16a00 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
16a10 0a 0a 20 20 69 66 28 20 67 65 74 46 69 6c 65 50  ..  if( getFileP
16a20 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
16a30 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
16a40 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65 29 20 29  v[1]), &pFile) )
16a50 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
16a60 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63  _ERROR;.  }.  rc
16a70 20 3d 20 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73   = sqlite3OsClos
16a80 65 28 26 70 46 69 6c 65 29 3b 0a 20 20 69 66 28  e(&pFile);.  if(
16a90 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
16aa0 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73  {.    Tcl_SetRes
16ab0 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
16ac0 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28  r *)t1ErrorName(
16ad0 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  rc), TCL_STATIC)
16ae0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
16af0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65  _ERROR;.  }.  re
16b00 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
16b10 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
16b20 6c 69 74 65 33 4f 73 4c 6f 63 6b 20 3c 66 69 6c  lite3OsLock <fil
16b30 65 20 68 61 6e 64 6c 65 3e 20 3c 6c 6f 63 6b 74  e handle> <lockt
16b40 79 70 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ype>.*/.static i
16b50 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f  nt test_sqlite3O
16b60 73 4c 6f 63 6b 28 0a 20 20 76 6f 69 64 20 2a 20  sLock(.  void * 
16b70 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
16b80 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
16b90 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
16ba0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
16bb0 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c  bjv[].){.  OsFil
16bc0 65 20 2a 20 70 46 69 6c 65 3b 0a 20 20 69 6e 74  e * pFile;.  int
16bd0 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
16be0 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
16bf0 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
16c00 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
16c10 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
16c20 2c 20 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  , .        Tcl_G
16c30 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
16c40 29 2c 20 0a 20 20 20 20 20 20 20 20 22 20 66 69  ), .        " fi
16c50 6c 65 68 61 6e 64 6c 65 20 28 53 48 41 52 45 44  lehandle (SHARED
16c60 7c 52 45 53 45 52 56 45 44 7c 50 45 4e 44 49 4e  |RESERVED|PENDIN
16c70 47 7c 45 58 43 4c 55 53 49 56 45 29 22 2c 20 30  G|EXCLUSIVE)", 0
16c80 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
16c90 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
16ca0 69 66 28 20 67 65 74 46 69 6c 65 50 6f 69 6e 74  if( getFilePoint
16cb0 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
16cc0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
16cd0 29 2c 20 26 70 46 69 6c 65 29 20 29 7b 0a 20 20  ), &pFile) ){.  
16ce0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
16cf0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 30  OR;.  }..  if( 0
16d00 3d 3d 73 74 72 63 6d 70 28 22 53 48 41 52 45 44  ==strcmp("SHARED
16d10 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  ", Tcl_GetString
16d20 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20 20  (objv[2])) ){.  
16d30 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73    rc = sqlite3Os
16d40 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 53 48 41 52  Lock(pFile, SHAR
16d50 45 44 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20  ED_LOCK);.  }.  
16d60 65 6c 73 65 20 69 66 28 20 30 3d 3d 73 74 72 63  else if( 0==strc
16d70 6d 70 28 22 52 45 53 45 52 56 45 44 22 2c 20 54  mp("RESERVED", T
16d80 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
16d90 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20 20 72 63  v[2])) ){.    rc
16da0 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b   = sqlite3OsLock
16db0 28 70 46 69 6c 65 2c 20 52 45 53 45 52 56 45 44  (pFile, RESERVED
16dc0 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c  _LOCK);.  }.  el
16dd0 73 65 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70  se if( 0==strcmp
16de0 28 22 50 45 4e 44 49 4e 47 22 2c 20 54 63 6c 5f  ("PENDING", Tcl_
16df0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32  GetString(objv[2
16e00 5d 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ])) ){.    rc = 
16e10 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46  sqlite3OsLock(pF
16e20 69 6c 65 2c 20 50 45 4e 44 49 4e 47 5f 4c 4f 43  ile, PENDING_LOC
16e30 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69  K);.  }.  else i
16e40 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 22 45 58  f( 0==strcmp("EX
16e50 43 4c 55 53 49 56 45 22 2c 20 54 63 6c 5f 47 65  CLUSIVE", Tcl_Ge
16e60 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29  tString(objv[2])
16e70 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
16e80 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c  lite3OsLock(pFil
16e90 65 2c 20 45 58 43 4c 55 53 49 56 45 5f 4c 4f 43  e, EXCLUSIVE_LOC
16ea0 4b 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  K);.  }else{.   
16eb0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
16ec0 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
16ed0 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
16ee0 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
16ef0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
16f00 62 6a 76 5b 30 5d 29 2c 20 0a 20 20 20 20 20 20  bjv[0]), .      
16f10 20 20 22 20 66 69 6c 65 68 61 6e 64 6c 65 20 28    " filehandle (
16f20 53 48 41 52 45 44 7c 52 45 53 45 52 56 45 44 7c  SHARED|RESERVED|
16f30 50 45 4e 44 49 4e 47 7c 45 58 43 4c 55 53 49 56  PENDING|EXCLUSIV
16f40 45 29 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  E)", 0);.    ret
16f50 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
16f60 20 7d 0a 0a 20 20 69 66 28 20 72 63 21 3d 53 51   }..  if( rc!=SQ
16f70 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54  LITE_OK ){.    T
16f80 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
16f90 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45  erp, (char *)t1E
16fa0 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43  rrorName(rc), TC
16fb0 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72  L_STATIC);.    r
16fc0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
16fd0 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
16fe0 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
16ff0 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73  sage:  sqlite3Os
17000 55 6e 6c 6f 63 6b 20 3c 66 69 6c 65 20 68 61 6e  Unlock <file han
17010 64 6c 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  dle>.*/.static i
17020 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f  nt test_sqlite3O
17030 73 55 6e 6c 6f 63 6b 28 0a 20 20 76 6f 69 64 20  sUnlock(.  void 
17040 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
17050 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
17060 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
17070 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
17080 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46   objv[].){.  OsF
17090 69 6c 65 20 2a 20 70 46 69 6c 65 3b 0a 20 20 69  ile * pFile;.  i
170a0 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
170b0 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
170c0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
170d0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
170e0 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
170f0 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
17100 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
17110 5d 29 2c 20 22 20 66 69 6c 65 68 61 6e 64 6c 65  ]), " filehandle
17120 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
17130 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
17140 0a 0a 20 20 69 66 28 20 67 65 74 46 69 6c 65 50  ..  if( getFileP
17150 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
17160 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
17170 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65 29 20 29  v[1]), &pFile) )
17180 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
17190 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63  _ERROR;.  }.  rc
171a0 20 3d 20 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f   = sqlite3OsUnlo
171b0 63 6b 28 70 46 69 6c 65 2c 20 4e 4f 5f 4c 4f 43  ck(pFile, NO_LOC
171c0 4b 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  K);.  if( rc!=SQ
171d0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54  LITE_OK ){.    T
171e0 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
171f0 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45  erp, (char *)t1E
17200 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43  rrorName(rc), TC
17210 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72  L_STATIC);.    r
17220 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
17230 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
17240 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
17250 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73  sage:  sqlite3Os
17260 54 65 6d 70 46 69 6c 65 4e 61 6d 65 0a 2a 2f 0a  TempFileName.*/.
17270 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
17280 73 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c  sqlite3OsTempFil
17290 65 4e 61 6d 65 28 0a 20 20 76 6f 69 64 20 2a 20  eName(.  void * 
172a0 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
172b0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
172c0 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
172d0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
172e0 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 68 61 72 20  bjv[].){.  char 
172f0 7a 46 69 6c 65 5b 53 51 4c 49 54 45 5f 54 45 4d  zFile[SQLITE_TEM
17300 50 4e 41 4d 45 5f 53 49 5a 45 5d 3b 0a 20 20 69  PNAME_SIZE];.  i
17310 6e 74 20 72 63 3b 0a 0a 20 20 72 63 20 3d 20 73  nt rc;..  rc = s
17320 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65  qlite3OsTempFile
17330 4e 61 6d 65 28 7a 46 69 6c 65 29 3b 0a 20 20 69  Name(zFile);.  i
17340 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17350 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52   ){.    Tcl_SetR
17360 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
17370 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d  har *)t1ErrorNam
17380 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49  e(rc), TCL_STATI
17390 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  C);.    return T
173a0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
173b0 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
173c0 28 69 6e 74 65 72 70 2c 20 7a 46 69 6c 65 2c 20  (interp, zFile, 
173d0 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  0);.  return TCL
173e0 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  _OK;.}.#endif../
173f0 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
17400 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 20 20 44  ite_set_magic  D
17410 42 20 20 4d 41 47 49 43 2d 4e 55 4d 42 45 52 0a  B  MAGIC-NUMBER.
17420 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 62  **.** Set the db
17430 2d 3e 6d 61 67 69 63 20 76 61 6c 75 65 2e 20 20  ->magic value.  
17440 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
17450 74 65 73 74 20 65 72 72 6f 72 20 72 65 63 6f 76  test error recov
17460 65 72 79 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73 74  ery logic..*/.st
17470 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 5f  atic int sqlite_
17480 73 65 74 5f 6d 61 67 69 63 28 0a 20 20 76 6f 69  set_magic(.  voi
17490 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
174a0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
174b0 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63  terp,.  int argc
174c0 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a  ,.  char **argv.
174d0 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
174e0 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20  ;.  if( argc!=3 
174f0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
17500 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
17510 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
17520 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
17530 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 20 20  gv[0],.         
17540 22 20 44 42 20 4d 41 47 49 43 22 2c 20 30 29 3b  " DB MAGIC", 0);
17550 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
17560 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
17570 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
17580 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
17590 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
175a0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 73 74  _ERROR;.  if( st
175b0 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53  rcmp(argv[2], "S
175c0 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
175d0 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d  ")==0 ){.    db-
175e0 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
175f0 4d 41 47 49 43 5f 4f 50 45 4e 3b 0a 20 20 7d 65  MAGIC_OPEN;.  }e
17600 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61  lse if( strcmp(a
17610 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f  rgv[2], "SQLITE_
17620 4d 41 47 49 43 5f 43 4c 4f 53 45 44 22 29 3d 3d  MAGIC_CLOSED")==
17630 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67  0 ){.    db->mag
17640 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49  ic = SQLITE_MAGI
17650 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 7d 65 6c 73  C_CLOSED;.  }els
17660 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67  e if( strcmp(arg
17670 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41  v[2], "SQLITE_MA
17680 47 49 43 5f 42 55 53 59 22 29 3d 3d 30 20 29 7b  GIC_BUSY")==0 ){
17690 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  .    db->magic =
176a0 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
176b0 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  SY;.  }else if( 
176c0 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20  strcmp(argv[2], 
176d0 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52  "SQLITE_MAGIC_ER
176e0 52 4f 52 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ROR")==0 ){.    
176f0 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
17700 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a  TE_MAGIC_ERROR;.
17710 20 20 7d 65 6c 73 65 20 69 66 28 20 54 63 6c 5f    }else if( Tcl_
17720 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61  GetInt(interp, a
17730 72 67 76 5b 32 5d 2c 20 26 64 62 2d 3e 6d 61 67  rgv[2], &db->mag
17740 69 63 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ic) ){.    retur
17750 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
17760 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
17770 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
17780 3a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  :  sqlite3_inter
17790 72 75 70 74 20 20 44 42 20 0a 2a 2a 0a 2a 2a 20  rupt  DB .**.** 
177a0 54 72 69 67 67 65 72 20 61 6e 20 69 6e 74 65 72  Trigger an inter
177b0 72 75 70 74 20 6f 6e 20 44 42 0a 2a 2f 0a 73 74  rupt on DB.*/.st
177c0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 69 6e  atic int test_in
177d0 74 65 72 72 75 70 74 28 0a 20 20 76 6f 69 64 20  terrupt(.  void 
177e0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
177f0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
17800 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a  rp,.  int argc,.
17810 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b    char **argv.){
17820 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
17830 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b    if( argc!=2 ){
17840 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
17850 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
17860 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
17870 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
17880 5b 30 5d 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a  [0], " DB", 0);.
17890 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
178a0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
178b0 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
178c0 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
178d0 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
178e0 45 52 52 4f 52 3b 0a 20 20 73 71 6c 69 74 65 33  ERROR;.  sqlite3
178f0 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a  _interrupt(db);.
17900 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
17910 0a 7d 0a 0a 73 74 61 74 69 63 20 75 38 20 2a 73  .}..static u8 *s
17920 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61 73  qlite3_stack_bas
17930 65 6c 69 6e 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a  eline = 0;../*.*
17940 2a 20 46 69 6c 6c 20 74 68 65 20 73 74 61 63 6b  * Fill the stack
17950 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20 62 69   with a known bi
17960 74 70 61 74 74 65 72 6e 2e 0a 2a 2f 0a 73 74 61  tpattern..*/.sta
17970 74 69 63 20 76 6f 69 64 20 70 72 65 70 53 74 61  tic void prepSta
17980 63 6b 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20  ck(void){.  int 
17990 69 3b 0a 20 20 75 33 32 20 62 69 67 42 75 66 5b  i;.  u32 bigBuf[
179a0 36 35 35 33 36 5d 3b 0a 20 20 66 6f 72 28 69 3d  65536];.  for(i=
179b0 30 3b 20 69 3c 73 69 7a 65 6f 66 28 62 69 67 42  0; i<sizeof(bigB
179c0 75 66 29 3b 20 69 2b 2b 29 20 62 69 67 42 75 66  uf); i++) bigBuf
179d0 5b 69 5d 20 3d 20 30 78 64 65 61 64 62 65 65 66  [i] = 0xdeadbeef
179e0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 61 63  ;.  sqlite3_stac
179f0 6b 5f 62 61 73 65 6c 69 6e 65 20 3d 20 28 75 38  k_baseline = (u8
17a00 2a 29 26 62 69 67 42 75 66 5b 36 35 35 33 36 5d  *)&bigBuf[65536]
17a10 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 74 20 74  ;.}../*.** Get t
17a20 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 63 6b  he current stack
17a30 20 64 65 70 74 68 2e 20 20 55 73 65 64 20 66 6f   depth.  Used fo
17a40 72 20 64 65 62 75 67 67 69 6e 67 20 6f 6e 6c 79  r debugging only
17a50 2e 0a 2a 2f 0a 75 36 34 20 73 71 6c 69 74 65 33  ..*/.u64 sqlite3
17a60 53 74 61 63 6b 44 65 70 74 68 28 76 6f 69 64 29  StackDepth(void)
17a70 7b 0a 20 20 75 38 20 78 3b 0a 20 20 72 65 74 75  {.  u8 x;.  retu
17a80 72 6e 20 28 75 36 34 29 28 73 71 6c 69 74 65 33  rn (u64)(sqlite3
17a90 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65 20  _stack_baseline 
17aa0 2d 20 26 78 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  - &x);.}../*.** 
17ab0 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
17ac0 73 74 61 63 6b 5f 75 73 65 64 20 44 42 20 53 51  stack_used DB SQ
17ad0 4c 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 6d  L.**.** Try to m
17ae0 65 61 73 75 72 65 20 74 68 65 20 61 6d 6f 75 6e  easure the amoun
17af0 74 20 6f 66 20 73 74 61 63 6b 20 73 70 61 63 65  t of stack space
17b00 20 75 73 65 64 20 62 79 20 61 20 63 61 6c 6c 20   used by a call 
17b10 74 6f 20 73 71 6c 69 74 65 33 5f 65 78 65 63 0a  to sqlite3_exec.
17b20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
17b30 73 74 5f 73 74 61 63 6b 5f 75 73 65 64 28 0a 20  st_stack_used(. 
17b40 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
17b50 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
17b60 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
17b70 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61  argc,.  char **a
17b80 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  rgv.){.  sqlite3
17b90 20 2a 64 62 3b 0a 20 20 69 6e 74 20 69 3b 0a 20   *db;.  int i;. 
17ba0 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a   if( argc!=3 ){.
17bb0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
17bc0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
17bd0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
17be0 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
17bf0 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44  0], .        " D
17c00 42 20 53 51 4c 22 2c 20 30 29 3b 0a 20 20 20 20  B SQL", 0);.    
17c10 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
17c20 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
17c30 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
17c40 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
17c50 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
17c60 52 3b 0a 20 20 70 72 65 70 53 74 61 63 6b 28 29  R;.  prepStack()
17c70 3b 0a 20 20 28 76 6f 69 64 29 73 71 6c 69 74 65  ;.  (void)sqlite
17c80 33 5f 65 78 65 63 28 64 62 2c 20 61 72 67 76 5b  3_exec(db, argv[
17c90 32 5d 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  2], 0, 0, 0);.  
17ca0 66 6f 72 28 69 3d 36 35 35 33 35 3b 20 69 3e 3d  for(i=65535; i>=
17cb0 30 20 26 26 20 28 28 75 33 32 2a 29 73 71 6c 69  0 && ((u32*)sqli
17cc0 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69  te3_stack_baseli
17cd0 6e 65 29 5b 2d 69 5d 3d 3d 30 78 64 65 61 64 62  ne)[-i]==0xdeadb
17ce0 65 65 66 3b 20 69 2d 2d 29 7b 7d 0a 20 20 54 63  eef; i--){}.  Tc
17cf0 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
17d00 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
17d10 74 4f 62 6a 28 69 2a 34 29 29 3b 0a 20 20 72 65  tObj(i*4));.  re
17d20 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
17d30 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
17d40 69 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e 63 74  ite_delete_funct
17d50 69 6f 6e 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d  ion DB function-
17d60 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  name.**.** Delet
17d70 65 20 74 68 65 20 75 73 65 72 20 66 75 6e 63 74  e the user funct
17d80 69 6f 6e 20 27 66 75 6e 63 74 69 6f 6e 2d 6e 61  ion 'function-na
17d90 6d 65 27 20 66 72 6f 6d 20 64 61 74 61 62 61 73  me' from databas
17da0 65 20 68 61 6e 64 6c 65 20 44 42 2e 20 49 74 0a  e handle DB. It.
17db0 2a 2a 20 69 73 20 61 73 73 75 6d 65 64 20 74 68  ** is assumed th
17dc0 61 74 20 74 68 65 20 75 73 65 72 20 66 75 6e 63  at the user func
17dd0 74 69 6f 6e 20 77 61 73 20 63 72 65 61 74 65 64  tion was created
17de0 20 61 73 20 55 54 46 38 2c 20 61 6e 79 20 6e 75   as UTF8, any nu
17df0 6d 62 65 72 20 6f 66 0a 2a 2a 20 61 72 67 75 6d  mber of.** argum
17e00 65 6e 74 73 20 28 74 68 65 20 77 61 79 20 74 68  ents (the way th
17e10 65 20 54 43 4c 20 69 6e 74 65 72 66 61 63 65 20  e TCL interface 
17e20 64 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a 73 74 61  does it)..*/.sta
17e30 74 69 63 20 69 6e 74 20 64 65 6c 65 74 65 5f 66  tic int delete_f
17e40 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20  unction(.  void 
17e50 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
17e60 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
17e70 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a  rp,.  int argc,.
17e80 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b    char **argv.){
17e90 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c  .  int rc;.  sql
17ea0 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
17eb0 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
17ec0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
17ed0 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
17ee0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
17ef0 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a   \"", argv[0], .
17f00 20 20 20 20 20 20 20 20 22 20 44 42 20 66 75 6e          " DB fun
17f10 63 74 69 6f 6e 2d 6e 61 6d 65 22 2c 20 30 29 3b  ction-name", 0);
17f20 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
17f30 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
17f40 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
17f50 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
17f60 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
17f70 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73  _ERROR;.  rc = s
17f80 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
17f90 6e 63 74 69 6f 6e 28 64 62 2c 20 61 72 67 76 5b  nction(db, argv[
17fa0 32 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  2], -1, SQLITE_U
17fb0 54 46 38 2c 20 30 2c 20 30 2c 20 30 2c 20 30 29  TF8, 0, 0, 0, 0)
17fc0 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c  ;.  Tcl_SetResul
17fd0 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
17fe0 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63  *)t1ErrorName(rc
17ff0 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a  ), TCL_STATIC);.
18000 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
18010 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
18020 20 73 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 63   sqlite_delete_c
18030 6f 6c 6c 61 74 69 6f 6e 20 44 42 20 63 6f 6c 6c  ollation DB coll
18040 61 74 69 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a  ation-name.**.**
18050 20 44 65 6c 65 74 65 20 74 68 65 20 63 6f 6c 6c   Delete the coll
18060 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 27  ation sequence '
18070 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 27 20  collation-name' 
18080 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 68 61  from database ha
18090 6e 64 6c 65 20 0a 2a 2a 20 44 42 2e 20 49 74 20  ndle .** DB. It 
180a0 69 73 20 61 73 73 75 6d 65 64 20 74 68 61 74 20  is assumed that 
180b0 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
180c0 71 75 65 6e 63 65 20 77 61 73 20 63 72 65 61 74  quence was creat
180d0 65 64 20 61 73 20 55 54 46 38 20 28 74 68 65 20  ed as UTF8 (the 
180e0 0a 2a 2a 20 77 61 79 20 74 68 65 20 54 43 4c 20  .** way the TCL 
180f0 69 6e 74 65 72 66 61 63 65 20 64 6f 65 73 20 69  interface does i
18100 74 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  t)..*/.static in
18110 74 20 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69  t delete_collati
18120 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  on(.  void * cli
18130 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
18140 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
18150 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61   int argc,.  cha
18160 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e  r **argv.){.  in
18170 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20  t rc;.  sqlite3 
18180 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63 21  *db;.  if( argc!
18190 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
181a0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
181b0 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
181c0 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
181d0 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
181e0 20 20 20 22 20 44 42 20 66 75 6e 63 74 69 6f 6e     " DB function
181f0 2d 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20  -name", 0);.    
18200 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
18210 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
18220 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
18230 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
18240 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
18250 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
18260 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
18270 6f 6e 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20  on(db, argv[2], 
18280 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20  SQLITE_UTF8, 0, 
18290 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73  0);.  Tcl_SetRes
182a0 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
182b0 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28  r *)t1ErrorName(
182c0 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  rc), TCL_STATIC)
182d0 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
182e0 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
182f0 65 3a 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61  e: sqlite3_get_a
18300 75 74 6f 63 6f 6d 6d 69 74 20 44 42 0a 2a 2a 0a  utocommit DB.**.
18310 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
18320 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 44  f the database D
18330 42 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69  B is currently i
18340 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f  n auto-commit mo
18350 64 65 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 66 61  de..** Return fa
18360 6c 73 65 20 69 66 20 6e 6f 74 2e 0a 2a 2f 0a 73  lse if not..*/.s
18370 74 61 74 69 63 20 69 6e 74 20 67 65 74 5f 61 75  tatic int get_au
18380 74 6f 63 6f 6d 6d 69 74 28 0a 20 20 76 6f 69 64  tocommit(.  void
18390 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
183a0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
183b0 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c  erp,.  int argc,
183c0 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29  .  char **argv.)
183d0 7b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33 30  {.  char zBuf[30
183e0 5d 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ];.  sqlite3 *db
183f0 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20  ;.  if( argc!=2 
18400 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
18410 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
18420 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
18430 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
18440 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20  gv[0], .        
18450 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72  " DB", 0);.    r
18460 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
18470 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
18480 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
18490 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
184a0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
184b0 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66  ;.  sprintf(zBuf
184c0 2c 20 22 25 64 22 2c 20 73 71 6c 69 74 65 33 5f  , "%d", sqlite3_
184d0 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 64  get_autocommit(d
184e0 62 29 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  b));.  Tcl_Appen
184f0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
18500 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75  zBuf, 0);.  retu
18510 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
18520 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
18530 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 20  e3_busy_timeout 
18540 44 42 20 4d 53 0a 2a 2a 0a 2a 2a 20 53 65 74 20  DB MS.**.** Set 
18550 74 68 65 20 62 75 73 79 20 74 69 6d 65 6f 75 74  the busy timeout
18560 2e 20 20 54 68 69 73 20 69 73 20 6d 6f 72 65 20  .  This is more 
18570 65 61 73 69 6c 79 20 64 6f 6e 65 20 75 73 69 6e  easily done usin
18580 67 20 74 68 65 20 74 69 6d 65 6f 75 74 0a 2a 2a  g the timeout.**
18590 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 54   method of the T
185a0 43 4c 20 69 6e 74 65 72 66 61 63 65 2e 20 20 42  CL interface.  B
185b0 75 74 20 77 65 20 6e 65 65 64 20 61 20 77 61 79  ut we need a way
185c0 20 74 6f 20 74 65 73 74 20 74 68 65 20 63 61 73   to test the cas
185d0 65 0a 2a 2a 20 77 68 65 72 65 20 69 74 20 72 65  e.** where it re
185e0 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4d 49 53  turns SQLITE_MIS
185f0 55 53 45 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  USE..*/.static i
18600 6e 74 20 74 65 73 74 5f 62 75 73 79 5f 74 69 6d  nt test_busy_tim
18610 65 6f 75 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  eout(.  void * c
18620 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
18630 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
18640 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63  .  int argc,.  c
18650 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  har **argv.){.  
18660 69 6e 74 20 72 63 2c 20 6d 73 3b 0a 20 20 73 71  int rc, ms;.  sq
18670 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28  lite3 *db;.  if(
18680 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20   argc!=3 ){.    
18690 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
186a0 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
186b0 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
186c0 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20  e \"", argv[0], 
186d0 0a 20 20 20 20 20 20 20 20 22 20 44 42 22 2c 20  .        " DB", 
186e0 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
186f0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
18700 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
18710 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
18720 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
18730 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
18740 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65   Tcl_GetInt(inte
18750 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26 6d 73  rp, argv[2], &ms
18760 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
18770 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c  RROR;.  rc = sql
18780 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
18790 74 28 64 62 2c 20 6d 73 29 3b 0a 20 20 54 63 6c  t(db, ms);.  Tcl
187a0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
187b0 74 65 72 70 2c 20 73 71 6c 69 74 65 33 54 65 73  terp, sqlite3Tes
187c0 74 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  tErrorName(rc), 
187d0 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  0);.  return TCL
187e0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
187f0 61 67 65 3a 20 20 74 63 6c 5f 76 61 72 69 61 62  age:  tcl_variab
18800 6c 65 5f 74 79 70 65 20 56 41 52 49 41 42 4c 45  le_type VARIABLE
18810 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  NAME.**.** Retur
18820 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  n the name of th
18830 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
18840 73 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 74 68  sentation for th
18850 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68  e.** value of th
18860 65 20 67 69 76 65 6e 20 76 61 72 69 61 62 6c 65  e given variable
18870 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
18880 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70  tcl_variable_typ
18890 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
188a0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
188b0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
188c0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
188d0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
188e0 5d 0a 29 7b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  ].){.  Tcl_Obj *
188f0 70 56 61 72 3b 0a 20 20 69 66 28 20 6f 62 6a 63  pVar;.  if( objc
18900 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=2 ){.    Tcl_W
18910 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
18920 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 56 41  rp, 1, objv, "VA
18930 52 49 41 42 4c 45 22 29 3b 0a 20 20 20 20 72 65  RIABLE");.    re
18940 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
18950 20 20 7d 0a 20 20 70 56 61 72 20 3d 20 54 63 6c    }.  pVar = Tcl
18960 5f 47 65 74 56 61 72 32 45 78 28 69 6e 74 65 72  _GetVar2Ex(inter
18970 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
18980 28 6f 62 6a 76 5b 31 5d 29 2c 20 30 2c 20 54 43  (objv[1]), 0, TC
18990 4c 5f 4c 45 41 56 45 5f 45 52 52 5f 4d 53 47 29  L_LEAVE_ERR_MSG)
189a0 3b 0a 20 20 69 66 28 20 70 56 61 72 3d 3d 30 20  ;.  if( pVar==0 
189b0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
189c0 4f 52 3b 0a 20 20 69 66 28 20 70 56 61 72 2d 3e  OR;.  if( pVar->
189d0 74 79 70 65 50 74 72 20 29 7b 0a 20 20 20 20 54  typePtr ){.    T
189e0 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
189f0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53  interp, Tcl_NewS
18a00 74 72 69 6e 67 4f 62 6a 28 70 56 61 72 2d 3e 74  tringObj(pVar->t
18a10 79 70 65 50 74 72 2d 3e 6e 61 6d 65 2c 20 2d 31  ypePtr->name, -1
18a20 29 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ));.  }.  return
18a30 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
18a40 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
18a50 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
18a60 20 3f 4e 3f 0a 2a 2a 0a 2a 2a 20 41 74 74 65 6d   ?N?.**.** Attem
18a70 70 74 20 74 6f 20 72 65 6c 65 61 73 65 20 6d 65  pt to release me
18a80 6d 6f 72 79 20 63 75 72 72 65 6e 74 6c 79 20 68  mory currently h
18a90 65 6c 64 20 62 75 74 20 6e 6f 74 20 61 63 74 75  eld but not actu
18aa0 61 6c 6c 79 20 72 65 71 75 69 72 65 64 2e 0a 2a  ally required..*
18ab0 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 4e 20  * The integer N 
18ac0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
18ad0 20 62 79 74 65 73 20 77 65 20 61 72 65 20 74 72   bytes we are tr
18ae0 79 69 6e 67 20 74 6f 20 72 65 6c 65 61 73 65 2e  ying to release.
18af0 20 20 54 68 65 20 0a 2a 2a 20 72 65 74 75 72 6e    The .** return
18b00 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 61 6d   value is the am
18b10 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 20 61  ount of memory a
18b20 63 74 75 61 6c 6c 79 20 72 65 6c 65 61 73 65 64  ctually released
18b30 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
18b40 74 65 73 74 5f 72 65 6c 65 61 73 65 5f 6d 65 6d  test_release_mem
18b50 6f 72 79 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ory(.  void * cl
18b60 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
18b70 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
18b80 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
18b90 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
18ba0 76 5b 5d 0a 29 7b 0a 23 69 66 20 64 65 66 69 6e  v[].){.#if defin
18bb0 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
18bc0 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
18bd0 4e 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  NT) && !defined(
18be0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b  SQLITE_OMIT_DISK
18bf0 49 4f 29 0a 20 20 69 6e 74 20 4e 3b 0a 20 20 69  IO).  int N;.  i
18c00 6e 74 20 61 6d 74 3b 0a 20 20 69 66 28 20 6f 62  nt amt;.  if( ob
18c10 6a 63 21 3d 31 20 26 26 20 6f 62 6a 63 21 3d 32  jc!=1 && objc!=2
18c20 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
18c30 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
18c40 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 4e 3f 22 29   1, objv, "?N?")
18c50 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
18c60 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
18c70 28 20 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20  ( objc==2 ){.   
18c80 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
18c90 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
18ca0 62 6a 76 5b 31 5d 2c 20 26 4e 29 20 29 20 72 65  bjv[1], &N) ) re
18cb0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
18cc0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4e 20 3d    }else{.    N =
18cd0 20 2d 31 3b 0a 20 20 7d 0a 20 20 61 6d 74 20 3d   -1;.  }.  amt =
18ce0 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65   sqlite3_release
18cf0 5f 6d 65 6d 6f 72 79 28 4e 29 3b 0a 20 20 54 63  _memory(N);.  Tc
18d00 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
18d10 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
18d20 74 4f 62 6a 28 61 6d 74 29 29 3b 0a 23 65 6e 64  tObj(amt));.#end
18d30 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  if.  return TCL_
18d40 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
18d50 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 73 6f 66  ge:  sqlite3_sof
18d60 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3f 4e 3f  t_heap_limit ?N?
18d70 0a 2a 2a 0a 2a 2a 20 51 75 65 72 79 20 6f 72 20  .**.** Query or 
18d80 73 65 74 20 74 68 65 20 73 6f 66 74 20 68 65 61  set the soft hea
18d90 70 20 6c 69 6d 69 74 20 66 6f 72 20 74 68 65 20  p limit for the 
18da0 63 75 72 72 65 6e 74 20 74 68 72 65 61 64 2e 20  current thread. 
18db0 20 54 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 69 73   The.** limit is
18dc0 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66   only changed if
18dd0 20 74 68 65 20 4e 20 69 73 20 70 72 65 73 65 6e   the N is presen
18de0 74 2e 20 20 54 68 65 20 70 72 65 76 69 6f 75 73  t.  The previous
18df0 20 6c 69 6d 69 74 0a 2a 2a 20 69 73 20 72 65 74   limit.** is ret
18e00 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  urned..*/.static
18e10 20 69 6e 74 20 74 65 73 74 5f 73 6f 66 74 5f 68   int test_soft_h
18e20 65 61 70 5f 6c 69 6d 69 74 28 0a 20 20 76 6f 69  eap_limit(.  voi
18e30 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
18e40 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
18e50 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
18e60 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
18e70 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66  ST objv[].){.#if
18e80 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
18e90 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
18ea0 4e 41 47 45 4d 45 4e 54 29 20 26 26 20 21 64 65  NAGEMENT) && !de
18eb0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
18ec0 54 5f 44 49 53 4b 49 4f 29 0a 20 20 69 6e 74 20  T_DISKIO).  int 
18ed0 61 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21  amt;.  if( objc!
18ee0 3d 31 20 26 26 20 6f 62 6a 63 21 3d 32 20 29 7b  =1 && objc!=2 ){
18ef0 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75  .    Tcl_WrongNu
18f00 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
18f10 20 6f 62 6a 76 2c 20 22 3f 4e 3f 22 29 3b 0a 20   objv, "?N?");. 
18f20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
18f30 52 4f 52 3b 0a 20 20 7d 0a 20 20 61 6d 74 20 3d  ROR;.  }.  amt =
18f40 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 44 61   sqlite3ThreadDa
18f50 74 61 52 65 61 64 4f 6e 6c 79 28 29 2d 3e 6e 53  taReadOnly()->nS
18f60 6f 66 74 48 65 61 70 4c 69 6d 69 74 3b 0a 20 20  oftHeapLimit;.  
18f70 69 66 28 20 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20  if( objc==2 ){. 
18f80 20 20 20 69 6e 74 20 4e 3b 0a 20 20 20 20 69 66     int N;.    if
18f90 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
18fa0 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
18fb0 5b 31 5d 2c 20 26 4e 29 20 29 20 72 65 74 75 72  [1], &N) ) retur
18fc0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
18fd0 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65   sqlite3_soft_he
18fe0 61 70 5f 6c 69 6d 69 74 28 4e 29 3b 0a 20 20 7d  ap_limit(N);.  }
18ff0 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
19000 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
19010 4e 65 77 49 6e 74 4f 62 6a 28 61 6d 74 29 29 3b  NewIntObj(amt));
19020 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e  .#endif.  return
19030 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
19040 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
19050 65 33 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65 6d  e3_clear_tsd_mem
19060 64 65 62 75 67 0a 2a 2a 0a 2a 2a 20 43 6c 65 61  debug.**.** Clea
19070 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 4d 45 4d  r all of the MEM
19080 44 45 42 55 47 20 69 6e 66 6f 72 6d 61 74 69 6f  DEBUG informatio
19090 6e 20 6f 75 74 20 6f 66 20 74 68 72 65 61 64 2d  n out of thread-
190a0 73 70 65 63 69 66 69 63 20 64 61 74 61 2e 0a 2a  specific data..*
190b0 2a 20 54 68 69 73 20 77 69 6c 6c 20 61 6c 6c 6f  * This will allo
190c0 77 20 69 74 20 74 6f 20 62 65 20 64 65 61 6c 6c  w it to be deall
190d0 6f 63 61 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  ocated..*/.stati
190e0 63 20 69 6e 74 20 74 65 73 74 5f 63 6c 65 61 72  c int test_clear
190f0 5f 74 73 64 5f 6d 65 6d 64 65 62 75 67 28 0a 20  _tsd_memdebug(. 
19100 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
19110 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
19120 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
19130 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
19140 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
19150 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
19160 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
19170 3a 20 20 20 73 71 6c 69 74 65 33 5f 74 73 64 5f  :   sqlite3_tsd_
19180 72 65 6c 65 61 73 65 0a 2a 2a 0a 2a 2a 20 43 61  release.**.** Ca
19190 6c 6c 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  ll sqlite3Releas
191a0 65 54 68 72 65 61 64 44 61 74 61 2e 0a 2a 2f 0a  eThreadData..*/.
191b0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
191c0 74 73 64 5f 72 65 6c 65 61 73 65 28 0a 20 20 76  tsd_release(.  v
191d0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
191e0 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
191f0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
19200 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
19210 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23  ONST objv[].){.#
19220 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
19230 45 5f 4d 45 4d 44 45 42 55 47 29 0a 20 20 73 71  E_MEMDEBUG).  sq
19240 6c 69 74 65 33 52 65 6c 65 61 73 65 54 68 72 65  lite3ReleaseThre
19250 61 64 44 61 74 61 28 29 3b 0a 23 65 6e 64 69 66  adData();.#endif
19260 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
19270 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
19280 3a 20 20 20 73 71 6c 69 74 65 33 5f 74 68 72 65  :   sqlite3_thre
19290 61 64 5f 63 6c 65 61 6e 75 70 0a 2a 2a 0a 2a 2a  ad_cleanup.**.**
192a0 20 43 61 6c 6c 20 74 68 65 20 73 71 6c 69 74 65   Call the sqlite
192b0 33 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70  3_thread_cleanup
192c0 20 41 50 49 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   API..*/.static 
192d0 69 6e 74 20 74 65 73 74 5f 74 68 72 65 61 64 5f  int test_thread_
192e0 63 6c 65 61 6e 75 70 28 0a 20 20 76 6f 69 64 20  cleanup(.  void 
192f0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
19300 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
19310 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
19320 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
19330 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
19340 69 74 65 33 5f 74 68 72 65 61 64 5f 63 6c 65 61  ite3_thread_clea
19350 6e 75 70 28 29 3b 0a 20 20 72 65 74 75 72 6e 20  nup();.  return 
19360 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  TCL_OK;.}.../*.*
19370 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
19380 65 33 5f 70 61 67 65 72 5f 72 65 66 63 6f 75 6e  e3_pager_refcoun
19390 74 73 20 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74  ts  DB.**.** Ret
193a0 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 6e 75  urn a list of nu
193b0 6d 62 65 72 73 20 77 68 65 6e 20 61 72 65 20 74  mbers when are t
193c0 68 65 20 50 61 67 65 72 52 65 66 63 6f 75 6e 74  he PagerRefcount
193d0 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 70 61 67   for each.** pag
193e0 65 72 20 6f 6e 20 65 61 63 68 20 64 61 74 61 62  er on each datab
193f0 61 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ase..*/.static i
19400 6e 74 20 74 65 73 74 5f 70 61 67 65 72 5f 72 65  nt test_pager_re
19410 66 63 6f 75 6e 74 73 28 0a 20 20 76 6f 69 64 20  fcounts(.  void 
19420 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
19430 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
19440 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
19450 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
19460 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
19470 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
19480 69 3b 0a 20 20 69 6e 74 20 76 2c 20 2a 61 3b 0a  i;.  int v, *a;.
19490 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 52 65 73 75    Tcl_Obj *pResu
194a0 6c 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  lt;..  if( objc!
194b0 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
194c0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
194d0 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
194e0 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
194f0 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  .        Tcl_Get
19500 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
19510 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54  jv[0], 0), " <ST
19520 4d 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  MT>", 0);.    re
19530 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
19540 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
19550 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
19560 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
19570 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
19580 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
19590 20 20 70 52 65 73 75 6c 74 20 3d 20 54 63 6c 5f    pResult = Tcl_
195a0 4e 65 77 4f 62 6a 28 29 3b 0a 20 20 66 6f 72 28  NewObj();.  for(
195b0 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
195c0 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 64 62  i++){.    if( db
195d0 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20  ->aDb[i].pBt==0 
195e0 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 2d 31 3b  ){.      v = -1;
195f0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
19600 20 20 61 20 3d 20 73 71 6c 69 74 65 33 50 61 67    a = sqlite3Pag
19610 65 72 53 74 61 74 73 28 73 71 6c 69 74 65 33 42  erStats(sqlite3B
19620 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44  treePager(db->aD
19630 62 5b 69 5d 2e 70 42 74 29 29 3b 0a 20 20 20 20  b[i].pBt));.    
19640 20 20 76 20 3d 20 61 5b 30 5d 3b 0a 20 20 20 20    v = a[0];.    
19650 7d 0a 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62  }.    Tcl_ListOb
19660 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30  jAppendElement(0
19670 2c 20 70 52 65 73 75 6c 74 2c 20 54 63 6c 5f 4e  , pResult, Tcl_N
19680 65 77 49 6e 74 4f 62 6a 28 76 29 29 3b 0a 20 20  ewIntObj(v));.  
19690 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  }.  Tcl_SetObjRe
196a0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 70 52 65  sult(interp, pRe
196b0 73 75 6c 74 29 3b 0a 20 20 72 65 74 75 72 6e 20  sult);.  return 
196c0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  TCL_OK;.}.../*.*
196d0 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73  * This routine s
196e0 65 74 73 20 65 6e 74 72 69 65 73 20 69 6e 20 74  ets entries in t
196f0 68 65 20 67 6c 6f 62 61 6c 20 3a 3a 73 71 6c 69  he global ::sqli
19700 74 65 5f 6f 70 74 69 6f 6e 73 28 29 20 61 72 72  te_options() arr
19710 61 79 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 61  ay variable.** a
19720 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
19730 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
19740 66 69 67 75 72 61 74 69 6f 6e 20 6f 66 20 74 68  figuration of th
19750 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 65 73  e database.  Tes
19760 74 0a 2a 2a 20 70 72 6f 63 65 64 75 72 65 73 20  t.** procedures 
19770 75 73 65 20 74 68 69 73 20 74 6f 20 64 65 74 65  use this to dete
19780 72 6d 69 6e 65 20 77 68 65 6e 20 74 65 73 74 73  rmine when tests
19790 20 73 68 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74   should be omitt
197a0 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ed..*/.static vo
197b0 69 64 20 73 65 74 5f 6f 70 74 69 6f 6e 73 28 54  id set_options(T
197c0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
197d0 70 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  p){.#ifdef SQLIT
197e0 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 20 20  E_32BIT_ROWID.  
197f0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
19800 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
19810 6f 6e 73 22 2c 20 22 72 6f 77 69 64 33 32 22 2c  ons", "rowid32",
19820 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
19830 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
19840 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
19850 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
19860 6f 6e 73 22 2c 20 22 72 6f 77 69 64 33 32 22 2c  ons", "rowid32",
19870 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
19880 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
19890 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43 41  #ifdef SQLITE_CA
198a0 53 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b  SE_SENSITIVE_LIK
198b0 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  E.  Tcl_SetVar2(
198c0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
198d0 6f 70 74 69 6f 6e 73 22 2c 22 63 61 73 65 73 65  options","casese
198e0 6e 73 69 74 69 76 65 6c 69 6b 65 22 2c 22 31 22  nsitivelike","1"
198f0 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59  ,TCL_GLOBAL_ONLY
19900 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
19910 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
19920 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
19930 22 63 61 73 65 73 65 6e 73 69 74 69 76 65 6c 69  "casesensitiveli
19940 6b 65 22 2c 22 30 22 2c 54 43 4c 5f 47 4c 4f 42  ke","0",TCL_GLOB
19950 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
19960 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
19970 44 49 53 41 42 4c 45 5f 44 49 52 53 59 4e 43 0a  DISABLE_DIRSYNC.
19980 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
19990 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
199a0 74 69 6f 6e 73 22 2c 20 22 64 69 72 73 79 6e 63  tions", "dirsync
199b0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
199c0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
199d0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
199e0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
199f0 74 69 6f 6e 73 22 2c 20 22 64 69 72 73 79 6e 63  tions", "dirsync
19a00 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
19a10 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
19a20 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
19a30 44 49 53 41 42 4c 45 5f 4c 46 53 0a 20 20 54 63  DISABLE_LFS.  Tc
19a40 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
19a50 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
19a60 73 22 2c 20 22 6c 66 73 22 2c 20 22 30 22 2c 20  s", "lfs", "0", 
19a70 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
19a80 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
19a90 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
19aa0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
19ab0 22 6c 66 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f  "lfs", "1", TCL_
19ac0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
19ad0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
19ae0 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
19af0 42 4c 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  BLE.  Tcl_SetVar
19b00 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
19b10 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 6c 74  e_options", "alt
19b20 65 72 74 61 62 6c 65 22 2c 20 22 30 22 2c 20 54  ertable", "0", T
19b30 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
19b40 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
19b50 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
19b60 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
19b70 61 6c 74 65 72 74 61 62 6c 65 22 2c 20 22 31 22  altertable", "1"
19b80 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
19b90 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
19ba0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
19bb0 4e 41 4c 59 5a 45 0a 20 20 54 63 6c 5f 53 65 74  NALYZE.  Tcl_Set
19bc0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
19bd0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
19be0 61 6e 61 6c 79 7a 65 22 2c 20 22 30 22 2c 20 54  analyze", "0", T
19bf0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
19c00 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
19c10 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
19c20 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
19c30 61 6e 61 6c 79 7a 65 22 2c 20 22 31 22 2c 20 54  analyze", "1", T
19c40 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
19c50 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
19c60 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41  SQLITE_OMIT_ATTA
19c70 43 48 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  CH.  Tcl_SetVar2
19c80 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
19c90 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 74 74 61  _options", "atta
19ca0 63 68 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ch", "0", TCL_GL
19cb0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
19cc0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
19cd0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
19ce0 6f 70 74 69 6f 6e 73 22 2c 20 22 61 74 74 61 63  options", "attac
19cf0 68 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  h", "1", TCL_GLO
19d00 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
19d10 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
19d20 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
19d30 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  ION.  Tcl_SetVar
19d40 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
19d50 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74  e_options", "aut
19d60 68 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  h", "0", TCL_GLO
19d70 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
19d80 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
19d90 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
19da0 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 68 22 2c  ptions", "auth",
19db0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
19dc0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
19dd0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
19de0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
19df0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
19e00 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
19e10 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 69 6e  ptions", "autoin
19e20 63 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  c", "0", TCL_GLO
19e30 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
19e40 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
19e50 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
19e60 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 69 6e  ptions", "autoin
19e70 63 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  c", "1", TCL_GLO
19e80 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
19e90 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
19ea0 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
19eb0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
19ec0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
19ed0 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 76 61  ptions", "autova
19ee0 63 75 75 6d 22 2c 20 22 30 22 2c 20 54 43 4c 5f  cuum", "0", TCL_
19ef0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
19f00 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
19f10 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
19f20 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74  e_options", "aut
19f30 6f 76 61 63 75 75 6d 22 2c 20 22 31 22 2c 20 54  ovacuum", "1", T
19f40 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
19f50 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
19f60 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
19f70 4d 20 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  M */.#if !define
19f80 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  d(SQLITE_DEFAULT
19f90 5f 41 55 54 4f 56 41 43 55 55 4d 29 20 7c 7c 20  _AUTOVACUUM) || 
19fa0 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 41  SQLITE_DEFAULT_A
19fb0 55 54 4f 56 41 43 55 55 4d 3d 3d 30 0a 20 20 54  UTOVACUUM==0.  T
19fc0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
19fd0 70 2c 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  p,"sqlite_option
19fe0 73 22 2c 22 64 65 66 61 75 6c 74 5f 61 75 74 6f  s","default_auto
19ff0 76 61 63 75 75 6d 22 2c 22 30 22 2c 54 43 4c 5f  vacuum","0",TCL_
1a000 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1a010 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
1a020 32 28 69 6e 74 65 72 70 2c 22 73 71 6c 69 74 65  2(interp,"sqlite
1a030 5f 6f 70 74 69 6f 6e 73 22 2c 22 64 65 66 61 75  _options","defau
1a040 6c 74 5f 61 75 74 6f 76 61 63 75 75 6d 22 2c 22  lt_autovacuum","
1a050 31 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  1",TCL_GLOBAL_ON
1a060 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
1a070 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1a080 42 45 54 57 45 45 4e 5f 4f 50 54 49 4d 49 5a 41  BETWEEN_OPTIMIZA
1a090 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61  TION.  Tcl_SetVa
1a0a0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1a0b0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 62 65  te_options", "be
1a0c0 74 77 65 65 6e 5f 6f 70 74 22 2c 20 22 30 22 2c  tween_opt", "0",
1a0d0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1a0e0 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
1a0f0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
1a100 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
1a110 20 22 62 65 74 77 65 65 6e 5f 6f 70 74 22 2c 20   "between_opt", 
1a120 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
1a130 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
1a140 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
1a150 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 0a 20  T_BLOB_LITERAL. 
1a160 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1a170 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1a180 69 6f 6e 73 22 2c 20 22 62 6c 6f 62 6c 69 74 22  ions", "bloblit"
1a190 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
1a1a0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
1a1b0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1a1c0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1a1d0 69 6f 6e 73 22 2c 20 22 62 6c 6f 62 6c 69 74 22  ions", "bloblit"
1a1e0 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
1a1f0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1a200 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1a210 4d 49 54 5f 43 41 53 54 0a 20 20 54 63 6c 5f 53  MIT_CAST.  Tcl_S
1a220 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
1a230 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
1a240 20 22 63 61 73 74 22 2c 20 22 30 22 2c 20 54 43   "cast", "0", TC
1a250 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
1a260 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
1a270 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
1a280 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63  ite_options", "c
1a290 61 73 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  ast", "1", TCL_G
1a2a0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
1a2b0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
1a2c0 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20  TE_OMIT_CHECK.  
1a2d0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
1a2e0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
1a2f0 6f 6e 73 22 2c 20 22 63 68 65 63 6b 22 2c 20 22  ons", "check", "
1a300 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
1a310 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
1a320 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1a330 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1a340 73 22 2c 20 22 63 68 65 63 6b 22 2c 20 22 31 22  s", "check", "1"
1a350 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1a360 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
1a370 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1a380 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41  _COLUMN_METADATA
1a390 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1a3a0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1a3b0 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6c 75 6d 6e  ptions", "column
1a3c0 6d 65 74 61 64 61 74 61 22 2c 20 22 31 22 2c 20  metadata", "1", 
1a3d0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
1a3e0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
1a3f0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1a400 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1a410 22 63 6f 6c 75 6d 6e 6d 65 74 61 64 61 74 61 22  "columnmetadata"
1a420 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
1a430 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1a440 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1a450 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 0a 20 20 54  MIT_COMPLETE.  T
1a460 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
1a470 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
1a480 6e 73 22 2c 20 22 63 6f 6d 70 6c 65 74 65 22 2c  ns", "complete",
1a490 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
1a4a0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
1a4b0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
1a4c0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
1a4d0 6f 6e 73 22 2c 20 22 63 6f 6d 70 6c 65 74 65 22  ons", "complete"
1a4e0 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
1a4f0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1a500 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1a510 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c  MIT_COMPOUND_SEL
1a520 45 43 54 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  ECT.  Tcl_SetVar
1a530 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1a540 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6d  e_options", "com
1a550 70 6f 75 6e 64 22 2c 20 22 30 22 2c 20 54 43 4c  pound", "0", TCL
1a560 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
1a570 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
1a580 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1a590 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f  te_options", "co
1a5a0 6d 70 6f 75 6e 64 22 2c 20 22 31 22 2c 20 54 43  mpound", "1", TC
1a5b0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
1a5c0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
1a5d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4e 46 4c  QLITE_OMIT_CONFL
1a5e0 49 43 54 5f 43 4c 41 55 53 45 0a 20 20 54 63 6c  ICT_CLAUSE.  Tcl
1a5f0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1a600 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1a610 22 2c 20 22 63 6f 6e 66 6c 69 63 74 22 2c 20 22  ", "conflict", "
1a620 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
1a630 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
1a640 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1a650 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1a660 73 22 2c 20 22 63 6f 6e 66 6c 69 63 74 22 2c 20  s", "conflict", 
1a670 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
1a680 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
1a690 69 66 20 4f 53 5f 55 4e 49 58 0a 20 20 54 63 6c  if OS_UNIX.  Tcl
1a6a0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1a6b0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1a6c0 22 2c 20 22 63 72 61 73 68 74 65 73 74 22 2c 20  ", "crashtest", 
1a6d0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
1a6e0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
1a6f0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
1a700 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
1a710 6e 73 22 2c 20 22 63 72 61 73 68 74 65 73 74 22  ns", "crashtest"
1a720 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
1a730 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1a740 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1a750 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e  MIT_DATETIME_FUN
1a760 43 53 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  CS.  Tcl_SetVar2
1a770 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1a780 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 61 74 65  _options", "date
1a790 74 69 6d 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f  time", "0", TCL_
1a7a0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1a7b0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
1a7c0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1a7d0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 61 74  e_options", "dat
1a7e0 65 74 69 6d 65 22 2c 20 22 31 22 2c 20 54 43 4c  etime", "1", TCL
1a7f0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
1a800 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
1a810 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f  LITE_OMIT_DISKIO
1a820 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1a830 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1a840 70 74 69 6f 6e 73 22 2c 20 22 64 69 73 6b 69 6f  ptions", "diskio
1a850 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
1a860 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
1a870 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1a880 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1a890 74 69 6f 6e 73 22 2c 20 22 64 69 73 6b 69 6f 22  tions", "diskio"
1a8a0 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
1a8b0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1a8c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1a8d0 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 54 63  MIT_EXPLAIN.  Tc
1a8e0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1a8f0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1a900 73 22 2c 20 22 65 78 70 6c 61 69 6e 22 2c 20 22  s", "explain", "
1a910 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
1a920 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
1a930 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1a940 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1a950 73 22 2c 20 22 65 78 70 6c 61 69 6e 22 2c 20 22  s", "explain", "
1a960 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
1a970 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
1a980 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
1a990 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
1a9a0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1a9b0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1a9c0 74 69 6f 6e 73 22 2c 20 22 66 6c 6f 61 74 69 6e  tions", "floatin
1a9d0 67 70 6f 69 6e 74 22 2c 20 22 30 22 2c 20 54 43  gpoint", "0", TC
1a9e0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
1a9f0 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
1aa00 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
1aa10 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66  ite_options", "f
1aa20 6c 6f 61 74 69 6e 67 70 6f 69 6e 74 22 2c 20 22  loatingpoint", "
1aa30 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
1aa40 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
1aa50 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
1aa60 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 54  _FOREIGN_KEY.  T
1aa70 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
1aa80 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
1aa90 6e 73 22 2c 20 22 66 6f 72 65 69 67 6e 6b 65 79  ns", "foreignkey
1aaa0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
1aab0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
1aac0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1aad0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1aae0 74 69 6f 6e 73 22 2c 20 22 66 6f 72 65 69 67 6e  tions", "foreign
1aaf0 6b 65 79 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  key", "1", TCL_G
1ab00 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
1ab10 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
1ab20 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 31 0a 20  TE_ENABLE_FTS1. 
1ab30 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1ab40 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1ab50 69 6f 6e 73 22 2c 20 22 66 74 73 31 22 2c 20 22  ions", "fts1", "
1ab60 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
1ab70 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
1ab80 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1ab90 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1aba0 73 22 2c 20 22 66 74 73 31 22 2c 20 22 30 22 2c  s", "fts1", "0",
1abb0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1abc0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
1abd0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1abe0 46 54 53 32 0a 20 20 54 63 6c 5f 53 65 74 56 61  FTS2.  Tcl_SetVa
1abf0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1ac00 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66 74  te_options", "ft
1ac10 73 32 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  s2", "1", TCL_GL
1ac20 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
1ac30 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
1ac40 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1ac50 6f 70 74 69 6f 6e 73 22 2c 20 22 66 74 73 32 22  options", "fts2"
1ac60 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
1ac70 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1ac80 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1ac90 4d 49 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56 45  MIT_GLOBALRECOVE
1aca0 52 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  R.  Tcl_SetVar2(
1acb0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1acc0 6f 70 74 69 6f 6e 73 22 2c 20 22 67 6c 6f 62 61  options", "globa
1acd0 6c 72 65 63 6f 76 65 72 22 2c 20 22 30 22 2c 20  lrecover", "0", 
1ace0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
1acf0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
1ad00 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1ad10 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1ad20 22 67 6c 6f 62 61 6c 72 65 63 6f 76 65 72 22 2c  "globalrecover",
1ad30 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
1ad40 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
1ad50 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
1ad60 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
1ad70 43 4b 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  CK.  Tcl_SetVar2
1ad80 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1ad90 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 69 6e 74 65  _options", "inte
1ada0 67 72 69 74 79 63 6b 22 2c 20 22 30 22 2c 20 54  grityck", "0", T
1adb0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1adc0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
1add0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1ade0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1adf0 69 6e 74 65 67 72 69 74 79 63 6b 22 2c 20 22 31  integrityck", "1
1ae00 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
1ae10 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
1ae20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1ae30 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
1ae40 4d 41 54 29 20 26 26 20 53 51 4c 49 54 45 5f 44  MAT) && SQLITE_D
1ae50 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d  EFAULT_FILE_FORM
1ae60 41 54 3d 3d 31 0a 20 20 54 63 6c 5f 53 65 74 56  AT==1.  Tcl_SetV
1ae70 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
1ae80 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6c  ite_options", "l
1ae90 65 67 61 63 79 66 6f 72 6d 61 74 22 2c 20 22 31  egacyformat", "1
1aea0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
1aeb0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
1aec0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1aed0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1aee0 22 2c 20 22 6c 65 67 61 63 79 66 6f 72 6d 61 74  ", "legacyformat
1aef0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
1af00 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
1af10 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1af20 4f 4d 49 54 5f 4c 49 4b 45 5f 4f 50 54 49 4d 49  OMIT_LIKE_OPTIMI
1af30 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74  ZATION.  Tcl_Set
1af40 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1af50 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1af60 6c 69 6b 65 5f 6f 70 74 22 2c 20 22 30 22 2c 20  like_opt", "0", 
1af70 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
1af80 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
1af90 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1afa0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1afb0 22 6c 69 6b 65 5f 6f 70 74 22 2c 20 22 31 22 2c  "like_opt", "1",
1afc0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1afd0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
1afe0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45  f SQLITE_OMIT_ME
1aff0 4d 4f 52 59 44 42 0a 20 20 54 63 6c 5f 53 65 74  MORYDB.  Tcl_Set
1b000 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1b010 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1b020 6d 65 6d 6f 72 79 64 62 22 2c 20 22 30 22 2c 20  memorydb", "0", 
1b030 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
1b040 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
1b050 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1b060 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1b070 22 6d 65 6d 6f 72 79 64 62 22 2c 20 22 31 22 2c  "memorydb", "1",
1b080 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1b090 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
1b0a0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1b0b0 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e  MEMORY_MANAGEMEN
1b0c0 54 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  T.  Tcl_SetVar2(
1b0d0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1b0e0 6f 70 74 69 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72  options", "memor
1b0f0 79 6d 61 6e 61 67 65 22 2c 20 22 31 22 2c 20 54  ymanage", "1", T
1b100 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1b110 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
1b120 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1b130 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1b140 6d 65 6d 6f 72 79 6d 61 6e 61 67 65 22 2c 20 22  memorymanage", "
1b150 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
1b160 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
1b170 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
1b180 5f 4f 52 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  _OR_OPTIMIZATION
1b190 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1b1a0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1b1b0 70 74 69 6f 6e 73 22 2c 20 22 6f 72 5f 6f 70 74  ptions", "or_opt
1b1c0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
1b1d0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
1b1e0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1b1f0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1b200 74 69 6f 6e 73 22 2c 20 22 6f 72 5f 6f 70 74 22  tions", "or_opt"
1b210 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
1b220 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1b230 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1b240 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
1b250 53 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  S.  Tcl_SetVar2(
1b260 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1b270 6f 70 74 69 6f 6e 73 22 2c 20 22 70 61 67 65 72  options", "pager
1b280 5f 70 72 61 67 6d 61 73 22 2c 20 22 30 22 2c 20  _pragmas", "0", 
1b290 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
1b2a0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
1b2b0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1b2c0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1b2d0 22 70 61 67 65 72 5f 70 72 61 67 6d 61 73 22 2c  "pager_pragmas",
1b2e0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
1b2f0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
1b300 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
1b310 49 54 5f 50 41 52 53 45 52 0a 20 20 54 63 6c 5f  IT_PARSER.  Tcl_
1b320 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
1b330 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
1b340 2c 20 22 70 61 72 73 65 72 22 2c 20 22 30 22 2c  , "parser", "0",
1b350 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1b360 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
1b370 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
1b380 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
1b390 20 22 70 61 72 73 65 72 22 2c 20 22 31 22 2c 20   "parser", "1", 
1b3a0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
1b3b0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
1b3c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1b3d0 54 5f 50 52 41 47 4d 41 29 20 7c 7c 20 64 65 66  T_PRAGMA) || def
1b3e0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1b3f0 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20  _FLAG_PRAGMAS). 
1b400 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1b410 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1b420 69 6f 6e 73 22 2c 20 22 70 72 61 67 6d 61 22 2c  ions", "pragma",
1b430 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
1b440 5f 4f 4e 4c 59 29 3b 0a 20 20 54 63 6c 5f 53 65  _ONLY);.  Tcl_Se
1b450 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1b460 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1b470 22 69 6e 74 65 67 72 69 74 79 63 6b 22 2c 20 22  "integrityck", "
1b480 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
1b490 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
1b4a0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1b4b0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1b4c0 73 22 2c 20 22 70 72 61 67 6d 61 22 2c 20 22 31  s", "pragma", "1
1b4d0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
1b4e0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
1b4f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1b500 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
1b510 4b 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  K.  Tcl_SetVar2(
1b520 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1b530 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72 6f 67 72  options", "progr
1b540 65 73 73 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ess", "0", TCL_G
1b550 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
1b560 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
1b570 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1b580 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72 6f 67  _options", "prog
1b590 72 65 73 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f  ress", "1", TCL_
1b5a0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1b5b0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
1b5c0 49 54 45 5f 45 4e 41 42 4c 45 5f 52 45 44 45 46  ITE_ENABLE_REDEF
1b5d0 5f 49 4f 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  _IO.  Tcl_SetVar
1b5e0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1b5f0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72 65 64  e_options", "red
1b600 65 66 69 6f 22 2c 20 22 31 22 2c 20 54 43 4c 5f  efio", "1", TCL_
1b610 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1b620 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
1b630 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1b640 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72 65 64  e_options", "red
1b650 65 66 69 6f 22 2c 20 22 30 22 2c 20 54 43 4c 5f  efio", "0", TCL_
1b660 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1b670 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
1b680 49 54 45 5f 4f 4d 49 54 5f 52 45 49 4e 44 45 58  ITE_OMIT_REINDEX
1b690 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1b6a0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1b6b0 70 74 69 6f 6e 73 22 2c 20 22 72 65 69 6e 64 65  ptions", "reinde
1b6c0 78 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  x", "0", TCL_GLO
1b6d0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
1b6e0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1b6f0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1b700 70 74 69 6f 6e 73 22 2c 20 22 72 65 69 6e 64 65  ptions", "reinde
1b710 78 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  x", "1", TCL_GLO
1b720 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
1b730 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
1b740 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
1b750 47 4d 41 53 0a 20 20 54 63 6c 5f 53 65 74 56 61  GMAS.  Tcl_SetVa
1b760 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1b770 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63  te_options", "sc
1b780 68 65 6d 61 5f 70 72 61 67 6d 61 73 22 2c 20 22  hema_pragmas", "
1b790 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
1b7a0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
1b7b0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1b7c0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1b7d0 73 22 2c 20 22 73 63 68 65 6d 61 5f 70 72 61 67  s", "schema_prag
1b7e0 6d 61 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  mas", "1", TCL_G
1b7f0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
1b800 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
1b810 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56  TE_OMIT_SCHEMA_V
1b820 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20  ERSION_PRAGMAS. 
1b830 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1b840 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1b850 69 6f 6e 73 22 2c 20 22 73 63 68 65 6d 61 5f 76  ions", "schema_v
1b860 65 72 73 69 6f 6e 22 2c 20 22 30 22 2c 20 54 43  ersion", "0", TC
1b870 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
1b880 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
1b890 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
1b8a0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73  ite_options", "s
1b8b0 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 2c 20  chema_version", 
1b8c0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
1b8d0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
1b8e0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
1b8f0 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
1b900 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1b910 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1b920 69 6f 6e 73 22 2c 20 22 73 68 61 72 65 64 5f 63  ions", "shared_c
1b930 61 63 68 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f  ache", "0", TCL_
1b940 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1b950 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
1b960 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1b970 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 68 61  e_options", "sha
1b980 72 65 64 5f 63 61 63 68 65 22 2c 20 22 31 22 2c  red_cache", "1",
1b990 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1b9a0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
1b9b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  f SQLITE_OMIT_SU
1b9c0 42 51 55 45 52 59 0a 20 20 54 63 6c 5f 53 65 74  BQUERY.  Tcl_Set
1b9d0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1b9e0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1b9f0 73 75 62 71 75 65 72 79 22 2c 20 22 30 22 2c 20  subquery", "0", 
1ba00 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
1ba10 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
1ba20 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1ba30 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1ba40 22 73 75 62 71 75 65 72 79 22 2c 20 22 31 22 2c  "subquery", "1",
1ba50 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1ba60 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
1ba70 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 43  f SQLITE_OMIT_TC
1ba80 4c 5f 56 41 52 49 41 42 4c 45 0a 20 20 54 63 6c  L_VARIABLE.  Tcl
1ba90 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1baa0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1bab0 22 2c 20 22 74 63 6c 76 61 72 22 2c 20 22 30 22  ", "tclvar", "0"
1bac0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1bad0 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
1bae0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
1baf0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
1bb00 2c 20 22 74 63 6c 76 61 72 22 2c 20 22 31 22 2c  , "tclvar", "1",
1bb10 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1bb20 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  );.#endif..#if d
1bb30 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46  efined(THREADSAF
1bb40 45 29 20 26 26 20 54 48 52 45 41 44 53 41 46 45  E) && THREADSAFE
1bb50 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1bb60 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1bb70 70 74 69 6f 6e 73 22 2c 20 22 74 68 72 65 61 64  ptions", "thread
1bb80 73 61 66 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f  safe", "1", TCL_
1bb90 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1bba0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
1bbb0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1bbc0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 68 72  e_options", "thr
1bbd0 65 61 64 73 61 66 65 22 2c 20 22 30 22 2c 20 54  eadsafe", "0", T
1bbe0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1bbf0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
1bc00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
1bc10 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  E.  Tcl_SetVar2(
1bc20 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1bc30 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72 61 63 65  options", "trace
1bc40 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
1bc50 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
1bc60 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1bc70 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1bc80 74 69 6f 6e 73 22 2c 20 22 74 72 61 63 65 22 2c  tions", "trace",
1bc90 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
1bca0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
1bcb0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
1bcc0 49 54 5f 54 52 49 47 47 45 52 0a 20 20 54 63 6c  IT_TRIGGER.  Tcl
1bcd0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1bce0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1bcf0 22 2c 20 22 74 72 69 67 67 65 72 22 2c 20 22 30  ", "trigger", "0
1bd00 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
1bd10 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
1bd20 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1bd30 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1bd40 22 2c 20 22 74 72 69 67 67 65 72 22 2c 20 22 31  ", "trigger", "1
1bd50 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
1bd60 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
1bd70 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1bd80 54 45 4d 50 44 42 0a 20 20 54 63 6c 5f 53 65 74  TEMPDB.  Tcl_Set
1bd90 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1bda0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1bdb0 74 65 6d 70 64 62 22 2c 20 22 30 22 2c 20 54 43  tempdb", "0", TC
1bdc0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
1bdd0 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
1bde0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
1bdf0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74  ite_options", "t
1be00 65 6d 70 64 62 22 2c 20 22 31 22 2c 20 54 43 4c  empdb", "1", TCL
1be10 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
1be20 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
1be30 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
1be40 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1be50 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1be60 74 69 6f 6e 73 22 2c 20 22 75 74 66 31 36 22 2c  tions", "utf16",
1be70 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
1be80 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
1be90 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
1bea0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
1beb0 6f 6e 73 22 2c 20 22 75 74 66 31 36 22 2c 20 22  ons", "utf16", "
1bec0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
1bed0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
1bee0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
1bef0 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 7c 7c  _OMIT_VACUUM) ||
1bf00 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1bf10 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 20 20 54  OMIT_ATTACH).  T
1bf20 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
1bf30 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
1bf40 6e 73 22 2c 20 22 76 61 63 75 75 6d 22 2c 20 22  ns", "vacuum", "
1bf50 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
1bf60 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
1bf70 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1bf80 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1bf90 73 22 2c 20 22 76 61 63 75 75 6d 22 2c 20 22 31  s", "vacuum", "1
1bfa0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
1bfb0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
1bfc0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1bfd0 56 49 45 57 0a 20 20 54 63 6c 5f 53 65 74 56 61  VIEW.  Tcl_SetVa
1bfe0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1bff0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76 69  te_options", "vi
1c000 65 77 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ew", "0", TCL_GL
1c010 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
1c020 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
1c030 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1c040 6f 70 74 69 6f 6e 73 22 2c 20 22 76 69 65 77 22  options", "view"
1c050 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
1c060 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1c070 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1c080 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1c090 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1c0a0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1c0b0 70 74 69 6f 6e 73 22 2c 20 22 76 74 61 62 22 2c  ptions", "vtab",
1c0c0 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
1c0d0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
1c0e0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
1c0f0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
1c100 6f 6e 73 22 2c 20 22 76 74 61 62 22 2c 20 22 31  ons", "vtab", "1
1c110 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
1c120 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
1c130 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
1c140 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 20  LT_FILE_FORMAT. 
1c150 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28   Tcl_ObjSetVar2(
1c160 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 20 54  interp, .      T
1c170 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
1c180 22 73 71 6c 69 74 65 5f 64 65 66 61 75 6c 74 5f  "sqlite_default_
1c190 66 69 6c 65 5f 66 6f 72 6d 61 74 22 2c 20 2d 31  file_format", -1
1c1a0 29 2c 20 30 2c 20 0a 20 20 20 20 20 20 54 63 6c  ), 0, .      Tcl
1c1b0 5f 4e 65 77 49 6e 74 4f 62 6a 28 53 51 4c 49 54  _NewIntObj(SQLIT
1c1c0 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
1c1d0 4f 52 4d 41 54 29 2c 20 54 43 4c 5f 47 4c 4f 42  ORMAT), TCL_GLOB
1c1e0 41 4c 5f 4f 4e 4c 59 0a 20 20 29 3b 0a 23 65 6e  AL_ONLY.  );.#en
1c1f0 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c  dif.}../*.** tcl
1c200 63 6d 64 3a 20 20 20 77 6f 72 6b 69 6e 67 5f 36  cmd:   working_6
1c210 34 62 69 74 5f 69 6e 74 0a 2a 2a 0a 2a 2a 20 53  4bit_int.**.** S
1c220 6f 6d 65 20 54 43 4c 20 62 75 69 6c 64 73 20 28  ome TCL builds (
1c230 65 78 3a 20 63 79 67 77 69 6e 29 20 64 6f 20 6e  ex: cygwin) do n
1c240 6f 74 20 73 75 70 70 6f 72 74 20 36 34 2d 62 69  ot support 64-bi
1c250 74 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 69  t integers.  Thi
1c260 73 0a 2a 2a 20 6c 65 61 64 73 20 74 6f 20 61 20  s.** leads to a 
1c270 6e 75 6d 62 65 72 20 6f 66 20 74 65 73 74 20 66  number of test f
1c280 61 69 6c 75 72 65 73 2e 20 20 54 68 65 20 70 72  ailures.  The pr
1c290 65 73 65 6e 74 20 63 6f 6d 6d 61 6e 64 20 63 68  esent command ch
1c2a0 65 63 6b 73 20 74 68 65 0a 2a 2a 20 54 43 4c 20  ecks the.** TCL 
1c2b0 62 75 69 6c 64 20 74 6f 20 73 65 65 20 77 68 65  build to see whe
1c2c0 74 68 65 72 20 6f 72 20 6e 6f 74 20 69 74 20 73  ther or not it s
1c2d0 75 70 70 6f 72 74 73 20 36 34 2d 62 69 74 20 69  upports 64-bit i
1c2e0 6e 74 65 67 65 72 73 2e 20 20 49 74 0a 2a 2a 20  ntegers.  It.** 
1c2f0 72 65 74 75 72 6e 73 20 54 52 55 45 20 69 66 20  returns TRUE if 
1c300 69 74 20 64 6f 65 73 20 61 6e 64 20 46 41 4c 53  it does and FALS
1c310 45 20 69 66 20 6e 6f 74 2e 0a 2a 2a 0a 2a 2a 20  E if not..**.** 
1c320 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20  This command is 
1c330 75 73 65 64 20 74 6f 20 77 61 72 6e 20 75 73 65  used to warn use
1c340 72 73 20 74 68 61 74 20 74 68 65 69 72 20 54 43  rs that their TC
1c350 4c 20 62 75 69 6c 64 20 69 73 20 64 65 66 65 63  L build is defec
1c360 74 69 76 65 0a 2a 2a 20 61 6e 64 20 74 68 61 74  tive.** and that
1c370 20 74 68 65 20 65 72 72 6f 72 73 20 74 68 65 79   the errors they
1c380 20 61 72 65 20 73 65 65 69 6e 67 20 69 6e 20 74   are seeing in t
1c390 68 65 20 74 65 73 74 20 73 63 72 69 70 74 73 20  he test scripts 
1c3a0 6d 69 67 68 74 20 62 65 0a 2a 2a 20 61 20 72 65  might be.** a re
1c3b0 73 75 6c 74 20 6f 66 20 74 68 65 69 72 20 64 65  sult of their de
1c3c0 66 65 63 74 69 76 65 20 54 43 4c 20 72 61 74 68  fective TCL rath
1c3d0 65 72 20 74 68 61 6e 20 70 72 6f 62 6c 65 6d 73  er than problems
1c3e0 20 69 6e 20 53 51 4c 69 74 65 2e 0a 2a 2f 0a 73   in SQLite..*/.s
1c3f0 74 61 74 69 63 20 69 6e 74 20 77 6f 72 6b 69 6e  tatic int workin
1c400 67 5f 36 34 62 69 74 5f 69 6e 74 28 0a 20 20 43  g_64bit_int(.  C
1c410 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
1c420 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72  Data, /* Pointer
1c430 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62   to sqlite3_enab
1c440 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20  le_XXX function 
1c450 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  */.  Tcl_Interp 
1c460 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
1c470 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
1c480 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
1c490 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
1c4a0 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20    int objc,     
1c4b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1c4c0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
1c4d0 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  */.  Tcl_Obj *CO
1c4e0 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43  NST objv[]  /* C
1c4f0 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73  ommand arguments
1c500 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 4f 62 6a   */.){.  Tcl_Obj
1c510 20 2a 70 54 65 73 74 4f 62 6a 3b 0a 20 20 69 6e   *pTestObj;.  in
1c520 74 20 77 6f 72 6b 69 6e 67 20 3d 20 30 3b 0a 0a  t working = 0;..
1c530 20 20 70 54 65 73 74 4f 62 6a 20 3d 20 54 63 6c    pTestObj = Tcl
1c540 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 31  _NewWideIntObj(1
1c550 30 30 30 30 30 30 2a 28 69 36 34 29 31 32 33 34  000000*(i64)1234
1c560 35 36 37 38 39 30 29 3b 0a 20 20 77 6f 72 6b 69  567890);.  worki
1c570 6e 67 20 3d 20 73 74 72 63 6d 70 28 54 63 6c 5f  ng = strcmp(Tcl_
1c580 47 65 74 53 74 72 69 6e 67 28 70 54 65 73 74 4f  GetString(pTestO
1c590 62 6a 29 2c 20 22 31 32 33 34 35 36 37 38 39 30  bj), "1234567890
1c5a0 30 30 30 30 30 30 22 29 3d 3d 30 3b 0a 20 20 54  000000")==0;.  T
1c5b0 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
1c5c0 70 54 65 73 74 4f 62 6a 29 3b 0a 20 20 54 63 6c  pTestObj);.  Tcl
1c5d0 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
1c5e0 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f  terp, Tcl_NewBoo
1c5f0 6c 65 61 6e 4f 62 6a 28 77 6f 72 6b 69 6e 67 29  leanObj(working)
1c600 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
1c610 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65  OK;.}.../*.** Re
1c620 67 69 73 74 65 72 20 63 6f 6d 6d 61 6e 64 73 20  gister commands 
1c630 77 69 74 68 20 74 68 65 20 54 43 4c 20 69 6e 74  with the TCL int
1c640 65 72 70 72 65 74 65 72 2e 0a 2a 2f 0a 69 6e 74  erpreter..*/.int
1c650 20 53 71 6c 69 74 65 74 65 73 74 31 5f 49 6e 69   Sqlitetest1_Ini
1c660 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  t(Tcl_Interp *in
1c670 74 65 72 70 29 7b 0a 20 20 65 78 74 65 72 6e 20  terp){.  extern 
1c680 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 65 61 72  int sqlite3_sear
1c690 63 68 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65  ch_count;.  exte
1c6a0 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 69  rn int sqlite3_i
1c6b0 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3b 0a  nterrupt_count;.
1c6c0 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
1c6d0 69 74 65 33 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63  ite3_open_file_c
1c6e0 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69  ount;.  extern i
1c6f0 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  nt sqlite3_sort_
1c700 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20  count;.  extern 
1c710 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 75 72 72  int sqlite3_curr
1c720 65 6e 74 5f 74 69 6d 65 3b 0a 20 20 73 74 61 74  ent_time;.  stat
1c730 69 63 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20  ic struct {.    
1c740 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20   char *zName;.  
1c750 20 20 20 54 63 6c 5f 43 6d 64 50 72 6f 63 20 2a     Tcl_CmdProc *
1c760 78 50 72 6f 63 3b 0a 20 20 7d 20 61 43 6d 64 5b  xProc;.  } aCmd[
1c770 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20 22 73 71  ] = {.     { "sq
1c780 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
1c790 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 28 54  t",           (T
1c7a0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
1c7b0 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 20  te3_mprintf_int 
1c7c0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
1c7d0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
1c7e0 74 36 34 22 2c 20 20 20 20 20 20 20 20 20 28 54  t64",         (T
1c7f0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
1c800 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36  te3_mprintf_int6
1c810 34 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  4  },.     { "sq
1c820 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74  lite3_mprintf_st
1c830 72 22 2c 20 20 20 20 20 20 20 20 20 20 20 28 54  r",           (T
1c840 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
1c850 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 20  te3_mprintf_str 
1c860 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
1c870 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 5f 73  lite3_snprintf_s
1c880 74 72 22 2c 20 20 20 20 20 20 20 20 20 20 28 54  tr",          (T
1c890 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
1c8a0 74 65 33 5f 73 6e 70 72 69 6e 74 66 5f 73 74 72  te3_snprintf_str
1c8b0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
1c8c0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74  lite3_mprintf_st
1c8d0 72 6f 6e 6c 79 22 2c 20 20 20 20 20 20 20 28 54  ronly",       (T
1c8e0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
1c8f0 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f  te3_mprintf_stro
1c900 6e 6c 79 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  nly},.     { "sq
1c910 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f  lite3_mprintf_do
1c920 75 62 6c 65 22 2c 20 20 20 20 20 20 20 20 28 54  uble",        (T
1c930 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
1c940 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62  te3_mprintf_doub
1c950 6c 65 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  le },.     { "sq
1c960 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63  lite3_mprintf_sc
1c970 61 6c 65 64 22 2c 20 20 20 20 20 20 20 20 28 54  aled",        (T
1c980 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
1c990 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c  te3_mprintf_scal
1c9a0 65 64 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ed },.     { "sq
1c9b0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65  lite3_mprintf_he
1c9c0 78 64 6f 75 62 6c 65 22 2c 20 20 20 28 54 63 6c  xdouble",   (Tcl
1c9d0 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65  _CmdProc*)sqlite
1c9e0 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78 64 6f 75  3_mprintf_hexdou
1c9f0 62 6c 65 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ble},.     { "sq
1ca00 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f  lite3_mprintf_z_
1ca10 74 65 73 74 22 2c 20 20 20 20 20 20 20 20 28 54  test",        (T
1ca20 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
1ca30 5f 6d 70 72 69 6e 74 66 5f 7a 20 20 20 20 20 20  _mprintf_z      
1ca40 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
1ca50 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 6e 5f 74  ite3_mprintf_n_t
1ca60 65 73 74 22 2c 20 20 20 20 20 20 20 20 28 54 63  est",        (Tc
1ca70 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
1ca80 6d 70 72 69 6e 74 66 5f 6e 20 20 20 20 20 20 20  mprintf_n       
1ca90 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1caa0 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
1cab0 72 6f 77 69 64 22 2c 20 20 20 20 20 28 54 63 6c  rowid",     (Tcl
1cac0 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6c  _CmdProc*)test_l
1cad0 61 73 74 5f 72 6f 77 69 64 20 20 20 20 20 20 20  ast_rowid       
1cae0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1caf0 65 33 5f 65 78 65 63 5f 70 72 69 6e 74 66 22 2c  e3_exec_printf",
1cb00 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
1cb10 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 65 78  CmdProc*)test_ex
1cb20 65 63 5f 70 72 69 6e 74 66 20 20 20 20 20 20 7d  ec_printf      }
1cb30 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1cb40 33 5f 65 78 65 63 22 2c 20 20 20 20 20 20 20 20  3_exec",        
1cb50 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
1cb60 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 65 78 65  mdProc*)test_exe
1cb70 63 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c  c             },
1cb80 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1cb90 5f 65 78 65 63 5f 6e 72 22 2c 20 20 20 20 20 20  _exec_nr",      
1cba0 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
1cbb0 64 50 72 6f 63 2a 29 74 65 73 74 5f 65 78 65 63  dProc*)test_exec
1cbc0 5f 6e 72 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  _nr          },.
1cbd0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1cbe0 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66  get_table_printf
1cbf0 22 2c 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64  ",      (Tcl_Cmd
1cc00 50 72 6f 63 2a 29 74 65 73 74 5f 67 65 74 5f 74  Proc*)test_get_t
1cc10 61 62 6c 65 5f 70 72 69 6e 74 66 20 7d 2c 0a 20  able_printf },. 
1cc20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
1cc30 6c 6f 73 65 22 2c 20 20 20 20 20 20 20 20 20 20  lose",          
1cc40 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
1cc50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 74 65 73 74  roc*)sqlite_test
1cc60 5f 63 6c 6f 73 65 20 20 20 20 20 7d 2c 0a 20 20  _close     },.  
1cc70 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72     { "sqlite3_cr
1cc80 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  eate_function", 
1cc90 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
1cca0 6f 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65 5f  oc*)test_create_
1ccb0 66 75 6e 63 74 69 6f 6e 20 20 7d 2c 0a 20 20 20  function  },.   
1ccc0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72 65    { "sqlite3_cre
1ccd0 61 74 65 5f 61 67 67 72 65 67 61 74 65 22 2c 20  ate_aggregate", 
1cce0 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
1ccf0 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65 5f 61  c*)test_create_a
1cd00 67 67 72 65 67 61 74 65 20 7d 2c 0a 20 20 20 20  ggregate },.    
1cd10 20 7b 20 22 73 71 6c 69 74 65 5f 72 65 67 69 73   { "sqlite_regis
1cd20 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  ter_test_functio
1cd30 6e 22 2c 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63  n", (Tcl_CmdProc
1cd40 2a 29 74 65 73 74 5f 72 65 67 69 73 74 65 72 5f  *)test_register_
1cd50 66 75 6e 63 20 20 20 20 7d 2c 0a 20 20 20 20 20  func    },.     
1cd60 7b 20 22 73 71 6c 69 74 65 5f 61 62 6f 72 74 22  { "sqlite_abort"
1cd70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1cd80 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1cd90 29 73 71 6c 69 74 65 5f 61 62 6f 72 74 20 20 20  )sqlite_abort   
1cda0 20 20 20 20 20 20 20 7d 2c 0a 23 69 66 64 65 66         },.#ifdef
1cdb0 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
1cdc0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f  .     { "sqlite_
1cdd0 6d 61 6c 6c 6f 63 5f 66 61 69 6c 22 2c 20 20 20  malloc_fail",   
1cde0 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
1cdf0 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 6d 61  dProc*)sqlite_ma
1ce00 6c 6c 6f 63 5f 66 61 69 6c 20 20 20 20 7d 2c 0a  lloc_fail    },.
1ce10 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 6d       { "sqlite_m
1ce20 61 6c 6c 6f 63 5f 73 74 61 74 22 2c 20 20 20 20  alloc_stat",    
1ce30 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
1ce40 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 6d 61 6c  Proc*)sqlite_mal
1ce50 6c 6f 63 5f 73 74 61 74 20 20 20 20 7d 2c 0a 23  loc_stat    },.#
1ce60 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71  endif.     { "sq
1ce70 6c 69 74 65 5f 62 69 6e 64 22 2c 20 20 20 20 20  lite_bind",     
1ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
1ce90 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
1cea0 5f 62 69 6e 64 20 20 20 20 20 20 20 20 20 20 20  _bind           
1ceb0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 62 72 65    },.     { "bre
1cec0 61 6b 70 6f 69 6e 74 22 2c 20 20 20 20 20 20 20  akpoint",       
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
1cee0 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
1cef0 62 72 65 61 6b 70 6f 69 6e 74 20 20 20 20 20 20  breakpoint      
1cf00 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1cf10 74 65 33 5f 6b 65 79 22 2c 20 20 20 20 20 20 20  te3_key",       
1cf20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
1cf30 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6b  _CmdProc*)test_k
1cf40 65 79 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ey              
1cf50 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1cf60 65 33 5f 72 65 6b 65 79 22 2c 20 20 20 20 20 20  e3_rekey",      
1cf70 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
1cf80 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 72 65  CmdProc*)test_re
1cf90 6b 65 79 20 20 20 20 20 20 20 20 20 20 20 20 7d  key            }
1cfa0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1cfb0 5f 73 65 74 5f 6d 61 67 69 63 22 2c 20 20 20 20  _set_magic",    
1cfc0 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
1cfd0 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 73  mdProc*)sqlite_s
1cfe0 65 74 5f 6d 61 67 69 63 20 20 20 20 20 20 7d 2c  et_magic      },
1cff0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1d000 5f 69 6e 74 65 72 72 75 70 74 22 2c 20 20 20 20  _interrupt",    
1d010 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
1d020 64 50 72 6f 63 2a 29 74 65 73 74 5f 69 6e 74 65  dProc*)test_inte
1d030 72 72 75 70 74 20 20 20 20 20 20 20 20 7d 2c 0a  rrupt        },.
1d040 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 64       { "sqlite_d
1d050 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 22 2c  elete_function",
1d060 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
1d070 50 72 6f 63 2a 29 64 65 6c 65 74 65 5f 66 75 6e  Proc*)delete_fun
1d080 63 74 69 6f 6e 20 20 20 20 20 20 20 7d 2c 0a 20  ction       },. 
1d090 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 64 65      { "sqlite_de
1d0a0 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 22 2c  lete_collation",
1d0b0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
1d0c0 72 6f 63 2a 29 64 65 6c 65 74 65 5f 63 6f 6c 6c  roc*)delete_coll
1d0d0 61 74 69 6f 6e 20 20 20 20 20 20 7d 2c 0a 20 20  ation      },.  
1d0e0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 67 65     { "sqlite3_ge
1d0f0 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 22 2c 20 20  t_autocommit",  
1d100 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
1d110 6f 63 2a 29 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  oc*)get_autocomm
1d120 69 74 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20  it        },.   
1d130 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 73 74 61    { "sqlite3_sta
1d140 63 6b 5f 75 73 65 64 22 2c 20 20 20 20 20 20 20  ck_used",       
1d150 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
1d160 63 2a 29 74 65 73 74 5f 73 74 61 63 6b 5f 75 73  c*)test_stack_us
1d170 65 64 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  ed       },.    
1d180 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 75 73 79   { "sqlite3_busy
1d190 5f 74 69 6d 65 6f 75 74 22 2c 20 20 20 20 20 20  _timeout",      
1d1a0 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
1d1b0 2a 29 74 65 73 74 5f 62 75 73 79 5f 74 69 6d 65  *)test_busy_time
1d1c0 6f 75 74 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  out     },.     
1d1d0 7b 20 22 70 72 69 6e 74 66 22 2c 20 20 20 20 20  { "printf",     
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1f0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1d200 29 74 65 73 74 5f 70 72 69 6e 74 66 20 20 20 20  )test_printf    
1d210 20 20 20 20 20 20 20 7d 2c 0a 20 20 7d 3b 0a 20         },.  };. 
1d220 20 73 74 61 74 69 63 20 73 74 72 75 63 74 20 7b   static struct {
1d230 0a 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  .     char *zNam
1d240 65 3b 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a 43  e;.     Tcl_ObjC
1d250 6d 64 50 72 6f 63 20 2a 78 50 72 6f 63 3b 0a 20  mdProc *xProc;. 
1d260 20 20 20 20 76 6f 69 64 20 2a 63 6c 69 65 6e 74      void *client
1d270 44 61 74 61 3b 0a 20 20 7d 20 61 4f 62 6a 43 6d  Data;.  } aObjCm
1d280 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20 22  d[] = {.     { "
1d290 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69  sqlite3_connecti
1d2a0 6f 6e 5f 70 6f 69 6e 74 65 72 22 2c 20 20 20 20  on_pointer",    
1d2b0 67 65 74 5f 73 71 6c 69 74 65 5f 70 6f 69 6e 74  get_sqlite_point
1d2c0 65 72 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20  er, 0 },.     { 
1d2d0 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  "sqlite3_bind_in
1d2e0 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  t",             
1d2f0 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 2c 20   test_bind_int, 
1d300 20 20 20 20 20 30 20 7d 2c 0a 20 20 20 20 20 7b       0 },.     {
1d310 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69   "sqlite3_bind_i
1d320 6e 74 36 34 22 2c 20 20 20 20 20 20 20 20 20 20  nt64",          
1d330 20 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 36    test_bind_int6
1d340 34 2c 20 20 20 20 30 20 7d 2c 0a 20 20 20 20 20  4,    0 },.     
1d350 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  { "sqlite3_bind_
1d360 64 6f 75 62 6c 65 22 2c 20 20 20 20 20 20 20 20  double",        
1d370 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 64 6f 75     test_bind_dou
1d380 62 6c 65 2c 20 20 20 30 20 7d 2c 0a 20 20 20 20  ble,   0 },.    
1d390 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64   { "sqlite3_bind
1d3a0 5f 6e 75 6c 6c 22 2c 20 20 20 20 20 20 20 20 20  _null",         
1d3b0 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 6e 75      test_bind_nu
1d3c0 6c 6c 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20  ll     ,0 },.   
1d3d0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e    { "sqlite3_bin
1d3e0 64 5f 74 65 78 74 22 2c 20 20 20 20 20 20 20 20  d_text",        
1d3f0 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 74       test_bind_t
1d400 65 78 74 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20  ext     ,0 },.  
1d410 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
1d420 6e 64 5f 74 65 78 74 31 36 22 2c 20 20 20 20 20  nd_text16",     
1d430 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f        test_bind_
1d440 74 65 78 74 31 36 20 20 20 2c 30 20 7d 2c 0a 20  text16   ,0 },. 
1d450 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62      { "sqlite3_b
1d460 69 6e 64 5f 62 6c 6f 62 22 2c 20 20 20 20 20 20  ind_blob",      
1d470 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64         test_bind
1d480 5f 62 6c 6f 62 20 20 20 20 20 2c 30 20 7d 2c 0a  _blob     ,0 },.
1d490 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1d4a0 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63  bind_parameter_c
1d4b0 6f 75 6e 74 22 2c 20 20 74 65 73 74 5f 62 69 6e  ount",  test_bin
1d4c0 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e  d_parameter_coun
1d4d0 74 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73  t, 0},.     { "s
1d4e0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
1d4f0 6d 65 74 65 72 5f 6e 61 6d 65 22 2c 20 20 20 74  meter_name",   t
1d500 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  est_bind_paramet
1d510 65 72 5f 6e 61 6d 65 2c 20 20 30 7d 2c 0a 20 20  er_name,  0},.  
1d520 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
1d530 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64  nd_parameter_ind
1d540 65 78 22 2c 20 20 74 65 73 74 5f 62 69 6e 64 5f  ex",  test_bind_
1d550 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 2c  parameter_index,
1d560 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c   0},.     { "sql
1d570 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
1d580 6e 67 73 22 2c 20 20 20 20 20 20 20 20 74 65 73  ngs",        tes
1d590 74 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73  t_clear_bindings
1d5a0 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  , 0},.     { "sq
1d5b0 6c 69 74 65 33 5f 73 6c 65 65 70 22 2c 20 20 20  lite3_sleep",   
1d5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
1d5d0 73 74 5f 73 6c 65 65 70 2c 20 20 20 20 20 20 20  st_sleep,       
1d5e0 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73     0},.     { "s
1d5f0 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 22 2c  qlite3_errcode",
1d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d610 65 73 74 5f 65 72 72 63 6f 64 65 20 20 20 20 20  est_errcode     
1d620 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
1d630 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 22 2c  sqlite3_errmsg",
1d640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d650 74 65 73 74 5f 65 72 72 6d 73 67 20 20 20 20 20  test_errmsg     
1d660 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
1d670 22 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 31  "sqlite3_errmsg1
1d680 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  6",             
1d690 20 74 65 73 74 5f 65 72 72 6d 73 67 31 36 20 20   test_errmsg16  
1d6a0 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
1d6b0 20 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 22 2c   "sqlite3_open",
1d6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6d0 20 20 74 65 73 74 5f 6f 70 65 6e 20 20 20 20 20    test_open     
1d6e0 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
1d6f0 7b 20 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31  { "sqlite3_open1
1d700 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  6",             
1d710 20 20 20 74 65 73 74 5f 6f 70 65 6e 31 36 20 20     test_open16  
1d720 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20        ,0 },.    
1d730 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6d 70   { "sqlite3_comp
1d740 6c 65 74 65 31 36 22 2c 20 20 20 20 20 20 20 20  lete16",        
1d750 20 20 20 20 74 65 73 74 5f 63 6f 6d 70 6c 65 74      test_complet
1d760 65 31 36 20 20 20 20 2c 30 20 7d 2c 0a 0a 20 20  e16    ,0 },..  
1d770 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 70 72     { "sqlite3_pr
1d780 65 70 61 72 65 22 2c 20 20 20 20 20 20 20 20 20  epare",         
1d790 20 20 20 20 20 20 74 65 73 74 5f 70 72 65 70 61        test_prepa
1d7a0 72 65 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20  re       ,0 },. 
1d7b0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 70      { "sqlite3_p
1d7c0 72 65 70 61 72 65 31 36 22 2c 20 20 20 20 20 20  repare16",      
1d7d0 20 20 20 20 20 20 20 74 65 73 74 5f 70 72 65 70         test_prep
1d7e0 61 72 65 31 36 20 20 20 20 20 2c 30 20 7d 2c 0a  are16     ,0 },.
1d7f0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1d800 70 72 65 70 61 72 65 5f 76 32 22 2c 20 20 20 20  prepare_v2",    
1d810 20 20 20 20 20 20 20 20 74 65 73 74 5f 70 72 65          test_pre
1d820 70 61 72 65 5f 76 32 20 20 20 20 2c 30 20 7d 2c  pare_v2    ,0 },
1d830 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1d840 5f 70 72 65 70 61 72 65 31 36 5f 76 32 22 2c 20  _prepare16_v2", 
1d850 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 70 72           test_pr
1d860 65 70 61 72 65 31 36 5f 76 32 20 20 2c 30 20 7d  epare16_v2  ,0 }
1d870 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1d880 33 5f 66 69 6e 61 6c 69 7a 65 22 2c 20 20 20 20  3_finalize",    
1d890 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 66            test_f
1d8a0 69 6e 61 6c 69 7a 65 20 20 20 20 20 20 2c 30 20  inalize      ,0 
1d8b0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1d8c0 65 33 5f 72 65 73 65 74 22 2c 20 20 20 20 20 20  e3_reset",      
1d8d0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
1d8e0 72 65 73 65 74 20 20 20 20 20 20 20 20 20 2c 30  reset         ,0
1d8f0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1d900 74 65 33 5f 65 78 70 69 72 65 64 22 2c 20 20 20  te3_expired",   
1d910 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
1d920 5f 65 78 70 69 72 65 64 20 20 20 20 20 20 20 2c  _expired       ,
1d930 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
1d940 69 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69  ite3_transfer_bi
1d950 6e 64 69 6e 67 73 22 2c 20 20 20 20 20 74 65 73  ndings",     tes
1d960 74 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 20  t_transfer_bind 
1d970 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
1d980 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 22 2c 20  lite3_changes", 
1d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
1d9a0 73 74 5f 63 68 61 6e 67 65 73 20 20 20 20 20 20  st_changes      
1d9b0 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
1d9c0 71 6c 69 74 65 33 5f 73 74 65 70 22 2c 20 20 20  qlite3_step",   
1d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d9e0 65 73 74 5f 73 74 65 70 20 20 20 20 20 20 20 20  est_step        
1d9f0 20 20 2c 30 20 7d 2c 0a 0a 20 20 20 20 20 7b 20    ,0 },..     { 
1da00 22 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65  "sqlite3_release
1da10 5f 6d 65 6d 6f 72 79 22 2c 20 20 20 20 20 20 20  _memory",       
1da20 20 74 65 73 74 5f 72 65 6c 65 61 73 65 5f 6d 65   test_release_me
1da30 6d 6f 72 79 2c 20 20 20 20 20 30 7d 2c 0a 20 20  mory,     0},.  
1da40 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 73 6f     { "sqlite3_so
1da50 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 22 2c 20  ft_heap_limit", 
1da60 20 20 20 20 20 20 74 65 73 74 5f 73 6f 66 74 5f        test_soft_
1da70 68 65 61 70 5f 6c 69 6d 69 74 2c 20 20 20 20 30  heap_limit,    0
1da80 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1da90 65 33 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65 6d  e3_clear_tsd_mem
1daa0 64 65 62 75 67 22 2c 20 20 20 20 74 65 73 74 5f  debug",    test_
1dab0 63 6c 65 61 72 5f 74 73 64 5f 6d 65 6d 64 65 62  clear_tsd_memdeb
1dac0 75 67 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22  ug, 0},.     { "
1dad0 73 71 6c 69 74 65 33 5f 74 73 64 5f 72 65 6c 65  sqlite3_tsd_rele
1dae0 61 73 65 22 2c 20 20 20 20 20 20 20 20 20 20 20  ase",           
1daf0 74 65 73 74 5f 74 73 64 5f 72 65 6c 65 61 73 65  test_tsd_release
1db00 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
1db10 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 74 68 72    { "sqlite3_thr
1db20 65 61 64 5f 63 6c 65 61 6e 75 70 22 2c 20 20 20  ead_cleanup",   
1db30 20 20 20 20 20 74 65 73 74 5f 74 68 72 65 61 64       test_thread
1db40 5f 63 6c 65 61 6e 75 70 2c 20 20 20 20 20 30 7d  _cleanup,     0}
1db50 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1db60 33 5f 70 61 67 65 72 5f 72 65 66 63 6f 75 6e 74  3_pager_refcount
1db70 73 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f 70  s",       test_p
1db80 61 67 65 72 5f 72 65 66 63 6f 75 6e 74 73 2c 20  ager_refcounts, 
1db90 20 20 20 30 7d 2c 0a 0a 20 20 20 20 20 7b 20 22     0},..     { "
1dba0 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
1dbb0 65 6e 73 69 6f 6e 22 2c 20 20 20 20 20 20 20 20  ension",        
1dbc0 74 65 73 74 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  test_load_extens
1dbd0 69 6f 6e 2c 20 20 20 20 20 30 7d 2c 0a 20 20 20  ion,     0},.   
1dbe0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 6e 61    { "sqlite3_ena
1dbf0 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble_load_extensi
1dc00 6f 6e 22 2c 20 74 65 73 74 5f 65 6e 61 62 6c 65  on", test_enable
1dc10 5f 6c 6f 61 64 2c 20 20 20 20 20 20 20 20 30 7d  _load,        0}
1dc20 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1dc30 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c  3_extended_resul
1dc40 74 5f 63 6f 64 65 73 22 2c 20 74 65 73 74 5f 65  t_codes", test_e
1dc50 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63  xtended_result_c
1dc60 6f 64 65 73 2c 20 30 7d 2c 0a 0a 20 20 20 20 20  odes, 0},..     
1dc70 2f 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  /* sqlite3_colum
1dc80 6e 5f 2a 28 29 20 41 50 49 20 2a 2f 0a 20 20 20  n_*() API */.   
1dc90 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
1dca0 75 6d 6e 5f 63 6f 75 6e 74 22 2c 20 20 20 20 20  umn_count",     
1dcb0 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e       test_column
1dcc0 5f 63 6f 75 6e 74 20 20 2c 30 20 7d 2c 0a 20 20  _count  ,0 },.  
1dcd0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 64 61     { "sqlite3_da
1dce0 74 61 5f 63 6f 75 6e 74 22 2c 20 20 20 20 20 20  ta_count",      
1dcf0 20 20 20 20 20 20 74 65 73 74 5f 64 61 74 61 5f        test_data_
1dd00 63 6f 75 6e 74 20 20 20 20 2c 30 20 7d 2c 0a 20  count    ,0 },. 
1dd10 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
1dd20 6f 6c 75 6d 6e 5f 74 79 70 65 22 2c 20 20 20 20  olumn_type",    
1dd30 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 75         test_colu
1dd40 6d 6e 5f 74 79 70 65 20 20 20 2c 30 20 7d 2c 0a  mn_type   ,0 },.
1dd50 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1dd60 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 22 2c 20 20 20  column_blob",   
1dd70 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c          test_col
1dd80 75 6d 6e 5f 62 6c 6f 62 20 20 20 2c 30 20 7d 2c  umn_blob   ,0 },
1dd90 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1dda0 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 22 2c  _column_double",
1ddb0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f           test_co
1ddc0 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 2c 30 20 7d  lumn_double ,0 }
1ddd0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1dde0 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 22 2c  3_column_int64",
1ddf0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63            test_c
1de00 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20 20 2c 30 20  olumn_int64  ,0 
1de10 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1de20 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 22 2c  e3_column_text",
1de30 20 20 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74         test_stmt
1de40 5f 75 74 66 38 2c 20 20 73 71 6c 69 74 65 33 5f  _utf8,  sqlite3_
1de50 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 20 20 20 20  column_text     
1de60 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1de70 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
1de80 79 70 65 22 2c 20 20 20 74 65 73 74 5f 73 74 6d  ype",   test_stm
1de90 74 5f 75 74 66 38 2c 20 20 73 71 6c 69 74 65 33  t_utf8,  sqlite3
1dea0 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
1deb0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
1dec0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
1ded0 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f 73 74  ",       test_st
1dee0 6d 74 5f 75 74 66 38 2c 20 20 73 71 6c 69 74 65  mt_utf8,  sqlite
1def0 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 20 20  3_column_name   
1df00 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
1df10 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
1df20 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 73  ",        test_s
1df30 74 6d 74 5f 69 6e 74 2c 20 20 20 73 71 6c 69 74  tmt_int,   sqlit
1df40 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 20 20  e3_column_int   
1df50 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
1df60 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
1df70 74 65 73 22 2c 20 20 20 20 20 20 74 65 73 74 5f  tes",      test_
1df80 73 74 6d 74 5f 69 6e 74 2c 20 20 20 73 71 6c 69  stmt_int,   sqli
1df90 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
1dfa0 20 20 20 20 20 7d 2c 0a 23 69 66 64 65 66 20 53       },.#ifdef S
1dfb0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
1dfc0 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 7b 20 22  UMN_METADATA.{ "
1dfd0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
1dfe0 61 74 61 62 61 73 65 5f 6e 61 6d 65 22 2c 20 74  atabase_name", t
1dff0 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 73  est_stmt_utf8, s
1e000 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61  qlite3_column_da
1e010 74 61 62 61 73 65 5f 6e 61 6d 65 7d 2c 0a 7b 20  tabase_name},.{ 
1e020 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
1e030 74 61 62 6c 65 5f 6e 61 6d 65 22 2c 20 74 65 73  table_name", tes
1e040 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 73 71 6c  t_stmt_utf8, sql
1e050 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c  ite3_column_tabl
1e060 65 5f 6e 61 6d 65 7d 2c 0a 7b 20 22 73 71 6c 69  e_name},.{ "sqli
1e070 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69  te3_column_origi
1e080 6e 5f 6e 61 6d 65 22 2c 20 74 65 73 74 5f 73 74  n_name", test_st
1e090 6d 74 5f 75 74 66 38 2c 20 73 71 6c 69 74 65 33  mt_utf8, sqlite3
1e0a0 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e  _column_origin_n
1e0b0 61 6d 65 7d 2c 0a 23 65 6e 64 69 66 0a 0a 23 69  ame},.#endif..#i
1e0c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1e0d0 54 5f 55 54 46 31 36 0a 20 20 20 20 20 7b 20 22  T_UTF16.     { "
1e0e0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
1e0f0 79 74 65 73 31 36 22 2c 20 20 20 20 74 65 73 74  ytes16",    test
1e100 5f 73 74 6d 74 5f 69 6e 74 2c 20 20 20 73 71 6c  _stmt_int,   sql
1e110 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
1e120 73 31 36 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20  s16   },.     { 
1e130 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
1e140 74 65 78 74 31 36 22 2c 20 20 20 20 20 74 65 73  text16",     tes
1e150 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73 71  t_stmt_utf16, sq
1e160 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
1e170 74 31 36 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b  t16    },.     {
1e180 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
1e190 5f 64 65 63 6c 74 79 70 65 31 36 22 2c 20 74 65  _decltype16", te
1e1a0 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73  st_stmt_utf16, s
1e1b0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
1e1c0 63 6c 74 79 70 65 31 36 7d 2c 0a 20 20 20 20 20  cltype16},.     
1e1d0 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
1e1e0 6e 5f 6e 61 6d 65 31 36 22 2c 20 20 20 20 20 74  n_name16",     t
1e1f0 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20  est_stmt_utf16, 
1e200 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
1e210 61 6d 65 31 36 20 20 20 20 7d 2c 0a 20 20 20 20  ame16    },.    
1e220 20 7b 20 22 61 64 64 5f 61 6c 69 67 6e 6d 65 6e   { "add_alignmen
1e230 74 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 69 6f 6e  t_test_collation
1e240 73 22 2c 20 61 64 64 5f 61 6c 69 67 6e 6d 65 6e  s", add_alignmen
1e250 74 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 69 6f 6e  t_test_collation
1e260 73 2c 20 30 20 20 20 20 20 20 7d 2c 0a 23 69 66  s, 0      },.#if
1e270 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1e280 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54  E_COLUMN_METADAT
1e290 41 0a 7b 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75  A.{"sqlite3_colu
1e2a0 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
1e2b0 31 36 22 2c 0a 20 20 74 65 73 74 5f 73 74 6d 74  16",.  test_stmt
1e2c0 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65 33 5f  _utf16, sqlite3_
1e2d0 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f  column_database_
1e2e0 6e 61 6d 65 31 36 7d 2c 0a 7b 22 73 71 6c 69 74  name16},.{"sqlit
1e2f0 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f  e3_column_table_
1e300 6e 61 6d 65 31 36 22 2c 20 74 65 73 74 5f 73 74  name16", test_st
1e310 6d 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65  mt_utf16, sqlite
1e320 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e  3_column_table_n
1e330 61 6d 65 31 36 7d 2c 0a 7b 22 73 71 6c 69 74 65  ame16},.{"sqlite
1e340 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f  3_column_origin_
1e350 6e 61 6d 65 31 36 22 2c 20 74 65 73 74 5f 73 74  name16", test_st
1e360 6d 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65  mt_utf16, sqlite
1e370 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f  3_column_origin_
1e380 6e 61 6d 65 31 36 7d 2c 0a 23 65 6e 64 69 66 0a  name16},.#endif.
1e390 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73  #endif.     { "s
1e3a0 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f 72 65  qlite3_global_re
1e3b0 63 6f 76 65 72 22 2c 20 20 20 20 74 65 73 74 5f  cover",    test_
1e3c0 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 2c 20  global_recover, 
1e3d0 30 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 77  0   },.     { "w
1e3e0 6f 72 6b 69 6e 67 5f 36 34 62 69 74 5f 69 6e 74  orking_64bit_int
1e3f0 22 2c 20 20 20 20 20 20 20 20 20 77 6f 72 6b 69  ",         worki
1e400 6e 67 5f 36 34 62 69 74 5f 69 6e 74 2c 20 20 20  ng_64bit_int,   
1e410 30 20 20 20 7d 2c 0a 0a 20 20 20 20 20 2f 2a 20  0   },..     /* 
1e420 46 75 6e 63 74 69 6f 6e 73 20 66 72 6f 6d 20 6f  Functions from o
1e430 73 2e 68 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  s.h */.#ifndef S
1e440 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49  QLITE_OMIT_DISKI
1e450 4f 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  O.     { "sqlite
1e460 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69 74 65  3OsOpenReadWrite
1e470 22 2c 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73  ",test_sqlite3Os
1e480 4f 70 65 6e 52 65 61 64 57 72 69 74 65 2c 20 30  OpenReadWrite, 0
1e490 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1e4a0 74 65 33 4f 73 43 6c 6f 73 65 22 2c 20 20 20 20  te3OsClose",    
1e4b0 20 20 20 20 74 65 73 74 5f 73 71 6c 69 74 65 33      test_sqlite3
1e4c0 4f 73 43 6c 6f 73 65 2c 20 30 20 7d 2c 0a 20 20  OsClose, 0 },.  
1e4d0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 4c     { "sqlite3OsL
1e4e0 6f 63 6b 22 2c 20 20 20 20 20 20 20 20 20 74 65  ock",         te
1e4f0 73 74 5f 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b  st_sqlite3OsLock
1e500 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73  , 0 },.     { "s
1e510 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65  qlite3OsTempFile
1e520 4e 61 6d 65 22 2c 20 74 65 73 74 5f 73 71 6c 69  Name", test_sqli
1e530 74 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d  te3OsTempFileNam
1e540 65 2c 20 30 20 7d 2c 0a 20 20 20 0a 20 20 20 20  e, 0 },.   .    
1e550 20 2f 2a 20 43 75 73 74 6f 6d 20 74 65 73 74 20   /* Custom test 
1e560 69 6e 74 65 72 66 61 63 65 73 20 2a 2f 0a 20 20  interfaces */.  
1e570 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 55     { "sqlite3OsU
1e580 6e 6c 6f 63 6b 22 2c 20 20 20 20 20 20 20 20 20  nlock",         
1e590 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 55 6e  test_sqlite3OsUn
1e5a0 6c 6f 63 6b 2c 20 30 20 20 20 20 7d 2c 0a 23 65  lock, 0    },.#e
1e5b0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
1e5c0 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
1e5d0 20 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74 5f      { "add_test_
1e5e0 63 6f 6c 6c 61 74 65 22 2c 20 20 20 20 20 20 20  collate",       
1e5f0 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 2c 20 30   test_collate, 0
1e600 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
1e610 20 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74 5f      { "add_test_
1e620 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 22 2c  collate_needed",
1e630 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65   test_collate_ne
1e640 65 64 65 64 2c 20 30 20 20 20 20 20 7d 2c 0a 20  eded, 0     },. 
1e650 20 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74 5f      { "add_test_
1e660 66 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20 20 20  function",      
1e670 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 2c 20   test_function, 
1e680 30 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 23  0           },.#
1e690 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
1e6a0 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 20  ITE_MEMDEBUG.   
1e6b0 20 20 7b 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c    { "sqlite_mall
1e6c0 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 22 2c  oc_outstanding",
1e6d0 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f   sqlite_malloc_o
1e6e0 75 74 73 74 61 6e 64 69 6e 67 2c 20 30 7d 2c 0a  utstanding, 0},.
1e6f0 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73  #endif.     { "s
1e700 71 6c 69 74 65 33 5f 74 65 73 74 5f 65 72 72 73  qlite3_test_errs
1e710 74 72 22 2c 20 20 20 20 20 74 65 73 74 5f 65 72  tr",     test_er
1e720 72 73 74 72 2c 20 30 20 20 20 20 20 20 20 20 20  rstr, 0         
1e730 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 74      },.     { "t
1e740 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65  cl_variable_type
1e750 22 2c 20 20 20 20 20 20 20 74 63 6c 5f 76 61 72  ",       tcl_var
1e760 69 61 62 6c 65 5f 74 79 70 65 2c 20 30 20 20 20  iable_type, 0   
1e770 20 20 20 20 7d 2c 0a 23 69 66 6e 64 65 66 20 53      },.#ifndef S
1e780 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
1e790 44 5f 43 41 43 48 45 0a 20 20 20 20 20 7b 20 22  D_CACHE.     { "
1e7a0 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73  sqlite3_enable_s
1e7b0 68 61 72 65 64 5f 63 61 63 68 65 22 2c 20 74 65  hared_cache", te
1e7c0 73 74 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64  st_enable_shared
1e7d0 2c 20 30 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20  , 0  },.#endif. 
1e7e0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6c      { "sqlite3_l
1e7f0 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72  ibversion_number
1e800 22 2c 20 74 65 73 74 5f 6c 69 62 76 65 72 73 69  ", test_libversi
1e810 6f 6e 5f 6e 75 6d 62 65 72 2c 20 30 20 20 7d 2c  on_number, 0  },
1e820 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1e830 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54  NABLE_COLUMN_MET
1e840 41 44 41 54 41 0a 20 20 20 20 20 7b 20 22 73 71  ADATA.     { "sq
1e850 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75  lite3_table_colu
1e860 6d 6e 5f 6d 65 74 61 64 61 74 61 22 2c 20 74 65  mn_metadata", te
1e870 73 74 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f  st_table_column_
1e880 6d 65 74 61 64 61 74 61 2c 20 30 20 20 7d 2c 0a  metadata, 0  },.
1e890 23 65 6e 64 69 66 0a 20 20 7d 3b 0a 20 20 73 74  #endif.  };.  st
1e8a0 61 74 69 63 20 69 6e 74 20 62 69 74 6d 61 73 6b  atic int bitmask
1e8b0 5f 73 69 7a 65 20 3d 20 73 69 7a 65 6f 66 28 42  _size = sizeof(B
1e8c0 69 74 6d 61 73 6b 29 2a 38 3b 0a 20 20 69 6e 74  itmask)*8;.  int
1e8d0 20 69 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74   i;.  extern int
1e8e0 20 73 71 6c 69 74 65 33 5f 6f 73 5f 74 72 61 63   sqlite3_os_trac
1e8f0 65 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  e;.  extern int 
1e900 73 71 6c 69 74 65 33 5f 77 68 65 72 65 5f 74 72  sqlite3_where_tr
1e910 61 63 65 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  ace;.  extern in
1e920 74 20 73 71 6c 69 74 65 33 5f 73 79 6e 63 5f 63  t sqlite3_sync_c
1e930 6f 75 6e 74 2c 20 73 71 6c 69 74 65 33 5f 66 75  ount, sqlite3_fu
1e940 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 3b 0a 20 20  llsync_count;.  
1e950 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
1e960 65 33 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f 75 6e  e3_opentemp_coun
1e970 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  t;.  extern int 
1e980 73 71 6c 69 74 65 33 5f 6d 65 6d 55 73 65 64 3b  sqlite3_memUsed;
1e990 0a 20 20 65 78 74 65 72 6e 20 63 68 61 72 20 2a  .  extern char *
1e9a0 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 69  sqlite3_malloc_i
1e9b0 64 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  d;.  extern int 
1e9c0 73 71 6c 69 74 65 33 5f 6d 65 6d 4d 61 78 3b 0a  sqlite3_memMax;.
1e9d0 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
1e9e0 69 74 65 33 5f 6c 69 6b 65 5f 63 6f 75 6e 74 3b  ite3_like_count;
1e9f0 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
1ea00 6c 69 74 65 33 5f 74 73 64 5f 63 6f 75 6e 74 3b  lite3_tsd_count;
1ea10 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
1ea20 6c 69 74 65 33 5f 78 66 65 72 6f 70 74 5f 63 6f  lite3_xferopt_co
1ea30 75 6e 74 3b 0a 23 69 66 20 4f 53 5f 55 4e 49 58  unt;.#if OS_UNIX
1ea40 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
1ea50 54 45 5f 54 45 53 54 29 20 26 26 20 64 65 66 69  TE_TEST) && defi
1ea60 6e 65 64 28 54 48 52 45 41 44 53 41 46 45 29 20  ned(THREADSAFE) 
1ea70 26 26 20 54 48 52 45 41 44 53 41 46 45 0a 20 20  && THREADSAFE.  
1ea80 65 78 74 65 72 6e 20 69 6e 74 20 74 68 72 65 61  extern int threa
1ea90 64 73 4f 76 65 72 72 69 64 65 45 61 63 68 4f 74  dsOverrideEachOt
1eaa0 68 65 72 73 4c 6f 63 6b 73 3b 0a 23 65 6e 64 69  hersLocks;.#endi
1eab0 66 0a 23 69 66 20 4f 53 5f 57 49 4e 0a 20 20 65  f.#if OS_WIN.  e
1eac0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
1ead0 33 5f 6f 73 5f 74 79 70 65 3b 0a 23 65 6e 64 69  3_os_type;.#endi
1eae0 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
1eaf0 44 45 42 55 47 0a 20 20 65 78 74 65 72 6e 20 69  DEBUG.  extern i
1eb00 6e 74 20 73 71 6c 69 74 65 33 5f 76 64 62 65 5f  nt sqlite3_vdbe_
1eb10 61 64 64 6f 70 5f 74 72 61 63 65 3b 0a 23 65 6e  addop_trace;.#en
1eb20 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
1eb30 45 5f 54 45 53 54 0a 20 20 65 78 74 65 72 6e 20  E_TEST.  extern 
1eb40 63 68 61 72 20 73 71 6c 69 74 65 33 5f 71 75 65  char sqlite3_que
1eb50 72 79 5f 70 6c 61 6e 5b 5d 3b 0a 20 20 73 74 61  ry_plan[];.  sta
1eb60 74 69 63 20 63 68 61 72 20 2a 71 75 65 72 79 5f  tic char *query_
1eb70 70 6c 61 6e 20 3d 20 73 71 6c 69 74 65 33 5f 71  plan = sqlite3_q
1eb80 75 65 72 79 5f 70 6c 61 6e 3b 0a 23 65 6e 64 69  uery_plan;.#endi
1eb90 66 0a 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  f..  for(i=0; i<
1eba0 73 69 7a 65 6f 66 28 61 43 6d 64 29 2f 73 69 7a  sizeof(aCmd)/siz
1ebb0 65 6f 66 28 61 43 6d 64 5b 30 5d 29 3b 20 69 2b  eof(aCmd[0]); i+
1ebc0 2b 29 7b 0a 20 20 20 20 54 63 6c 5f 43 72 65 61  +){.    Tcl_Crea
1ebd0 74 65 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70  teCommand(interp
1ebe0 2c 20 61 43 6d 64 5b 69 5d 2e 7a 4e 61 6d 65 2c  , aCmd[i].zName,
1ebf0 20 61 43 6d 64 5b 69 5d 2e 78 50 72 6f 63 2c 20   aCmd[i].xProc, 
1ec00 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 66 6f 72  0, 0);.  }.  for
1ec10 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 61  (i=0; i<sizeof(a
1ec20 4f 62 6a 43 6d 64 29 2f 73 69 7a 65 6f 66 28 61  ObjCmd)/sizeof(a
1ec30 4f 62 6a 43 6d 64 5b 30 5d 29 3b 20 69 2b 2b 29  ObjCmd[0]); i++)
1ec40 7b 0a 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65  {.    Tcl_Create
1ec50 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72  ObjCommand(inter
1ec60 70 2c 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 7a 4e  p, aObjCmd[i].zN
1ec70 61 6d 65 2c 20 0a 20 20 20 20 20 20 20 20 61 4f  ame, .        aO
1ec80 62 6a 43 6d 64 5b 69 5d 2e 78 50 72 6f 63 2c 20  bjCmd[i].xProc, 
1ec90 61 4f 62 6a 43 6d 64 5b 69 5d 2e 63 6c 69 65 6e  aObjCmd[i].clien
1eca0 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 7d 0a 20  tData, 0);.  }. 
1ecb0 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1ecc0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 65 61  erp, "sqlite_sea
1ecd0 72 63 68 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20  rch_count", .   
1ece0 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
1ecf0 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2c  e3_search_count,
1ed00 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
1ed10 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
1ed20 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 6f  terp, "sqlite_so
1ed30 72 74 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20  rt_count", .    
1ed40 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
1ed50 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2c 20 54 43  3_sort_count, TC
1ed60 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54  L_LINK_INT);.  T
1ed70 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
1ed80 70 2c 20 22 73 71 6c 69 74 65 5f 6c 69 6b 65 5f  p, "sqlite_like_
1ed90 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28  count", .      (
1eda0 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6c  char*)&sqlite3_l
1edb0 69 6b 65 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c  ike_count, TCL_L
1edc0 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
1edd0 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
1ede0 22 73 71 6c 69 74 65 5f 69 6e 74 65 72 72 75 70  "sqlite_interrup
1edf0 74 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20  t_count", .     
1ee00 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
1ee10 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
1ee20 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
1ee30 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1ee40 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1ee50 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 22 2c  pen_file_count",
1ee60 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26   .      (char*)&
1ee70 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 66 69 6c  sqlite3_open_fil
1ee80 65 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e  e_count, TCL_LIN
1ee90 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69  K_INT);.  Tcl_Li
1eea0 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
1eeb0 71 6c 69 74 65 5f 63 75 72 72 65 6e 74 5f 74 69  qlite_current_ti
1eec0 6d 65 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61  me", .      (cha
1eed0 72 2a 29 26 73 71 6c 69 74 65 33 5f 63 75 72 72  r*)&sqlite3_curr
1eee0 65 6e 74 5f 74 69 6d 65 2c 20 54 43 4c 5f 4c 49  ent_time, TCL_LI
1eef0 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c  NK_INT);.  Tcl_L
1ef00 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
1ef10 73 71 6c 69 74 65 5f 6f 73 5f 74 72 61 63 65 22  sqlite_os_trace"
1ef20 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
1ef30 73 71 6c 69 74 65 33 5f 6f 73 5f 74 72 61 63 65  sqlite3_os_trace
1ef40 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
1ef50 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1ef60 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33 5f  nterp, "sqlite3_
1ef70 74 73 64 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20  tsd_count",.    
1ef80 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
1ef90 33 5f 74 73 64 5f 63 6f 75 6e 74 2c 20 54 43 4c  3_tsd_count, TCL
1efa0 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63  _LINK_INT);.  Tc
1efb0 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
1efc0 2c 20 22 73 71 6c 69 74 65 33 5f 78 66 65 72 6f  , "sqlite3_xfero
1efd0 70 74 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20  pt_count",.     
1efe0 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
1eff0 5f 78 66 65 72 6f 70 74 5f 63 6f 75 6e 74 2c 20  _xferopt_count, 
1f000 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23  TCL_LINK_INT);.#
1f010 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1f020 49 54 5f 55 54 46 31 36 0a 20 20 54 63 6c 5f 4c  IT_UTF16.  Tcl_L
1f030 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
1f040 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e 67  unaligned_string
1f050 5f 63 6f 75 6e 74 65 72 22 2c 0a 20 20 20 20 20  _counter",.     
1f060 20 28 63 68 61 72 2a 29 26 75 6e 61 6c 69 67 6e   (char*)&unalign
1f070 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65  ed_string_counte
1f080 72 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  r, TCL_LINK_INT)
1f090 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 4f 53 5f  ;.#endif.#if OS_
1f0a0 55 4e 49 58 20 26 26 20 64 65 66 69 6e 65 64 28  UNIX && defined(
1f0b0 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20  SQLITE_TEST) && 
1f0c0 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41  defined(THREADSA
1f0d0 46 45 29 20 26 26 20 54 48 52 45 41 44 53 41 46  FE) && THREADSAF
1f0e0 45 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  E.  Tcl_LinkVar(
1f0f0 69 6e 74 65 72 70 2c 20 22 74 68 72 65 61 64 73  interp, "threads
1f100 4f 76 65 72 72 69 64 65 45 61 63 68 4f 74 68 65  OverrideEachOthe
1f110 72 73 4c 6f 63 6b 73 22 2c 0a 20 20 20 20 20 20  rsLocks",.      
1f120 28 63 68 61 72 2a 29 26 74 68 72 65 61 64 73 4f  (char*)&threadsO
1f130 76 65 72 72 69 64 65 45 61 63 68 4f 74 68 65 72  verrideEachOther
1f140 73 4c 6f 63 6b 73 2c 20 54 43 4c 5f 4c 49 4e 4b  sLocks, TCL_LINK
1f150 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69  _INT);.#endif.#i
1f160 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1f170 54 5f 55 54 46 31 36 0a 20 20 54 63 6c 5f 4c 69  T_UTF16.  Tcl_Li
1f180 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
1f190 71 6c 69 74 65 5f 6c 61 73 74 5f 6e 65 65 64 65  qlite_last_neede
1f1a0 64 5f 63 6f 6c 6c 61 74 69 6f 6e 22 2c 0a 20 20  d_collation",.  
1f1b0 20 20 20 20 28 63 68 61 72 2a 29 26 70 7a 4e 65      (char*)&pzNe
1f1c0 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 2c 20 54  ededCollation, T
1f1d0 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 7c 54  CL_LINK_STRING|T
1f1e0 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c  CL_LINK_READ_ONL
1f1f0 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  Y);.#endif.#ifde
1f200 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
1f210 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  G.  Tcl_LinkVar(
1f220 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1f230 6d 61 6c 6c 6f 63 5f 69 64 22 2c 0a 20 20 20 20  malloc_id",.    
1f240 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
1f250 33 5f 6d 61 6c 6c 6f 63 5f 69 64 2c 20 54 43 4c  3_malloc_id, TCL
1f260 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a 23  _LINK_STRING);.#
1f270 65 6e 64 69 66 0a 23 69 66 20 4f 53 5f 57 49 4e  endif.#if OS_WIN
1f280 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1f290 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1f2a0 73 5f 74 79 70 65 22 2c 0a 20 20 20 20 20 20 28  s_type",.      (
1f2b0 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f  char*)&sqlite3_o
1f2c0 73 5f 74 79 70 65 2c 20 54 43 4c 5f 4c 49 4e 4b  s_type, TCL_LINK
1f2d0 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69  _INT);.#endif.#i
1f2e0 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
1f2f0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1f300 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 71  nterp, "sqlite_q
1f310 75 65 72 79 5f 70 6c 61 6e 22 2c 0a 20 20 20 20  uery_plan",.    
1f320 20 20 28 63 68 61 72 2a 29 26 71 75 65 72 79 5f    (char*)&query_
1f330 70 6c 61 6e 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53  plan, TCL_LINK_S
1f340 54 52 49 4e 47 7c 54 43 4c 5f 4c 49 4e 4b 5f 52  TRING|TCL_LINK_R
1f350 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  EAD_ONLY);.#endi
1f360 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
1f370 44 45 42 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b  DEBUG.  Tcl_Link
1f380 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
1f390 69 74 65 5f 61 64 64 6f 70 5f 74 72 61 63 65 22  ite_addop_trace"
1f3a0 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
1f3b0 73 71 6c 69 74 65 33 5f 76 64 62 65 5f 61 64 64  sqlite3_vdbe_add
1f3c0 6f 70 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49  op_trace, TCL_LI
1f3d0 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c  NK_INT);.  Tcl_L
1f3e0 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
1f3f0 73 71 6c 69 74 65 5f 77 68 65 72 65 5f 74 72 61  sqlite_where_tra
1f400 63 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  ce",.      (char
1f410 2a 29 26 73 71 6c 69 74 65 33 5f 77 68 65 72 65  *)&sqlite3_where
1f420 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b  _trace, TCL_LINK
1f430 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69  _INT);.#endif.#i
1f440 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44  fdef SQLITE_MEMD
1f450 45 42 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  EBUG.  Tcl_LinkV
1f460 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1f470 74 65 5f 6d 65 6d 75 73 65 64 22 2c 0a 20 20 20  te_memused",.   
1f480 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
1f490 65 33 5f 6d 65 6d 55 73 65 64 2c 20 54 43 4c 5f  e3_memUsed, TCL_
1f4a0 4c 49 4e 4b 5f 49 4e 54 20 7c 20 54 43 4c 5f 4c  LINK_INT | TCL_L
1f4b0 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a  INK_READ_ONLY);.
1f4c0 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
1f4d0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d 65  terp, "sqlite_me
1f4e0 6d 6d 61 78 22 2c 0a 20 20 20 20 20 20 28 63 68  mmax",.      (ch
1f4f0 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d 65 6d  ar*)&sqlite3_mem
1f500 4d 61 78 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  Max, TCL_LINK_IN
1f510 54 20 7c 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41  T | TCL_LINK_REA
1f520 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  D_ONLY);.#endif.
1f530 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1f540 4d 49 54 5f 44 49 53 4b 49 4f 0a 20 20 54 63 6c  MIT_DISKIO.  Tcl
1f550 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
1f560 20 22 73 71 6c 69 74 65 5f 6f 70 65 6e 74 65 6d   "sqlite_opentem
1f570 70 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20  p_count",.      
1f580 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
1f590 6f 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 2c 20  opentemp_count, 
1f5a0 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23  TCL_LINK_INT);.#
1f5b0 65 6e 64 69 66 0a 20 20 54 63 6c 5f 4c 69 6e 6b  endif.  Tcl_Link
1f5c0 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
1f5d0 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f  ite_static_bind_
1f5e0 76 61 6c 75 65 22 2c 0a 20 20 20 20 20 20 28 63  value",.      (c
1f5f0 68 61 72 2a 29 26 73 71 6c 69 74 65 5f 73 74 61  har*)&sqlite_sta
1f600 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 2c 20  tic_bind_value, 
1f610 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29  TCL_LINK_STRING)
1f620 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
1f630 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1f640 73 74 61 74 69 63 5f 62 69 6e 64 5f 6e 62 79 74  static_bind_nbyt
1f650 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  e",.      (char*
1f660 29 26 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f  )&sqlite_static_
1f670 62 69 6e 64 5f 6e 62 79 74 65 2c 20 54 43 4c 5f  bind_nbyte, TCL_
1f680 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c  LINK_INT);.  Tcl
1f690 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
1f6a0 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 64 69   "sqlite_temp_di
1f6b0 72 65 63 74 6f 72 79 22 2c 0a 20 20 20 20 20 20  rectory",.      
1f6c0 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
1f6d0 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 2c 20  temp_directory, 
1f6e0 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29  TCL_LINK_STRING)
1f6f0 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
1f700 69 6e 74 65 72 70 2c 20 22 62 69 74 6d 61 73 6b  interp, "bitmask
1f710 5f 73 69 7a 65 22 2c 0a 20 20 20 20 20 20 28 63  _size",.      (c
1f720 68 61 72 2a 29 26 62 69 74 6d 61 73 6b 5f 73 69  har*)&bitmask_si
1f730 7a 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  ze, TCL_LINK_INT
1f740 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f  |TCL_LINK_READ_O
1f750 4e 4c 59 29 3b 0a 23 69 66 20 4f 53 5f 55 4e 49  NLY);.#if OS_UNI
1f760 58 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  X.  Tcl_LinkVar(
1f770 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1f780 73 79 6e 63 5f 63 6f 75 6e 74 22 2c 0a 20 20 20  sync_count",.   
1f790 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
1f7a0 65 33 5f 73 79 6e 63 5f 63 6f 75 6e 74 2c 20 54  e3_sync_count, T
1f7b0 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
1f7c0 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1f7d0 72 70 2c 20 22 73 71 6c 69 74 65 5f 66 75 6c 6c  rp, "sqlite_full
1f7e0 73 79 6e 63 5f 63 6f 75 6e 74 22 2c 0a 20 20 20  sync_count",.   
1f7f0 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
1f800 65 33 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e  e3_fullsync_coun
1f810 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
1f820 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 4f 53 5f 55  ;.#endif /* OS_U
1f830 4e 49 58 20 2a 2f 0a 20 20 73 65 74 5f 6f 70 74  NIX */.  set_opt
1f840 69 6f 6e 73 28 69 6e 74 65 72 70 29 3b 0a 0a 20  ions(interp);.. 
1f850 20 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   {.#ifdef SQLITE
1f860 5f 44 45 42 55 47 0a 20 20 20 20 65 78 74 65 72  _DEBUG.    exter
1f870 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 68  n int sqlite3_sh
1f880 61 72 65 64 5f 63 61 63 68 65 5f 72 65 70 6f 72  ared_cache_repor
1f890 74 28 76 6f 69 64 20 2a 2c 20 54 63 6c 5f 49 6e  t(void *, Tcl_In
1f8a0 74 65 72 70 20 2a 2c 0a 20 20 20 20 20 20 20 20  terp *,.        
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8c0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c              int,
1f8d0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 5b   Tcl_Obj *CONST[
1f8e0 5d 29 3b 0a 20 20 20 20 54 63 6c 5f 43 72 65 61  ]);.    Tcl_Crea
1f8f0 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74  teObjCommand(int
1f900 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 68 61  erp, "sqlite_sha
1f910 72 65 64 5f 63 61 63 68 65 5f 72 65 70 6f 72 74  red_cache_report
1f920 22 2c 20 0a 20 20 20 20 20 20 20 20 73 71 6c 69  ", .        sqli
1f930 74 65 33 5f 73 68 61 72 65 64 5f 63 61 63 68 65  te3_shared_cache
1f940 5f 72 65 70 6f 72 74 2c 20 30 2c 20 30 29 3b 0a  _report, 0, 0);.
1f950 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 72 65 74  #endif.  }.  ret
1f960 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a        urn TCL_OK;.}.