/ Hex Artifact Content
Login

Artifact b96f80e68cd50e10e10cda8bb762152bae52a8d2:


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 37 20 32 30 30 37 2f 30 34 2f 31   1.237 2007/04/1
0240: 33 20 30 32 3a 31 34 3a 33 30 20 64 72 68 20 45  3 02:14:30 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: 54 68 65 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  The I/O tracing 
1950: 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 73 74 61  callback..*/.sta
1960: 74 69 63 20 46 49 4c 45 20 2a 69 6f 74 72 61 63  tic FILE *iotrac
1970: 65 5f 66 69 6c 65 20 3d 20 30 3b 0a 73 74 61 74  e_file = 0;.stat
1980: 69 63 20 76 6f 69 64 20 69 6f 5f 74 72 61 63 65  ic void io_trace
1990: 5f 63 61 6c 6c 62 61 63 6b 28 63 6f 6e 73 74 20  _callback(const 
19a0: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e  char *zFormat, .
19b0: 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61  ..){.  va_list a
19c0: 70 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  p;.  va_start(ap
19d0: 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 76 66  , zFormat);.  vf
19e0: 70 72 69 6e 74 66 28 69 6f 74 72 61 63 65 5f 66  printf(iotrace_f
19f0: 69 6c 65 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70  ile, zFormat, ap
1a00: 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b  );.  va_end(ap);
1a10: 0a 20 20 66 66 6c 75 73 68 28 69 6f 74 72 61 63  .  fflush(iotrac
1a20: 65 5f 66 69 6c 65 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  e_file);.}../*.*
1a30: 2a 20 55 73 61 67 65 3a 20 20 69 6f 5f 74 72 61  * Usage:  io_tra
1a40: 63 65 20 46 49 4c 45 4e 41 4d 45 0a 2a 2a 0a 2a  ce FILENAME.**.*
1a50: 2a 20 54 75 72 6e 20 49 2f 4f 20 74 72 61 63 69  * Turn I/O traci
1a60: 6e 67 20 6f 6e 20 6f 72 20 6f 66 66 2e 20 20 49  ng on or off.  I
1a70: 66 20 46 49 4c 45 4e 41 4d 45 20 69 73 20 6e 6f  f FILENAME is no
1a80: 74 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e  t an empty strin
1a90: 67 2c 0a 2a 2a 20 49 2f 4f 20 74 72 61 63 69 6e  g,.** I/O tracin
1aa0: 67 20 62 65 67 69 6e 73 20 67 6f 69 6e 67 20 69  g begins going i
1ab0: 6e 74 6f 20 46 49 4c 45 4e 41 4d 45 2e 20 49 66  nto FILENAME. If
1ac0: 20 46 49 4c 45 4e 41 4d 45 20 69 73 20 61 6e 20   FILENAME is an 
1ad0: 65 6d 70 74 79 0a 2a 2a 20 73 74 72 69 6e 67 2c  empty.** string,
1ae0: 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 69 73 20   I/O tracing is 
1af0: 74 75 72 6e 65 64 20 6f 66 66 2e 0a 2a 2f 0a 73  turned off..*/.s
1b00: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 69  tatic int test_i
1b10: 6f 5f 74 72 61 63 65 28 0a 20 20 76 6f 69 64 20  o_trace(.  void 
1b20: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
1b30: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
1b40: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
1b50: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
1b60: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
1b70: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
1b80: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
1b90: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
1ba0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
1bb0: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
1bc0: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
1bd0: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
1be0: 7b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20  {.  if( argc!=2 
1bf0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
1c00: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
1c10: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
1c20: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
1c30: 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 20 20  gv[0],.         
1c40: 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c 20   " FILENAME\"", 
1c50: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
1c60: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
1c70: 69 66 28 20 69 6f 74 72 61 63 65 5f 66 69 6c 65  if( iotrace_file
1c80: 20 29 7b 0a 20 20 20 20 69 66 28 20 69 6f 74 72   ){.    if( iotr
1c90: 61 63 65 5f 66 69 6c 65 21 3d 73 74 64 6f 75 74  ace_file!=stdout
1ca0: 20 26 26 20 69 6f 74 72 61 63 65 5f 66 69 6c 65   && iotrace_file
1cb0: 21 3d 73 74 64 65 72 72 20 29 7b 0a 20 20 20 20  !=stderr ){.    
1cc0: 20 20 66 63 6c 6f 73 65 28 69 6f 74 72 61 63 65    fclose(iotrace
1cd0: 5f 66 69 6c 65 29 3b 0a 20 20 20 20 7d 0a 20 20  _file);.    }.  
1ce0: 20 20 69 6f 74 72 61 63 65 5f 66 69 6c 65 20 3d    iotrace_file =
1cf0: 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   0;.    sqlite3_
1d00: 69 6f 5f 74 72 61 63 65 20 3d 20 30 3b 0a 20 20  io_trace = 0;.  
1d10: 7d 0a 20 20 69 66 28 20 61 72 67 76 5b 31 5d 5b  }.  if( argv[1][
1d20: 30 5d 20 29 7b 0a 20 20 20 20 69 66 28 20 73 74  0] ){.    if( st
1d30: 72 63 6d 70 28 61 72 67 76 5b 31 5d 2c 22 73 74  rcmp(argv[1],"st
1d40: 64 6f 75 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  dout")==0 ){.   
1d50: 20 20 20 69 6f 74 72 61 63 65 5f 66 69 6c 65 20     iotrace_file 
1d60: 3d 20 73 74 64 6f 75 74 3b 0a 20 20 20 20 7d 65  = stdout;.    }e
1d70: 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61  lse if( strcmp(a
1d80: 72 67 76 5b 31 5d 2c 22 73 74 64 65 72 72 22 29  rgv[1],"stderr")
1d90: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6f 74  ==0 ){.      iot
1da0: 72 61 63 65 5f 66 69 6c 65 20 3d 20 73 74 64 65  race_file = stde
1db0: 72 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  rr;.    }else{. 
1dc0: 20 20 20 20 20 69 6f 74 72 61 63 65 5f 66 69 6c       iotrace_fil
1dd0: 65 20 3d 20 66 6f 70 65 6e 28 61 72 67 76 5b 31  e = fopen(argv[1
1de0: 5d 2c 20 22 77 22 29 3b 0a 20 20 20 20 7d 0a 20  ], "w");.    }. 
1df0: 20 20 20 73 71 6c 69 74 65 33 5f 69 6f 5f 74 72     sqlite3_io_tr
1e00: 61 63 65 20 3d 20 69 6f 5f 74 72 61 63 65 5f 63  ace = io_trace_c
1e10: 61 6c 6c 62 61 63 6b 3b 0a 20 20 7d 0a 20 20 72  allback;.  }.  r
1e20: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
1e30: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  .}.../*.** Usage
1e40: 3a 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 5f  :  sqlite3_exec_
1e50: 70 72 69 6e 74 66 20 20 44 42 20 20 46 4f 52 4d  printf  DB  FORM
1e60: 41 54 20 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a  AT  STRING.**.**
1e70: 20 49 6e 76 6f 6b 65 20 74 68 65 20 73 71 6c 69   Invoke the sqli
1e80: 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74 66 28  te3_exec_printf(
1e90: 29 20 69 6e 74 65 72 66 61 63 65 20 75 73 69 6e  ) interface usin
1ea0: 67 20 74 68 65 20 6f 70 65 6e 20 64 61 74 61 62  g the open datab
1eb0: 61 73 65 0a 2a 2a 20 44 42 2e 20 20 54 68 65 20  ase.** DB.  The 
1ec0: 53 51 4c 20 69 73 20 74 68 65 20 73 74 72 69 6e  SQL is the strin
1ed0: 67 20 46 4f 52 4d 41 54 2e 20 20 54 68 65 20 66  g FORMAT.  The f
1ee0: 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 68 6f  ormat string sho
1ef0: 75 6c 64 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 6f  uld contain.** o
1f00: 6e 65 20 25 73 20 6f 72 20 25 71 2e 20 20 53 54  ne %s or %q.  ST
1f10: 52 49 4e 47 20 69 73 20 74 68 65 20 76 61 6c 75  RING is the valu
1f20: 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  e inserted into 
1f30: 25 73 20 6f 72 20 25 71 2e 0a 2a 2f 0a 73 74 61  %s or %q..*/.sta
1f40: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65 78 65  tic int test_exe
1f50: 63 5f 70 72 69 6e 74 66 28 0a 20 20 76 6f 69 64  c_printf(.  void
1f60: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
1f70: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
1f80: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
1f90: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
1fa0: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
1fb0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
1fc0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
1fd0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
1fe0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
1ff0: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
2000: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
2010: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
2020: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
2030: 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 20  ;.  Tcl_DString 
2040: 73 74 72 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  str;.  int rc;. 
2050: 20 63 68 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b   char *zErr = 0;
2060: 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
2070: 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a   char zBuf[30];.
2080: 20 20 69 66 28 20 61 72 67 63 21 3d 34 20 29 7b    if( argc!=4 ){
2090: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
20a0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
20b0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
20c0: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
20d0: 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44  [0], .       " D
20e0: 42 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47 22  B FORMAT STRING"
20f0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
2100: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
2110: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
2120: 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
2130: 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
2140: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
2150: 63 6c 5f 44 53 74 72 69 6e 67 49 6e 69 74 28 26  cl_DStringInit(&
2160: 73 74 72 29 3b 0a 20 20 7a 53 71 6c 20 3d 20 73  str);.  zSql = s
2170: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61  qlite3_mprintf(a
2180: 72 67 76 5b 32 5d 2c 20 61 72 67 76 5b 33 5d 29  rgv[2], argv[3])
2190: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
21a0: 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20  _exec(db, zSql, 
21b0: 65 78 65 63 5f 70 72 69 6e 74 66 5f 63 62 2c 20  exec_printf_cb, 
21c0: 26 73 74 72 2c 20 26 7a 45 72 72 29 3b 0a 20 20  &str, &zErr);.  
21d0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71  sqlite3_free(zSq
21e0: 6c 29 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42  l);.  sprintf(zB
21f0: 75 66 2c 20 22 25 64 22 2c 20 72 63 29 3b 0a 20  uf, "%d", rc);. 
2200: 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65   Tcl_AppendEleme
2210: 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29  nt(interp, zBuf)
2220: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c  ;.  Tcl_AppendEl
2230: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 63  ement(interp, rc
2240: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 3f 20 54 63  ==SQLITE_OK ? Tc
2250: 6c 5f 44 53 74 72 69 6e 67 56 61 6c 75 65 28 26  l_DStringValue(&
2260: 73 74 72 29 20 3a 20 7a 45 72 72 29 3b 0a 20 20  str) : zErr);.  
2270: 54 63 6c 5f 44 53 74 72 69 6e 67 46 72 65 65 28  Tcl_DStringFree(
2280: 26 73 74 72 29 3b 0a 20 20 69 66 28 20 7a 45 72  &str);.  if( zEr
2290: 72 20 29 20 73 71 6c 69 74 65 33 5f 66 72 65 65  r ) sqlite3_free
22a0: 28 7a 45 72 72 29 3b 0a 20 20 69 66 28 20 73 71  (zErr);.  if( sq
22b0: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
22c0: 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
22d0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
22e0: 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  ROR;.  return TC
22f0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
2300: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 65  sage:  sqlite3_e
2310: 78 65 63 20 20 44 42 20 20 53 51 4c 0a 2a 2a 0a  xec  DB  SQL.**.
2320: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 73 71  ** Invoke the sq
2330: 6c 69 74 65 33 5f 65 78 65 63 20 69 6e 74 65 72  lite3_exec inter
2340: 66 61 63 65 20 75 73 69 6e 67 20 74 68 65 20 6f  face using the o
2350: 70 65 6e 20 64 61 74 61 62 61 73 65 20 44 42 0a  pen database DB.
2360: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
2370: 73 74 5f 65 78 65 63 28 0a 20 20 76 6f 69 64 20  st_exec(.  void 
2380: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
2390: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
23a0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
23b0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
23c0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
23d0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
23e0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
23f0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
2400: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
2410: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
2420: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
2430: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
2440: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
2450: 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 20 73  .  Tcl_DString s
2460: 74 72 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  tr;.  int rc;.  
2470: 63 68 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a  char *zErr = 0;.
2480: 20 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b    char zBuf[30];
2490: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
24a0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
24b0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
24c0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
24d0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
24e0: 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20  v[0], .       " 
24f0: 44 42 20 53 51 4c 22 2c 20 30 29 3b 0a 20 20 20  DB SQL", 0);.   
2500: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
2510: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
2520: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
2530: 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20  , argv[1], &db) 
2540: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
2550: 4f 52 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e  OR;.  Tcl_DStrin
2560: 67 49 6e 69 74 28 26 73 74 72 29 3b 0a 20 20 72  gInit(&str);.  r
2570: 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
2580: 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 65 78  (db, argv[2], ex
2590: 65 63 5f 70 72 69 6e 74 66 5f 63 62 2c 20 26 73  ec_printf_cb, &s
25a0: 74 72 2c 20 26 7a 45 72 72 29 3b 0a 20 20 73 70  tr, &zErr);.  sp
25b0: 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22  rintf(zBuf, "%d"
25c0: 2c 20 72 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70  , rc);.  Tcl_App
25d0: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
25e0: 70 2c 20 7a 42 75 66 29 3b 0a 20 20 54 63 6c 5f  p, zBuf);.  Tcl_
25f0: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
2600: 74 65 72 70 2c 20 72 63 3d 3d 53 51 4c 49 54 45  terp, rc==SQLITE
2610: 5f 4f 4b 20 3f 20 54 63 6c 5f 44 53 74 72 69 6e  _OK ? Tcl_DStrin
2620: 67 56 61 6c 75 65 28 26 73 74 72 29 20 3a 20 7a  gValue(&str) : z
2630: 45 72 72 29 3b 0a 20 20 54 63 6c 5f 44 53 74 72  Err);.  Tcl_DStr
2640: 69 6e 67 46 72 65 65 28 26 73 74 72 29 3b 0a 20  ingFree(&str);. 
2650: 20 69 66 28 20 7a 45 72 72 20 29 20 73 71 6c 69   if( zErr ) sqli
2660: 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a  te3_free(zErr);.
2670: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
2680: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
2690: 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
26a0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
26b0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
26c0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
26d0: 71 6c 69 74 65 33 5f 65 78 65 63 5f 6e 72 20 20  qlite3_exec_nr  
26e0: 44 42 20 20 53 51 4c 0a 2a 2a 0a 2a 2a 20 49 6e  DB  SQL.**.** In
26f0: 76 6f 6b 65 20 74 68 65 20 73 71 6c 69 74 65 33  voke the sqlite3
2700: 5f 65 78 65 63 20 69 6e 74 65 72 66 61 63 65 20  _exec interface 
2710: 75 73 69 6e 67 20 74 68 65 20 6f 70 65 6e 20 64  using the open d
2720: 61 74 61 62 61 73 65 20 44 42 2e 20 20 44 69 73  atabase DB.  Dis
2730: 63 61 72 64 0a 2a 2a 20 61 6c 6c 20 72 65 73 75  card.** all resu
2740: 6c 74 73 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  lts.*/.static in
2750: 74 20 74 65 73 74 5f 65 78 65 63 5f 6e 72 28 0a  t test_exec_nr(.
2760: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
2770: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
2780: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
2790: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
27a0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
27b0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
27c0: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
27d0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
27e0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
27f0: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
2800: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
2810: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
2820: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  nt */.){.  sqlit
2830: 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63  e3 *db;.  int rc
2840: 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d  ;.  char *zErr =
2850: 20 30 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d   0;.  if( argc!=
2860: 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
2870: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
2880: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
2890: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
28a0: 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20  argv[0], .      
28b0: 20 22 20 44 42 20 53 51 4c 22 2c 20 30 29 3b 0a   " DB SQL", 0);.
28c0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
28d0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
28e0: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
28f0: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
2900: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
2910: 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71  ERROR;.  rc = sq
2920: 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 61  lite3_exec(db, a
2930: 72 67 76 5b 32 5d 2c 20 30 2c 20 30 2c 20 26 7a  rgv[2], 0, 0, &z
2940: 45 72 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Err);.  if( sqli
2950: 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
2960: 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29  nterp, db, rc) )
2970: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
2980: 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  R;.  return TCL_
2990: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
29a0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72  ge:  sqlite3_mpr
29b0: 69 6e 74 66 5f 7a 5f 74 65 73 74 20 20 53 45 50  intf_z_test  SEP
29c0: 41 52 41 54 4f 52 20 20 41 52 47 30 20 20 41 52  ARATOR  ARG0  AR
29d0: 47 31 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 54 65 73  G1 ....**.** Tes
29e0: 74 20 74 68 65 20 25 7a 20 66 6f 72 6d 61 74 20  t the %z format 
29f0: 6f 66 20 73 71 6c 69 74 65 4d 50 72 69 6e 74 66  of sqliteMPrintf
2a00: 28 29 2e 20 20 55 73 65 20 6d 75 6c 74 69 70 6c  ().  Use multipl
2a10: 65 20 6d 70 72 69 6e 74 66 28 29 20 63 61 6c 6c  e mprintf() call
2a20: 73 20 74 6f 20 0a 2a 2a 20 63 6f 6e 63 61 74 65  s to .** concate
2a30: 6e 61 74 65 20 61 72 67 30 20 74 68 72 6f 75 67  nate arg0 throug
2a40: 68 20 61 72 67 6e 20 75 73 69 6e 67 20 73 65 70  h argn using sep
2a50: 61 72 61 74 6f 72 20 61 73 20 74 68 65 20 73 65  arator as the se
2a60: 70 61 72 61 74 6f 72 2e 0a 2a 2a 20 52 65 74 75  parator..** Retu
2a70: 72 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a  rn the result..*
2a80: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
2a90: 74 5f 6d 70 72 69 6e 74 66 5f 7a 28 0a 20 20 76  t_mprintf_z(.  v
2aa0: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
2ab0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
2ac0: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
2ad0: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
2ae0: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
2af0: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
2b00: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
2b10: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
2b20: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
2b30: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
2b40: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
2b50: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
2b60: 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 52  */.){.  char *zR
2b70: 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 69 6e 74  esult = 0;.  int
2b80: 20 69 3b 0a 0a 20 20 66 6f 72 28 69 3d 32 3b 20   i;..  for(i=2; 
2b90: 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20  i<argc; i++){.  
2ba0: 20 20 7a 52 65 73 75 6c 74 20 3d 20 73 71 6c 69    zResult = sqli
2bb0: 74 65 33 4d 50 72 69 6e 74 66 28 22 25 7a 25 73  te3MPrintf("%z%s
2bc0: 25 73 22 2c 20 7a 52 65 73 75 6c 74 2c 20 61 72  %s", zResult, ar
2bd0: 67 76 5b 31 5d 2c 20 61 72 67 76 5b 69 5d 29 3b  gv[1], argv[i]);
2be0: 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e  .  }.  Tcl_Appen
2bf0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
2c00: 7a 52 65 73 75 6c 74 2c 20 30 29 3b 0a 20 20 73  zResult, 0);.  s
2c10: 71 6c 69 74 65 46 72 65 65 28 7a 52 65 73 75 6c  qliteFree(zResul
2c20: 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  t);.  return TCL
2c30: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
2c40: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
2c50: 72 69 6e 74 66 5f 6e 5f 74 65 73 74 20 20 53 54  rintf_n_test  ST
2c60: 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20  RING.**.** Test 
2c70: 74 68 65 20 25 6e 20 66 6f 72 6d 61 74 20 6f 66  the %n format of
2c80: 20 73 71 6c 69 74 65 4d 50 72 69 6e 74 66 28 29   sqliteMPrintf()
2c90: 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 6c 65  .  Return the le
2ca0: 6e 67 74 68 20 6f 66 20 74 68 65 0a 2a 2a 20 69  ngth of the.** i
2cb0: 6e 70 75 74 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a  nput string..*/.
2cc0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
2cd0: 6d 70 72 69 6e 74 66 5f 6e 28 0a 20 20 76 6f 69  mprintf_n(.  voi
2ce0: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
2cf0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
2d00: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
2d10: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
2d20: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
2d30: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
2d40: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
2d50: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
2d60: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
2d70: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
2d80: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
2d90: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
2da0: 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 53 74 72  .){.  char *zStr
2db0: 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20  ;.  int n = 0;. 
2dc0: 20 7a 53 74 72 20 3d 20 73 71 6c 69 74 65 33 4d   zStr = sqlite3M
2dd0: 50 72 69 6e 74 66 28 22 25 73 25 6e 22 2c 20 61  Printf("%s%n", a
2de0: 72 67 76 5b 31 5d 2c 20 26 6e 29 3b 0a 20 20 73  rgv[1], &n);.  s
2df0: 71 6c 69 74 65 46 72 65 65 28 7a 53 74 72 29 3b  qliteFree(zStr);
2e00: 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
2e10: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
2e20: 4e 65 77 49 6e 74 4f 62 6a 28 6e 29 29 3b 0a 20  NewIntObj(n));. 
2e30: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
2e40: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
2e50: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62   sqlite3_get_tab
2e60: 6c 65 5f 70 72 69 6e 74 66 20 20 44 42 20 20 46  le_printf  DB  F
2e70: 4f 52 4d 41 54 20 20 53 54 52 49 4e 47 0a 2a 2a  ORMAT  STRING.**
2e80: 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 73  .** Invoke the s
2e90: 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65  qlite3_get_table
2ea0: 5f 70 72 69 6e 74 66 28 29 20 69 6e 74 65 72 66  _printf() interf
2eb0: 61 63 65 20 75 73 69 6e 67 20 74 68 65 20 6f 70  ace using the op
2ec0: 65 6e 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 44  en database.** D
2ed0: 42 2e 20 20 54 68 65 20 53 51 4c 20 69 73 20 74  B.  The SQL is t
2ee0: 68 65 20 73 74 72 69 6e 67 20 46 4f 52 4d 41 54  he string FORMAT
2ef0: 2e 20 20 54 68 65 20 66 6f 72 6d 61 74 20 73 74  .  The format st
2f00: 72 69 6e 67 20 73 68 6f 75 6c 64 20 63 6f 6e 74  ring should cont
2f10: 61 69 6e 0a 2a 2a 20 6f 6e 65 20 25 73 20 6f 72  ain.** one %s or
2f20: 20 25 71 2e 20 20 53 54 52 49 4e 47 20 69 73 20   %q.  STRING is 
2f30: 74 68 65 20 76 61 6c 75 65 20 69 6e 73 65 72 74  the value insert
2f40: 65 64 20 69 6e 74 6f 20 25 73 20 6f 72 20 25 71  ed into %s or %q
2f50: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
2f60: 74 65 73 74 5f 67 65 74 5f 74 61 62 6c 65 5f 70  test_get_table_p
2f70: 72 69 6e 74 66 28 0a 20 20 76 6f 69 64 20 2a 4e  rintf(.  void *N
2f80: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
2f90: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
2fa0: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
2fb0: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
2fc0: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
2fd0: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
2fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2ff0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
3000: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
3010: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
3020: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
3030: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
3040: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
3050: 20 54 63 6c 5f 44 53 74 72 69 6e 67 20 73 74 72   Tcl_DString str
3060: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68  ;.  int rc;.  ch
3070: 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20  ar *zErr = 0;.  
3080: 69 6e 74 20 6e 52 6f 77 2c 20 6e 43 6f 6c 3b 0a  int nRow, nCol;.
3090: 20 20 63 68 61 72 20 2a 2a 61 52 65 73 75 6c 74    char **aResult
30a0: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68 61  ;.  int i;.  cha
30b0: 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 63 68  r zBuf[30];.  ch
30c0: 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 66 28 20  ar *zSql;.  if( 
30d0: 61 72 67 63 21 3d 34 20 29 7b 0a 20 20 20 20 54  argc!=4 ){.    T
30e0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
30f0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
3100: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
3110: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a   \"", argv[0], .
3120: 20 20 20 20 20 20 20 22 20 44 42 20 46 4f 52 4d         " DB FORM
3130: 41 54 20 53 54 52 49 4e 47 22 2c 20 30 29 3b 0a  AT STRING", 0);.
3140: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
3150: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
3160: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
3170: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
3180: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
3190: 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 44 53 74  ERROR;.  Tcl_DSt
31a0: 72 69 6e 67 49 6e 69 74 28 26 73 74 72 29 3b 0a  ringInit(&str);.
31b0: 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
31c0: 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 32 5d  _mprintf(argv[2]
31d0: 2c 61 72 67 76 5b 33 5d 29 3b 0a 20 20 72 63 20  ,argv[3]);.  rc 
31e0: 3d 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61  = sqlite3_get_ta
31f0: 62 6c 65 28 64 62 2c 20 7a 53 71 6c 2c 20 26 61  ble(db, zSql, &a
3200: 52 65 73 75 6c 74 2c 20 26 6e 52 6f 77 2c 20 26  Result, &nRow, &
3210: 6e 43 6f 6c 2c 20 26 7a 45 72 72 29 3b 0a 20 20  nCol, &zErr);.  
3220: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71  sqlite3_free(zSq
3230: 6c 29 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42  l);.  sprintf(zB
3240: 75 66 2c 20 22 25 64 22 2c 20 72 63 29 3b 0a 20  uf, "%d", rc);. 
3250: 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65   Tcl_AppendEleme
3260: 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29  nt(interp, zBuf)
3270: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
3280: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 70 72  TE_OK ){.    spr
3290: 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c  intf(zBuf, "%d",
32a0: 20 6e 52 6f 77 29 3b 0a 20 20 20 20 54 63 6c 5f   nRow);.    Tcl_
32b0: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
32c0: 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20  terp, zBuf);.   
32d0: 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22   sprintf(zBuf, "
32e0: 25 64 22 2c 20 6e 43 6f 6c 29 3b 0a 20 20 20 20  %d", nCol);.    
32f0: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
3300: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b  t(interp, zBuf);
3310: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3320: 28 6e 52 6f 77 2b 31 29 2a 6e 43 6f 6c 3b 20 69  (nRow+1)*nCol; i
3330: 2b 2b 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41  ++){.      Tcl_A
3340: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
3350: 65 72 70 2c 20 61 52 65 73 75 6c 74 5b 69 5d 20  erp, aResult[i] 
3360: 3f 20 61 52 65 73 75 6c 74 5b 69 5d 20 3a 20 22  ? aResult[i] : "
3370: 4e 55 4c 4c 22 29 3b 0a 20 20 20 20 7d 0a 20 20  NULL");.    }.  
3380: 7d 65 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 41  }else{.    Tcl_A
3390: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
33a0: 65 72 70 2c 20 7a 45 72 72 29 3b 0a 20 20 7d 0a  erp, zErr);.  }.
33b0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 5f 74    sqlite3_free_t
33c0: 61 62 6c 65 28 61 52 65 73 75 6c 74 29 3b 0a 20  able(aResult);. 
33d0: 20 69 66 28 20 7a 45 72 72 20 29 20 73 71 6c 69   if( zErr ) sqli
33e0: 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a  te3_free(zErr);.
33f0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
3400: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
3410: 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
3420: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
3430: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
3440: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
3450: 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
3460: 65 72 74 5f 72 6f 77 69 64 20 44 42 0a 2a 2a 0a  ert_rowid DB.**.
3470: 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 69  ** Returns the i
3480: 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 66 20  nteger ROWID of 
3490: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
34a0: 69 6e 73 65 72 74 2e 0a 2a 2f 0a 73 74 61 74 69  insert..*/.stati
34b0: 63 20 69 6e 74 20 74 65 73 74 5f 6c 61 73 74 5f  c int test_last_
34c0: 72 6f 77 69 64 28 0a 20 20 76 6f 69 64 20 2a 4e  rowid(.  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 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a   char zBuf[30];.
35b0: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29  .  if( argc!=2 )
35c0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
35d0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
35e0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
35f0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
3600: 76 5b 30 5d 2c 20 22 20 44 42 5c 22 22 2c 20 30  v[0], " DB\"", 0
3610: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
3620: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
3630: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
3640: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
3650: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
3660: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 70 72 69  CL_ERROR;.  spri
3670: 6e 74 66 28 7a 42 75 66 2c 20 22 25 6c 6c 64 22  ntf(zBuf, "%lld"
3680: 2c 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  , sqlite3_last_i
3690: 6e 73 65 72 74 5f 72 6f 77 69 64 28 64 62 29 29  nsert_rowid(db))
36a0: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  ;.  Tcl_AppendRe
36b0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
36c0: 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  f, 0);.  return 
36d0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  SQLITE_OK;.}../*
36e0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
36f0: 74 65 33 5f 6b 65 79 20 44 42 20 4b 45 59 0a 2a  te3_key DB KEY.*
3700: 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 63 6f 64  *.** Set the cod
3710: 65 63 20 6b 65 79 2e 0a 2a 2f 0a 73 74 61 74 69  ec key..*/.stati
3720: 63 20 69 6e 74 20 74 65 73 74 5f 6b 65 79 28 0a  c int test_key(.
3730: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
3740: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
3750: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
3760: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
3770: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
3780: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
3790: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
37a0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
37b0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
37c0: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
37d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
37e0: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
37f0: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  nt */.){.  sqlit
3800: 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20  e3 *db;.  const 
3810: 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 20 20 69 6e  char *zKey;.  in
3820: 74 20 6e 4b 65 79 3b 0a 20 20 69 66 28 20 61 72  t nKey;.  if( ar
3830: 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
3840: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
3850: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
3860: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
3870: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
3880: 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22      " FILENAME\"
3890: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
38a0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
38b0: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
38c0: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
38d0: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
38e0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
38f0: 7a 4b 65 79 20 3d 20 61 72 67 76 5b 32 5d 3b 0a  zKey = argv[2];.
3900: 20 20 6e 4b 65 79 20 3d 20 73 74 72 6c 65 6e 28    nKey = strlen(
3910: 7a 4b 65 79 29 3b 0a 23 69 66 64 65 66 20 53 51  zKey);.#ifdef SQ
3920: 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
3930: 20 73 71 6c 69 74 65 33 5f 6b 65 79 28 64 62 2c   sqlite3_key(db,
3940: 20 7a 4b 65 79 2c 20 6e 4b 65 79 29 3b 0a 23 65   zKey, nKey);.#e
3950: 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43  ndif.  return TC
3960: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
3970: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 72  sage:  sqlite3_r
3980: 65 6b 65 79 20 44 42 20 4b 45 59 0a 2a 2a 0a 2a  ekey DB KEY.**.*
3990: 2a 20 43 68 61 6e 67 65 20 74 68 65 20 63 6f 64  * Change the cod
39a0: 65 63 20 6b 65 79 2e 0a 2a 2f 0a 73 74 61 74 69  ec key..*/.stati
39b0: 63 20 69 6e 74 20 74 65 73 74 5f 72 65 6b 65 79  c int test_rekey
39c0: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
39d0: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
39e0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
39f0: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
3a00: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
3a10: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
3a20: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
3a30: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
3a40: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
3a50: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
3a60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
3a70: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
3a80: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  ment */.){.  sql
3a90: 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73  ite3 *db;.  cons
3aa0: 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 20 20  t char *zKey;.  
3ab0: 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 69 66 28 20  int nKey;.  if( 
3ac0: 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
3ad0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
3ae0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
3af0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
3b00: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
3b10: 20 20 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45        " FILENAME
3b20: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
3b30: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
3b40: 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
3b50: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
3b60: 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
3b70: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
3b80: 20 20 7a 4b 65 79 20 3d 20 61 72 67 76 5b 32 5d    zKey = argv[2]
3b90: 3b 0a 20 20 6e 4b 65 79 20 3d 20 73 74 72 6c 65  ;.  nKey = strle
3ba0: 6e 28 7a 4b 65 79 29 3b 0a 23 69 66 64 65 66 20  n(zKey);.#ifdef 
3bb0: 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
3bc0: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79  .  sqlite3_rekey
3bd0: 28 64 62 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 29  (db, zKey, nKey)
3be0: 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
3bf0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
3c00: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
3c10: 65 33 5f 63 6c 6f 73 65 20 44 42 0a 2a 2a 0a 2a  e3_close DB.**.*
3c20: 2a 20 43 6c 6f 73 65 73 20 74 68 65 20 64 61 74  * Closes the dat
3c30: 61 62 61 73 65 20 6f 70 65 6e 65 64 20 62 79 20  abase opened by 
3c40: 73 71 6c 69 74 65 33 5f 6f 70 65 6e 2e 0a 2a 2f  sqlite3_open..*/
3c50: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
3c60: 74 65 5f 74 65 73 74 5f 63 6c 6f 73 65 28 0a 20  te_test_close(. 
3c70: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
3c80: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
3c90: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
3ca0: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
3cb0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
3cc0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
3cd0: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
3ce0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
3cf0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
3d00: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
3d10: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
3d20: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
3d30: 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  t */.){.  sqlite
3d40: 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
3d50: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29  .  if( argc!=2 )
3d60: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
3d70: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
3d80: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
3d90: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
3da0: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
3db0: 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a  ILENAME\"", 0);.
3dc0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
3dd0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
3de0: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
3df0: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
3e00: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
3e10: 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71  ERROR;.  rc = sq
3e20: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b  lite3_close(db);
3e30: 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
3e40: 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
3e50: 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29  )t1ErrorName(rc)
3e60: 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20  , TCL_STATIC);. 
3e70: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
3e80: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65  }../*.** Impleme
3e90: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 78  ntation of the x
3ea0: 5f 63 6f 61 6c 65 73 63 65 28 29 20 66 75 6e 63  _coalesce() func
3eb0: 74 69 6f 6e 2e 0a 2a 2a 20 52 65 74 75 72 6e 20  tion..** Return 
3ec0: 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
3ed0: 6e 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75  nt non-NULL argu
3ee0: 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ment..*/.static 
3ef0: 76 6f 69 64 20 74 31 5f 69 66 6e 75 6c 6c 46 75  void t1_ifnullFu
3f00: 6e 63 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  nc(.  sqlite3_co
3f10: 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0a  ntext *context,.
3f20: 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 73 71    int argc,.  sq
3f30: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
3f40: 67 76 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  gv.){.  int i;. 
3f50: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63   for(i=0; i<argc
3f60: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
3f70: 53 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d 73 71 6c  SQLITE_NULL!=sql
3f80: 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28  ite3_value_type(
3f90: 61 72 67 76 5b 69 5d 29 20 29 7b 0a 20 20 20 20  argv[i]) ){.    
3fa0: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
3fb0: 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 28  _text(context, (
3fc0: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
3fd0: 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 69 5d  lue_text(argv[i]
3fe0: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ),.          sql
3ff0: 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73  ite3_value_bytes
4000: 28 61 72 67 76 5b 69 5d 29 2c 20 53 51 4c 49 54  (argv[i]), SQLIT
4010: 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  E_TRANSIENT);.  
4020: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
4030: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  .  }.}../*.** Th
4040: 65 73 65 20 61 72 65 20 74 65 73 74 20 66 75 6e  ese are test fun
4050: 63 74 69 6f 6e 73 2e 20 20 20 20 68 65 78 38 28  ctions.    hex8(
4060: 29 20 69 6e 74 65 72 70 72 65 74 73 20 69 74 73  ) interprets its
4070: 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20   argument as.** 
4080: 55 54 46 38 20 61 6e 64 20 72 65 74 75 72 6e 73  UTF8 and returns
4090: 20 61 20 68 65 78 20 65 6e 63 6f 64 69 6e 67 2e   a hex encoding.
40a0: 20 20 68 65 78 31 36 6c 65 28 29 20 69 6e 74 65    hex16le() inte
40b0: 72 70 72 65 74 73 20 69 74 73 20 61 72 67 75 6d  rprets its argum
40c0: 65 6e 74 0a 2a 2a 20 61 73 20 55 54 46 31 36 6c  ent.** as UTF16l
40d0: 65 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20  e and returns a 
40e0: 68 65 78 20 65 6e 63 6f 64 69 6e 67 2e 0a 2a 2f  hex encoding..*/
40f0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 68 65 78  .static void hex
4100: 38 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f  8Func(sqlite3_co
4110: 6e 74 65 78 74 20 2a 70 2c 20 69 6e 74 20 61 72  ntext *p, int ar
4120: 67 63 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  gc, sqlite3_valu
4130: 65 20 2a 2a 61 72 67 76 29 7b 0a 20 20 63 6f 6e  e **argv){.  con
4140: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
4150: 20 2a 7a 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20   *z;.  int i;.  
4160: 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a  char zBuf[200];.
4170: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 61    z = sqlite3_va
4180: 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d  lue_text(argv[0]
4190: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
41a0: 73 69 7a 65 6f 66 28 7a 42 75 66 29 2f 32 20 2d  sizeof(zBuf)/2 -
41b0: 20 32 20 26 26 20 7a 5b 69 5d 3b 20 69 2b 2b 29   2 && z[i]; i++)
41c0: 7b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 26 7a  {.    sprintf(&z
41d0: 42 75 66 5b 69 2a 32 5d 2c 20 22 25 30 32 78 22  Buf[i*2], "%02x"
41e0: 2c 20 7a 5b 69 5d 26 30 78 66 66 29 3b 0a 20 20  , z[i]&0xff);.  
41f0: 7d 0a 20 20 7a 42 75 66 5b 69 2a 32 5d 20 3d 20  }.  zBuf[i*2] = 
4200: 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73  0;.  sqlite3_res
4210: 75 6c 74 5f 74 65 78 74 28 70 2c 20 28 63 68 61  ult_text(p, (cha
4220: 72 2a 29 7a 42 75 66 2c 20 2d 31 2c 20 53 51 4c  r*)zBuf, -1, SQL
4230: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
4240: 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 68 65  }.static void he
4250: 78 31 36 46 75 6e 63 28 73 71 6c 69 74 65 33 5f  x16Func(sqlite3_
4260: 63 6f 6e 74 65 78 74 20 2a 70 2c 20 69 6e 74 20  context *p, int 
4270: 61 72 67 63 2c 20 73 71 6c 69 74 65 33 5f 76 61  argc, sqlite3_va
4280: 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a 20 20 63  lue **argv){.  c
4290: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 73 68  onst unsigned sh
42a0: 6f 72 74 20 69 6e 74 20 2a 7a 3b 0a 20 20 69 6e  ort int *z;.  in
42b0: 74 20 69 3b 0a 20 20 63 68 61 72 20 7a 42 75 66  t i;.  char zBuf
42c0: 5b 34 30 30 5d 3b 0a 20 20 7a 20 3d 20 73 71 6c  [400];.  z = sql
42d0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31  ite3_value_text1
42e0: 36 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 66 6f  6(argv[0]);.  fo
42f0: 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28  r(i=0; i<sizeof(
4300: 7a 42 75 66 29 2f 34 20 2d 20 34 20 26 26 20 7a  zBuf)/4 - 4 && z
4310: 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73  [i]; i++){.    s
4320: 70 72 69 6e 74 66 28 26 7a 42 75 66 5b 69 2a 34  printf(&zBuf[i*4
4330: 5d 2c 20 22 25 30 34 78 22 2c 20 7a 5b 69 5d 26  ], "%04x", z[i]&
4340: 30 78 66 66 29 3b 0a 20 20 7d 0a 20 20 7a 42 75  0xff);.  }.  zBu
4350: 66 5b 69 2a 34 5d 20 3d 20 30 3b 0a 20 20 73 71  f[i*4] = 0;.  sq
4360: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
4370: 74 28 70 2c 20 28 63 68 61 72 2a 29 7a 42 75 66  t(p, (char*)zBuf
4380: 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41  , -1, SQLITE_TRA
4390: 4e 53 49 45 4e 54 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  NSIENT);.}../*.*
43a0: 2a 20 41 20 73 74 72 75 63 74 75 72 65 20 69 6e  * A structure in
43b0: 74 6f 20 77 68 69 63 68 20 74 6f 20 61 63 63 75  to which to accu
43c0: 6d 75 6c 61 74 65 20 74 65 78 74 2e 0a 2a 2f 0a  mulate text..*/.
43d0: 73 74 72 75 63 74 20 64 73 74 72 20 7b 0a 20 20  struct dstr {.  
43e0: 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 2f 2a 20  int nAlloc;  /* 
43f0: 53 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20  Space allocated 
4400: 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20  */.  int nUsed; 
4410: 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20    /* Space used 
4420: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20  */.  char *z;   
4430: 20 20 2f 2a 20 54 68 65 20 73 70 61 63 65 20 2a    /* The space *
4440: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 65  /.};../*.** Appe
4450: 6e 64 20 74 65 78 74 20 74 6f 20 61 20 64 73 74  nd text to a dst
4460: 72 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  r.*/.static void
4470: 20 64 73 74 72 41 70 70 65 6e 64 28 73 74 72 75   dstrAppend(stru
4480: 63 74 20 64 73 74 72 20 2a 70 2c 20 63 6f 6e 73  ct dstr *p, cons
4490: 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 64  t char *z, int d
44a0: 69 76 69 64 65 72 29 7b 0a 20 20 69 6e 74 20 6e  ivider){.  int n
44b0: 20 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20   = strlen(z);.  
44c0: 69 66 28 20 70 2d 3e 6e 55 73 65 64 20 2b 20 6e  if( p->nUsed + n
44d0: 20 2b 20 32 20 3e 20 70 2d 3e 6e 41 6c 6c 6f 63   + 2 > p->nAlloc
44e0: 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   ){.    char *zN
44f0: 65 77 3b 0a 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f  ew;.    p->nAllo
4500: 63 20 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 2a 32 20  c = p->nAlloc*2 
4510: 2b 20 6e 20 2b 20 32 30 30 3b 0a 20 20 20 20 7a  + n + 200;.    z
4520: 4e 65 77 20 3d 20 73 71 6c 69 74 65 52 65 61 6c  New = sqliteReal
4530: 6c 6f 63 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c  loc(p->z, p->nAl
4540: 6c 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 7a 4e  loc);.    if( zN
4550: 65 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ew==0 ){.      s
4560: 71 6c 69 74 65 46 72 65 65 28 70 2d 3e 7a 29 3b  qliteFree(p->z);
4570: 0a 20 20 20 20 20 20 6d 65 6d 73 65 74 28 70 2c  .      memset(p,
4580: 20 30 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b   0, sizeof(*p));
4590: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  .      return;. 
45a0: 20 20 20 7d 0a 20 20 20 20 70 2d 3e 7a 20 3d 20     }.    p->z = 
45b0: 7a 4e 65 77 3b 0a 20 20 7d 0a 20 20 69 66 28 20  zNew;.  }.  if( 
45c0: 64 69 76 69 64 65 72 20 26 26 20 70 2d 3e 6e 55  divider && p->nU
45d0: 73 65 64 3e 30 20 29 7b 0a 20 20 20 20 70 2d 3e  sed>0 ){.    p->
45e0: 7a 5b 70 2d 3e 6e 55 73 65 64 2b 2b 5d 20 3d 20  z[p->nUsed++] = 
45f0: 64 69 76 69 64 65 72 3b 0a 20 20 7d 0a 20 20 6d  divider;.  }.  m
4600: 65 6d 63 70 79 28 26 70 2d 3e 7a 5b 70 2d 3e 6e  emcpy(&p->z[p->n
4610: 55 73 65 64 5d 2c 20 7a 2c 20 6e 2b 31 29 3b 0a  Used], z, n+1);.
4620: 20 20 70 2d 3e 6e 55 73 65 64 20 2b 3d 20 6e 3b    p->nUsed += n;
4630: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  .}../*.** Invoke
4640: 64 20 66 6f 72 20 65 61 63 68 20 63 61 6c 6c 62  d for each callb
4650: 61 63 6b 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ack from sqlite3
4660: 45 78 65 63 46 75 6e 63 0a 2a 2f 0a 73 74 61 74  ExecFunc.*/.stat
4670: 69 63 20 69 6e 74 20 65 78 65 63 46 75 6e 63 43  ic int execFuncC
4680: 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 44  allback(void *pD
4690: 61 74 61 2c 20 69 6e 74 20 61 72 67 63 2c 20 63  ata, int argc, c
46a0: 68 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61 72  har **argv, char
46b0: 20 2a 2a 4e 6f 74 55 73 65 64 29 7b 0a 20 20 73   **NotUsed){.  s
46c0: 74 72 75 63 74 20 64 73 74 72 20 2a 70 20 3d 20  truct dstr *p = 
46d0: 28 73 74 72 75 63 74 20 64 73 74 72 2a 29 70 44  (struct dstr*)pD
46e0: 61 74 61 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  ata;.  int i;.  
46f0: 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b  for(i=0; i<argc;
4700: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 61   i++){.    if( a
4710: 72 67 76 5b 69 5d 3d 3d 30 20 29 7b 0a 20 20 20  rgv[i]==0 ){.   
4720: 20 20 20 64 73 74 72 41 70 70 65 6e 64 28 70 2c     dstrAppend(p,
4730: 20 22 4e 55 4c 4c 22 2c 20 27 20 27 29 3b 0a 20   "NULL", ' ');. 
4740: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4750: 64 73 74 72 41 70 70 65 6e 64 28 70 2c 20 61 72  dstrAppend(p, ar
4760: 67 76 5b 69 5d 2c 20 27 20 27 29 3b 0a 20 20 20  gv[i], ' ');.   
4770: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
4780: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c  0;.}../*.** Impl
4790: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
47a0: 65 20 78 5f 73 71 6c 69 74 65 5f 65 78 65 63 28  e x_sqlite_exec(
47b0: 29 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 69  ) function.  Thi
47c0: 73 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73  s function takes
47d0: 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 61 72 67  .** a single arg
47e0: 75 6d 65 6e 74 20 61 6e 64 20 61 74 74 65 6d 70  ument and attemp
47f0: 74 73 20 74 6f 20 65 78 65 63 75 74 65 20 74 68  ts to execute th
4800: 61 74 20 61 72 67 75 6d 65 6e 74 20 61 73 20 53  at argument as S
4810: 51 4c 20 63 6f 64 65 2e 0a 2a 2a 20 54 68 69 73  QL code..** This
4820: 20 69 73 20 69 6c 6c 65 67 61 6c 20 61 6e 64 20   is illegal and 
4830: 73 68 6f 75 6c 64 20 73 65 74 20 74 68 65 20 53  should set the S
4840: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 66 6c 61  QLITE_MISUSE fla
4850: 67 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  g on the databas
4860: 65 2e 0a 2a 2a 0a 2a 2a 20 32 30 30 34 2d 4a 61  e..**.** 2004-Ja
4870: 6e 2d 30 37 3a 20 20 57 65 20 68 61 76 65 20 63  n-07:  We have c
4880: 68 61 6e 67 65 64 20 74 68 69 73 20 74 6f 20 6d  hanged this to m
4890: 61 6b 65 20 69 74 20 6c 65 67 61 6c 20 74 6f 20  ake it legal to 
48a0: 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 78 65  call sqlite3_exe
48b0: 63 28 29 0a 2a 2a 20 66 72 6f 6d 20 77 69 74 68  c().** from with
48c0: 69 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 63 61  in a function ca
48d0: 6c 6c 2e 20 20 0a 2a 2a 20 0a 2a 2a 20 54 68 69  ll.  .** .** Thi
48e0: 73 20 72 6f 75 74 69 6e 65 20 73 69 6d 75 6c 61  s routine simula
48f0: 74 65 73 20 74 68 65 20 65 66 66 65 63 74 20 6f  tes the effect o
4900: 66 20 68 61 76 69 6e 67 20 74 77 6f 20 74 68 72  f having two thr
4910: 65 61 64 73 20 61 74 74 65 6d 70 74 20 74 6f 0a  eads attempt to.
4920: 2a 2a 20 75 73 65 20 74 68 65 20 73 61 6d 65 20  ** use the same 
4930: 64 61 74 61 62 61 73 65 20 61 74 20 74 68 65 20  database at the 
4940: 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2f 0a 73 74  same time..*/.st
4950: 61 74 69 63 20 76 6f 69 64 20 73 71 6c 69 74 65  atic void sqlite
4960: 33 45 78 65 63 46 75 6e 63 28 0a 20 20 73 71 6c  3ExecFunc(.  sql
4970: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f  ite3_context *co
4980: 6e 74 65 78 74 2c 20 0a 20 20 69 6e 74 20 61 72  ntext, .  int ar
4990: 67 63 2c 20 20 0a 20 20 73 71 6c 69 74 65 33 5f  gc,  .  sqlite3_
49a0: 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a  value **argv.){.
49b0: 20 20 73 74 72 75 63 74 20 64 73 74 72 20 78 3b    struct dstr x;
49c0: 0a 20 20 6d 65 6d 73 65 74 28 26 78 2c 20 30 2c  .  memset(&x, 0,
49d0: 20 73 69 7a 65 6f 66 28 78 29 29 3b 0a 20 20 28   sizeof(x));.  (
49e0: 76 6f 69 64 29 73 71 6c 69 74 65 33 5f 65 78 65  void)sqlite3_exe
49f0: 63 28 28 73 71 6c 69 74 65 33 2a 29 73 71 6c 69  c((sqlite3*)sqli
4a00: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 63 6f  te3_user_data(co
4a10: 6e 74 65 78 74 29 2c 0a 20 20 20 20 20 20 28 63  ntext),.      (c
4a20: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
4a30: 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29  ue_text(argv[0])
4a40: 2c 0a 20 20 20 20 20 20 65 78 65 63 46 75 6e 63  ,.      execFunc
4a50: 43 61 6c 6c 62 61 63 6b 2c 20 26 78 2c 20 30 29  Callback, &x, 0)
4a60: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75  ;.  sqlite3_resu
4a70: 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  lt_text(context,
4a80: 20 78 2e 7a 2c 20 78 2e 6e 55 73 65 64 2c 20 53   x.z, x.nUsed, S
4a90: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
4aa0: 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 78  ;.  sqliteFree(x
4ab0: 2e 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d  .z);.}../*.** Im
4ac0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
4ad0: 74 6b 74 32 32 31 33 66 75 6e 63 28 29 2c 20 61  tkt2213func(), a
4ae0: 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e   scalar function
4af0: 20 74 68 61 74 20 74 61 6b 65 73 20 65 78 61 63   that takes exac
4b00: 74 6c 79 0a 2a 2a 20 6f 6e 65 20 61 72 67 75 6d  tly.** one argum
4b10: 65 6e 74 2e 20 49 74 20 68 61 73 20 74 77 6f 20  ent. It has two 
4b20: 69 6e 74 65 72 65 73 74 69 6e 67 20 66 65 61 74  interesting feat
4b30: 75 72 65 73 3a 0a 2a 2a 0a 2a 2a 20 2a 20 49 74  ures:.**.** * It
4b40: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 5f 76   calls sqlite3_v
4b50: 61 6c 75 65 5f 74 65 78 74 28 29 20 33 20 74 69  alue_text() 3 ti
4b60: 6d 65 73 20 6f 6e 20 74 68 65 20 61 72 67 75 6d  mes on the argum
4b70: 65 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ent sqlite3_valu
4b80: 65 2a 2e 0a 2a 2a 20 20 20 49 66 20 74 68 65 20  e*..**   If the 
4b90: 74 68 72 65 65 20 70 6f 69 6e 74 65 72 73 20 72  three pointers r
4ba0: 65 74 75 72 6e 65 64 20 61 72 65 20 6e 6f 74 20  eturned are not 
4bb0: 74 68 65 20 73 61 6d 65 20 61 6e 20 53 51 4c 20  the same an SQL 
4bc0: 65 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 2e  error is raised.
4bd0: 0a 2a 2a 0a 2a 2a 20 2a 20 4f 74 68 65 72 77 69  .**.** * Otherwi
4be0: 73 65 20 69 74 20 72 65 74 75 72 6e 73 20 61 20  se it returns a 
4bf0: 63 6f 70 79 20 6f 66 20 74 68 65 20 74 65 78 74  copy of the text
4c00: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
4c10: 6f 66 20 69 74 27 73 20 0a 2a 2a 20 20 20 61 72  of it's .**   ar
4c20: 67 75 6d 65 6e 74 20 69 6e 20 73 75 63 68 20 61  gument in such a
4c30: 20 77 61 79 20 61 73 20 74 68 65 20 56 44 42 45   way as the VDBE
4c40: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
4c50: 69 73 20 61 20 4d 65 6d 2a 20 63 65 6c 6c 20 0a  is a Mem* cell .
4c60: 2a 2a 20 20 20 77 69 74 68 20 74 68 65 20 4d 45  **   with the ME
4c70: 4d 5f 54 65 72 6d 20 66 6c 61 67 20 63 6c 65 61  M_Term flag clea
4c80: 72 2e 20 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74  r. .**.** Ticket
4c90: 20 23 32 32 31 33 20 63 61 6e 20 74 68 65 72 65   #2213 can there
4ca0: 66 6f 72 65 20 62 65 20 74 65 73 74 65 64 20 62  fore be tested b
4cb0: 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  y evaluating the
4cc0: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 53 51   following.** SQ
4cd0: 4c 20 65 78 70 72 65 73 73 69 6f 6e 3a 0a 2a 2a  L expression:.**
4ce0: 0a 2a 2a 20 20 20 74 6b 74 32 32 31 33 66 75 6e  .**   tkt2213fun
4cf0: 63 28 74 6b 74 32 32 31 33 66 75 6e 63 28 27 61  c(tkt2213func('a
4d00: 20 73 74 72 69 6e 67 27 29 29 3b 0a 2a 2f 0a 73   string'));.*/.s
4d10: 74 61 74 69 63 20 76 6f 69 64 20 74 6b 74 32 32  tatic void tkt22
4d20: 31 33 46 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71  13Function(.  sq
4d30: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
4d40: 6f 6e 74 65 78 74 2c 20 0a 20 20 69 6e 74 20 61  ontext, .  int a
4d50: 72 67 63 2c 20 20 0a 20 20 73 71 6c 69 74 65 33  rgc,  .  sqlite3
4d60: 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b  _value **argv.){
4d70: 0a 20 20 69 6e 74 20 6e 54 65 78 74 3b 0a 20 20  .  int nText;.  
4d80: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 6f  unsigned char co
4d90: 6e 73 74 20 2a 7a 54 65 78 74 31 3b 0a 20 20 75  nst *zText1;.  u
4da0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 6f 6e  nsigned char con
4db0: 73 74 20 2a 7a 54 65 78 74 32 3b 0a 20 20 75 6e  st *zText2;.  un
4dc0: 73 69 67 6e 65 64 20 63 68 61 72 20 63 6f 6e 73  signed char cons
4dd0: 74 20 2a 7a 54 65 78 74 33 3b 0a 0a 20 20 6e 54  t *zText3;..  nT
4de0: 65 78 74 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  ext = sqlite3_va
4df0: 6c 75 65 5f 62 79 74 65 73 28 61 72 67 76 5b 30  lue_bytes(argv[0
4e00: 5d 29 3b 0a 20 20 7a 54 65 78 74 31 20 3d 20 73  ]);.  zText1 = s
4e10: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
4e20: 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 7a 54  t(argv[0]);.  zT
4e30: 65 78 74 32 20 3d 20 73 71 6c 69 74 65 33 5f 76  ext2 = sqlite3_v
4e40: 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30  alue_text(argv[0
4e50: 5d 29 3b 0a 20 20 7a 54 65 78 74 33 20 3d 20 73  ]);.  zText3 = s
4e60: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
4e70: 74 28 61 72 67 76 5b 30 5d 29 3b 0a 0a 20 20 69  t(argv[0]);..  i
4e80: 66 28 20 7a 54 65 78 74 31 21 3d 7a 54 65 78 74  f( zText1!=zText
4e90: 32 20 7c 7c 20 7a 54 65 78 74 32 21 3d 7a 54 65  2 || zText2!=zTe
4ea0: 78 74 33 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  xt3 ){.    sqlit
4eb0: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
4ec0: 63 6f 6e 74 65 78 74 2c 20 22 74 6b 74 32 32 31  context, "tkt221
4ed0: 33 20 69 73 20 6e 6f 74 20 66 69 78 65 64 22 2c  3 is not fixed",
4ee0: 20 2d 31 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   -1);.  }else{. 
4ef0: 20 20 20 63 68 61 72 20 2a 7a 43 6f 70 79 20 3d     char *zCopy =
4f00: 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33   (char *)sqlite3
4f10: 5f 6d 61 6c 6c 6f 63 28 6e 54 65 78 74 29 3b 0a  _malloc(nText);.
4f20: 20 20 20 20 6d 65 6d 63 70 79 28 7a 43 6f 70 79      memcpy(zCopy
4f30: 2c 20 7a 54 65 78 74 31 2c 20 6e 54 65 78 74 29  , zText1, nText)
4f40: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  ;.    sqlite3_re
4f50: 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78  sult_text(contex
4f60: 74 2c 20 7a 43 6f 70 79 2c 20 6e 54 65 78 74 2c  t, zCopy, nText,
4f70: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a   sqlite3_free);.
4f80: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61    }.}../*.** Usa
4f90: 67 65 3a 20 20 73 71 6c 69 74 65 5f 74 65 73 74  ge:  sqlite_test
4fa0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
4fb0: 20 44 42 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 74   DB.**.** Call t
4fc0: 68 65 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  he sqlite3_creat
4fd0: 65 5f 66 75 6e 63 74 69 6f 6e 20 41 50 49 20 6f  e_function API o
4fe0: 6e 20 74 68 65 20 67 69 76 65 6e 20 64 61 74 61  n the given data
4ff0: 62 61 73 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  base in order.**
5000: 20 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e   to create a fun
5010: 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22 78 5f 63  ction named "x_c
5020: 6f 61 6c 65 73 63 65 22 2e 20 20 54 68 69 73 20  oalesce".  This 
5030: 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 74 68  function does th
5040: 65 20 73 61 6d 65 20 74 68 69 6e 67 0a 2a 2a 20  e same thing.** 
5050: 61 73 20 74 68 65 20 22 63 6f 61 6c 65 73 63 65  as the "coalesce
5060: 22 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 69  " function.  Thi
5070: 73 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f 20  s function also 
5080: 72 65 67 69 73 74 65 72 73 20 61 6e 20 53 51 4c  registers an SQL
5090: 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6e 61 6d   function.** nam
50a0: 65 64 20 22 78 5f 73 71 6c 69 74 65 5f 65 78 65  ed "x_sqlite_exe
50b0: 63 22 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20  c" that invokes 
50c0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 20  sqlite3_exec(). 
50d0: 20 49 6e 76 6f 6b 69 6e 67 20 73 71 6c 69 74 65   Invoking sqlite
50e0: 33 5f 65 78 65 63 28 29 0a 2a 2a 20 69 6e 20 74  3_exec().** in t
50f0: 68 69 73 20 77 61 79 20 69 73 20 69 6c 6c 65 67  his way is illeg
5100: 61 6c 20 72 65 63 75 72 73 69 6f 6e 20 61 6e 64  al recursion and
5110: 20 73 68 6f 75 6c 64 20 72 61 69 73 65 20 61 6e   should raise an
5120: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65   SQLITE_MISUSE e
5130: 72 72 6f 72 2e 0a 2a 2a 20 54 68 65 20 65 66 66  rror..** The eff
5140: 65 63 74 20 69 73 20 73 69 6d 69 6c 61 72 20 74  ect is similar t
5150: 6f 20 74 72 79 69 6e 67 20 74 6f 20 75 73 65 20  o trying to use 
5160: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
5170: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 72 6f  e connection fro
5180: 6d 0a 2a 2a 20 74 77 6f 20 74 68 72 65 61 64 73  m.** two threads
5190: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
51a0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6f 72 69  e..**.** The ori
51b0: 67 69 6e 61 6c 20 6d 6f 74 69 76 61 74 69 6f 6e  ginal motivation
51c0: 20 66 6f 72 20 74 68 69 73 20 72 6f 75 74 69 6e   for this routin
51d0: 65 20 77 61 73 20 74 6f 20 62 65 20 61 62 6c 65  e was to be able
51e0: 20 74 6f 20 63 61 6c 6c 20 74 68 65 0a 2a 2a 20   to call the.** 
51f0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
5200: 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  unction function
5210: 20 77 68 69 6c 65 20 61 20 71 75 65 72 79 20 69   while a query i
5220: 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 69 6e  s in progress in
5230: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 74 65 73   order.** to tes
5240: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 49 53  t the SQLITE_MIS
5250: 55 53 45 20 64 65 74 65 63 74 69 6f 6e 20 6c 6f  USE detection lo
5260: 67 69 63 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  gic..*/.static i
5270: 6e 74 20 74 65 73 74 5f 63 72 65 61 74 65 5f 66  nt test_create_f
5280: 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20  unction(.  void 
5290: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
52a0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
52b0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
52c0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
52d0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
52e0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
52f0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
5300: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
5310: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
5320: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
5330: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
5340: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
5350: 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71  {.  int rc;.  sq
5360: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 65 78 74  lite3 *db;.  ext
5370: 65 72 6e 20 76 6f 69 64 20 4d 64 35 5f 52 65 67  ern void Md5_Reg
5380: 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b  ister(sqlite3*);
5390: 0a 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20  ..  if( argc!=2 
53a0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
53b0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
53c0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
53d0: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
53e0: 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20  gv[0],.       " 
53f0: 44 42 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  DB\"", 0);.    r
5400: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
5410: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
5420: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
5430: 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
5440: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
5450: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
5460: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
5470: 28 64 62 2c 20 22 78 5f 63 6f 61 6c 65 73 63 65  (db, "x_coalesce
5480: 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 41 4e  ", -1, SQLITE_AN
5490: 59 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 74  Y, 0, .        t
54a0: 31 5f 69 66 6e 75 6c 6c 46 75 6e 63 2c 20 30 2c  1_ifnullFunc, 0,
54b0: 20 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53   0);.  if( rc==S
54c0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
54d0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
54e0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
54f0: 20 22 68 65 78 38 22 2c 20 31 2c 20 53 51 4c 49   "hex8", 1, SQLI
5500: 54 45 5f 41 4e 59 2c 20 30 2c 20 0a 20 20 20 20  TE_ANY, 0, .    
5510: 20 20 20 20 20 20 68 65 78 38 46 75 6e 63 2c 20        hex8Func, 
5520: 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28  0, 0);.  }.  if(
5530: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
5540: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
5550: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
5560: 6f 6e 28 64 62 2c 20 22 68 65 78 31 36 22 2c 20  on(db, "hex16", 
5570: 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30  1, SQLITE_ANY, 0
5580: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 68 65 78  , .          hex
5590: 31 36 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20  16Func, 0, 0);. 
55a0: 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
55b0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
55c0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
55d0: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22  e_function(db, "
55e0: 74 6b 74 32 32 31 33 66 75 6e 63 22 2c 20 31 2c  tkt2213func", 1,
55f0: 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c 20   SQLITE_ANY, 0, 
5600: 0a 20 20 20 20 20 20 20 20 20 20 74 6b 74 32 32  .          tkt22
5610: 31 33 46 75 6e 63 74 69 6f 6e 2c 20 30 2c 20 30  13Function, 0, 0
5620: 29 3b 0a 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20  );.  }..#ifndef 
5630: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
5640: 36 0a 20 20 2f 2a 20 55 73 65 20 74 68 65 20 73  6.  /* Use the s
5650: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
5660: 6e 63 74 69 6f 6e 31 36 28 29 20 41 50 49 20 68  nction16() API h
5670: 65 72 65 2e 20 4d 61 69 6e 6c 79 20 66 6f 72 20  ere. Mainly for 
5680: 66 75 6e 2c 20 62 75 74 20 61 6c 73 6f 20 0a 20  fun, but also . 
5690: 20 2a 2a 20 62 65 63 61 75 73 65 20 69 74 20 69   ** because it i
56a0: 73 20 6e 6f 74 20 74 65 73 74 65 64 20 61 6e 79  s not tested any
56b0: 77 68 65 72 65 20 65 6c 73 65 2e 20 2a 2f 0a 20  where else. */. 
56c0: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
56d0: 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  OK ){.    sqlite
56e0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 23  3_value *pVal;.#
56f0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
5700: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 73 71  DEBUG.    if( sq
5710: 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69  lite3_iMallocFai
5720: 6c 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  l>0 ){.      sql
5730: 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c  ite3_iMallocFail
5740: 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ++;.    }.#endif
5750: 20 0a 20 20 20 20 70 56 61 6c 20 3d 20 73 71 6c   .    pVal = sql
5760: 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a  ite3ValueNew();.
5770: 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65      sqlite3Value
5780: 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c  SetStr(pVal, -1,
5790: 20 22 78 5f 73 71 6c 69 74 65 5f 65 78 65 63 22   "x_sqlite_exec"
57a0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  , SQLITE_UTF8, S
57b0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
57c0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
57d0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31  create_function1
57e0: 36 28 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20  6(db, .         
57f0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75       sqlite3Valu
5800: 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49  eText(pVal, SQLI
5810: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 29 2c  TE_UTF16NATIVE),
5820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31  .              1
5830: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 2c 20  , SQLITE_UTF16, 
5840: 64 62 2c 20 73 71 6c 69 74 65 33 45 78 65 63 46  db, sqlite3ExecF
5850: 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  unc, 0, 0);.    
5860: 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
5870: 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 23 65 6e 64  (pVal);.  }.#end
5880: 69 66 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  if..  if( sqlite
5890: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
58a0: 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72  erp, db, rc) ) r
58b0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
58c0: 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
58d0: 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
58e0: 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29  )t1ErrorName(rc)
58f0: 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
5900: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
5910: 52 6f 75 74 69 6e 65 73 20 74 6f 20 69 6d 70 6c  Routines to impl
5920: 65 6d 65 6e 74 20 74 68 65 20 78 5f 63 6f 75 6e  ement the x_coun
5930: 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66 75  t() aggregate fu
5940: 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 78 5f  nction..**.** x_
5950: 63 6f 75 6e 74 28 29 20 63 6f 75 6e 74 73 20 74  count() counts t
5960: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  he number of non
5970: 2d 6e 75 6c 6c 20 61 72 67 75 6d 65 6e 74 73 2e  -null arguments.
5980: 20 20 42 75 74 20 74 68 65 72 65 20 61 72 65 0a    But there are.
5990: 2a 2a 20 73 6f 6d 65 20 74 77 69 73 74 73 20 66  ** some twists f
59a0: 6f 72 20 74 65 73 74 69 6e 67 20 70 75 72 70 6f  or testing purpo
59b0: 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ses..**.** If th
59c0: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 5f  e argument to x_
59d0: 63 6f 75 6e 74 28 29 20 69 73 20 34 30 20 74 68  count() is 40 th
59e0: 65 6e 20 61 20 55 54 46 2d 38 20 65 72 72 6f 72  en a UTF-8 error
59f0: 20 69 73 20 72 65 70 6f 72 74 65 64 0a 2a 2a 20   is reported.** 
5a00: 6f 6e 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  on the step func
5a10: 74 69 6f 6e 2e 20 20 49 66 20 78 5f 63 6f 75 6e  tion.  If x_coun
5a20: 74 28 34 31 29 20 69 73 20 73 65 65 6e 2c 20 74  t(41) is seen, t
5a30: 68 65 6e 20 61 20 55 54 46 2d 31 36 20 65 72 72  hen a UTF-16 err
5a40: 6f 72 0a 2a 2a 20 69 73 20 72 65 70 6f 72 74 65  or.** is reporte
5a50: 64 20 6f 6e 20 74 68 65 20 73 74 65 70 20 66 75  d on the step fu
5a60: 6e 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20  nction.  If the 
5a70: 74 6f 74 61 6c 20 63 6f 75 6e 74 20 69 73 20 34  total count is 4
5a80: 32 2c 20 74 68 65 6e 0a 2a 2a 20 61 20 55 54 46  2, then.** a UTF
5a90: 2d 38 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  -8 error is repo
5aa0: 72 74 65 64 20 6f 6e 20 74 68 65 20 66 69 6e 61  rted on the fina
5ab0: 6c 69 7a 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  lize function..*
5ac0: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
5ad0: 20 74 31 43 6f 75 6e 74 43 74 78 20 74 31 43 6f   t1CountCtx t1Co
5ae0: 75 6e 74 43 74 78 3b 0a 73 74 72 75 63 74 20 74  untCtx;.struct t
5af0: 31 43 6f 75 6e 74 43 74 78 20 7b 0a 20 20 69 6e  1CountCtx {.  in
5b00: 74 20 6e 3b 0a 7d 3b 0a 73 74 61 74 69 63 20 76  t n;.};.static v
5b10: 6f 69 64 20 74 31 43 6f 75 6e 74 53 74 65 70 28  oid t1CountStep(
5b20: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
5b30: 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0a 20 20 69  xt *context,.  i
5b40: 6e 74 20 61 72 67 63 2c 0a 20 20 73 71 6c 69 74  nt argc,.  sqlit
5b50: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a  e3_value **argv.
5b60: 29 7b 0a 20 20 74 31 43 6f 75 6e 74 43 74 78 20  ){.  t1CountCtx 
5b70: 2a 70 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74 65  *p;.  p = sqlite
5b80: 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74  3_aggregate_cont
5b90: 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 73 69 7a  ext(context, siz
5ba0: 65 6f 66 28 2a 70 29 29 3b 0a 20 20 69 66 28 20  eof(*p));.  if( 
5bb0: 28 61 72 67 63 3d 3d 30 20 7c 7c 20 53 51 4c 49  (argc==0 || SQLI
5bc0: 54 45 5f 4e 55 4c 4c 21 3d 73 71 6c 69 74 65 33  TE_NULL!=sqlite3
5bd0: 5f 76 61 6c 75 65 5f 74 79 70 65 28 61 72 67 76  _value_type(argv
5be0: 5b 30 5d 29 20 29 20 26 26 20 70 20 29 7b 0a 20  [0]) ) && p ){. 
5bf0: 20 20 20 70 2d 3e 6e 2b 2b 3b 0a 20 20 7d 0a 20     p->n++;.  }. 
5c00: 20 69 66 28 20 61 72 67 63 3e 30 20 29 7b 0a 20   if( argc>0 ){. 
5c10: 20 20 20 69 6e 74 20 76 20 3d 20 73 71 6c 69 74     int v = sqlit
5c20: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72 67  e3_value_int(arg
5c30: 76 5b 30 5d 29 3b 0a 20 20 20 20 69 66 28 20 76  v[0]);.    if( v
5c40: 3d 3d 34 30 20 29 7b 0a 20 20 20 20 20 20 73 71  ==40 ){.      sq
5c50: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
5c60: 6f 72 28 63 6f 6e 74 65 78 74 2c 20 22 76 61 6c  or(context, "val
5c70: 75 65 20 6f 66 20 34 30 20 68 61 6e 64 65 64 20  ue of 40 handed 
5c80: 74 6f 20 78 5f 63 6f 75 6e 74 22 2c 20 2d 31 29  to x_count", -1)
5c90: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
5ca0: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 20 20  _OMIT_UTF16.    
5cb0: 7d 65 6c 73 65 20 69 66 28 20 76 3d 3d 34 31 20  }else if( v==41 
5cc0: 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  ){.      const c
5cd0: 68 61 72 20 7a 55 74 66 31 36 45 72 72 4d 73 67  har zUtf16ErrMsg
5ce0: 5b 5d 20 3d 20 7b 20 30 2c 20 30 78 36 31 2c 20  [] = { 0, 0x61, 
5cf0: 30 2c 20 30 78 36 32 2c 20 30 2c 20 30 78 36 33  0, 0x62, 0, 0x63
5d00: 2c 20 30 2c 20 30 2c 20 30 7d 3b 0a 20 20 20 20  , 0, 0, 0};.    
5d10: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
5d20: 5f 65 72 72 6f 72 31 36 28 63 6f 6e 74 65 78 74  _error16(context
5d30: 2c 20 26 7a 55 74 66 31 36 45 72 72 4d 73 67 5b  , &zUtf16ErrMsg[
5d40: 31 2d 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  1-SQLITE_BIGENDI
5d50: 41 4e 5d 2c 20 2d 31 29 3b 0a 23 65 6e 64 69 66  AN], -1);.#endif
5d60: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 20 20 20 0a  .    }.  }.}   .
5d70: 73 74 61 74 69 63 20 76 6f 69 64 20 74 31 43 6f  static void t1Co
5d80: 75 6e 74 46 69 6e 61 6c 69 7a 65 28 73 71 6c 69  untFinalize(sqli
5d90: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
5da0: 74 65 78 74 29 7b 0a 20 20 74 31 43 6f 75 6e 74  text){.  t1Count
5db0: 43 74 78 20 2a 70 3b 0a 20 20 70 20 3d 20 73 71  Ctx *p;.  p = sq
5dc0: 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f  lite3_aggregate_
5dd0: 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  context(context,
5de0: 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 20 20   sizeof(*p));.  
5df0: 69 66 28 20 70 20 29 7b 0a 20 20 20 20 69 66 28  if( p ){.    if(
5e00: 20 70 2d 3e 6e 3d 3d 34 32 20 29 7b 0a 20 20 20   p->n==42 ){.   
5e10: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
5e20: 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c  t_error(context,
5e30: 20 22 78 5f 63 6f 75 6e 74 20 74 6f 74 61 6c 73   "x_count totals
5e40: 20 74 6f 20 34 32 22 2c 20 2d 31 29 3b 0a 20 20   to 42", -1);.  
5e50: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
5e60: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
5e70: 74 28 63 6f 6e 74 65 78 74 2c 20 70 20 3f 20 70  t(context, p ? p
5e80: 2d 3e 6e 20 3a 20 30 29 3b 0a 20 20 20 20 7d 0a  ->n : 0);.    }.
5e90: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61    }.}../*.** Usa
5ea0: 67 65 3a 20 20 73 71 6c 69 74 65 5f 74 65 73 74  ge:  sqlite_test
5eb0: 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74  _create_aggregat
5ec0: 65 20 44 42 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20  e DB.**.** Call 
5ed0: 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72 65 61  the sqlite3_crea
5ee0: 74 65 5f 66 75 6e 63 74 69 6f 6e 20 41 50 49 20  te_function API 
5ef0: 6f 6e 20 74 68 65 20 67 69 76 65 6e 20 64 61 74  on the given dat
5f00: 61 62 61 73 65 20 69 6e 20 6f 72 64 65 72 0a 2a  abase in order.*
5f10: 2a 20 74 6f 20 63 72 65 61 74 65 20 61 20 66 75  * to create a fu
5f20: 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22 78 5f  nction named "x_
5f30: 63 6f 75 6e 74 22 2e 20 20 54 68 69 73 20 66 75  count".  This fu
5f40: 6e 63 74 69 6f 6e 20 64 6f 65 73 20 74 68 65 20  nction does the 
5f50: 73 61 6d 65 20 74 68 69 6e 67 0a 2a 2a 20 61 73  same thing.** as
5f60: 20 74 68 65 20 22 6d 64 35 73 75 6d 22 20 66 75   the "md5sum" fu
5f70: 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  nction..**.** Th
5f80: 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f 74 69 76  e original motiv
5f90: 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 72  ation for this r
5fa0: 6f 75 74 69 6e 65 20 77 61 73 20 74 6f 20 62 65  outine was to be
5fb0: 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c 20 74 68   able to call th
5fc0: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 72 65  e.** sqlite3_cre
5fd0: 61 74 65 5f 61 67 67 72 65 67 61 74 65 20 66 75  ate_aggregate fu
5fe0: 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20 61 20 71  nction while a q
5ff0: 75 65 72 79 20 69 73 20 69 6e 20 70 72 6f 67 72  uery is in progr
6000: 65 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20  ess in order.** 
6010: 74 6f 20 74 65 73 74 20 74 68 65 20 53 51 4c 49  to test the SQLI
6020: 54 45 5f 4d 49 53 55 53 45 20 64 65 74 65 63 74  TE_MISUSE detect
6030: 69 6f 6e 20 6c 6f 67 69 63 2e 20 20 53 65 65 20  ion logic.  See 
6040: 6d 69 73 75 73 65 2e 74 65 73 74 2e 0a 2a 2a 0a  misuse.test..**.
6050: 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
6060: 77 61 73 20 6c 61 74 65 72 20 65 78 74 65 6e 64  was later extend
6070: 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20 75  ed to test the u
6080: 73 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 72 65  se of sqlite3_re
6090: 73 75 6c 74 5f 65 72 72 6f 72 28 29 0a 2a 2a 20  sult_error().** 
60a0: 77 69 74 68 69 6e 20 61 67 67 72 65 67 61 74 65  within aggregate
60b0: 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73   functions..*/.s
60c0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
60d0: 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 28  reate_aggregate(
60e0: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
60f0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
6100: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
6110: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
6120: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
6130: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
6140: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
6150: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
6160: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
6170: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
6180: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
6190: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
61a0: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  ent */.){.  sqli
61b0: 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  te3 *db;.  int r
61c0: 63 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32  c;.  if( argc!=2
61d0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
61e0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
61f0: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
6200: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
6210: 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22  rgv[0],.       "
6220: 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29   FILENAME\"", 0)
6230: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
6240: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
6250: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
6260: 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
6270: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
6280: 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20  L_ERROR;.  rc = 
6290: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
62a0: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78 5f 63  unction(db, "x_c
62b0: 6f 75 6e 74 22 2c 20 30 2c 20 53 51 4c 49 54 45  ount", 0, SQLITE
62c0: 5f 55 54 46 38 2c 20 30 2c 20 30 2c 0a 20 20 20  _UTF8, 0, 0,.   
62d0: 20 20 20 74 31 43 6f 75 6e 74 53 74 65 70 2c 74     t1CountStep,t
62e0: 31 43 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 29 3b  1CountFinalize);
62f0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
6300: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69  E_OK ){.    sqli
6310: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
6320: 69 6f 6e 28 64 62 2c 20 22 78 5f 63 6f 75 6e 74  ion(db, "x_count
6330: 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  ", 1, SQLITE_UTF
6340: 38 2c 20 30 2c 20 30 2c 0a 20 20 20 20 20 20 20  8, 0, 0,.       
6350: 20 74 31 43 6f 75 6e 74 53 74 65 70 2c 74 31 43   t1CountStep,t1C
6360: 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 29 3b 0a 20  ountFinalize);. 
6370: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
6380: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
6390: 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65  rp, db, rc) ) re
63a0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
63b0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
63c0: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  .}.../*.** Usage
63d0: 3a 20 20 70 72 69 6e 74 66 20 54 45 58 54 0a 2a  :  printf TEXT.*
63e0: 2a 0a 2a 2a 20 53 65 6e 64 20 6f 75 74 70 75 74  *.** Send output
63f0: 20 74 6f 20 70 72 69 6e 74 66 2e 20 20 55 73 65   to printf.  Use
6400: 20 74 68 69 73 20 72 61 74 68 65 72 20 74 68 61   this rather tha
6410: 6e 20 70 75 74 73 20 74 6f 20 6d 65 72 67 65 20  n puts to merge 
6420: 74 68 65 20 6f 75 74 70 75 74 0a 2a 2a 20 69 6e  the output.** in
6430: 20 74 68 65 20 63 6f 72 72 65 63 74 20 73 65 71   the correct seq
6440: 75 65 6e 63 65 20 77 69 74 68 20 64 65 62 75 67  uence with debug
6450: 67 69 6e 67 20 70 72 69 6e 74 66 73 20 69 6e 73  ging printfs ins
6460: 65 72 74 65 64 20 69 6e 74 6f 20 43 20 63 6f 64  erted into C cod
6470: 65 2e 0a 2a 2a 20 50 75 74 73 20 75 73 65 73 20  e..** Puts uses 
6480: 61 20 73 65 70 61 72 61 74 65 20 62 75 66 66 65  a separate buffe
6490: 72 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 20  r and debugging 
64a0: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20  statements will 
64b0: 62 65 20 6f 75 74 20 6f 66 0a 2a 2a 20 73 65 71  be out of.** seq
64c0: 75 65 6e 63 65 20 69 66 20 69 74 20 69 73 20 75  uence if it is u
64d0: 73 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  sed..*/.static i
64e0: 6e 74 20 74 65 73 74 5f 70 72 69 6e 74 66 28 0a  nt test_printf(.
64f0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
6500: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
6510: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
6520: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
6530: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
6540: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
6550: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
6560: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
6570: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
6580: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
6590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
65a0: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
65b0: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  nt */.){.  if( a
65c0: 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  rgc!=2 ){.    Tc
65d0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
65e0: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
65f0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
6600: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
6610: 20 20 20 20 20 22 20 54 45 58 54 5c 22 22 2c 20       " TEXT\"", 
6620: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
6630: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
6640: 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61  printf("%s\n", a
6650: 72 67 76 5b 31 5d 29 3b 0a 20 20 72 65 74 75 72  rgv[1]);.  retur
6660: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 0a 2f  n TCL_OK;.}..../
6670: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
6680: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74  ite3_mprintf_int
6690: 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52 20   FORMAT INTEGER 
66a0: 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 0a  INTEGER INTEGER.
66b0: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
66c0: 74 66 20 77 69 74 68 20 74 68 72 65 65 20 69 6e  tf with three in
66d0: 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 0a  teger arguments.
66e0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
66f0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
6700: 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  t(.  void *NotUs
6710: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
6720: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
6730: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
6740: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
6750: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
6760: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
6770: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
6780: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
6790: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
67a0: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
67b0: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
67c0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ument */.){.  in
67d0: 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 63 68 61  t a[3], i;.  cha
67e0: 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63  r *z;.  if( argc
67f0: 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=5 ){.    Tcl_A
6800: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
6810: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
6820: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
6830: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
6840: 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49    " FORMAT INT I
6850: 4e 54 20 49 4e 54 5c 22 22 2c 20 30 29 3b 0a 20  NT INT\"", 0);. 
6860: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
6870: 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69  ROR;.  }.  for(i
6880: 3d 32 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a 20  =2; i<5; i++){. 
6890: 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e     if( Tcl_GetIn
68a0: 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69  t(interp, argv[i
68b0: 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72 65  ], &a[i-2]) ) re
68c0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
68d0: 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65    }.  z = sqlite
68e0: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31  3_mprintf(argv[1
68f0: 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61  ], a[0], a[1], a
6900: 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  [2]);.  Tcl_Appe
6910: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
6920: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
6930: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
6940: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
6950: 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72 65 70  *.** If zNum rep
6960: 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65 67  resents an integ
6970: 65 72 20 74 68 61 74 20 77 69 6c 6c 20 66 69 74  er that will fit
6980: 20 69 6e 20 36 34 2d 62 69 74 73 2c 20 74 68 65   in 64-bits, the
6990: 6e 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c 75 65  n set.** *pValue
69a0: 20 74 6f 20 74 68 61 74 20 69 6e 74 65 67 65 72   to that integer
69b0: 20 61 6e 64 20 72 65 74 75 72 6e 20 74 72 75 65   and return true
69c0: 2e 20 20 4f 74 68 65 72 77 69 73 65 20 72 65 74  .  Otherwise ret
69d0: 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f 0a 73 74  urn false..*/.st
69e0: 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33  atic int sqlite3
69f0: 47 65 74 49 6e 74 36 34 28 63 6f 6e 73 74 20 63  GetInt64(const c
6a00: 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 36 34 20 2a  har *zNum, i64 *
6a10: 70 56 61 6c 75 65 29 7b 0a 20 20 69 66 28 20 73  pValue){.  if( s
6a20: 71 6c 69 74 65 33 46 69 74 73 49 6e 36 34 42 69  qlite3FitsIn64Bi
6a30: 74 73 28 7a 4e 75 6d 29 20 29 7b 0a 20 20 20 20  ts(zNum) ){.    
6a40: 73 71 6c 69 74 65 33 61 74 6f 69 36 34 28 7a 4e  sqlite3atoi64(zN
6a50: 75 6d 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 20  um, pValue);.   
6a60: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20   return 1;.  }. 
6a70: 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
6a80: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
6a90: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36  te3_mprintf_int6
6aa0: 34 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52  4 FORMAT INTEGER
6ab0: 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52   INTEGER INTEGER
6ac0: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
6ad0: 6e 74 66 20 77 69 74 68 20 74 68 72 65 65 20 36  ntf with three 6
6ae0: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 61 72  4-bit integer ar
6af0: 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61 74 69  guments.*/.stati
6b00: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70  c int sqlite3_mp
6b10: 72 69 6e 74 66 5f 69 6e 74 36 34 28 0a 20 20 76  rintf_int64(.  v
6b20: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
6b30: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
6b40: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
6b50: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
6b60: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
6b70: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
6b80: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
6b90: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
6ba0: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
6bb0: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
6bc0: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
6bd0: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
6be0: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  */.){.  int i;. 
6bf0: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 61 5b   sqlite_int64 a[
6c00: 33 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20  3];.  char *z;. 
6c10: 20 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a   if( argc!=5 ){.
6c20: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
6c30: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
6c40: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
6c50: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
6c60: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52  0],.       " FOR
6c70: 4d 41 54 20 49 4e 54 20 49 4e 54 20 49 4e 54 5c  MAT INT INT INT\
6c80: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
6c90: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
6ca0: 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 35  }.  for(i=2; i<5
6cb0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
6cc0: 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74 36 34  !sqlite3GetInt64
6cd0: 28 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32  (argv[i], &a[i-2
6ce0: 5d 29 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f  ]) ){.      Tcl_
6cf0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
6d00: 65 72 70 2c 20 22 61 72 67 75 6d 65 6e 74 20 69  erp, "argument i
6d10: 73 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 36 34  s not a valid 64
6d20: 2d 62 69 74 20 69 6e 74 65 67 65 72 22 2c 20 30  -bit integer", 0
6d30: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
6d40: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  TCL_ERROR;.    }
6d50: 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74  .  }.  z = sqlit
6d60: 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b  e3_mprintf(argv[
6d70: 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20  1], a[0], a[1], 
6d80: 61 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70  a[2]);.  Tcl_App
6d90: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
6da0: 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  , z, 0);.  sqlit
6db0: 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65  e3_free(z);.  re
6dc0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
6dd0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
6de0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74  lite3_mprintf_st
6df0: 72 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52  r FORMAT INTEGER
6e00: 20 49 4e 54 45 47 45 52 20 53 54 52 49 4e 47 0a   INTEGER STRING.
6e10: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
6e20: 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e 74 65  tf with two inte
6e30: 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  ger arguments an
6e40: 64 20 6f 6e 65 20 73 74 72 69 6e 67 20 61 72 67  d one string arg
6e50: 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63 20  ument.*/.static 
6e60: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  int sqlite3_mpri
6e70: 6e 74 66 5f 73 74 72 28 0a 20 20 76 6f 69 64 20  ntf_str(.  void 
6e80: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
6e90: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
6ea0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
6eb0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
6ec0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
6ed0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
6ee0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
6ef0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
6f00: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
6f10: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
6f20: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
6f30: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
6f40: 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69 3b  {.  int a[3], i;
6f50: 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66  .  char *z;.  if
6f60: 28 20 61 72 67 63 3c 34 20 7c 7c 20 61 72 67 63  ( argc<4 || argc
6f70: 3e 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  >5 ){.    Tcl_Ap
6f80: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
6f90: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
6fa0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
6fb0: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
6fc0: 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e   " FORMAT INT IN
6fd0: 54 20 3f 53 54 52 49 4e 47 3f 5c 22 22 2c 20 30  T ?STRING?\"", 0
6fe0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
6ff0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66  L_ERROR;.  }.  f
7000: 6f 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b  or(i=2; i<4; i++
7010: 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47  ){.    if( Tcl_G
7020: 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72  etInt(interp, ar
7030: 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29 20  gv[i], &a[i-2]) 
7040: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
7050: 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71  OR;.  }.  z = sq
7060: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72  lite3_mprintf(ar
7070: 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31  gv[1], a[0], a[1
7080: 5d 2c 20 61 72 67 63 3e 34 20 3f 20 61 72 67 76  ], argc>4 ? argv
7090: 5b 34 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 20 20 54  [4] : NULL);.  T
70a0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
70b0: 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20  interp, z, 0);. 
70c0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29   sqlite3_free(z)
70d0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
70e0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
70f0: 65 3a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  e:  sqlite3_snpr
7100: 69 6e 74 66 5f 73 74 72 20 49 4e 54 45 47 45 52  intf_str INTEGER
7110: 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52 20   FORMAT INTEGER 
7120: 49 4e 54 45 47 45 52 20 53 54 52 49 4e 47 0a 2a  INTEGER STRING.*
7130: 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74  *.** Call mprint
7140: 66 20 77 69 74 68 20 74 77 6f 20 69 6e 74 65 67  f with two integ
7150: 65 72 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64  er arguments and
7160: 20 6f 6e 65 20 73 74 72 69 6e 67 20 61 72 67 75   one string argu
7170: 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ment.*/.static i
7180: 6e 74 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  nt sqlite3_snpri
7190: 6e 74 66 5f 73 74 72 28 0a 20 20 76 6f 69 64 20  ntf_str(.  void 
71a0: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
71b0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
71c0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
71d0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
71e0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
71f0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
7200: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
7210: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
7220: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
7230: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
7240: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
7250: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
7260: 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69 3b  {.  int a[3], i;
7270: 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 63 68 61 72  .  int n;.  char
7280: 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 3c   *z;.  if( argc<
7290: 35 20 7c 7c 20 61 72 67 63 3e 36 20 29 7b 0a 20  5 || argc>6 ){. 
72a0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
72b0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
72c0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
72d0: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
72e0: 5d 2c 0a 20 20 20 20 20 20 20 22 20 49 4e 54 20  ],.       " INT 
72f0: 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 3f  FORMAT INT INT ?
7300: 53 54 52 49 4e 47 3f 5c 22 22 2c 20 30 29 3b 0a  STRING?\"", 0);.
7310: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
7320: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
7330: 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72  Tcl_GetInt(inter
7340: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 6e 29 20  p, argv[1], &n) 
7350: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
7360: 4f 52 3b 0a 20 20 69 66 28 20 6e 3c 30 20 29 7b  OR;.  if( n<0 ){
7370: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
7380: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 4e  esult(interp, "N
7390: 20 6d 75 73 74 20 62 65 20 6e 6f 6e 2d 6e 65 67   must be non-neg
73a0: 61 74 69 76 65 22 2c 20 30 29 3b 0a 20 20 20 20  ative", 0);.    
73b0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
73c0: 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 33 3b  ;.  }.  for(i=3;
73d0: 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<5; i++){.    
73e0: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69  if( Tcl_GetInt(i
73f0: 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20  nterp, argv[i], 
7400: 26 61 5b 69 2d 33 5d 29 20 29 20 72 65 74 75 72  &a[i-3]) ) retur
7410: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
7420: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d  .  z = sqlite3_m
7430: 61 6c 6c 6f 63 28 20 6e 2b 31 20 29 3b 0a 20 20  alloc( n+1 );.  
7440: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
7450: 28 6e 2c 20 7a 2c 20 61 72 67 76 5b 32 5d 2c 20  (n, z, argv[2], 
7460: 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 72 67 63  a[0], a[1], argc
7470: 3e 34 20 3f 20 61 72 67 76 5b 35 5d 20 3a 20 4e  >4 ? argv[5] : N
7480: 55 4c 4c 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  ULL);.  Tcl_Appe
7490: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
74a0: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
74b0: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
74c0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
74d0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
74e0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75  ite3_mprintf_dou
74f0: 62 6c 65 20 46 4f 52 4d 41 54 20 49 4e 54 45 47  ble FORMAT INTEG
7500: 45 52 20 49 4e 54 45 47 45 52 20 44 4f 55 42 4c  ER INTEGER DOUBL
7510: 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72  E.**.** Call mpr
7520: 69 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e  intf with two in
7530: 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20  teger arguments 
7540: 61 6e 64 20 6f 6e 65 20 64 6f 75 62 6c 65 20 61  and one double a
7550: 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69  rgument.*/.stati
7560: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70  c int sqlite3_mp
7570: 72 69 6e 74 66 5f 64 6f 75 62 6c 65 28 0a 20 20  rintf_double(.  
7580: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
7590: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
75a0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
75b0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
75c0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
75d0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
75e0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
75f0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7600: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
7610: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
7620: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
7630: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
7640: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33   */.){.  int a[3
7650: 5d 2c 20 69 3b 0a 20 20 64 6f 75 62 6c 65 20 72  ], i;.  double r
7660: 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  ;.  char *z;.  i
7670: 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20 20  f( argc!=5 ){.  
7680: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
7690: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
76a0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
76b0: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
76c0: 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41  ,.       " FORMA
76d0: 54 20 49 4e 54 20 49 4e 54 20 44 4f 55 42 4c 45  T INT INT DOUBLE
76e0: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
76f0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
7700: 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c   }.  for(i=2; i<
7710: 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  4; i++){.    if(
7720: 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65   Tcl_GetInt(inte
7730: 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26 61 5b  rp, argv[i], &a[
7740: 69 2d 32 5d 29 20 29 20 72 65 74 75 72 6e 20 54  i-2]) ) return T
7750: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
7760: 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c  if( Tcl_GetDoubl
7770: 65 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 34  e(interp, argv[4
7780: 5d 2c 20 26 72 29 20 29 20 72 65 74 75 72 6e 20  ], &r) ) return 
7790: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 20 3d  TCL_ERROR;.  z =
77a0: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
77b0: 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20  (argv[1], a[0], 
77c0: 61 5b 31 5d 2c 20 72 29 3b 0a 20 20 54 63 6c 5f  a[1], r);.  Tcl_
77d0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
77e0: 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71  erp, z, 0);.  sq
77f0: 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20  lite3_free(z);. 
7800: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
7810: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
7820: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
7830: 5f 73 63 61 6c 65 64 20 46 4f 52 4d 41 54 20 44  _scaled FORMAT D
7840: 4f 55 42 4c 45 20 44 4f 55 42 4c 45 0a 2a 2a 0a  OUBLE DOUBLE.**.
7850: 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20  ** Call mprintf 
7860: 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f  with a single do
7870: 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68  uble argument wh
7880: 69 63 68 20 69 73 20 74 68 65 20 70 72 6f 64 75  ich is the produ
7890: 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77 6f  ct of the.** two
78a0: 20 61 72 67 75 6d 65 6e 74 73 20 67 69 76 65 6e   arguments given
78b0: 20 61 62 6f 76 65 2e 20 20 54 68 69 73 20 69 73   above.  This is
78c0: 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
78d0: 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20 75  e overflow and u
78e0: 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75 62  nderflow.** doub
78f0: 6c 65 73 20 74 6f 20 74 65 73 74 20 74 68 61 74  les to test that
7900: 20 74 68 65 79 20 61 72 65 20 63 6f 6e 76 65 72   they are conver
7910: 74 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a 2f  ted properly..*/
7920: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
7930: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c  te3_mprintf_scal
7940: 65 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  ed(.  void *NotU
7950: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
7960: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
7970: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
7980: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
7990: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
79a0: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
79b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
79c0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
79d0: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
79e0: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
79f0: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
7a00: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69  gument */.){.  i
7a10: 6e 74 20 69 3b 0a 20 20 64 6f 75 62 6c 65 20 72  nt i;.  double r
7a20: 5b 32 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  [2];.  char *z;.
7a30: 20 20 69 66 28 20 61 72 67 63 21 3d 34 20 29 7b    if( argc!=4 ){
7a40: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
7a50: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
7a60: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
7a70: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
7a80: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f  [0],.       " FO
7a90: 52 4d 41 54 20 44 4f 55 42 4c 45 20 44 4f 55 42  RMAT DOUBLE DOUB
7aa0: 4c 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  LE\"", 0);.    r
7ab0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7ac0: 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20  .  }.  for(i=2; 
7ad0: 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<4; i++){.    i
7ae0: 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65  f( Tcl_GetDouble
7af0: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d  (interp, argv[i]
7b00: 2c 20 26 72 5b 69 2d 32 5d 29 20 29 20 72 65 74  , &r[i-2]) ) ret
7b10: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
7b20: 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33   }.  z = sqlite3
7b30: 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d  _mprintf(argv[1]
7b40: 2c 20 72 5b 30 5d 2a 72 5b 31 5d 29 3b 0a 20 20  , r[0]*r[1]);.  
7b50: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
7b60: 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a  (interp, z, 0);.
7b70: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
7b80: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
7b90: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
7ba0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72  ge:  sqlite3_mpr
7bb0: 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 20 46 4f 52  intf_stronly FOR
7bc0: 4d 41 54 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a  MAT STRING.**.**
7bd0: 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69   Call mprintf wi
7be0: 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f 75 62  th a single doub
7bf0: 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63  le argument whic
7c00: 68 20 69 73 20 74 68 65 20 70 72 6f 64 75 63 74  h is the product
7c10: 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77 6f 20 61   of the.** two a
7c20: 72 67 75 6d 65 6e 74 73 20 67 69 76 65 6e 20 61  rguments given a
7c30: 62 6f 76 65 2e 20 20 54 68 69 73 20 69 73 20 75  bove.  This is u
7c40: 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  sed to generate 
7c50: 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20 75 6e 64  overflow and und
7c60: 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75 62 6c 65  erflow.** double
7c70: 73 20 74 6f 20 74 65 73 74 20 74 68 61 74 20 74  s to test that t
7c80: 68 65 79 20 61 72 65 20 63 6f 6e 76 65 72 74 65  hey are converte
7c90: 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a 2f 0a 73  d properly..*/.s
7ca0: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
7cb0: 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c  3_mprintf_stronl
7cc0: 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  y(.  void *NotUs
7cd0: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
7ce0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
7cf0: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
7d00: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
7d10: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
7d20: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
7d30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
7d40: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
7d50: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
7d60: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
7d70: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
7d80: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68  ument */.){.  ch
7d90: 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67  ar *z;.  if( arg
7da0: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
7db0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
7dc0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
7dd0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
7de0: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
7df0: 20 20 20 22 20 46 4f 52 4d 41 54 20 53 54 52 49     " FORMAT STRI
7e00: 4e 47 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  NG\"", 0);.    r
7e10: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7e20: 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74  .  }.  z = sqlit
7e30: 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b  e3_mprintf(argv[
7e40: 31 5d 2c 20 61 72 67 76 5b 32 5d 29 3b 0a 20 20  1], argv[2]);.  
7e50: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
7e60: 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a  (interp, z, 0);.
7e70: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
7e80: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
7e90: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
7ea0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72  ge:  sqlite3_mpr
7eb0: 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65 20 46  intf_hexdouble F
7ec0: 4f 52 4d 41 54 20 48 45 58 0a 2a 2a 0a 2a 2a 20  ORMAT HEX.**.** 
7ed0: 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74  Call mprintf wit
7ee0: 68 20 61 20 73 69 6e 67 6c 65 20 64 6f 75 62 6c  h a single doubl
7ef0: 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63 68  e argument which
7f00: 20 69 73 20 64 65 72 69 76 65 64 20 66 72 6f 6d   is derived from
7f10: 20 74 68 65 0a 2a 2a 20 68 65 78 61 64 65 63 69   the.** hexadeci
7f20: 6d 61 6c 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  mal encoding of 
7f30: 61 6e 20 49 45 45 45 20 64 6f 75 62 6c 65 2e 0a  an IEEE double..
7f40: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
7f50: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65  lite3_mprintf_he
7f60: 78 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64 20  xdouble(.  void 
7f70: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
7f80: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
7f90: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
7fa0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
7fb0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
7fc0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
7fd0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
7fe0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
7ff0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
8000: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
8010: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
8020: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
8030: 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 64  {.  char *z;.  d
8040: 6f 75 62 6c 65 20 72 3b 0a 20 20 75 6e 73 69 67  ouble r;.  unsig
8050: 6e 65 64 20 20 78 31 2c 20 78 32 3b 0a 20 20 6c  ned  x1, x2;.  l
8060: 6f 6e 67 20 6c 6f 6e 67 20 75 6e 73 69 67 6e 65  ong long unsigne
8070: 64 20 64 3b 0a 20 20 69 66 28 20 61 72 67 63 21  d d;.  if( argc!
8080: 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
8090: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
80a0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
80b0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
80c0: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
80d0: 20 22 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47   " FORMAT STRING
80e0: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
80f0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
8100: 20 7d 0a 20 20 69 66 28 20 73 73 63 61 6e 66 28   }.  if( sscanf(
8110: 61 72 67 76 5b 32 5d 2c 20 22 25 30 38 78 25 30  argv[2], "%08x%0
8120: 38 78 22 2c 20 26 78 32 2c 20 26 78 31 29 21 3d  8x", &x2, &x1)!=
8130: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
8140: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
8150: 2c 20 22 32 6e 64 20 61 72 67 75 6d 65 6e 74 20  , "2nd argument 
8160: 73 68 6f 75 6c 64 20 62 65 20 31 36 2d 63 68 61  should be 16-cha
8170: 72 61 63 74 65 72 73 20 6f 66 20 68 65 78 22 2c  racters of hex",
8180: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
8190: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
81a0: 20 64 20 3d 20 78 32 3b 0a 20 20 64 20 3d 20 28   d = x2;.  d = (
81b0: 64 3c 3c 33 32 29 20 2b 20 78 31 3b 0a 20 20 6d  d<<32) + x1;.  m
81c0: 65 6d 63 70 79 28 26 72 2c 20 26 64 2c 20 73 69  emcpy(&r, &d, si
81d0: 7a 65 6f 66 28 72 29 29 3b 0a 20 20 7a 20 3d 20  zeof(r));.  z = 
81e0: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
81f0: 61 72 67 76 5b 31 5d 2c 20 72 29 3b 0a 20 20 54  argv[1], r);.  T
8200: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
8210: 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20  interp, z, 0);. 
8220: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29   sqlite3_free(z)
8230: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
8240: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
8250: 65 3a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  e: sqlite_malloc
8260: 5f 66 61 69 6c 20 4e 20 20 3f 52 45 50 45 41 54  _fail N  ?REPEAT
8270: 2d 49 4e 54 45 52 56 41 4c 3f 0a 2a 2a 0a 2a 2a  -INTERVAL?.**.**
8280: 20 52 69 67 20 73 71 6c 69 74 65 4d 61 6c 6c 6f   Rig sqliteMallo
8290: 63 28 29 20 74 6f 20 66 61 69 6c 20 6f 6e 20 74  c() to fail on t
82a0: 68 65 20 4e 2d 74 68 20 63 61 6c 6c 20 61 6e 64  he N-th call and
82b0: 20 65 76 65 72 79 20 52 45 50 45 41 54 2d 49 4e   every REPEAT-IN
82c0: 54 45 52 56 41 4c 20 63 61 6c 6c 0a 2a 2a 20 61  TERVAL call.** a
82d0: 66 74 65 72 20 74 68 61 74 2e 20 20 49 66 20 52  fter that.  If R
82e0: 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20 69  EPEAT-INTERVAL i
82f0: 73 20 30 20 6f 72 20 69 73 20 6f 6d 69 74 74 65  s 0 or is omitte
8300: 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 61 20 73  d, then only a s
8310: 69 6e 67 6c 65 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  ingle.** malloc 
8320: 77 69 6c 6c 20 66 61 69 6c 2e 20 20 49 66 20 52  will fail.  If R
8330: 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20 69  EPEAT-INTERVAL i
8340: 73 20 31 20 74 68 65 6e 20 61 6c 6c 20 6d 61 6c  s 1 then all mal
8350: 6c 6f 63 73 20 61 66 74 65 72 20 74 68 65 0a 2a  locs after the.*
8360: 2a 20 66 69 72 73 74 20 66 61 69 6c 75 72 65 20  * first failure 
8370: 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f  will continue to
8380: 20 66 61 69 6c 20 6f 6e 20 65 76 65 72 79 20 63   fail on every c
8390: 61 6c 6c 2e 20 20 49 66 20 52 45 50 45 41 54 2d  all.  If REPEAT-
83a0: 49 4e 54 45 52 56 41 4c 20 69 73 0a 2a 2a 20 32  INTERVAL is.** 2
83b0: 20 74 68 65 6e 20 65 76 65 72 79 20 6f 74 68 65   then every othe
83c0: 72 20 6d 61 6c 6c 6f 63 20 77 69 6c 6c 20 66 61  r malloc will fa
83d0: 69 6c 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72 74  il.  And so fort
83e0: 68 2e 0a 2a 2a 0a 2a 2a 20 54 75 72 6e 20 6f 66  h..**.** Turn of
83f0: 66 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73 6d  f this mechanism
8400: 20 61 6e 64 20 72 65 73 65 74 20 74 68 65 20 73   and reset the s
8410: 71 6c 69 74 65 33 54 68 72 65 61 64 44 61 74 61  qlite3ThreadData
8420: 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  ()->mallocFailed
8430: 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 69 66   .** variable if
8440: 20 4e 3d 3d 30 2e 0a 2a 2f 0a 23 69 66 64 65 66   N==0..*/.#ifdef
8450: 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
8460: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
8470: 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 28 0a  te_malloc_fail(.
8480: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
8490: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
84a0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
84b0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
84c0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
84d0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
84e0: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
84f0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
8500: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
8510: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
8520: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
8530: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
8540: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 6e  nt */.){.  int n
8550: 3b 0a 20 20 69 6e 74 20 72 65 70 3b 0a 20 20 69  ;.  int rep;.  i
8560: 66 28 20 61 72 67 63 21 3d 32 20 26 26 20 61 72  f( argc!=2 && ar
8570: 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
8580: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
8590: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
85a0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
85b0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 4e  "", argv[0], " N
85c0: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
85d0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
85e0: 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74   }.  if( Tcl_Get
85f0: 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76  Int(interp, argv
8600: 5b 31 5d 2c 20 26 6e 29 20 29 20 72 65 74 75 72  [1], &n) ) retur
8610: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
8620: 66 28 20 61 72 67 63 3d 3d 33 20 29 7b 0a 20 20  f( argc==3 ){.  
8630: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
8640: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32 5d  (interp, argv[2]
8650: 2c 20 26 72 65 70 29 20 29 20 72 65 74 75 72 6e  , &rep) ) return
8660: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 65   TCL_ERROR;.  }e
8670: 6c 73 65 7b 0a 20 20 20 20 72 65 70 20 3d 20 30  lse{.    rep = 0
8680: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ;.  }.  sqlite3_
8690: 69 4d 61 6c 6c 6f 63 46 61 69 6c 20 3d 20 6e 3b  iMallocFail = n;
86a0: 0a 20 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c  .  sqlite3_iMall
86b0: 6f 63 52 65 73 65 74 20 3d 20 72 65 70 3b 0a 20  ocReset = rep;. 
86c0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
86d0: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
86e0: 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f 6d 61  Usage: sqlite_ma
86f0: 6c 6c 6f 63 5f 73 74 61 74 0a 2a 2a 0a 2a 2a 20  lloc_stat.**.** 
8700: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
8710: 72 20 6f 66 20 70 72 69 6f 72 20 63 61 6c 6c 73  r of prior calls
8720: 20 74 6f 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63   to sqliteMalloc
8730: 28 29 20 61 6e 64 20 73 71 6c 69 74 65 46 72 65  () and sqliteFre
8740: 65 28 29 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  e()..*/.#ifdef S
8750: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 73  QLITE_MEMDEBUG.s
8760: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
8770: 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 28 0a 20 20  _malloc_stat(.  
8780: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
8790: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
87a0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
87b0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
87c0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
87d0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
87e0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
87f0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
8800: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
8810: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
8820: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
8830: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
8840: 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 7a 42   */.){.  char zB
8850: 75 66 5b 32 30 30 5d 3b 0a 20 20 73 70 72 69 6e  uf[200];.  sprin
8860: 74 66 28 7a 42 75 66 2c 20 22 25 64 20 25 64 20  tf(zBuf, "%d %d 
8870: 25 64 22 2c 20 73 71 6c 69 74 65 33 5f 6e 4d 61  %d", sqlite3_nMa
8880: 6c 6c 6f 63 2c 73 71 6c 69 74 65 33 5f 6e 46 72  lloc,sqlite3_nFr
8890: 65 65 2c 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c  ee,sqlite3_iMall
88a0: 6f 63 46 61 69 6c 29 3b 0a 20 20 54 63 6c 5f 41  ocFail);.  Tcl_A
88b0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
88c0: 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20  rp, zBuf, 0);.  
88d0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
88e0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  ../*.** This fun
88f0: 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73  ction implements
8900: 20 61 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 20 74   a Tcl command t
8910: 68 61 74 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b  hat may be invok
8920: 65 64 20 75 73 69 6e 67 20 61 6e 79 20 6f 66 0a  ed using any of.
8930: 2a 2a 20 74 68 65 20 66 6f 75 72 20 66 6f 72 6d  ** the four form
8940: 73 20 65 6e 75 6d 65 72 61 74 65 64 20 62 65 6c  s enumerated bel
8950: 6f 77 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ow..**.** sqlite
8960: 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64  _malloc_outstand
8970: 69 6e 67 0a 2a 2a 20 20 20 20 20 52 65 74 75 72  ing.**     Retur
8980: 6e 20 61 20 73 75 6d 6d 61 72 79 20 6f 66 20 61  n a summary of a
8990: 6c 6c 20 75 6e 66 72 65 65 64 20 62 6c 6f 63 6b  ll unfreed block
89a0: 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  s of memory allo
89b0: 63 61 74 65 64 20 62 79 20 74 68 65 0a 2a 2a 20  cated by the.** 
89c0: 20 20 20 20 63 75 72 72 65 6e 74 20 74 68 72 65      current thre
89d0: 61 64 2e 20 53 65 65 20 63 6f 6d 6d 65 6e 74 73  ad. See comments
89e0: 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20   above function 
89f0: 73 71 6c 69 74 65 33 4f 75 74 73 74 61 6e 64 69  sqlite3Outstandi
8a00: 6e 67 4d 61 6c 6c 6f 63 73 28 29 20 0a 2a 2a 20  ngMallocs() .** 
8a10: 20 20 20 20 69 6e 20 75 74 69 6c 2e 63 20 66 6f      in util.c fo
8a20: 72 20 61 20 64 65 73 63 72 69 70 74 69 6f 6e 20  r a description 
8a30: 6f 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20  of the returned 
8a40: 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  value..**.** sql
8a50: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74  ite_malloc_outst
8a60: 61 6e 64 69 6e 67 20 2d 62 79 74 65 73 0a 2a 2a  anding -bytes.**
8a70: 20 20 20 20 20 52 65 74 75 72 6e 20 74 68 65 20       Return the 
8a80: 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20  total amount of 
8a90: 75 6e 66 72 65 65 64 20 6d 65 6d 6f 72 79 20 28  unfreed memory (
8aa0: 69 6e 20 62 79 74 65 73 29 20 61 6c 6c 6f 63 61  in bytes) alloca
8ab0: 74 65 64 20 62 79 20 0a 2a 2a 20 20 20 20 20 74  ted by .**     t
8ac0: 68 69 73 20 74 68 72 65 61 64 2e 0a 2a 2a 0a 2a  his thread..**.*
8ad0: 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  * sqlite_malloc_
8ae0: 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d 6d 61 78  outstanding -max
8af0: 62 79 74 65 73 0a 2a 2a 20 20 20 20 20 52 65 74  bytes.**     Ret
8b00: 75 72 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  urn the maximum 
8b10: 61 6d 6f 75 6e 74 20 6f 66 20 64 79 6e 61 6d 69  amount of dynami
8b20: 63 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20  c memory in use 
8b30: 61 74 20 6f 6e 65 20 74 69 6d 65 20 0a 2a 2a 20  at one time .** 
8b40: 20 20 20 20 62 79 20 74 68 69 73 20 74 68 72 65      by this thre
8b50: 61 64 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ad..**.** sqlite
8b60: 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64  _malloc_outstand
8b70: 69 6e 67 20 2d 63 6c 65 61 72 6d 61 78 62 79 74  ing -clearmaxbyt
8b80: 65 73 0a 2a 2a 20 20 20 20 20 53 65 74 20 74 68  es.**     Set th
8b90: 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
8ba0: 20 62 79 20 5b 73 71 6c 69 74 65 5f 6d 61 6c 6c   by [sqlite_mall
8bb0: 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d  oc_outstanding -
8bc0: 6d 61 78 62 79 74 65 73 5d 0a 2a 2a 20 20 20 20  maxbytes].**    
8bd0: 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
8be0: 76 61 6c 75 65 20 6f 66 20 5b 73 71 6c 69 74 65  value of [sqlite
8bf0: 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64  _malloc_outstand
8c00: 69 6e 67 20 2d 62 79 74 65 73 5d 2e 20 0a 2a 2f  ing -bytes]. .*/
8c10: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
8c20: 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61  te_malloc_outsta
8c30: 6e 64 69 6e 67 28 0a 20 20 43 6c 69 65 6e 74 44  nding(.  ClientD
8c40: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  ata clientData,.
8c50: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
8c60: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
8c70: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
8c80: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
8c90: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
8ca0: 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20  nt objc,        
8cb0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
8cc0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
8cd0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
8ce0: 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d   objv[]  /* Comm
8cf0: 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f  and arguments */
8d00: 0a 29 7b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  .){.  extern int
8d10: 20 73 71 6c 69 74 65 33 4f 75 74 73 74 61 6e 64   sqlite3Outstand
8d20: 69 6e 67 4d 61 6c 6c 6f 63 73 28 54 63 6c 5f 49  ingMallocs(Tcl_I
8d30: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29 3b 0a  nterp *interp);.
8d40: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
8d50: 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64 65  ITE_DEBUG) && de
8d60: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
8d70: 44 45 42 55 47 29 20 26 26 20 53 51 4c 49 54 45  DEBUG) && SQLITE
8d80: 5f 4d 45 4d 44 45 42 55 47 3e 31 0a 20 20 69 66  _MEMDEBUG>1.  if
8d90: 28 20 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20  ( objc==2 ){.   
8da0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72   const char *zAr
8db0: 67 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  g = Tcl_GetStrin
8dc0: 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 23 69 66 64  g(objv[1]);.#ifd
8dd0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
8de0: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
8df0: 4e 54 0a 20 20 20 20 54 68 72 65 61 64 44 61 74  NT.    ThreadDat
8e00: 61 20 63 6f 6e 73 74 20 2a 70 54 64 20 3d 20 73  a const *pTd = s
8e10: 71 6c 69 74 65 33 54 68 72 65 61 64 44 61 74 61  qlite3ThreadData
8e20: 52 65 61 64 4f 6e 6c 79 28 29 3b 0a 20 20 20 20  ReadOnly();.    
8e30: 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 7a 41  if( 0==strcmp(zA
8e40: 72 67 2c 20 22 2d 62 79 74 65 73 22 29 20 29 7b  rg, "-bytes") ){
8e50: 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 4f 62  .      Tcl_SetOb
8e60: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
8e70: 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 70 54  Tcl_NewIntObj(pT
8e80: 64 2d 3e 6e 41 6c 6c 6f 63 29 29 3b 0a 20 20 20  d->nAlloc));.   
8e90: 20 7d 65 6c 73 65 20 69 66 28 20 30 3d 3d 73 74   }else if( 0==st
8ea0: 72 63 6d 70 28 7a 41 72 67 2c 20 22 2d 63 6c 65  rcmp(zArg, "-cle
8eb0: 61 72 6d 61 78 62 79 74 65 73 22 29 20 29 7b 0a  armaxbytes") ){.
8ec0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6e 4d        sqlite3_nM
8ed0: 61 78 41 6c 6c 6f 63 20 3d 20 70 54 64 2d 3e 6e  axAlloc = pTd->n
8ee0: 41 6c 6c 6f 63 3b 0a 20 20 20 20 7d 65 6c 73 65  Alloc;.    }else
8ef0: 20 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28   .#endif.    if(
8f00: 20 30 3d 3d 73 74 72 63 6d 70 28 7a 41 72 67 2c   0==strcmp(zArg,
8f10: 20 22 2d 6d 61 78 62 79 74 65 73 22 29 20 29 7b   "-maxbytes") ){
8f20: 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 4f 62  .      Tcl_SetOb
8f30: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
8f40: 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62  Tcl_NewWideIntOb
8f50: 6a 28 73 71 6c 69 74 65 33 5f 6e 4d 61 78 41 6c  j(sqlite3_nMaxAl
8f60: 6c 6f 63 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65  loc));.    }else
8f70: 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41 70 70 65  {.      Tcl_Appe
8f80: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
8f90: 20 22 62 61 64 20 6f 70 74 69 6f 6e 20 5c 22 22   "bad option \""
8fa0: 2c 20 7a 41 72 67 2c 20 0a 20 20 20 20 20 20 20  , zArg, .       
8fb0: 20 22 5c 22 3a 20 6d 75 73 74 20 62 65 20 2d 62   "\": must be -b
8fc0: 79 74 65 73 2c 20 2d 6d 61 78 62 79 74 65 73 20  ytes, -maxbytes 
8fd0: 6f 72 20 2d 63 6c 65 61 72 6d 61 78 62 79 74 65  or -clearmaxbyte
8fe0: 73 22 2c 20 30 0a 20 20 20 20 20 20 29 3b 0a 20  s", 0.      );. 
8ff0: 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f       return TCL_
9000: 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 0a 20 20  ERROR;.    }..  
9010: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
9020: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 6f 62 6a 63  .  }..  if( objc
9030: 21 3d 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=1 ){.    Tcl_W
9040: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
9050: 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 2d  rp, 1, objv, "?-
9060: 62 79 74 65 73 3f 22 29 3b 0a 20 20 20 20 72 65  bytes?");.    re
9070: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
9080: 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 73 71    }..  return sq
9090: 6c 69 74 65 33 4f 75 74 73 74 61 6e 64 69 6e 67  lite3Outstanding
90a0: 4d 61 6c 6c 6f 63 73 28 69 6e 74 65 72 70 29 3b  Mallocs(interp);
90b0: 0a 23 65 6c 73 65 0a 20 20 72 65 74 75 72 6e 20  .#else.  return 
90c0: 54 43 4c 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 7d  TCL_OK;.#endif.}
90d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55  .#endif../*.** U
90e0: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 65 6e  sage: sqlite3_en
90f0: 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68  able_shared_cach
9100: 65 20 20 20 20 20 20 42 4f 4f 4c 45 41 4e 0a 2a  e      BOOLEAN.*
9110: 2a 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  *.*/.#if !define
9120: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  d(SQLITE_OMIT_SH
9130: 41 52 45 44 5f 43 41 43 48 45 29 0a 73 74 61 74  ARED_CACHE).stat
9140: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 6e 61 62  ic int test_enab
9150: 6c 65 5f 73 68 61 72 65 64 28 0a 20 20 43 6c 69  le_shared(.  Cli
9160: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
9170: 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  ta, /* Pointer t
9180: 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  o sqlite3_enable
9190: 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  _XXX function */
91a0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
91b0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
91c0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
91d0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
91e0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
91f0: 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
9200: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
9210: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
9220: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
9230: 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
9240: 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
9250: 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  /.){.  int rc;. 
9260: 20 69 6e 74 20 65 6e 61 62 6c 65 3b 0a 20 20 69   int enable;.  i
9270: 6e 74 20 72 65 74 20 3d 20 30 3b 0a 0a 20 20 69  nt ret = 0;..  i
9280: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
9290: 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
92a0: 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
92b0: 6a 76 2c 20 22 42 4f 4f 4c 45 41 4e 22 29 3b 0a  jv, "BOOLEAN");.
92c0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
92d0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
92e0: 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72  Tcl_GetBooleanFr
92f0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
9300: 6a 76 5b 31 5d 2c 20 26 65 6e 61 62 6c 65 29 20  jv[1], &enable) 
9310: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
9320: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
9330: 65 74 20 3d 20 73 71 6c 69 74 65 33 54 68 72 65  et = sqlite3Thre
9340: 61 64 44 61 74 61 52 65 61 64 4f 6e 6c 79 28 29  adDataReadOnly()
9350: 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61 3b  ->useSharedData;
9360: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
9370: 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61  enable_shared_ca
9380: 63 68 65 28 65 6e 61 62 6c 65 29 3b 0a 20 20 69  che(enable);.  i
9390: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
93a0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52   ){.    Tcl_SetR
93b0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
93c0: 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72 72  har *)sqlite3Err
93d0: 53 74 72 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  Str(rc), TCL_STA
93e0: 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  TIC);.    return
93f0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
9400: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
9410: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
9420: 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 72 65 74  ewBooleanObj(ret
9430: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
9440: 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  _OK;.}.#endif../
9450: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
9460: 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73  te3_extended_res
9470: 75 6c 74 5f 63 6f 64 65 73 20 20 20 44 42 20 20  ult_codes   DB  
9480: 20 20 42 4f 4f 4c 45 41 4e 0a 2a 2a 0a 2a 2f 0a    BOOLEAN.**.*/.
9490: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
94a0: 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f  extended_result_
94b0: 63 6f 64 65 73 28 0a 20 20 43 6c 69 65 6e 74 44  codes(.  ClientD
94c0: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20  ata clientData, 
94d0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 71  /* Pointer to sq
94e0: 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58  lite3_enable_XXX
94f0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54   function */.  T
9500: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
9510: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
9520: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
9530: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
9540: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
9550: 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20  objc,           
9560: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9570: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54  arguments */.  T
9580: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
9590: 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64  jv[]  /* Command
95a0: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b   arguments */.){
95b0: 0a 20 20 69 6e 74 20 65 6e 61 62 6c 65 3b 0a 20  .  int enable;. 
95c0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 0a 20   sqlite3 *db;.. 
95d0: 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
95e0: 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
95f0: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
9600: 6f 62 6a 76 2c 20 22 44 42 20 42 4f 4f 4c 45 41  objv, "DB BOOLEA
9610: 4e 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  N");.    return 
9620: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
9630: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
9640: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
9650: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
9660: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
9670: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
9680: 20 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46   Tcl_GetBooleanF
9690: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
96a0: 62 6a 76 5b 32 5d 2c 20 26 65 6e 61 62 6c 65 29  bjv[2], &enable)
96b0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
96c0: 52 4f 52 3b 0a 20 20 73 71 6c 69 74 65 33 5f 65  ROR;.  sqlite3_e
96d0: 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63  xtended_result_c
96e0: 6f 64 65 73 28 64 62 2c 20 65 6e 61 62 6c 65 29  odes(db, enable)
96f0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
9700: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
9710: 65 3a 20 73 71 6c 69 74 65 33 5f 6c 69 62 76 65  e: sqlite3_libve
9720: 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 0a 2a 2a 0a  rsion_number.**.
9730: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
9740: 73 74 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75  st_libversion_nu
9750: 6d 62 65 72 28 0a 20 20 43 6c 69 65 6e 74 44 61  mber(.  ClientDa
9760: 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f  ta clientData, /
9770: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c  * Pointer to sql
9780: 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20  ite3_enable_XXX 
9790: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63  function */.  Tc
97a0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
97b0: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
97c0: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
97d0: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
97e0: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f  mmand */.  int o
97f0: 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  bjc,            
9800: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
9810: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63  rguments */.  Tc
9820: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
9830: 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20  v[]  /* Command 
9840: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a  arguments */.){.
9850: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
9860: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
9870: 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
9880: 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62  _libversion_numb
9890: 65 72 28 29 29 29 3b 0a 20 20 72 65 74 75 72 6e  er()));.  return
98a0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
98b0: 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
98c0: 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
98d0: 74 61 64 61 74 61 20 44 42 20 64 62 6e 61 6d 65  tadata DB dbname
98e0: 20 74 62 6c 6e 61 6d 65 20 63 6f 6c 6e 61 6d 65   tblname colname
98f0: 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  .**.*/.#ifdef SQ
9900: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
9910: 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 73 74 61 74  MN_METADATA.stat
9920: 69 63 20 69 6e 74 20 74 65 73 74 5f 74 61 62 6c  ic int test_tabl
9930: 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74  e_column_metadat
9940: 61 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20  a(.  ClientData 
9950: 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50  clientData, /* P
9960: 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ointer to sqlite
9970: 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e  3_enable_XXX fun
9980: 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49  ction */.  Tcl_I
9990: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
99a0: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
99b0: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
99c0: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
99d0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63  nd */.  int objc
99e0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
99f0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
9a00: 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f  ments */.  Tcl_O
9a10: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
9a20: 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67    /* Command arg
9a30: 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 73  uments */.){.  s
9a40: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f  qlite3 *db;.  co
9a50: 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20  nst char *zDb;. 
9a60: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62   const char *zTb
9a70: 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  l;.  const char 
9a80: 2a 7a 43 6f 6c 3b 0a 20 20 69 6e 74 20 72 63 3b  *zCol;.  int rc;
9a90: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 52 65 74  .  Tcl_Obj *pRet
9aa0: 3b 0a 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  ;..  const char 
9ab0: 2a 7a 44 61 74 61 74 79 70 65 3b 0a 20 20 63 6f  *zDatatype;.  co
9ac0: 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 73  nst char *zColls
9ad0: 65 71 3b 0a 20 20 69 6e 74 20 6e 6f 74 6e 75 6c  eq;.  int notnul
9ae0: 6c 3b 0a 20 20 69 6e 74 20 70 72 69 6d 61 72 79  l;.  int primary
9af0: 6b 65 79 3b 0a 20 20 69 6e 74 20 61 75 74 6f 69  key;.  int autoi
9b00: 6e 63 72 65 6d 65 6e 74 3b 0a 0a 20 20 69 66 28  ncrement;..  if(
9b10: 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20   objc!=5 ){.    
9b20: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
9b30: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
9b40: 2c 20 22 44 42 20 64 62 6e 61 6d 65 20 74 62 6c  , "DB dbname tbl
9b50: 6e 61 6d 65 20 63 6f 6c 6e 61 6d 65 22 29 3b 0a  name colname");.
9b60: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
9b70: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
9b80: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
9b90: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
9ba0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
9bb0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
9bc0: 52 52 4f 52 3b 0a 20 20 7a 44 62 20 3d 20 54 63  RROR;.  zDb = Tc
9bd0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
9be0: 5b 32 5d 29 3b 0a 20 20 7a 54 62 6c 20 3d 20 54  [2]);.  zTbl = T
9bf0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
9c00: 76 5b 33 5d 29 3b 0a 20 20 7a 43 6f 6c 20 3d 20  v[3]);.  zCol = 
9c10: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
9c20: 6a 76 5b 34 5d 29 3b 0a 0a 20 20 69 66 28 20 73  jv[4]);..  if( s
9c30: 74 72 6c 65 6e 28 7a 44 62 29 3d 3d 30 20 29 20  trlen(zDb)==0 ) 
9c40: 7a 44 62 20 3d 20 30 3b 0a 0a 20 20 72 63 20 3d  zDb = 0;..  rc =
9c50: 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63   sqlite3_table_c
9c60: 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 64  olumn_metadata(d
9c70: 62 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 7a 43  b, zDb, zTbl, zC
9c80: 6f 6c 2c 20 0a 20 20 20 20 20 20 26 7a 44 61 74  ol, .      &zDat
9c90: 61 74 79 70 65 2c 20 26 7a 43 6f 6c 6c 73 65 71  atype, &zCollseq
9ca0: 2c 20 26 6e 6f 74 6e 75 6c 6c 2c 20 26 70 72 69  , &notnull, &pri
9cb0: 6d 61 72 79 6b 65 79 2c 20 26 61 75 74 6f 69 6e  marykey, &autoin
9cc0: 63 72 65 6d 65 6e 74 29 3b 0a 0a 20 20 69 66 28  crement);..  if(
9cd0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
9ce0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
9cf0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73  Result(interp, s
9d00: 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62  qlite3_errmsg(db
9d10: 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ), 0);.    retur
9d20: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
9d30: 0a 0a 20 20 70 52 65 74 20 3d 20 54 63 6c 5f 4e  ..  pRet = Tcl_N
9d40: 65 77 4f 62 6a 28 29 3b 0a 20 20 54 63 6c 5f 4c  ewObj();.  Tcl_L
9d50: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
9d60: 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63 6c  ent(0, pRet, Tcl
9d70: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 44  _NewStringObj(zD
9d80: 61 74 61 74 79 70 65 2c 20 2d 31 29 29 3b 0a 20  atatype, -1));. 
9d90: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
9da0: 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65  ndElement(0, pRe
9db0: 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  t, Tcl_NewString
9dc0: 4f 62 6a 28 7a 43 6f 6c 6c 73 65 71 2c 20 2d 31  Obj(zCollseq, -1
9dd0: 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
9de0: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30  jAppendElement(0
9df0: 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 49  , pRet, Tcl_NewI
9e00: 6e 74 4f 62 6a 28 6e 6f 74 6e 75 6c 6c 29 29 3b  ntObj(notnull));
9e10: 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  .  Tcl_ListObjAp
9e20: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70  pendElement(0, p
9e30: 52 65 74 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  Ret, Tcl_NewIntO
9e40: 62 6a 28 70 72 69 6d 61 72 79 6b 65 79 29 29 3b  bj(primarykey));
9e50: 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  .  Tcl_ListObjAp
9e60: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70  pendElement(0, p
9e70: 52 65 74 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  Ret, Tcl_NewIntO
9e80: 62 6a 28 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  bj(autoincrement
9e90: 29 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  ));.  Tcl_SetObj
9ea0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 70  Result(interp, p
9eb0: 52 65 74 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20  Ret);..  return 
9ec0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  TCL_OK;.}.#endif
9ed0: 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  .../*.** Usage: 
9ee0: 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
9ef0: 65 6e 73 69 6f 6e 20 44 42 2d 48 41 4e 44 4c 45  ension DB-HANDLE
9f00: 20 46 49 4c 45 20 3f 50 52 4f 43 3f 0a 2a 2f 0a   FILE ?PROC?.*/.
9f10: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
9f20: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0a  load_extension(.
9f30: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69    ClientData cli
9f40: 65 6e 74 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20  entData, /* Not 
9f50: 75 73 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  used */.  Tcl_In
9f60: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
9f70: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
9f80: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
9f90: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
9fa0: 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  d */.  int objc,
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9fc0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
9fd0: 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62  ents */.  Tcl_Ob
9fe0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20  j *CONST objv[] 
9ff0: 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
a000: 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63  ments */.){.  Tc
a010: 6c 5f 43 6d 64 49 6e 66 6f 20 63 6d 64 49 6e 66  l_CmdInfo cmdInf
a020: 6f 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  o;.  sqlite3 *db
a030: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68  ;.  int rc;.  ch
a040: 61 72 20 2a 7a 44 62 3b 0a 20 20 63 68 61 72 20  ar *zDb;.  char 
a050: 2a 7a 46 69 6c 65 3b 0a 20 20 63 68 61 72 20 2a  *zFile;.  char *
a060: 7a 50 72 6f 63 20 3d 20 30 3b 0a 20 20 63 68 61  zProc = 0;.  cha
a070: 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 0a 20 20  r *zErr = 0;..  
a080: 69 66 28 20 6f 62 6a 63 21 3d 34 20 26 26 20 6f  if( objc!=4 && o
a090: 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
a0a0: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
a0b0: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
a0c0: 22 44 42 2d 48 41 4e 44 4c 45 20 46 49 4c 45 20  "DB-HANDLE FILE 
a0d0: 3f 50 52 4f 43 3f 22 29 3b 0a 20 20 20 20 72 65  ?PROC?");.    re
a0e0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
a0f0: 20 20 7d 0a 20 20 7a 44 62 20 3d 20 54 63 6c 5f    }.  zDb = Tcl_
a100: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
a110: 5d 29 3b 0a 20 20 7a 46 69 6c 65 20 3d 20 54 63  ]);.  zFile = Tc
a120: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
a130: 5b 32 5d 29 3b 0a 20 20 69 66 28 20 6f 62 6a 63  [2]);.  if( objc
a140: 3d 3d 34 20 29 7b 0a 20 20 20 20 7a 50 72 6f 63  ==4 ){.    zProc
a150: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
a160: 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 7d 0a 0a  (objv[3]);.  }..
a170: 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65    /* Extract the
a180: 20 43 20 64 61 74 61 62 61 73 65 20 68 61 6e 64   C database hand
a190: 6c 65 20 66 72 6f 6d 20 74 68 65 20 54 63 6c 20  le from the Tcl 
a1a0: 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 20 2a 2f 0a  command name */.
a1b0: 20 20 69 66 28 20 21 54 63 6c 5f 47 65 74 43 6f    if( !Tcl_GetCo
a1c0: 6d 6d 61 6e 64 49 6e 66 6f 28 69 6e 74 65 72 70  mmandInfo(interp
a1d0: 2c 20 7a 44 62 2c 20 26 63 6d 64 49 6e 66 6f 29  , zDb, &cmdInfo)
a1e0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
a1f0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
a200: 20 22 63 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f   "command not fo
a210: 75 6e 64 3a 20 22 2c 20 7a 44 62 2c 20 28 63 68  und: ", zDb, (ch
a220: 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 65 74 75  ar*)0);.    retu
a230: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
a240: 7d 0a 20 20 64 62 20 3d 20 28 28 73 74 72 75 63  }.  db = ((struc
a250: 74 20 53 71 6c 69 74 65 44 62 2a 29 63 6d 64 49  t SqliteDb*)cmdI
a260: 6e 66 6f 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74  nfo.objClientDat
a270: 61 29 2d 3e 64 62 3b 0a 20 20 61 73 73 65 72 74  a)->db;.  assert
a280: 28 64 62 29 3b 0a 0a 20 20 2f 2a 20 43 61 6c 6c  (db);..  /* Call
a290: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
a2a0: 43 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 61  C function. If a
a2b0: 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  n error occurs, 
a2c0: 73 65 74 20 72 63 20 74 6f 20 0a 20 20 2a 2a 20  set rc to .  ** 
a2d0: 54 43 4c 5f 45 52 52 4f 52 20 61 6e 64 20 6c 6f  TCL_ERROR and lo
a2e0: 61 64 20 61 6e 79 20 65 72 72 6f 72 20 73 74 72  ad any error str
a2f0: 69 6e 67 20 69 6e 74 6f 20 74 68 65 20 69 6e 74  ing into the int
a300: 65 72 70 72 65 74 65 72 2e 20 49 66 20 6e 6f 20  erpreter. If no 
a310: 0a 20 20 2a 2a 20 65 72 72 6f 72 20 6f 63 63 75  .  ** error occu
a320: 72 73 2c 20 73 65 74 20 72 63 20 74 6f 20 54 43  rs, set rc to TC
a330: 4c 5f 4f 4b 2e 0a 20 20 2a 2f 0a 23 69 66 64 65  L_OK..  */.#ifde
a340: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
a350: 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 72  AD_EXTENSION.  r
a360: 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
a370: 3b 0a 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74  ;.  zErr = sqlit
a380: 65 33 5f 6d 70 72 69 6e 74 66 28 22 74 68 69 73  e3_mprintf("this
a390: 20 62 75 69 6c 64 20 6f 6d 69 74 73 20 73 71 6c   build omits sql
a3a0: 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  ite3_load_extens
a3b0: 69 6f 6e 28 29 22 29 3b 0a 23 65 6c 73 65 0a 20  ion()");.#else. 
a3c0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6c 6f   rc = sqlite3_lo
a3d0: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 64 62 2c  ad_extension(db,
a3e0: 20 7a 46 69 6c 65 2c 20 7a 50 72 6f 63 2c 20 26   zFile, zProc, &
a3f0: 7a 45 72 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20  zErr);.#endif.  
a400: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
a410: 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  K ){.    Tcl_Set
a420: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
a430: 45 72 72 20 3f 20 7a 45 72 72 20 3a 20 22 22 2c  Err ? zErr : "",
a440: 20 54 43 4c 5f 56 4f 4c 41 54 49 4c 45 29 3b 0a   TCL_VOLATILE);.
a450: 20 20 20 20 72 63 20 3d 20 54 43 4c 5f 45 52 52      rc = TCL_ERR
a460: 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  OR;.  }else{.   
a470: 20 72 63 20 3d 20 54 43 4c 5f 4f 4b 3b 0a 20 20   rc = TCL_OK;.  
a480: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  }.  sqlite3_free
a490: 28 7a 45 72 72 29 3b 0a 0a 20 20 72 65 74 75 72  (zErr);..  retur
a4a0: 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  n rc;.}../*.** U
a4b0: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 65 6e  sage: sqlite3_en
a4c0: 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  able_load_extens
a4d0: 69 6f 6e 20 44 42 2d 48 41 4e 44 4c 45 20 4f 4e  ion DB-HANDLE ON
a4e0: 4f 46 46 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  OFF.*/.static in
a4f0: 74 20 74 65 73 74 5f 65 6e 61 62 6c 65 5f 6c 6f  t test_enable_lo
a500: 61 64 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61  ad(.  ClientData
a510: 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20   clientData, /* 
a520: 4e 6f 74 20 75 73 65 64 20 2a 2f 0a 20 20 54 63  Not used */.  Tc
a530: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
a540: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
a550: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
a560: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
a570: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f  mmand */.  int o
a580: 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  bjc,            
a590: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
a5a0: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63  rguments */.  Tc
a5b0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
a5c0: 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20  v[]  /* Command 
a5d0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a  arguments */.){.
a5e0: 20 20 54 63 6c 5f 43 6d 64 49 6e 66 6f 20 63 6d    Tcl_CmdInfo cm
a5f0: 64 49 6e 66 6f 3b 0a 20 20 73 71 6c 69 74 65 33  dInfo;.  sqlite3
a600: 20 2a 64 62 3b 0a 20 20 63 68 61 72 20 2a 7a 44   *db;.  char *zD
a610: 62 3b 0a 20 20 69 6e 74 20 6f 6e 6f 66 66 3b 0a  b;.  int onoff;.
a620: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
a630: 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
a640: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
a650: 2c 20 6f 62 6a 76 2c 20 22 44 42 2d 48 41 4e 44  , objv, "DB-HAND
a660: 4c 45 20 4f 4e 4f 46 46 22 29 3b 0a 20 20 20 20  LE ONOFF");.    
a670: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
a680: 3b 0a 20 20 7d 0a 20 20 7a 44 62 20 3d 20 54 63  ;.  }.  zDb = Tc
a690: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
a6a0: 5b 31 5d 29 3b 0a 0a 20 20 2f 2a 20 45 78 74 72  [1]);..  /* Extr
a6b0: 61 63 74 20 74 68 65 20 43 20 64 61 74 61 62 61  act the C databa
a6c0: 73 65 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74  se handle from t
a6d0: 68 65 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 20 6e  he Tcl command n
a6e0: 61 6d 65 20 2a 2f 0a 20 20 69 66 28 20 21 54 63  ame */.  if( !Tc
a6f0: 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64 49 6e 66 6f  l_GetCommandInfo
a700: 28 69 6e 74 65 72 70 2c 20 7a 44 62 2c 20 26 63  (interp, zDb, &c
a710: 6d 64 49 6e 66 6f 29 20 29 7b 0a 20 20 20 20 54  mdInfo) ){.    T
a720: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
a730: 69 6e 74 65 72 70 2c 20 22 63 6f 6d 6d 61 6e 64  interp, "command
a740: 20 6e 6f 74 20 66 6f 75 6e 64 3a 20 22 2c 20 7a   not found: ", z
a750: 44 62 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20  Db, (char*)0);. 
a760: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
a770: 52 4f 52 3b 0a 20 20 7d 0a 20 20 64 62 20 3d 20  ROR;.  }.  db = 
a780: 28 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 44  ((struct SqliteD
a790: 62 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62 6a 43 6c  b*)cmdInfo.objCl
a7a0: 69 65 6e 74 44 61 74 61 29 2d 3e 64 62 3b 0a 20  ientData)->db;. 
a7b0: 20 61 73 73 65 72 74 28 64 62 29 3b 0a 0a 20 20   assert(db);..  
a7c0: 2f 2a 20 47 65 74 20 74 68 65 20 6f 6e 6f 66 66  /* Get the onoff
a7d0: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
a7e0: 69 66 28 20 54 63 6c 5f 47 65 74 42 6f 6f 6c 65  if( Tcl_GetBoole
a7f0: 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  anFromObj(interp
a800: 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 6f 6e 6f 66  , objv[2], &onof
a810: 66 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  f) ){.    return
a820: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
a830: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
a840: 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
a850: 4f 4e 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  ON.  Tcl_AppendR
a860: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 74  esult(interp, "t
a870: 68 69 73 20 62 75 69 6c 64 20 6f 6d 69 74 73 20  his build omits 
a880: 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
a890: 65 6e 73 69 6f 6e 28 29 22 29 3b 0a 20 20 72 65  ension()");.  re
a8a0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
a8b0: 23 65 6c 73 65 0a 20 20 73 71 6c 69 74 65 33 5f  #else.  sqlite3_
a8c0: 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65  enable_load_exte
a8d0: 6e 73 69 6f 6e 28 64 62 2c 20 6f 6e 6f 66 66 29  nsion(db, onoff)
a8e0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
a8f0: 4b 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a  K;.#endif.}../*.
a900: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
a910: 65 5f 61 62 6f 72 74 0a 2a 2a 0a 2a 2a 20 53 68  e_abort.**.** Sh
a920: 75 74 64 6f 77 6e 20 74 68 65 20 70 72 6f 63 65  utdown the proce
a930: 73 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  ss immediately. 
a940: 20 54 68 69 73 20 69 73 20 6e 6f 74 20 61 20 63   This is not a c
a950: 6c 65 61 6e 20 73 68 75 74 64 6f 77 6e 2e 0a 2a  lean shutdown..*
a960: 2a 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69  * This command i
a970: 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 74  s used to test t
a980: 68 65 20 72 65 63 6f 76 65 72 61 62 69 6c 69 74  he recoverabilit
a990: 79 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 20  y of a database 
a9a0: 69 6e 0a 2a 2a 20 74 68 65 20 65 76 65 6e 74 20  in.** the event 
a9b0: 6f 66 20 61 20 70 72 6f 67 72 61 6d 20 63 72 61  of a program cra
a9c0: 73 68 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  sh..*/.static in
a9d0: 74 20 73 71 6c 69 74 65 5f 61 62 6f 72 74 28 0a  t sqlite_abort(.
a9e0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
a9f0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
aa00: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
aa10: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
aa20: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
aa30: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
aa40: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
aa50: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
aa60: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
aa70: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
aa80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
aa90: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
aaa0: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 61 73 73 65 72  nt */.){.  asser
aab0: 74 28 20 69 6e 74 65 72 70 3d 3d 30 20 29 3b 20  t( interp==0 ); 
aac0: 20 20 2f 2a 20 54 68 69 73 20 77 69 6c 6c 20 61    /* This will a
aad0: 6c 77 61 79 73 20 66 61 69 6c 20 2a 2f 0a 20 20  lways fail */.  
aae0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
aaf0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
ab00: 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 20 69 73  owing routine is
ab10: 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20   a user-defined 
ab20: 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77 68 6f  SQL function who
ab30: 73 65 20 70 75 72 70 6f 73 65 0a 2a 2a 20 69 73  se purpose.** is
ab40: 20 74 6f 20 74 65 73 74 20 74 68 65 20 73 71 6c   to test the sql
ab50: 69 74 65 5f 73 65 74 5f 72 65 73 75 6c 74 28 29  ite_set_result()
ab60: 20 41 50 49 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   API..*/.static 
ab70: 76 6f 69 64 20 74 65 73 74 46 75 6e 63 28 73 71  void testFunc(sq
ab80: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
ab90: 6f 6e 74 65 78 74 2c 20 69 6e 74 20 61 72 67 63  ontext, int argc
aba0: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  , sqlite3_value 
abb0: 2a 2a 61 72 67 76 29 7b 0a 20 20 77 68 69 6c 65  **argv){.  while
abc0: 28 20 61 72 67 63 3e 3d 32 20 29 7b 0a 20 20 20  ( argc>=2 ){.   
abd0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72   const char *zAr
abe0: 67 30 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69  g0 = (char*)sqli
abf0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61  te3_value_text(a
ac00: 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20 69 66 28  rgv[0]);.    if(
ac10: 20 7a 41 72 67 30 20 29 7b 0a 20 20 20 20 20 20   zArg0 ){.      
ac20: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
ac30: 72 49 43 6d 70 28 7a 41 72 67 30 2c 20 22 69 6e  rICmp(zArg0, "in
ac40: 74 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73  t") ){.        s
ac50: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
ac60: 74 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69 74  t(context, sqlit
ac70: 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72 67  e3_value_int(arg
ac80: 76 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d 65  v[1]));.      }e
ac90: 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
aca0: 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 69 6e  trICmp(zArg0,"in
acb0: 74 36 34 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  t64")==0 ){.    
acc0: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
acd0: 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74  lt_int64(context
ace0: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
acf0: 69 6e 74 36 34 28 61 72 67 76 5b 31 5d 29 29 3b  int64(argv[1]));
ad00: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
ad10: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
ad20: 7a 41 72 67 30 2c 22 73 74 72 69 6e 67 22 29 3d  zArg0,"string")=
ad30: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
ad40: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
ad50: 74 28 63 6f 6e 74 65 78 74 2c 20 28 63 68 61 72  t(context, (char
ad60: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
ad70: 74 65 78 74 28 61 72 67 76 5b 31 5d 29 2c 20 2d  text(argv[1]), -
ad80: 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  1,.            S
ad90: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
ada0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
adb0: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
adc0: 28 7a 41 72 67 30 2c 22 64 6f 75 62 6c 65 22 29  (zArg0,"double")
add0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
ade0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f  qlite3_result_do
adf0: 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 73 71  uble(context, sq
ae00: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62  lite3_value_doub
ae10: 6c 65 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20 20  le(argv[1]));.  
ae20: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71      }else if( sq
ae30: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72  lite3StrICmp(zAr
ae40: 67 30 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b  g0,"null")==0 ){
ae50: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
ae60: 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e  _result_null(con
ae70: 74 65 78 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  text);.      }el
ae80: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
ae90: 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 76 61 6c  rICmp(zArg0,"val
aea0: 75 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ue")==0 ){.     
aeb0: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
aec0: 74 5f 76 61 6c 75 65 28 63 6f 6e 74 65 78 74 2c  t_value(context,
aed0: 20 61 72 67 76 5b 73 71 6c 69 74 65 33 5f 76 61   argv[sqlite3_va
aee0: 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b 31 5d 29  lue_int(argv[1])
aef0: 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ]);.      }else{
af00: 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 65 72  .        goto er
af10: 72 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  ror_out;.      }
af20: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
af30: 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74    goto error_out
af40: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 72 67 63  ;.    }.    argc
af50: 20 2d 3d 20 32 3b 0a 20 20 20 20 61 72 67 76 20   -= 2;.    argv 
af60: 2b 3d 20 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75  += 2;.  }.  retu
af70: 72 6e 3b 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a  rn;..error_out:.
af80: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
af90: 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 22  _error(context,"
afa0: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 73  first argument s
afb0: 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a  hould be one of:
afc0: 20 22 0a 20 20 20 20 20 20 22 69 6e 74 20 69 6e   ".      "int in
afd0: 74 36 34 20 73 74 72 69 6e 67 20 64 6f 75 62 6c  t64 string doubl
afe0: 65 20 6e 75 6c 6c 20 76 61 6c 75 65 22 2c 20 2d  e null value", -
aff0: 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  1);.}../*.** Usa
b000: 67 65 3a 20 20 20 73 71 6c 69 74 65 5f 72 65 67  ge:   sqlite_reg
b010: 69 73 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74  ister_test_funct
b020: 69 6f 6e 20 20 44 42 20 20 4e 41 4d 45 0a 2a 2a  ion  DB  NAME.**
b030: 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 74 68 65  .** Register the
b040: 20 74 65 73 74 20 53 51 4c 20 66 75 6e 63 74 69   test SQL functi
b050: 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  on on the databa
b060: 73 65 20 44 42 20 75 6e 64 65 72 20 74 68 65 20  se DB under the 
b070: 6e 61 6d 65 20 4e 41 4d 45 2e 0a 2a 2f 0a 73 74  name NAME..*/.st
b080: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65  atic int test_re
b090: 67 69 73 74 65 72 5f 66 75 6e 63 28 0a 20 20 76  gister_func(.  v
b0a0: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
b0b0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
b0c0: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
b0d0: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
b0e0: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
b0f0: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
b100: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
b110: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
b120: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
b130: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
b140: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
b150: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
b160: 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  */.){.  sqlite3 
b170: 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *db;.  int rc;. 
b180: 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a   if( argc!=3 ){.
b190: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
b1a0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
b1b0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
b1c0: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
b1d0: 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42  0], .       " DB
b1e0: 20 46 55 4e 43 54 49 4f 4e 2d 4e 41 4d 45 22 2c   FUNCTION-NAME",
b1f0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
b200: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
b210: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
b220: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
b230: 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
b240: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63   TCL_ERROR;.  rc
b250: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
b260: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 61  e_function(db, a
b270: 72 67 76 5b 32 5d 2c 20 2d 31 2c 20 53 51 4c 49  rgv[2], -1, SQLI
b280: 54 45 5f 55 54 46 38 2c 20 30 2c 20 0a 20 20 20  TE_UTF8, 0, .   
b290: 20 20 20 74 65 73 74 46 75 6e 63 2c 20 30 2c 20     testFunc, 0, 
b2a0: 30 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 30 20  0);.  if( rc!=0 
b2b0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
b2c0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
b2d0: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63  sqlite3ErrStr(rc
b2e0: 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ), 0);.    retur
b2f0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
b300: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
b310: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
b320: 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
b330: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
b340: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
b350: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
b360: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
b370: 20 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 46 69    STMT .**.** Fi
b380: 6e 61 6c 69 7a 65 20 61 20 73 74 61 74 65 6d 65  nalize a stateme
b390: 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73 74  nt handle..*/.st
b3a0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 66 69  atic int test_fi
b3b0: 6e 61 6c 69 7a 65 28 0a 20 20 76 6f 69 64 20 2a  nalize(.  void *
b3c0: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
b3d0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
b3e0: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
b3f0: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
b400: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
b410: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
b420: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c  .  int rc;.  sql
b430: 69 74 65 33 20 2a 64 62 20 3d 20 30 3b 0a 0a 20  ite3 *db = 0;.. 
b440: 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
b450: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
b460: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
b470: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
b480: 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
b490: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
b4a0: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
b4b0: 20 30 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20   0), " <STMT>", 
b4c0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
b4d0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
b4e0: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
b4f0: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
b500: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
b510: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
b520: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
b530: 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a  .  if( pStmt ){.
b540: 20 20 20 20 64 62 20 3d 20 53 74 6d 74 54 6f 44      db = StmtToD
b550: 62 28 70 53 74 6d 74 29 3b 0a 20 20 7d 0a 20 20  b(pStmt);.  }.  
b560: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e  rc = sqlite3_fin
b570: 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
b580: 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
b590: 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31  terp, (char *)t1
b5a0: 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54  ErrorName(rc), T
b5b0: 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 69 66  CL_STATIC);.  if
b5c0: 28 20 64 62 20 26 26 20 73 71 6c 69 74 65 33 54  ( db && sqlite3T
b5d0: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
b5e0: 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74  p, db, rc) ) ret
b5f0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
b600: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
b610: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
b620: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 20   sqlite3_reset  
b630: 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 73 65  STMT .**.** Rese
b640: 74 20 61 20 73 74 61 74 65 6d 65 6e 74 20 68 61  t a statement ha
b650: 6e 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ndle..*/.static 
b660: 69 6e 74 20 74 65 73 74 5f 72 65 73 65 74 28 0a  int test_reset(.
b670: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
b680: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
b690: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
b6a0: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
b6b0: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
b6c0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
b6d0: 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72   *pStmt;.  int r
b6e0: 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
b6f0: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
b700: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
b710: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
b720: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
b730: 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53          Tcl_GetS
b740: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
b750: 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54 4d  v[0], 0), " <STM
b760: 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  T>", 0);.    ret
b770: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
b780: 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
b790: 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
b7a0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
b7b0: 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
b7c0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
b7d0: 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
b7e0: 69 74 65 33 5f 72 65 73 65 74 28 70 53 74 6d 74  ite3_reset(pStmt
b7f0: 29 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 20 26  );.  if( pStmt &
b800: 26 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  & sqlite3TestErr
b810: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d  Code(interp, Stm
b820: 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63  tToDb(pStmt), rc
b830: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
b840: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
b850: 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
b860: 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74  nterp, (char *)t
b870: 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  1ErrorName(rc), 
b880: 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 2f 2a 0a  TCL_STATIC);./*.
b890: 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
b8a0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
b8b0: 3b 0a 20 20 7d 0a 2a 2f 0a 20 20 72 65 74 75 72  ;.  }.*/.  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 65 78 70 69 72 65 64 20 53 54 4d 54 20  e3_expired STMT 
b8f0: 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52  .**.** Return TR
b900: 55 45 20 69 66 20 61 20 72 65 63 6f 6d 70 69 6c  UE if a recompil
b910: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74 61  ation of the sta
b920: 74 65 6d 65 6e 74 20 69 73 20 72 65 63 6f 6d 6d  tement is recomm
b930: 65 6e 64 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  ended..*/.static
b940: 20 69 6e 74 20 74 65 73 74 5f 65 78 70 69 72 65   int test_expire
b950: 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  d(.  void * clie
b960: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
b970: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
b980: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
b990: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
b9a0: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
b9b0: 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 66  tmt *pStmt;.  if
b9c0: 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
b9d0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
b9e0: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
b9f0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
ba00: 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
ba10: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
ba20: 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
ba30: 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b  , " <STMT>", 0);
ba40: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
ba50: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
ba60: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
ba70: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
ba80: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
ba90: 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
baa0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63   TCL_ERROR;.  Tc
bab0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
bac0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42 6f  nterp, Tcl_NewBo
bad0: 6f 6c 65 61 6e 4f 62 6a 28 73 71 6c 69 74 65 33  oleanObj(sqlite3
bae0: 5f 65 78 70 69 72 65 64 28 70 53 74 6d 74 29 29  _expired(pStmt))
baf0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
bb00: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
bb10: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 74 72 61  ge:  sqlite3_tra
bb20: 6e 73 66 65 72 5f 62 69 6e 64 69 6e 67 73 20 46  nsfer_bindings F
bb30: 52 4f 4d 53 54 4d 54 20 54 4f 53 54 4d 54 0a 2a  ROMSTMT TOSTMT.*
bb40: 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 61 6c  *.** Transfer al
bb50: 6c 20 62 69 6e 64 69 6e 67 73 20 66 72 6f 6d 20  l bindings from 
bb60: 46 52 4f 4d 53 54 4d 54 20 6f 76 65 72 20 74 6f  FROMSTMT over to
bb70: 20 54 4f 53 54 4d 54 0a 2a 2f 0a 73 74 61 74 69   TOSTMT.*/.stati
bb80: 63 20 69 6e 74 20 74 65 73 74 5f 74 72 61 6e 73  c int test_trans
bb90: 66 65 72 5f 62 69 6e 64 28 0a 20 20 76 6f 69 64  fer_bind(.  void
bba0: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
bbb0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
bbc0: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
bbd0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
bbe0: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
bbf0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
bc00: 74 31 2c 20 2a 70 53 74 6d 74 32 3b 0a 20 20 69  t1, *pStmt2;.  i
bc10: 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20  f( objc!=3 ){.  
bc20: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
bc30: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
bc40: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
bc50: 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
bc60: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
bc70: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
bc80: 29 2c 20 22 20 46 52 4f 4d 2d 53 54 4d 54 20 54  ), " FROM-STMT T
bc90: 4f 2d 53 54 4d 54 22 2c 20 30 29 3b 0a 20 20 20  O-STMT", 0);.   
bca0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
bcb0: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
bcc0: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
bcd0: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
bce0: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
bcf0: 6d 74 31 29 29 20 72 65 74 75 72 6e 20 54 43 4c  mt1)) return TCL
bd00: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 67 65  _ERROR;.  if( ge
bd10: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
bd20: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
bd30: 6e 67 28 6f 62 6a 76 5b 32 5d 29 2c 20 26 70 53  ng(objv[2]), &pS
bd40: 74 6d 74 32 29 29 20 72 65 74 75 72 6e 20 54 43  tmt2)) return TC
bd50: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53  L_ERROR;.  Tcl_S
bd60: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
bd70: 72 70 2c 20 0a 20 20 20 20 20 54 63 6c 5f 4e 65  rp, .     Tcl_Ne
bd80: 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f  wIntObj(sqlite3_
bd90: 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 69 6e 67  transfer_binding
bda0: 73 28 70 53 74 6d 74 31 2c 70 53 74 6d 74 32 29  s(pStmt1,pStmt2)
bdb0: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
bdc0: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
bdd0: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 63 68  age:  sqlite3_ch
bde0: 61 6e 67 65 73 20 44 42 0a 2a 2a 0a 2a 2a 20 52  anges DB.**.** R
bdf0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
be00: 20 6f 66 20 63 68 61 6e 67 65 73 20 6d 61 64 65   of changes made
be10: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
be20: 20 62 79 20 74 68 65 20 6c 61 73 74 20 53 51 4c   by the last SQL
be30: 0a 2a 2a 20 65 78 65 63 75 74 69 6f 6e 2e 0a 2a  .** execution..*
be40: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
be50: 74 5f 63 68 61 6e 67 65 73 28 0a 20 20 76 6f 69  t_changes(.  voi
be60: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
be70: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
be80: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
be90: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
bea0: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
beb0: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66  qlite3 *db;.  if
bec0: 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
bed0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
bee0: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
bef0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
bf00: 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 54  be \"",.       T
bf10: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
bf20: 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30 29  v[0]), " DB", 0)
bf30: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
bf40: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
bf50: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
bf60: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
bf70: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
bf80: 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
bf90: 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65  _ERROR;.  Tcl_Se
bfa0: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
bfb0: 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a  p, Tcl_NewIntObj
bfc0: 28 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73  (sqlite3_changes
bfd0: 28 64 62 29 29 29 3b 0a 20 20 72 65 74 75 72 6e  (db)));.  return
bfe0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
bff0: 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 22 73  * This is the "s
c000: 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65  tatic_bind_value
c010: 22 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 73  " that variables
c020: 20 61 72 65 20 62 6f 75 6e 64 20 74 6f 20 77 68   are bound to wh
c030: 65 6e 0a 2a 2a 20 74 68 65 20 46 4c 41 47 20 6f  en.** the FLAG o
c040: 70 74 69 6f 6e 20 6f 66 20 73 71 6c 69 74 65 33  ption of sqlite3
c050: 5f 62 69 6e 64 20 69 73 20 22 73 74 61 74 69 63  _bind is "static
c060: 22 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72  ".*/.static char
c070: 20 2a 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f   *sqlite_static_
c080: 62 69 6e 64 5f 76 61 6c 75 65 20 3d 20 30 3b 0a  bind_value = 0;.
c090: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
c0a0: 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 6e 62  e_static_bind_nb
c0b0: 79 74 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20  yte = 0;../*.** 
c0c0: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
c0d0: 62 69 6e 64 20 20 56 4d 20 20 49 44 58 20 20 56  bind  VM  IDX  V
c0e0: 41 4c 55 45 20 20 46 4c 41 47 53 0a 2a 2a 0a 2a  ALUE  FLAGS.**.*
c0f0: 2a 20 53 65 74 73 20 74 68 65 20 76 61 6c 75 65  * Sets the value
c100: 20 6f 66 20 74 68 65 20 49 44 58 2d 74 68 20 6f   of the IDX-th o
c110: 63 63 75 72 61 6e 63 65 20 6f 66 20 22 3f 22 20  ccurance of "?" 
c120: 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  in the original 
c130: 53 51 4c 0a 2a 2a 20 73 74 72 69 6e 67 2e 20 20  SQL.** string.  
c140: 56 41 4c 55 45 20 69 73 20 74 68 65 20 6e 65 77  VALUE is the new
c150: 20 76 61 6c 75 65 2e 20 20 49 66 20 46 4c 41 47   value.  If FLAG
c160: 53 3d 3d 22 6e 75 6c 6c 22 20 74 68 65 6e 20 56  S=="null" then V
c170: 41 4c 55 45 20 69 73 0a 2a 2a 20 69 67 6e 6f 72  ALUE is.** ignor
c180: 65 64 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ed and the value
c190: 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
c1a0: 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 73 74 61    If FLAGS=="sta
c1b0: 74 69 63 22 20 74 68 65 6e 0a 2a 2a 20 74 68 65  tic" then.** the
c1c0: 20 76 61 6c 75 65 20 69 73 20 73 65 74 20 74 6f   value is set to
c1d0: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20   the value of a 
c1e0: 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65 20  static variable 
c1f0: 6e 61 6d 65 64 0a 2a 2a 20 22 73 71 6c 69 74 65  named.** "sqlite
c200: 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c  _static_bind_val
c210: 75 65 22 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d  ue".  If FLAGS==
c220: 22 6e 6f 72 6d 61 6c 22 20 74 68 65 6e 20 61 20  "normal" then a 
c230: 63 6f 70 79 0a 2a 2a 20 6f 66 20 74 68 65 20 56  copy.** of the V
c240: 41 4c 55 45 20 69 73 20 6d 61 64 65 2e 20 20 49  ALUE is made.  I
c250: 66 20 46 4c 41 47 53 3d 3d 22 62 6c 6f 62 31 30  f FLAGS=="blob10
c260: 22 20 74 68 65 6e 20 61 20 56 41 4c 55 45 20 69  " then a VALUE i
c270: 73 20 69 67 6e 6f 72 65 64 0a 2a 2a 20 61 6e 20  s ignored.** an 
c280: 61 20 31 30 2d 62 79 74 65 20 62 6c 6f 62 20 22  a 10-byte blob "
c290: 61 62 63 5c 30 30 30 78 79 7a 5c 30 30 30 70 71  abc\000xyz\000pq
c2a0: 22 20 69 73 20 69 6e 73 65 72 74 65 64 2e 0a 2a  " is inserted..*
c2b0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
c2c0: 74 5f 62 69 6e 64 28 0a 20 20 76 6f 69 64 20 2a  t_bind(.  void *
c2d0: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
c2e0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
c2f0: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
c300: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
c310: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
c320: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
c330: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
c340: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
c350: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
c360: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
c370: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
c380: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
c390: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
c3a0: 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63  *pStmt;.  int rc
c3b0: 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69  ;.  int idx;.  i
c3c0: 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20 20  f( argc!=5 ){.  
c3d0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
c3e0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
c3f0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
c400: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
c410: 2c 20 0a 20 20 20 20 20 20 20 22 20 56 4d 20 49  , .       " VM I
c420: 44 58 20 56 41 4c 55 45 20 28 6e 75 6c 6c 7c 73  DX VALUE (null|s
c430: 74 61 74 69 63 7c 6e 6f 72 6d 61 6c 29 5c 22 22  tatic|normal)\""
c440: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
c450: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
c460: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
c470: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
c480: 76 5b 31 5d 2c 20 26 70 53 74 6d 74 29 20 29 20  v[1], &pStmt) ) 
c490: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
c4a0: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
c4b0: 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  nt(interp, argv[
c4c0: 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74 75  2], &idx) ) retu
c4d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
c4e0: 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b  if( strcmp(argv[
c4f0: 34 5d 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b  4],"null")==0 ){
c500: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
c510: 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d  3_bind_null(pStm
c520: 74 2c 20 69 64 78 29 3b 0a 20 20 7d 65 6c 73 65  t, idx);.  }else
c530: 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76   if( strcmp(argv
c540: 5b 34 5d 2c 22 73 74 61 74 69 63 22 29 3d 3d 30  [4],"static")==0
c550: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
c560: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70  ite3_bind_text(p
c570: 53 74 6d 74 2c 20 69 64 78 2c 20 73 71 6c 69 74  Stmt, idx, sqlit
c580: 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61  e_static_bind_va
c590: 6c 75 65 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 7d  lue, -1, 0);.  }
c5a0: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
c5b0: 61 72 67 76 5b 34 5d 2c 22 73 74 61 74 69 63 2d  argv[4],"static-
c5c0: 6e 62 79 74 65 73 22 29 3d 3d 30 20 29 7b 0a 20  nbytes")==0 ){. 
c5d0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
c5e0: 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c  bind_text(pStmt,
c5f0: 20 69 64 78 2c 20 73 71 6c 69 74 65 5f 73 74 61   idx, sqlite_sta
c600: 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 2c 0a  tic_bind_value,.
c610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c630: 20 20 20 20 20 20 20 73 71 6c 69 74 65 5f 73 74         sqlite_st
c640: 61 74 69 63 5f 62 69 6e 64 5f 6e 62 79 74 65 2c  atic_bind_nbyte,
c650: 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   0);.  }else if(
c660: 20 73 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c   strcmp(argv[4],
c670: 22 6e 6f 72 6d 61 6c 22 29 3d 3d 30 20 29 7b 0a  "normal")==0 ){.
c680: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
c690: 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74  _bind_text(pStmt
c6a0: 2c 20 69 64 78 2c 20 61 72 67 76 5b 33 5d 2c 20  , idx, argv[3], 
c6b0: 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  -1, SQLITE_TRANS
c6c0: 49 45 4e 54 29 3b 0a 20 20 7d 65 6c 73 65 20 69  IENT);.  }else i
c6d0: 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b 34  f( strcmp(argv[4
c6e0: 5d 2c 22 62 6c 6f 62 31 30 22 29 3d 3d 30 20 29  ],"blob10")==0 )
c6f0: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
c700: 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74  e3_bind_text(pSt
c710: 6d 74 2c 20 69 64 78 2c 20 22 61 62 63 5c 30 30  mt, idx, "abc\00
c720: 30 78 79 7a 5c 30 30 30 70 71 22 2c 20 31 30 2c  0xyz\000pq", 10,
c730: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
c740: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 54 63  .  }else{.    Tc
c750: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
c760: 6e 74 65 72 70 2c 20 22 34 74 68 20 61 72 67 75  nterp, "4th argu
c770: 6d 65 6e 74 20 73 68 6f 75 6c 64 20 62 65 20 22  ment should be "
c780: 0a 20 20 20 20 20 20 20 20 22 5c 22 6e 75 6c 6c  .        "\"null
c790: 5c 22 20 6f 72 20 5c 22 73 74 61 74 69 63 5c 22  \" or \"static\"
c7a0: 20 6f 72 20 5c 22 6e 6f 72 6d 61 6c 5c 22 22 2c   or \"normal\"",
c7b0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
c7c0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
c7d0: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
c7e0: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
c7f0: 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c  StmtToDb(pStmt),
c800: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
c810: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  L_ERROR;.  if( r
c820: 63 20 29 7b 0a 20 20 20 20 63 68 61 72 20 7a 42  c ){.    char zB
c830: 75 66 5b 35 30 5d 3b 0a 20 20 20 20 73 70 72 69  uf[50];.    spri
c840: 6e 74 66 28 7a 42 75 66 2c 20 22 28 25 64 29 20  ntf(zBuf, "(%d) 
c850: 22 2c 20 72 63 29 3b 0a 20 20 20 20 54 63 6c 5f  ", rc);.    Tcl_
c860: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
c870: 65 72 70 2c 20 7a 42 75 66 2c 20 73 71 6c 69 74  erp, zBuf, sqlit
c880: 65 33 45 72 72 53 74 72 28 72 63 29 2c 20 30 29  e3ErrStr(rc), 0)
c890: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
c8a0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65  _ERROR;.  }.  re
c8b0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
c8c0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
c8d0: 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20  MIT_UTF16./*.** 
c8e0: 55 73 61 67 65 3a 20 61 64 64 5f 74 65 73 74 5f  Usage: add_test_
c8f0: 63 6f 6c 6c 61 74 65 20 3c 64 62 20 70 74 72 3e  collate <db ptr>
c900: 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c 65   <utf8> <utf16le
c910: 3e 20 3c 75 74 66 31 36 62 65 3e 0a 2a 2a 0a 2a  > <utf16be>.**.*
c920: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
c930: 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20  is used to test 
c940: 74 68 61 74 20 53 51 4c 69 74 65 20 73 65 6c 65  that SQLite sele
c950: 63 74 73 20 74 68 65 20 63 6f 72 72 65 63 74 20  cts the correct 
c960: 63 6f 6c 6c 61 74 69 6f 6e 0a 2a 2a 20 73 65 71  collation.** seq
c970: 75 65 6e 63 65 20 63 61 6c 6c 62 61 63 6b 20 77  uence callback w
c980: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 76 65 72  hen multiple ver
c990: 73 69 6f 6e 73 20 28 66 6f 72 20 64 69 66 66 65  sions (for diffe
c9a0: 72 65 6e 74 20 74 65 78 74 20 65 6e 63 6f 64 69  rent text encodi
c9b0: 6e 67 73 29 0a 2a 2a 20 61 72 65 20 61 76 61 69  ngs).** are avai
c9c0: 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c  lable..**.** Cal
c9d0: 6c 69 6e 67 20 74 68 69 73 20 72 6f 75 74 69 6e  ling this routin
c9e0: 65 20 72 65 67 69 73 74 65 72 73 20 74 68 65 20  e registers the 
c9f0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
ca00: 63 65 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65  ce "test_collate
ca10: 22 0a 2a 2a 20 77 69 74 68 20 64 61 74 61 62 61  ".** with databa
ca20: 73 65 20 68 61 6e 64 6c 65 20 3c 64 62 3e 2e 20  se handle <db>. 
ca30: 54 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d  The second argum
ca40: 65 6e 74 20 6d 75 73 74 20 62 65 20 61 20 6c 69  ent must be a li
ca50: 73 74 20 6f 66 20 74 68 72 65 65 0a 2a 2a 20 62  st of three.** b
ca60: 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 73 2e 20 49  oolean values. I
ca70: 66 20 74 68 65 20 66 69 72 73 74 20 69 73 20 74  f the first is t
ca80: 72 75 65 2c 20 74 68 65 6e 20 61 20 76 65 72 73  rue, then a vers
ca90: 69 6f 6e 20 6f 66 20 74 65 73 74 5f 63 6f 6c 6c  ion of test_coll
caa0: 61 74 65 20 69 73 0a 2a 2a 20 72 65 67 69 73 74  ate is.** regist
cab0: 65 72 65 64 20 66 6f 72 20 55 54 46 2d 38 2c 20  ered for UTF-8, 
cac0: 69 66 20 74 68 65 20 73 65 63 6f 6e 64 20 69 73  if the second is
cad0: 20 74 72 75 65 2c 20 61 20 76 65 72 73 69 6f 6e   true, a version
cae0: 20 69 73 20 72 65 67 69 73 74 65 72 65 64 20 66   is registered f
caf0: 6f 72 0a 2a 2a 20 55 54 46 2d 31 36 6c 65 2c 20  or.** UTF-16le, 
cb00: 69 66 20 74 68 65 20 74 68 69 72 64 20 69 73 20  if the third is 
cb10: 74 72 75 65 2c 20 61 20 55 54 46 2d 31 36 62 65  true, a UTF-16be
cb20: 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76 61 69   version is avai
cb30: 6c 61 62 6c 65 2e 0a 2a 2a 20 50 72 65 76 69 6f  lable..** Previo
cb40: 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74  us versions of t
cb50: 65 73 74 5f 63 6f 6c 6c 61 74 65 20 61 72 65 20  est_collate are 
cb60: 64 65 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  deleted..**.** T
cb70: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
cb80: 75 65 6e 63 65 20 74 65 73 74 5f 63 6f 6c 6c 61  uence test_colla
cb90: 74 65 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  te is implemente
cba0: 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74 68 65  d by calling the
cbb0: 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 54 43  .** following TC
cbc0: 4c 20 73 63 72 69 70 74 3a 0a 2a 2a 0a 2a 2a 20  L script:.**.** 
cbd0: 20 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20    "test_collate 
cbe0: 3c 65 6e 63 3e 20 3c 6c 68 73 3e 20 3c 72 68 73  <enc> <lhs> <rhs
cbf0: 3e 22 0a 2a 2a 0a 2a 2a 20 54 68 65 20 3c 6c 68  >".**.** The <lh
cc00: 73 3e 20 61 6e 64 20 3c 72 68 73 3e 20 61 72 65  s> and <rhs> are
cc10: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 20   the two values 
cc20: 62 65 69 6e 67 20 63 6f 6d 70 61 72 65 64 2c 20  being compared, 
cc30: 65 6e 63 6f 64 65 64 20 69 6e 20 55 54 46 2d 38  encoded in UTF-8
cc40: 2e 0a 2a 2a 20 54 68 65 20 3c 65 6e 63 3e 20 70  ..** The <enc> p
cc50: 61 72 61 6d 65 74 65 72 20 69 73 20 74 68 65 20  arameter is the 
cc60: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65 20  encoding of the 
cc70: 63 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 74 69  collation functi
cc80: 6f 6e 20 74 68 61 74 0a 2a 2a 20 53 51 4c 69 74  on that.** SQLit
cc90: 65 20 73 65 6c 65 63 74 65 64 20 74 6f 20 63 61  e selected to ca
cca0: 6c 6c 2e 20 54 68 65 20 54 43 4c 20 74 65 73 74  ll. The TCL test
ccb0: 20 73 63 72 69 70 74 20 69 6d 70 6c 65 6d 65 6e   script implemen
ccc0: 74 73 20 74 68 65 0a 2a 2a 20 22 74 65 73 74 5f  ts the.** "test_
ccd0: 63 6f 6c 6c 61 74 65 22 20 70 72 6f 63 2e 0a 2a  collate" proc..*
cce0: 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74  *.** Note that t
ccf0: 68 69 73 20 77 69 6c 6c 20 6f 6e 6c 79 20 77 6f  his will only wo
cd00: 72 6b 20 77 69 74 68 20 6f 6e 65 20 69 6e 74 65  rk with one inte
cd10: 70 72 65 74 65 72 20 61 74 20 61 20 74 69 6d 65  preter at a time
cd20: 2c 20 61 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65  , as the.** inte
cd30: 72 70 20 70 6f 69 6e 74 65 72 20 74 6f 20 75 73  rp pointer to us
cd40: 65 20 77 68 65 6e 20 65 76 61 6c 75 61 74 69 6e  e when evaluatin
cd50: 67 20 74 68 65 20 54 43 4c 20 73 63 72 69 70 74  g the TCL script
cd60: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 0a 2a 2a   is stored in.**
cd70: 20 70 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74   pTestCollateInt
cd80: 65 72 70 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 54  erp..*/.static T
cd90: 63 6c 5f 49 6e 74 65 72 70 2a 20 70 54 65 73 74  cl_Interp* pTest
cda0: 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 3b 0a 73  CollateInterp;.s
cdb0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
cdc0: 6f 6c 6c 61 74 65 5f 66 75 6e 63 28 0a 20 20 76  ollate_func(.  v
cdd0: 6f 69 64 20 2a 70 43 74 78 2c 20 0a 20 20 69 6e  oid *pCtx, .  in
cde0: 74 20 6e 41 2c 20 63 6f 6e 73 74 20 76 6f 69 64  t nA, const void
cdf0: 20 2a 7a 41 2c 0a 20 20 69 6e 74 20 6e 42 2c 20   *zA,.  int nB, 
ce00: 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 42 0a 29  const void *zB.)
ce10: 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  {.  Tcl_Interp *
ce20: 69 20 3d 20 70 54 65 73 74 43 6f 6c 6c 61 74 65  i = pTestCollate
ce30: 49 6e 74 65 72 70 3b 0a 20 20 69 6e 74 20 65 6e  Interp;.  int en
ce40: 63 69 6e 20 3d 20 28 69 6e 74 29 70 43 74 78 3b  cin = (int)pCtx;
ce50: 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
ce60: 74 20 6e 3b 0a 0a 20 20 73 71 6c 69 74 65 33 5f  t n;..  sqlite3_
ce70: 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20 54  value *pVal;.  T
ce80: 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 0a 20 20 70  cl_Obj *pX;..  p
ce90: 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  X = Tcl_NewStrin
cea0: 67 4f 62 6a 28 22 74 65 73 74 5f 63 6f 6c 6c 61  gObj("test_colla
ceb0: 74 65 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f  te", -1);.  Tcl_
cec0: 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29  IncrRefCount(pX)
ced0: 3b 0a 0a 20 20 73 77 69 74 63 68 28 20 65 6e 63  ;..  switch( enc
cee0: 69 6e 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53  in ){.    case S
cef0: 51 4c 49 54 45 5f 55 54 46 38 3a 0a 20 20 20 20  QLITE_UTF8:.    
cf00: 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70    Tcl_ListObjApp
cf10: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c  endElement(i,pX,
cf20: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
cf30: 28 22 55 54 46 2d 38 22 2c 2d 31 29 29 3b 0a 20  ("UTF-8",-1));. 
cf40: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
cf50: 63 61 73 65 20 53 51 4c 49 54 45 5f 55 54 46 31  case SQLITE_UTF1
cf60: 36 4c 45 3a 0a 20 20 20 20 20 20 54 63 6c 5f 4c  6LE:.      Tcl_L
cf70: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
cf80: 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e 65 77  ent(i,pX,Tcl_New
cf90: 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31  StringObj("UTF-1
cfa0: 36 4c 45 22 2c 2d 31 29 29 3b 0a 20 20 20 20 20  6LE",-1));.     
cfb0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
cfc0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a   SQLITE_UTF16BE:
cfd0: 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f  .      Tcl_ListO
cfe0: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
cff0: 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69  i,pX,Tcl_NewStri
d000: 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 42 45 22  ngObj("UTF-16BE"
d010: 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20 62 72 65  ,-1));.      bre
d020: 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
d030: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 30 29  .      assert(0)
d040: 3b 0a 20 20 7d 0a 0a 20 20 70 56 61 6c 20 3d 20  ;.  }..  pVal = 
d050: 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
d060: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75  );.  sqlite3Valu
d070: 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 6e 41  eSetStr(pVal, nA
d080: 2c 20 7a 41 2c 20 65 6e 63 69 6e 2c 20 53 51 4c  , zA, encin, SQL
d090: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 6e  ITE_STATIC);.  n
d0a0: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
d0b0: 5f 62 79 74 65 73 28 70 56 61 6c 29 3b 0a 20 20  _bytes(pVal);.  
d0c0: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
d0d0: 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 0a 20  dElement(i,pX,. 
d0e0: 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69       Tcl_NewStri
d0f0: 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73 71 6c  ngObj((char*)sql
d100: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
d110: 70 56 61 6c 29 2c 6e 29 29 3b 0a 20 20 73 71 6c  pVal),n));.  sql
d120: 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
d130: 70 56 61 6c 2c 20 6e 42 2c 20 7a 42 2c 20 65 6e  pVal, nB, zB, en
d140: 63 69 6e 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  cin, SQLITE_STAT
d150: 49 43 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74  IC);.  n = sqlit
d160: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70  e3_value_bytes(p
d170: 56 61 6c 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74  Val);.  Tcl_List
d180: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
d190: 28 69 2c 70 58 2c 0a 20 20 20 20 20 20 54 63 6c  (i,pX,.      Tcl
d1a0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28 63  _NewStringObj((c
d1b0: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
d1c0: 75 65 5f 74 65 78 74 28 70 56 61 6c 29 2c 6e 29  ue_text(pVal),n)
d1d0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75  );.  sqlite3Valu
d1e0: 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 0a 20 20  eFree(pVal);..  
d1f0: 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 2c  Tcl_EvalObjEx(i,
d200: 20 70 58 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44   pX, 0);.  Tcl_D
d210: 65 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b  ecrRefCount(pX);
d220: 0a 20 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  .  Tcl_GetIntFro
d230: 6d 4f 62 6a 28 69 2c 20 54 63 6c 5f 47 65 74 4f  mObj(i, Tcl_GetO
d240: 62 6a 52 65 73 75 6c 74 28 69 29 2c 20 26 72 65  bjResult(i), &re
d250: 73 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 65 73  s);.  return res
d260: 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 74  ;.}.static int t
d270: 65 73 74 5f 63 6f 6c 6c 61 74 65 28 0a 20 20 76  est_collate(.  v
d280: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
d290: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
d2a0: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
d2b0: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
d2c0: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
d2d0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
d2e0: 69 6e 74 20 76 61 6c 3b 0a 20 20 73 71 6c 69 74  int val;.  sqlit
d2f0: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a  e3_value *pVal;.
d300: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
d310: 20 6f 62 6a 63 21 3d 35 20 29 20 67 6f 74 6f 20   objc!=5 ) goto 
d320: 62 61 64 5f 61 72 67 73 3b 0a 20 20 70 54 65 73  bad_args;.  pTes
d330: 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 20 3d  tCollateInterp =
d340: 20 69 6e 74 65 72 70 3b 0a 20 20 69 66 28 20 67   interp;.  if( g
d350: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
d360: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
d370: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29  g(objv[1]), &db)
d380: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
d390: 52 4f 52 3b 0a 0a 20 20 69 66 28 20 54 43 4c 5f  ROR;..  if( TCL_
d3a0: 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65  OK!=Tcl_GetBoole
d3b0: 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  anFromObj(interp
d3c0: 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 76 61 6c 29  , objv[2], &val)
d3d0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
d3e0: 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
d3f0: 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
d400: 74 69 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 63  tion(db, "test_c
d410: 6f 6c 6c 61 74 65 22 2c 20 53 51 4c 49 54 45 5f  ollate", SQLITE_
d420: 55 54 46 38 2c 20 0a 20 20 20 20 20 20 20 20 20  UTF8, .         
d430: 20 28 76 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f   (void *)SQLITE_
d440: 55 54 46 38 2c 20 76 61 6c 3f 74 65 73 74 5f 63  UTF8, val?test_c
d450: 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a  ollate_func:0);.
d460: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
d470: 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 54  _OK ){.    if( T
d480: 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
d490: 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
d4a0: 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76  erp, objv[3], &v
d4b0: 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
d4c0: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 72 63 20 3d  _ERROR;.    rc =
d4d0: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
d4e0: 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 74  collation(db, "t
d4f0: 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 53 51  est_collate", SQ
d500: 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c 20 0a 20  LITE_UTF16LE, . 
d510: 20 20 20 20 20 20 20 20 20 20 20 28 76 6f 69 64             (void
d520: 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 31 36 4c   *)SQLITE_UTF16L
d530: 45 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c  E, val?test_coll
d540: 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20 20 20  ate_func:0);.   
d550: 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c   if( TCL_OK!=Tcl
d560: 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f  _GetBooleanFromO
d570: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
d580: 34 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75  4], &val) ) retu
d590: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 23  rn TCL_ERROR;..#
d5a0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
d5b0: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 73 71  DEBUG.    if( sq
d5c0: 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69  lite3_iMallocFai
d5d0: 6c 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  l>0 ){.      sql
d5e0: 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c  ite3_iMallocFail
d5f0: 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ++;.    }.#endif
d600: 0a 20 20 20 20 70 56 61 6c 20 3d 20 73 71 6c 69  .    pVal = sqli
d610: 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20  te3ValueNew();. 
d620: 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53     sqlite3ValueS
d630: 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20  etStr(pVal, -1, 
d640: 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20  "test_collate", 
d650: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
d660: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
d670: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
d680: 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 31 36  eate_collation16
d690: 28 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20 20  (db, .          
d6a0: 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
d6b0: 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54  (pVal, SQLITE_UT
d6c0: 46 31 36 4e 41 54 49 56 45 29 2c 20 53 51 4c 49  F16NATIVE), SQLI
d6d0: 54 45 5f 55 54 46 31 36 42 45 2c 20 0a 20 20 20  TE_UTF16BE, .   
d6e0: 20 20 20 20 20 20 20 28 76 6f 69 64 20 2a 29 53         (void *)S
d6f0: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20 76  QLITE_UTF16BE, v
d700: 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f  al?test_collate_
d710: 66 75 6e 63 3a 30 29 3b 0a 20 20 20 20 73 71 6c  func:0);.    sql
d720: 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70 56  ite3ValueFree(pV
d730: 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  al);.  }.  if( s
d740: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
d750: 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63  e(interp, db, rc
d760: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
d770: 52 52 4f 52 3b 0a 20 20 0a 20 20 69 66 28 20 72  RROR;.  .  if( r
d780: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
d790: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
d7a0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c  sult(interp, sql
d7b0: 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d  ite3TestErrorNam
d7c0: 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72  e(rc), 0);.    r
d7d0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
d7e0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
d7f0: 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f 61 72 67 73 3a  L_OK;..bad_args:
d800: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
d810: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
d820: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
d830: 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
d840: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
d850: 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
d860: 2c 20 22 20 3c 44 42 3e 20 3c 75 74 66 38 3e 20  , " <DB> <utf8> 
d870: 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66 31 36  <utf16le> <utf16
d880: 62 65 3e 22 2c 20 30 29 3b 0a 20 20 72 65 74 75  be>", 0);.  retu
d890: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a  rn TCL_ERROR;.}.
d8a0: 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 65 20  ./*.** When the 
d8b0: 63 6f 6c 6c 61 74 69 6f 6e 20 6e 65 65 64 65 64  collation needed
d8c0: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76   callback is inv
d8d0: 6f 6b 65 64 2c 20 72 65 63 6f 72 64 20 74 68 65  oked, record the
d8e0: 20 6e 61 6d 65 20 6f 66 20 0a 2a 2a 20 74 68 65   name of .** the
d8f0: 20 72 65 71 75 65 73 74 65 64 20 63 6f 6c 6c 61   requested colla
d900: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 68 65  ting function he
d910: 72 65 2e 20 20 54 68 65 20 72 65 63 6f 72 64 65  re.  The recorde
d920: 64 20 6e 61 6d 65 20 69 73 20 6c 69 6e 6b 65 64  d name is linked
d930: 0a 2a 2a 20 74 6f 20 61 20 54 43 4c 20 76 61 72  .** to a TCL var
d940: 69 61 62 6c 65 20 61 6e 64 20 75 73 65 64 20 74  iable and used t
d950: 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  o make sure that
d960: 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20 63   the requested c
d970: 6f 6c 6c 61 74 69 6f 6e 0a 2a 2a 20 6e 61 6d 65  ollation.** name
d980: 20 69 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2f 0a   is correct..*/.
d990: 73 74 61 74 69 63 20 63 68 61 72 20 7a 4e 65 65  static char zNee
d9a0: 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b 32 30 30  dedCollation[200
d9b0: 5d 3b 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a  ];.static char *
d9c0: 70 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f  pzNeededCollatio
d9d0: 6e 20 3d 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61  n = zNeededColla
d9e0: 74 69 6f 6e 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 43 61  tion;.../*.** Ca
d9f0: 6c 6c 65 64 20 77 68 65 6e 20 61 20 63 6f 6c 6c  lled when a coll
da00: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
da10: 73 20 6e 65 65 64 65 64 2e 20 20 52 65 67 69 73  s needed.  Regis
da20: 74 65 72 65 64 20 75 73 69 6e 67 0a 2a 2a 20 73  tered using.** s
da30: 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e  qlite3_collation
da40: 5f 6e 65 65 64 65 64 31 36 28 29 2e 0a 2a 2f 0a  _needed16()..*/.
da50: 73 74 61 74 69 63 20 76 6f 69 64 20 74 65 73 74  static void test
da60: 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 5f  _collate_needed_
da70: 63 62 28 0a 20 20 76 6f 69 64 20 2a 70 43 74 78  cb(.  void *pCtx
da80: 2c 20 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  , .  sqlite3 *db
da90: 2c 0a 20 20 69 6e 74 20 65 54 65 78 74 52 65 70  ,.  int eTextRep
daa0: 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ,.  const void *
dab0: 70 4e 61 6d 65 0a 29 7b 0a 20 20 69 6e 74 20 65  pName.){.  int e
dac0: 6e 63 20 3d 20 45 4e 43 28 64 62 29 3b 0a 20 20  nc = ENC(db);.  
dad0: 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a  int i;.  char *z
dae0: 3b 0a 20 20 66 6f 72 28 7a 20 3d 20 28 63 68 61  ;.  for(z = (cha
daf0: 72 2a 29 70 4e 61 6d 65 2c 20 69 3d 30 3b 20 2a  r*)pName, i=0; *
db00: 7a 20 7c 7c 20 7a 5b 31 5d 3b 20 7a 2b 2b 29 7b  z || z[1]; z++){
db10: 0a 20 20 20 20 69 66 28 20 2a 7a 20 29 20 7a 4e  .    if( *z ) zN
db20: 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b 69  eededCollation[i
db30: 2b 2b 5d 20 3d 20 2a 7a 3b 0a 20 20 7d 0a 20 20  ++] = *z;.  }.  
db40: 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e  zNeededCollation
db50: 5b 69 5d 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  [i] = 0;.  sqlit
db60: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
db70: 69 6f 6e 28 0a 20 20 20 20 20 20 64 62 2c 20 22  ion(.      db, "
db80: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 45  test_collate", E
db90: 4e 43 28 64 62 29 2c 20 28 76 6f 69 64 20 2a 29  NC(db), (void *)
dba0: 65 6e 63 2c 20 74 65 73 74 5f 63 6f 6c 6c 61 74  enc, test_collat
dbb0: 65 5f 66 75 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  e_func);.}../*.*
dbc0: 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74 65 73  * Usage: add_tes
dbd0: 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64  t_collate_needed
dbe0: 20 44 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e   DB.*/.static in
dbf0: 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e  t test_collate_n
dc00: 65 65 64 65 64 28 0a 20 20 76 6f 69 64 20 2a 20  eeded(.  void * 
dc10: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
dc20: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
dc30: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
dc40: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
dc50: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
dc60: 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63  e3 *db;.  int rc
dc70: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
dc80: 20 29 20 67 6f 74 6f 20 62 61 64 5f 61 72 67 73   ) goto bad_args
dc90: 3b 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  ;.  if( getDbPoi
dca0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
dcb0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
dcc0: 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
dcd0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
dce0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  rc = sqlite3_col
dcf0: 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31 36 28  lation_needed16(
dd00: 64 62 2c 20 30 2c 20 74 65 73 74 5f 63 6f 6c 6c  db, 0, test_coll
dd10: 61 74 65 5f 6e 65 65 64 65 64 5f 63 62 29 3b 0a  ate_needed_cb);.
dd20: 20 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69    zNeededCollati
dd30: 6f 6e 5b 30 5d 20 3d 20 30 3b 0a 20 20 69 66 28  on[0] = 0;.  if(
dd40: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
dd50: 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
dd60: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
dd70: 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e  _ERROR;.  return
dd80: 20 54 43 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f 61 72   TCL_OK;..bad_ar
dd90: 67 73 3a 0a 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  gs:.  Tcl_WrongN
dda0: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
ddb0: 2c 20 6f 62 6a 76 2c 20 22 44 42 22 29 3b 0a 20  , objv, "DB");. 
ddc0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
ddd0: 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63  R;.}../*.** tclc
dde0: 6d 64 3a 20 20 20 61 64 64 5f 61 6c 69 67 6e 6d  md:   add_alignm
ddf0: 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 69  ent_test_collati
de00: 6f 6e 73 20 20 44 42 0a 2a 2a 0a 2a 2a 20 41 64  ons  DB.**.** Ad
de10: 64 20 74 77 6f 20 6e 65 77 20 63 6f 6c 6c 61 74  d two new collat
de20: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 74 6f  ing sequences to
de30: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 44 42   the database DB
de40: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 75 74 66 31 36  .**.**     utf16
de50: 5f 61 6c 69 67 6e 65 64 0a 2a 2a 20 20 20 20 20  _aligned.**     
de60: 75 74 66 31 36 5f 75 6e 61 6c 69 67 6e 65 64 0a  utf16_unaligned.
de70: 2a 2a 0a 2a 2a 20 42 6f 74 68 20 63 6f 6c 6c 61  **.** Both colla
de80: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 75  ting sequences u
de90: 73 65 20 74 68 65 20 73 61 6d 65 20 73 6f 72 74  se the same sort
dea0: 20 6f 72 64 65 72 20 61 73 20 42 49 4e 41 52 59   order as BINARY
deb0: 2e 0a 2a 2a 20 54 68 65 20 6f 6e 6c 79 20 64 69  ..** The only di
dec0: 66 66 65 72 65 6e 63 65 20 69 73 20 74 68 61 74  fference is that
ded0: 20 74 68 65 20 75 74 66 31 36 5f 61 6c 69 67 6e   the utf16_align
dee0: 65 64 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20  ed collating.** 
def0: 73 65 71 75 65 6e 63 65 20 69 73 20 64 65 63 6c  sequence is decl
df00: 61 72 65 64 20 77 69 74 68 20 74 68 65 20 53 51  ared with the SQ
df10: 4c 49 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e  LITE_UTF16_ALIGN
df20: 45 44 20 66 6c 61 67 2e 0a 2a 2a 20 42 6f 74 68  ED flag..** Both
df30: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
df40: 69 6f 6e 73 20 69 6e 63 72 65 6d 65 6e 74 20 74  ions increment t
df50: 68 65 20 75 6e 61 6c 69 67 6e 65 64 20 75 74 66  he unaligned utf
df60: 31 36 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 77 68  16 counter.** wh
df70: 65 6e 65 76 65 72 20 74 68 65 79 20 73 65 65 20  enever they see 
df80: 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 62 65  a string that be
df90: 67 69 6e 73 20 6f 6e 20 61 6e 20 6f 64 64 20 62  gins on an odd b
dfa0: 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 0a 2a 2f  yte boundary..*/
dfb0: 0a 73 74 61 74 69 63 20 69 6e 74 20 75 6e 61 6c  .static int unal
dfc0: 69 67 6e 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75  igned_string_cou
dfd0: 6e 74 65 72 20 3d 20 30 3b 0a 73 74 61 74 69 63  nter = 0;.static
dfe0: 20 69 6e 74 20 61 6c 69 67 6e 6d 65 6e 74 43 6f   int alignmentCo
dff0: 6c 6c 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a  llFunc(.  void *
e000: 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e  NotUsed,.  int n
e010: 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64  Key1, const void
e020: 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e   *pKey1,.  int n
e030: 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64  Key2, const void
e040: 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74   *pKey2.){.  int
e050: 20 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b   rc, n;.  n = nK
e060: 65 79 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79  ey1<nKey2 ? nKey
e070: 31 20 3a 20 6e 4b 65 79 32 3b 0a 20 20 69 66 28  1 : nKey2;.  if(
e080: 20 6e 4b 65 79 31 3e 30 20 26 26 20 31 3d 3d 28   nKey1>0 && 1==(
e090: 31 26 28 69 6e 74 29 70 4b 65 79 31 29 20 29 20  1&(int)pKey1) ) 
e0a0: 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e 67  unaligned_string
e0b0: 5f 63 6f 75 6e 74 65 72 2b 2b 3b 0a 20 20 69 66  _counter++;.  if
e0c0: 28 20 6e 4b 65 79 32 3e 30 20 26 26 20 31 3d 3d  ( nKey2>0 && 1==
e0d0: 28 31 26 28 69 6e 74 29 70 4b 65 79 32 29 20 29  (1&(int)pKey2) )
e0e0: 20 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e   unaligned_strin
e0f0: 67 5f 63 6f 75 6e 74 65 72 2b 2b 3b 0a 20 20 72  g_counter++;.  r
e100: 63 20 3d 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31  c = memcmp(pKey1
e110: 2c 20 70 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69  , pKey2, n);.  i
e120: 66 28 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20  f( rc==0 ){.    
e130: 72 63 20 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65  rc = nKey1 - nKe
e140: 79 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  y2;.  }.  return
e150: 20 72 63 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e   rc;.}.static in
e160: 74 20 61 64 64 5f 61 6c 69 67 6e 6d 65 6e 74 5f  t add_alignment_
e170: 74 65 73 74 5f 63 6f 6c 6c 61 74 69 6f 6e 73 28  test_collations(
e180: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
e190: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
e1a0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
e1b0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
e1c0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
e1d0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
e1e0: 3b 0a 20 20 69 66 28 20 6f 62 6a 63 3e 3d 32 20  ;.  if( objc>=2 
e1f0: 29 7b 0a 20 20 20 20 69 66 28 20 67 65 74 44 62  ){.    if( getDb
e200: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
e210: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
e220: 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
e230: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
e240: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65  .    sqlite3_cre
e250: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62  ate_collation(db
e260: 2c 20 22 75 74 66 31 36 5f 75 6e 61 6c 69 67 6e  , "utf16_unalign
e270: 65 64 22 2c 0a 20 20 20 20 20 20 20 20 53 51 4c  ed",.        SQL
e280: 49 54 45 5f 55 54 46 31 36 2c 20 0a 20 20 20 20  ITE_UTF16, .    
e290: 20 20 20 20 30 2c 20 61 6c 69 67 6e 6d 65 6e 74      0, alignment
e2a0: 43 6f 6c 6c 46 75 6e 63 29 3b 0a 20 20 20 20 73  CollFunc);.    s
e2b0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
e2c0: 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 75 74 66  llation(db, "utf
e2d0: 31 36 5f 61 6c 69 67 6e 65 64 22 2c 0a 20 20 20  16_aligned",.   
e2e0: 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 31       SQLITE_UTF1
e2f0: 36 20 7c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  6 | SQLITE_UTF16
e300: 5f 41 4c 49 47 4e 45 44 2c 20 0a 20 20 20 20 20  _ALIGNED, .     
e310: 20 20 20 30 2c 20 61 6c 69 67 6e 6d 65 6e 74 43     0, alignmentC
e320: 6f 6c 6c 46 75 6e 63 29 3b 0a 20 20 7d 0a 20 20  ollFunc);.  }.  
e330: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
e340: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ;.}.#endif /* !d
e350: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
e360: 49 54 5f 55 54 46 31 36 29 20 2a 2f 0a 0a 2f 2a  IT_UTF16) */../*
e370: 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74  .** Usage: add_t
e380: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 3c 64 62  est_function <db
e390: 20 70 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75 74   ptr> <utf8> <ut
e3a0: 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e  f16le> <utf16be>
e3b0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  .**.** This func
e3c0: 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
e3d0: 74 65 73 74 20 74 68 61 74 20 53 51 4c 69 74 65  test that SQLite
e3e0: 20 73 65 6c 65 63 74 73 20 74 68 65 20 63 6f 72   selects the cor
e3f0: 72 65 63 74 20 75 73 65 72 0a 2a 2a 20 66 75 6e  rect user.** fun
e400: 63 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 77  ction callback w
e410: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 76 65 72  hen multiple ver
e420: 73 69 6f 6e 73 20 28 66 6f 72 20 64 69 66 66 65  sions (for diffe
e430: 72 65 6e 74 20 74 65 78 74 20 65 6e 63 6f 64 69  rent text encodi
e440: 6e 67 73 29 0a 2a 2a 20 61 72 65 20 61 76 61 69  ngs).** are avai
e450: 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c  lable..**.** Cal
e460: 6c 69 6e 67 20 74 68 69 73 20 72 6f 75 74 69 6e  ling this routin
e470: 65 20 72 65 67 69 73 74 65 72 73 20 75 70 20 74  e registers up t
e480: 6f 20 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73  o three versions
e490: 20 6f 66 20 74 68 65 20 75 73 65 72 20 66 75 6e   of the user fun
e4a0: 63 74 69 6f 6e 0a 2a 2a 20 22 74 65 73 74 5f 66  ction.** "test_f
e4b0: 75 6e 63 74 69 6f 6e 22 20 77 69 74 68 20 64 61  unction" with da
e4c0: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 64  tabase handle <d
e4d0: 62 3e 2e 20 20 49 66 20 74 68 65 20 73 65 63 6f  b>.  If the seco
e4e0: 6e 64 20 61 72 67 75 6d 65 6e 74 20 69 73 0a 2a  nd argument is.*
e4f0: 2a 20 74 72 75 65 2c 20 74 68 65 6e 20 61 20 76  * true, then a v
e500: 65 72 73 69 6f 6e 20 6f 66 20 74 65 73 74 5f 66  ersion of test_f
e510: 75 6e 63 74 69 6f 6e 20 69 73 20 72 65 67 69 73  unction is regis
e520: 74 65 72 65 64 20 66 6f 72 20 55 54 46 2d 38 2c  tered for UTF-8,
e530: 20 69 66 20 74 68 65 0a 2a 2a 20 74 68 69 72 64   if the.** third
e540: 20 69 73 20 74 72 75 65 2c 20 61 20 76 65 72 73   is true, a vers
e550: 69 6f 6e 20 69 73 20 72 65 67 69 73 74 65 72 65  ion is registere
e560: 64 20 66 6f 72 20 55 54 46 2d 31 36 6c 65 2c 20  d for UTF-16le, 
e570: 69 66 20 74 68 65 20 66 6f 75 72 74 68 20 69 73  if the fourth is
e580: 0a 2a 2a 20 74 72 75 65 2c 20 61 20 55 54 46 2d  .** true, a UTF-
e590: 31 36 62 65 20 76 65 72 73 69 6f 6e 20 69 73 20  16be version is 
e5a0: 61 76 61 69 6c 61 62 6c 65 2e 20 20 50 72 65 76  available.  Prev
e5b0: 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66  ious versions of
e5c0: 0a 2a 2a 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  .** test_functio
e5d0: 6e 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a  n are deleted..*
e5e0: 2a 0a 2a 2a 20 54 68 65 20 75 73 65 72 20 66 75  *.** The user fu
e5f0: 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d  nction is implem
e600: 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67  ented by calling
e610: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 54   the following T
e620: 43 4c 20 73 63 72 69 70 74 3a 0a 2a 2a 0a 2a 2a  CL script:.**.**
e630: 20 20 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f     "test_functio
e640: 6e 20 3c 65 6e 63 3e 20 3c 61 72 67 3e 22 0a 2a  n <enc> <arg>".*
e650: 2a 0a 2a 2a 20 57 68 65 72 65 20 3c 65 6e 63 3e  *.** Where <enc>
e660: 20 69 73 20 6f 6e 65 20 6f 66 20 55 54 46 2d 38   is one of UTF-8
e670: 2c 20 55 54 46 2d 31 36 4c 45 20 6f 72 20 55 54  , UTF-16LE or UT
e680: 46 31 36 42 45 2c 20 61 6e 64 20 3c 61 72 67 3e  F16BE, and <arg>
e690: 20 69 73 20 74 68 65 0a 2a 2a 20 73 69 6e 67 6c   is the.** singl
e6a0: 65 20 61 72 67 75 6d 65 6e 74 20 70 61 73 73 65  e argument passe
e6b0: 64 20 74 6f 20 74 68 65 20 53 51 4c 20 66 75 6e  d to the SQL fun
e6c0: 63 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65  ction. The value
e6d0: 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20   returned by.** 
e6e0: 74 68 65 20 54 43 4c 20 73 63 72 69 70 74 20 69  the TCL script i
e6f0: 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72 65  s used as the re
e700: 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 74 68  turn value of th
e710: 65 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20  e SQL function. 
e720: 49 74 0a 2a 2a 20 69 73 20 70 61 73 73 65 64 20  It.** is passed 
e730: 74 6f 20 53 51 4c 69 74 65 20 75 73 69 6e 67 20  to SQLite using 
e740: 55 54 46 2d 31 36 42 45 20 66 6f 72 20 61 20 55  UTF-16BE for a U
e750: 54 46 2d 38 20 74 65 73 74 5f 66 75 6e 63 74 69  TF-8 test_functi
e760: 6f 6e 28 29 2c 20 55 54 46 2d 38 0a 2a 2a 20 66  on(), UTF-8.** f
e770: 6f 72 20 61 20 55 54 46 2d 31 36 4c 45 20 74 65  or a UTF-16LE te
e780: 73 74 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20 61  st_function(), a
e790: 6e 64 20 55 54 46 2d 31 36 4c 45 20 66 6f 72 20  nd UTF-16LE for 
e7a0: 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  an implementatio
e7b0: 6e 20 74 68 61 74 0a 2a 2a 20 70 72 65 66 65 72  n that.** prefer
e7c0: 73 20 55 54 46 2d 31 36 42 45 2e 0a 2a 2f 0a 23  s UTF-16BE..*/.#
e7d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
e7e0: 49 54 5f 55 54 46 31 36 0a 73 74 61 74 69 63 20  IT_UTF16.static 
e7f0: 76 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69  void test_functi
e800: 6f 6e 5f 75 74 66 38 28 0a 20 20 73 71 6c 69 74  on_utf8(.  sqlit
e810: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
e820: 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20  , .  int nArg,. 
e830: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
e840: 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49  *argv.){.  Tcl_I
e850: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20  nterp *interp;. 
e860: 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20   Tcl_Obj *pX;.  
e870: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
e880: 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20  Val;.  interp = 
e890: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71  (Tcl_Interp *)sq
e8a0: 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
e8b0: 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20 54 63  pCtx);.  pX = Tc
e8c0: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
e8d0: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  test_function", 
e8e0: 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52  -1);.  Tcl_IncrR
e8f0: 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54  efCount(pX);.  T
e900: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
e910: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
e920: 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  pX, Tcl_NewStrin
e930: 67 4f 62 6a 28 22 55 54 46 2d 38 22 2c 20 2d 31  gObj("UTF-8", -1
e940: 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
e950: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
e960: 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20  nterp, pX, .    
e970: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
e980: 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65  bj((char*)sqlite
e990: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
e9a0: 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54  v[0]), -1));.  T
e9b0: 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74  cl_EvalObjEx(int
e9c0: 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54  erp, pX, 0);.  T
e9d0: 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
e9e0: 70 58 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72  pX);.  sqlite3_r
e9f0: 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78 2c  esult_text(pCtx,
ea00: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65   Tcl_GetStringRe
ea10: 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 2d 31  sult(interp), -1
ea20: 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
ea30: 4e 54 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71  NT);.  pVal = sq
ea40: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b  lite3ValueNew();
ea50: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  .  sqlite3ValueS
ea60: 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20  etStr(pVal, -1, 
ea70: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73  Tcl_GetStringRes
ea80: 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20 20  ult(interp), .  
ea90: 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 2c      SQLITE_UTF8,
eaa0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
eab0: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
eac0: 74 5f 74 65 78 74 31 36 62 65 28 70 43 74 78 2c  t_text16be(pCtx,
ead0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
eae0: 65 78 74 31 36 62 65 28 70 56 61 6c 29 2c 0a 20  ext16be(pVal),. 
eaf0: 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f       -1, SQLITE_
eb00: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71  TRANSIENT);.  sq
eb10: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
eb20: 56 61 6c 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76  Val);.}.static v
eb30: 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  oid test_functio
eb40: 6e 5f 75 74 66 31 36 6c 65 28 0a 20 20 73 71 6c  n_utf16le(.  sql
eb50: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
eb60: 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c  tx, .  int nArg,
eb70: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
eb80: 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c   **argv.){.  Tcl
eb90: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b  _Interp *interp;
eba0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a  .  Tcl_Obj *pX;.
ebb0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
ebc0: 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20  *pVal;.  interp 
ebd0: 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29  = (Tcl_Interp *)
ebe0: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
ebf0: 61 28 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20  a(pCtx);.  pX = 
ec00: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
ec10: 28 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22  ("test_function"
ec20: 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63  , -1);.  Tcl_Inc
ec30: 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20  rRefCount(pX);. 
ec40: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
ec50: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
ec60: 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72  , pX, Tcl_NewStr
ec70: 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 4c 45  ingObj("UTF-16LE
ec80: 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c  ", -1));.  Tcl_L
ec90: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
eca0: 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20  ent(interp, pX, 
ecb0: 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74  .      Tcl_NewSt
ecc0: 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73  ringObj((char*)s
ecd0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
ece0: 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29  t(argv[0]), -1))
ecf0: 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45  ;.  Tcl_EvalObjE
ed00: 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30 29  x(interp, pX, 0)
ed10: 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  ;.  Tcl_DecrRefC
ed20: 6f 75 6e 74 28 70 58 29 3b 0a 20 20 70 56 61 6c  ount(pX);.  pVal
ed30: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
ed40: 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ew();.  sqlite3V
ed50: 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
ed60: 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72 69   -1, Tcl_GetStri
ed70: 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  ngResult(interp)
ed80: 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  , .      SQLITE_
ed90: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
eda0: 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  TIC);.  sqlite3_
edb0: 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78  result_text(pCtx
edc0: 2c 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  ,(char*)sqlite3_
edd0: 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c 29  value_text(pVal)
ede0: 2c 2d 31 2c 53 51 4c 49 54 45 5f 54 52 41 4e 53  ,-1,SQLITE_TRANS
edf0: 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65 33  IENT);.  sqlite3
ee00: 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b  ValueFree(pVal);
ee10: 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74  .}.static void t
ee20: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66  est_function_utf
ee30: 31 36 62 65 28 0a 20 20 73 71 6c 69 74 65 33 5f  16be(.  sqlite3_
ee40: 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a  context *pCtx, .
ee50: 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73 71    int nArg,.  sq
ee60: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
ee70: 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65  gv.){.  Tcl_Inte
ee80: 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63  rp *interp;.  Tc
ee90: 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71 6c  l_Obj *pX;.  sql
eea0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
eeb0: 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20 28 54 63  ;.  interp = (Tc
eec0: 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c 69 74  l_Interp *)sqlit
eed0: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 70 43 74  e3_user_data(pCt
eee0: 78 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e  x);.  pX = Tcl_N
eef0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73  ewStringObj("tes
ef00: 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31 29  t_function", -1)
ef10: 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43  ;.  Tcl_IncrRefC
ef20: 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f  ount(pX);.  Tcl_
ef30: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
ef40: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c  ment(interp, pX,
ef50: 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
ef60: 6a 28 22 55 54 46 2d 31 36 42 45 22 2c 20 2d 31  j("UTF-16BE", -1
ef70: 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
ef80: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
ef90: 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20  nterp, pX, .    
efa0: 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
efb0: 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65  bj((char*)sqlite
efc0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
efd0: 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54  v[0]), -1));.  T
efe0: 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74  cl_EvalObjEx(int
eff0: 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54  erp, pX, 0);.  T
f000: 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
f010: 70 58 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71  pX);.  pVal = sq
f020: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b  lite3ValueNew();
f030: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  .  sqlite3ValueS
f040: 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20  etStr(pVal, -1, 
f050: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73  Tcl_GetStringRes
f060: 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20 20  ult(interp), .  
f070: 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 2c      SQLITE_UTF8,
f080: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
f090: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
f0a0: 74 5f 74 65 78 74 31 36 6c 65 28 70 43 74 78 2c  t_text16le(pCtx,
f0b0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
f0c0: 65 78 74 31 36 6c 65 28 70 56 61 6c 29 2c 0a 20  ext16le(pVal),. 
f0d0: 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f       -1, SQLITE_
f0e0: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71  TRANSIENT);.  sq
f0f0: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
f100: 56 61 6c 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  Val);.}.#endif /
f110: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
f120: 46 31 36 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e  F16 */.static in
f130: 74 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 28  t test_function(
f140: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
f150: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
f160: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
f170: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
f180: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
f190: 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
f1a0: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73  E_OMIT_UTF16.  s
f1b0: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
f1c0: 74 20 76 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62  t val;..  if( ob
f1d0: 6a 63 21 3d 35 20 29 20 67 6f 74 6f 20 62 61 64  jc!=5 ) goto bad
f1e0: 5f 61 72 67 73 3b 0a 20 20 69 66 28 20 67 65 74  _args;.  if( get
f1f0: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
f200: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
f210: 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
f220: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f230: 52 3b 0a 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b  R;..  if( TCL_OK
f240: 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e  !=Tcl_GetBoolean
f250: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
f260: 6f 62 6a 76 5b 32 5d 2c 20 26 76 61 6c 29 20 29  objv[2], &val) )
f270: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f280: 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29 7b 0a  R;.  if( val ){.
f290: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
f2a0: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
f2b0: 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c  "test_function",
f2c0: 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   1, SQLITE_UTF8,
f2d0: 20 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 70   .        interp
f2e0: 2c 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f  , test_function_
f2f0: 75 74 66 38 2c 20 30 2c 20 30 29 3b 0a 20 20 7d  utf8, 0, 0);.  }
f300: 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54  .  if( TCL_OK!=T
f310: 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f  cl_GetBooleanFro
f320: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
f330: 76 5b 33 5d 2c 20 26 76 61 6c 29 20 29 20 72 65  v[3], &val) ) re
f340: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
f350: 20 20 69 66 28 20 76 61 6c 20 29 7b 0a 20 20 20    if( val ){.   
f360: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
f370: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 74 65  function(db, "te
f380: 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 31 2c  st_function", 1,
f390: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c   SQLITE_UTF16LE,
f3a0: 20 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 70   .        interp
f3b0: 2c 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f  , test_function_
f3c0: 75 74 66 31 36 6c 65 2c 20 30 2c 20 30 29 3b 0a  utf16le, 0, 0);.
f3d0: 20 20 7d 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b    }.  if( TCL_OK
f3e0: 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e  !=Tcl_GetBoolean
f3f0: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
f400: 6f 62 6a 76 5b 34 5d 2c 20 26 76 61 6c 29 20 29  objv[4], &val) )
f410: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f420: 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29 7b 0a  R;.  if( val ){.
f430: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
f440: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
f450: 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c  "test_function",
f460: 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36   1, SQLITE_UTF16
f470: 42 45 2c 20 0a 20 20 20 20 20 20 20 20 69 6e 74  BE, .        int
f480: 65 72 70 2c 20 74 65 73 74 5f 66 75 6e 63 74 69  erp, test_functi
f490: 6f 6e 5f 75 74 66 31 36 62 65 2c 20 30 2c 20 30  on_utf16be, 0, 0
f4a0: 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  );.  }..  return
f4b0: 20 54 43 4c 5f 4f 4b 3b 0a 62 61 64 5f 61 72 67   TCL_OK;.bad_arg
f4c0: 73 3a 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  s:.  Tcl_AppendR
f4d0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
f4e0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
f4f0: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
f500: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
f510: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
f520: 30 29 2c 20 22 20 3c 44 42 3e 20 3c 75 74 66 38  0), " <DB> <utf8
f530: 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66  > <utf16le> <utf
f540: 31 36 62 65 3e 22 2c 20 30 29 3b 0a 23 65 6e 64  16be>", 0);.#end
f550: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
f560: 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74  T_UTF16 */.  ret
f570: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d  urn TCL_ERROR;.}
f580: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
f590: 20 20 20 20 20 20 20 74 65 73 74 5f 65 72 72 73         test_errs
f5a0: 74 72 20 3c 65 72 72 20 63 6f 64 65 3e 0a 2a 2a  tr <err code>.**
f5b0: 0a 2a 2a 20 54 65 73 74 20 74 68 61 74 20 74 68  .** Test that th
f5c0: 65 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  e english langua
f5d0: 67 65 20 73 74 72 69 6e 67 20 65 71 75 69 76 61  ge string equiva
f5e0: 6c 65 6e 74 73 20 66 6f 72 20 73 71 6c 69 74 65  lents for sqlite
f5f0: 20 65 72 72 6f 72 20 63 6f 64 65 73 0a 2a 2a 20   error codes.** 
f600: 61 72 65 20 73 61 6e 65 2e 20 54 68 65 20 70 61  are sane. The pa
f610: 72 61 6d 65 74 65 72 20 69 73 20 61 6e 20 69 6e  rameter is an in
f620: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 69  teger representi
f630: 6e 67 20 61 6e 20 73 71 6c 69 74 65 20 65 72 72  ng an sqlite err
f640: 6f 72 20 63 6f 64 65 2e 0a 2a 2a 20 54 68 65 20  or code..** The 
f650: 72 65 73 75 6c 74 20 69 73 20 61 20 6c 69 73 74  result is a list
f660: 20 6f 66 20 74 77 6f 20 65 6c 65 6d 65 6e 74 73   of two elements
f670: 2c 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 70  , the string rep
f680: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
f690: 68 65 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65  he.** error code
f6a0: 20 61 6e 64 20 74 68 65 20 65 6e 67 6c 69 73 68   and the english
f6b0: 20 6c 61 6e 67 75 61 67 65 20 65 78 70 6c 61 6e   language explan
f6c0: 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63  ation..*/.static
f6d0: 20 69 6e 74 20 74 65 73 74 5f 65 72 72 73 74 72   int test_errstr
f6e0: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
f6f0: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
f700: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
f710: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
f720: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
f730: 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 43 6f 64  .){.  char *zCod
f740: 65 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66  e;.  int i;.  if
f750: 28 20 6f 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20  ( objc!=1 ){.   
f760: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
f770: 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
f780: 76 2c 20 22 3c 65 72 72 6f 72 20 63 6f 64 65 3e  v, "<error code>
f790: 22 29 3b 0a 20 20 7d 0a 0a 20 20 7a 43 6f 64 65  ");.  }..  zCode
f7a0: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
f7b0: 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20 20 66 6f 72  (objv[1]);.  for
f7c0: 28 69 3d 30 3b 20 69 3c 32 30 30 3b 20 69 2b 2b  (i=0; i<200; i++
f7d0: 29 7b 0a 20 20 20 20 69 66 28 20 30 3d 3d 73 74  ){.    if( 0==st
f7e0: 72 63 6d 70 28 74 31 45 72 72 6f 72 4e 61 6d 65  rcmp(t1ErrorName
f7f0: 28 69 29 2c 20 7a 43 6f 64 65 29 20 29 20 62 72  (i), zCode) ) br
f800: 65 61 6b 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53  eak;.  }.  Tcl_S
f810: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
f820: 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33   (char *)sqlite3
f830: 45 72 72 53 74 72 28 69 29 2c 20 30 29 3b 0a 20  ErrStr(i), 0);. 
f840: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
f850: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
f860: 20 20 20 62 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a     breakpoint.**
f870: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
f880: 20 65 78 69 73 74 73 20 66 6f 72 20 6f 6e 65 20   exists for one 
f890: 70 75 72 70 6f 73 65 20 2d 20 74 6f 20 70 72 6f  purpose - to pro
f8a0: 76 69 64 65 20 61 20 70 6c 61 63 65 20 74 6f 20  vide a place to 
f8b0: 70 75 74 20 61 0a 2a 2a 20 62 72 65 61 6b 70 6f  put a.** breakpo
f8c0: 69 6e 74 20 77 69 74 68 20 47 44 42 20 74 68 61  int with GDB tha
f8d0: 74 20 63 61 6e 20 62 65 20 74 72 69 67 67 65 72  t can be trigger
f8e0: 65 64 20 75 73 69 6e 67 20 54 43 4c 20 63 6f 64  ed using TCL cod
f8f0: 65 2e 20 20 54 68 65 20 75 73 65 0a 2a 2a 20 66  e.  The use.** f
f900: 6f 72 20 74 68 69 73 20 69 73 20 77 68 65 6e 20  or this is when 
f910: 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 65 73  a particular tes
f920: 74 20 66 61 69 6c 73 20 6f 6e 20 28 73 61 79 29  t fails on (say)
f930: 20 74 68 65 20 31 34 38 35 74 68 20 69 74 65 72   the 1485th iter
f940: 61 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 74 68 65  ation..** In the
f950: 20 54 43 4c 20 74 65 73 74 20 73 63 72 69 70 74   TCL test script
f960: 2c 20 77 65 20 63 61 6e 20 61 64 64 20 63 6f 64  , we can add cod
f970: 65 20 6c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a  e like this:.**.
f980: 2a 2a 20 20 20 20 20 69 66 20 7b 24 69 3d 3d 31  **     if {$i==1
f990: 34 38 35 7d 20 62 72 65 61 6b 70 6f 69 6e 74 0a  485} breakpoint.
f9a0: 2a 2a 0a 2a 2a 20 54 68 65 6e 20 72 75 6e 20 74  **.** Then run t
f9b0: 65 73 74 66 69 78 74 75 72 65 20 69 6e 20 74 68  estfixture in th
f9c0: 65 20 64 65 62 75 67 67 65 72 20 61 6e 64 20 77  e debugger and w
f9d0: 61 69 74 20 66 6f 72 20 74 68 65 20 62 72 65 61  ait for the brea
f9e0: 6b 70 6f 69 6e 74 20 74 6f 0a 2a 2a 20 66 69 72  kpoint to.** fir
f9f0: 65 2e 20 20 54 68 65 6e 20 61 64 64 69 74 69 6f  e.  Then additio
fa00: 6e 61 6c 20 62 72 65 61 6b 70 6f 69 6e 74 73 20  nal breakpoints 
fa10: 63 61 6e 20 62 65 20 73 65 74 20 74 6f 20 74 72  can be set to tr
fa20: 61 63 65 20 64 6f 77 6e 20 74 68 65 20 62 75 67  ace down the bug
fa30: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
fa40: 74 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28  test_breakpoint(
fa50: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
fa60: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
fa70: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
fa80: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
fa90: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
faa0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
fab0: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
fac0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
fad0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
fae0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
faf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
fb00: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
fb10: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 72 65 74 75  ent */.){.  retu
fb20: 72 6e 20 54 43 4c 5f 4f 4b 3b 20 20 20 20 20 20  rn TCL_OK;      
fb30: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67     /* Do nothing
fb40: 20 2a 2f 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61   */.}../*.** Usa
fb50: 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ge:   sqlite3_bi
fb60: 6e 64 5f 69 6e 74 20 20 53 54 4d 54 20 4e 20 56  nd_int  STMT N V
fb70: 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20  ALUE.**.** Test 
fb80: 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  the sqlite3_bind
fb90: 5f 69 6e 74 20 69 6e 74 65 72 66 61 63 65 2e 20  _int interface. 
fba0: 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61   STMT is a prepa
fbb0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  red statement..*
fbc0: 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78  * N is the index
fbd0: 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69   of a wildcard i
fbe0: 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
fbf0: 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20  tatement.  This 
fc00: 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73  command.** binds
fc10: 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65   a 32-bit intege
fc20: 72 20 56 41 4c 55 45 20 74 6f 20 74 68 61 74 20  r VALUE to that 
fc30: 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61  wildcard..*/.sta
fc40: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
fc50: 64 5f 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20  d_int(.  void * 
fc60: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
fc70: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
fc80: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
fc90: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
fca0: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
fcb0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
fcc0: 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74    int idx;.  int
fcd0: 20 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63   value;.  int rc
fce0: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34  ;..  if( objc!=4
fcf0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
fd00: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
fd10: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
fd20: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
fd30: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
fd40: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
fd50: 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20  [0], 0), " STMT 
fd60: 4e 20 56 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20  N VALUE", 0);.  
fd70: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
fd80: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
fd90: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
fda0: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
fdb0: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
fdc0: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
fdd0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
fde0: 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
fdf0: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
fe00: 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72  ], &idx) ) retur
fe10: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
fe20: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
fe30: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
fe40: 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29 20 29 20  v[3], &value) ) 
fe50: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
fe60: 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
fe70: 33 5f 62 69 6e 64 5f 69 6e 74 28 70 53 74 6d 74  3_bind_int(pStmt
fe80: 2c 20 69 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20  , idx, value);. 
fe90: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
fea0: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
feb0: 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c  StmtToDb(pStmt),
fec0: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
fed0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  L_ERROR;.  if( r
fee0: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
fef0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
ff00: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74  RROR;.  }..  ret
ff10: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a  urn TCL_OK;.}...
ff20: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73  /*.** Usage:   s
ff30: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
ff40: 34 20 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a  4  STMT N VALUE.
ff50: 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73  **.** Test the s
ff60: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
ff70: 34 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54  4 interface.  ST
ff80: 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64  MT is a prepared
ff90: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e   statement..** N
ffa0: 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
ffb0: 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74   a wildcard in t
ffc0: 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
ffd0: 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d  ement.  This com
ffe0: 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20  mand.** binds a 
fff0: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 56  64-bit integer V
10000 41 4c 55 45 20 74 6f 20 74 68 61 74 20 77 69 6c  ALUE to that wil
10010 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  dcard..*/.static
10020 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 69   int test_bind_i
10030 6e 74 36 34 28 0a 20 20 76 6f 69 64 20 2a 20 63  nt64(.  void * c
10040 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
10050 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
10060 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
10070 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
10080 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
10090 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
100a0 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 36 34 20   int idx;.  i64 
100b0 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b  value;.  int rc;
100c0 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20  ..  if( objc!=4 
100d0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
100e0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
100f0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
10100 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
10110 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
10120 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
10130 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e  0], 0), " STMT N
10140 20 56 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20   VALUE", 0);.   
10150 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
10160 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
10170 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
10180 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
10190 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
101a0 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
101b0 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
101c0 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
101d0 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
101e0 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e  , &idx) ) return
101f0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
10200 28 20 54 63 6c 5f 47 65 74 57 69 64 65 49 6e 74  ( Tcl_GetWideInt
10210 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
10220 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29  objv[3], &value)
10230 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
10240 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
10250 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28  ite3_bind_int64(
10260 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75  pStmt, idx, valu
10270 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  e);.  if( sqlite
10280 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
10290 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53  erp, StmtToDb(pS
102a0 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75  tmt), rc) ) retu
102b0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
102c0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
102d0 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
102e0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
102f0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
10300 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  .}.../*.** Usage
10310 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
10320 5f 64 6f 75 62 6c 65 20 20 53 54 4d 54 20 4e 20  _double  STMT N 
10330 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74  VALUE.**.** Test
10340 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e   the sqlite3_bin
10350 64 5f 64 6f 75 62 6c 65 20 69 6e 74 65 72 66 61  d_double interfa
10360 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70  ce.  STMT is a p
10370 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
10380 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69  t..** N is the i
10390 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61  ndex of a wildca
103a0 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  rd in the prepar
103b0 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  ed statement.  T
103c0 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62  his command.** b
103d0 69 6e 64 73 20 61 20 36 34 2d 62 69 74 20 69 6e  inds a 64-bit in
103e0 74 65 67 65 72 20 56 41 4c 55 45 20 74 6f 20 74  teger VALUE to t
103f0 68 61 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f  hat wildcard..*/
10400 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
10410 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 0a 20 20  _bind_double(.  
10420 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
10430 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
10440 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
10450 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
10460 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
10470 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
10480 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78  pStmt;.  int idx
10490 3b 0a 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65  ;.  double value
104a0 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69  ;.  int rc;..  i
104b0 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20  f( objc!=4 ){.  
104c0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
104d0 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
104e0 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
104f0 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
10500 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
10510 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
10520 29 2c 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55  ), " STMT N VALU
10530 45 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  E", 0);.    retu
10540 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
10550 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
10560 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
10570 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
10580 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
10590 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
105a0 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
105b0 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
105c0 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64  rp, objv[2], &id
105d0 78 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  x) ) return TCL_
105e0 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
105f0 5f 47 65 74 44 6f 75 62 6c 65 46 72 6f 6d 4f 62  _GetDoubleFromOb
10600 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33  j(interp, objv[3
10610 5d 2c 20 26 76 61 6c 75 65 29 20 29 20 72 65 74  ], &value) ) ret
10620 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
10630 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62    rc = sqlite3_b
10640 69 6e 64 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74  ind_double(pStmt
10650 2c 20 69 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20  , idx, value);. 
10660 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
10670 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
10680 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c  StmtToDb(pStmt),
10690 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
106a0 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  L_ERROR;.  if( r
106b0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
106c0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
106d0 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74  RROR;.  }..  ret
106e0 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
106f0 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
10700 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20  lite3_bind_null 
10710 20 53 54 4d 54 20 4e 0a 2a 2a 0a 2a 2a 20 54 65   STMT N.**.** Te
10720 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62  st the sqlite3_b
10730 69 6e 64 5f 6e 75 6c 6c 20 69 6e 74 65 72 66 61  ind_null interfa
10740 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70  ce.  STMT is a p
10750 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
10760 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69  t..** N is the i
10770 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61  ndex of a wildca
10780 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  rd in the prepar
10790 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  ed statement.  T
107a0 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62  his command.** b
107b0 69 6e 64 73 20 61 20 4e 55 4c 4c 20 74 6f 20 74  inds a NULL to t
107c0 68 65 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a  he wildcard..*/.
107d0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
107e0 62 69 6e 64 5f 6e 75 6c 6c 28 0a 20 20 76 6f 69  bind_null(.  voi
107f0 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
10800 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
10810 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
10820 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
10830 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
10840 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
10850 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  mt;.  int idx;. 
10860 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
10870 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
10880 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
10890 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
108a0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
108b0 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
108c0 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
108d0 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
108e0 22 20 53 54 4d 54 20 4e 22 2c 20 30 29 3b 0a 20  " STMT N", 0);. 
108f0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
10900 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
10910 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
10920 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
10930 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
10940 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
10950 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
10960 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
10970 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
10980 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74 75  2], &idx) ) retu
10990 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
109a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69   rc = sqlite3_bi
109b0 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69  nd_null(pStmt, i
109c0 64 78 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  dx);.  if( sqlit
109d0 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
109e0 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70  terp, StmtToDb(p
109f0 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74  Stmt), rc) ) ret
10a00 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
10a10 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
10a20 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  OK ){.    return
10a30 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
10a40 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
10a50 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
10a60 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
10a70 5f 74 65 78 74 20 20 53 54 4d 54 20 4e 20 53 54  _text  STMT N ST
10a80 52 49 4e 47 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a  RING BYTES.**.**
10a90 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65   Test the sqlite
10aa0 33 5f 62 69 6e 64 5f 74 65 78 74 20 69 6e 74 65  3_bind_text inte
10ab0 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20  rface.  STMT is 
10ac0 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
10ad0 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68  ment..** N is th
10ae0 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c  e index of a wil
10af0 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65  dcard in the pre
10b00 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
10b10 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a    This command.*
10b20 2a 20 62 69 6e 64 73 20 61 20 55 54 46 2d 38 20  * binds a UTF-8 
10b30 73 74 72 69 6e 67 20 53 54 52 49 4e 47 20 74 6f  string STRING to
10b40 20 74 68 65 20 77 69 6c 64 63 61 72 64 2e 20 20   the wildcard.  
10b50 54 68 65 20 73 74 72 69 6e 67 20 69 73 20 42 59  The string is BY
10b60 54 45 53 20 62 79 74 65 73 0a 2a 2a 20 6c 6f 6e  TES bytes.** lon
10b70 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  g..*/.static int
10b80 20 74 65 73 74 5f 62 69 6e 64 5f 74 65 78 74 28   test_bind_text(
10b90 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
10ba0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
10bb0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
10bc0 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
10bd0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
10be0 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
10bf0 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
10c00 69 64 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73  idx;.  int bytes
10c10 3b 0a 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b  ;.  char *value;
10c20 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
10c30 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20  ( objc!=5 ){.   
10c40 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
10c50 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
10c60 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
10c70 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
10c80 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
10c90 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
10ca0 2c 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45  , " STMT N VALUE
10cb0 20 42 59 54 45 53 22 2c 20 30 29 3b 0a 20 20 20   BYTES", 0);.   
10cc0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
10cd0 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
10ce0 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
10cf0 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
10d00 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
10d10 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
10d20 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
10d30 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
10d40 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
10d50 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e  , &idx) ) return
10d60 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61   TCL_ERROR;.  va
10d70 6c 75 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72  lue = Tcl_GetStr
10d80 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20  ing(objv[3]);.  
10d90 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
10da0 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
10db0 6a 76 5b 34 5d 2c 20 26 62 79 74 65 73 29 20 29  jv[4], &bytes) )
10dc0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
10dd0 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  R;..  rc = sqlit
10de0 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74  e3_bind_text(pSt
10df0 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65 2c 20  mt, idx, value, 
10e00 62 79 74 65 73 2c 20 53 51 4c 49 54 45 5f 54 52  bytes, SQLITE_TR
10e10 41 4e 53 49 45 4e 54 29 3b 0a 20 20 69 66 28 20  ANSIENT);.  if( 
10e20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
10e30 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54  de(interp, StmtT
10e40 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20  oDb(pStmt), rc) 
10e50 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
10e60 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  OR;.  if( rc!=SQ
10e70 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54  LITE_OK ){.    T
10e80 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
10e90 69 6e 74 65 72 70 2c 20 73 71 6c 69 74 65 33 54  interp, sqlite3T
10ea0 65 73 74 45 72 72 6f 72 4e 61 6d 65 28 72 63 29  estErrorName(rc)
10eb0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
10ec0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
10ed0 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
10ee0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
10ef0 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
10f00 5f 74 65 78 74 31 36 20 3f 2d 73 74 61 74 69 63  _text16 ?-static
10f10 3f 20 53 54 4d 54 20 4e 20 53 54 52 49 4e 47 20  ? STMT N STRING 
10f20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74  BYTES.**.** Test
10f30 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e   the sqlite3_bin
10f40 64 5f 74 65 78 74 31 36 20 69 6e 74 65 72 66 61  d_text16 interfa
10f50 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70  ce.  STMT is a p
10f60 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
10f70 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69  t..** N is the i
10f80 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61  ndex of a wildca
10f90 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  rd in the prepar
10fa0 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  ed statement.  T
10fb0 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62  his command.** b
10fc0 69 6e 64 73 20 61 20 55 54 46 2d 31 36 20 73 74  inds a UTF-16 st
10fd0 72 69 6e 67 20 53 54 52 49 4e 47 20 74 6f 20 74  ring STRING to t
10fe0 68 65 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68  he wildcard.  Th
10ff0 65 20 73 74 72 69 6e 67 20 69 73 20 42 59 54 45  e string is BYTE
11000 53 20 62 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e  S bytes.** long.
11010 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
11020 65 73 74 5f 62 69 6e 64 5f 74 65 78 74 31 36 28  est_bind_text16(
11030 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
11040 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
11050 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
11060 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
11070 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
11080 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
11090 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73  E_OMIT_UTF16.  s
110a0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
110b0 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  mt;.  int idx;. 
110c0 20 69 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 68   int bytes;.  ch
110d0 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74  ar *value;.  int
110e0 20 72 63 3b 0a 0a 20 20 76 6f 69 64 20 28 2a 78   rc;..  void (*x
110f0 44 65 6c 29 28 29 20 3d 20 28 6f 62 6a 63 3d 3d  Del)() = (objc==
11100 36 3f 53 51 4c 49 54 45 5f 53 54 41 54 49 43 3a  6?SQLITE_STATIC:
11110 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
11120 29 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 53  );.  Tcl_Obj *oS
11130 74 6d 74 20 20 20 20 3d 20 6f 62 6a 76 5b 6f 62  tmt    = objv[ob
11140 6a 63 2d 34 5d 3b 0a 20 20 54 63 6c 5f 4f 62 6a  jc-4];.  Tcl_Obj
11150 20 2a 6f 4e 20 20 20 20 20 20 20 3d 20 6f 62 6a   *oN       = obj
11160 76 5b 6f 62 6a 63 2d 33 5d 3b 0a 20 20 54 63 6c  v[objc-3];.  Tcl
11170 5f 4f 62 6a 20 2a 6f 53 74 72 69 6e 67 20 20 3d  _Obj *oString  =
11180 20 6f 62 6a 76 5b 6f 62 6a 63 2d 32 5d 3b 0a 20   objv[objc-2];. 
11190 20 54 63 6c 5f 4f 62 6a 20 2a 6f 42 79 74 65 73   Tcl_Obj *oBytes
111a0 20 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 31     = objv[objc-1
111b0 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  ];..  if( objc!=
111c0 35 20 26 26 20 6f 62 6a 63 21 3d 36 29 7b 0a 20  5 && objc!=6){. 
111d0 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
111e0 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
111f0 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
11200 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
11210 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
11220 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
11230 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56 41 4c  0), " STMT N VAL
11240 55 45 20 42 59 54 45 53 22 2c 20 30 29 3b 0a 20  UE BYTES", 0);. 
11250 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
11260 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
11270 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
11280 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
11290 72 69 6e 67 28 6f 53 74 6d 74 29 2c 20 26 70 53  ring(oStmt), &pS
112a0 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
112b0 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
112c0 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
112d0 28 69 6e 74 65 72 70 2c 20 6f 4e 2c 20 26 69 64  (interp, oN, &id
112e0 78 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  x) ) return TCL_
112f0 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d  ERROR;.  value =
11300 20 28 63 68 61 72 2a 29 54 63 6c 5f 47 65 74 42   (char*)Tcl_GetB
11310 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28  yteArrayFromObj(
11320 6f 53 74 72 69 6e 67 2c 20 30 29 3b 0a 20 20 69  oString, 0);.  i
11330 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
11340 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 42 79  mObj(interp, oBy
11350 74 65 73 2c 20 26 62 79 74 65 73 29 20 29 20 72  tes, &bytes) ) r
11360 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
11370 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
11380 5f 62 69 6e 64 5f 74 65 78 74 31 36 28 70 53 74  _bind_text16(pSt
11390 6d 74 2c 20 69 64 78 2c 20 28 76 6f 69 64 20 2a  mt, idx, (void *
113a0 29 76 61 6c 75 65 2c 20 62 79 74 65 73 2c 20 78  )value, bytes, x
113b0 44 65 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Del);.  if( sqli
113c0 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
113d0 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28  nterp, StmtToDb(
113e0 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65  pStmt), rc) ) re
113f0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
11400 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
11410 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72  _OK ){.    retur
11420 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
11430 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ..#endif /* SQLI
11440 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
11450 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
11460 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
11470 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
11480 5f 62 6c 6f 62 20 20 53 54 4d 54 20 4e 20 44 41  _blob  STMT N DA
11490 54 41 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54  TA BYTES.**.** T
114a0 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f  est the sqlite3_
114b0 62 69 6e 64 5f 62 6c 6f 62 20 69 6e 74 65 72 66  bind_blob interf
114c0 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20  ace.  STMT is a 
114d0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
114e0 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20  nt..** N is the 
114f0 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63  index of a wildc
11500 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61  ard in the prepa
11510 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  red statement.  
11520 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20  This command.** 
11530 62 69 6e 64 73 20 61 20 42 4c 4f 42 20 74 6f 20  binds a BLOB to 
11540 74 68 65 20 77 69 6c 64 63 61 72 64 2e 20 20 54  the wildcard.  T
11550 68 65 20 42 4c 4f 42 20 69 73 20 42 59 54 45 53  he BLOB is BYTES
11560 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 2e 0a   bytes in size..
11570 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
11580 73 74 5f 62 69 6e 64 5f 62 6c 6f 62 28 0a 20 20  st_bind_blob(.  
11590 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
115a0 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
115b0 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
115c0 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
115d0 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
115e0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
115f0 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78  pStmt;.  int idx
11600 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 20  ;.  int bytes;. 
11610 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20   char *value;.  
11620 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
11630 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63  bjc!=5 ){.    Tc
11640 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
11650 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
11660 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
11670 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c  \"",.        Tcl
11680 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
11690 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
116a0 20 53 54 4d 54 20 4e 20 44 41 54 41 20 42 59 54   STMT N DATA BYT
116b0 45 53 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  ES", 0);.    ret
116c0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
116d0 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
116e0 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
116f0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
11700 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
11710 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
11720 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
11730 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
11740 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69  erp, objv[2], &i
11750 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  dx) ) return TCL
11760 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75 65 20  _ERROR;.  value 
11770 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  = Tcl_GetString(
11780 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 69 66 28 20  objv[3]);.  if( 
11790 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
117a0 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34  j(interp, objv[4
117b0 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74  ], &bytes) ) ret
117c0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
117d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62    rc = sqlite3_b
117e0 69 6e 64 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 20  ind_blob(pStmt, 
117f0 69 64 78 2c 20 76 61 6c 75 65 2c 20 62 79 74 65  idx, value, byte
11800 73 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  s, SQLITE_TRANSI
11810 45 4e 54 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  ENT);.  if( sqli
11820 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
11830 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28  nterp, StmtToDb(
11840 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65  pStmt), rc) ) re
11850 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
11860 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
11870 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72  _OK ){.    retur
11880 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
11890 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ..  return TCL_O
118a0 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
118b0 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  e:   sqlite3_bin
118c0 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e  d_parameter_coun
118d0 74 20 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 52 65  t  STMT.**.** Re
118e0 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
118f0 6f 66 20 77 69 6c 64 63 61 72 64 73 20 69 6e 20  of wildcards in 
11900 74 68 65 20 67 69 76 65 6e 20 73 74 61 74 65 6d  the given statem
11910 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ent..*/.static i
11920 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72  nt test_bind_par
11930 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 0a 20 20  ameter_count(.  
11940 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
11950 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
11960 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
11970 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
11980 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
11990 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
119a0 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62  pStmt;..  if( ob
119b0 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
119c0 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
119d0 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
119e0 53 54 4d 54 22 29 3b 0a 20 20 20 20 72 65 74 75  STMT");.    retu
119f0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
11a00 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  }.  if( getStmtP
11a10 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
11a20 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
11a30 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
11a40 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11a50 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  R;.  Tcl_SetObjR
11a60 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
11a70 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69  l_NewIntObj(sqli
11a80 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
11a90 65 72 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 29  er_count(pStmt))
11aa0 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
11ab0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
11ac0 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ge:   sqlite3_bi
11ad0 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
11ae0 65 20 20 53 54 4d 54 20 20 4e 0a 2a 2a 0a 2a 2a  e  STMT  N.**.**
11af0 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65   Return the name
11b00 20 6f 66 20 74 68 65 20 4e 74 68 20 77 69 6c 64   of the Nth wild
11b10 63 61 72 64 2e 20 20 54 68 65 20 66 69 72 73 74  card.  The first
11b20 20 77 69 6c 64 63 61 72 64 20 69 73 20 31 2e 0a   wildcard is 1..
11b30 2a 2a 20 41 6e 20 65 6d 70 74 79 20 73 74 72 69  ** An empty stri
11b40 6e 67 20 69 73 20 72 65 74 75 72 6e 65 64 20 69  ng is returned i
11b50 66 20 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61  f N is out of ra
11b60 6e 67 65 20 6f 72 20 69 66 20 74 68 65 20 77 69  nge or if the wi
11b70 6c 64 63 61 72 64 0a 2a 2a 20 69 73 20 6e 61 6d  ldcard.** is nam
11b80 65 6c 65 73 73 2e 0a 2a 2f 0a 73 74 61 74 69 63  eless..*/.static
11b90 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 70   int test_bind_p
11ba0 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 0a 20  arameter_name(. 
11bb0 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
11bc0 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
11bd0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
11be0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
11bf0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
11c00 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
11c10 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 3b  *pStmt;.  int i;
11c20 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
11c30 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
11c40 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
11c50 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 20 4e  1, objv, "STMT N
11c60 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
11c70 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
11c80 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
11c90 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
11ca0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
11cb0 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
11cc0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
11cd0 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
11ce0 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
11cf0 62 6a 76 5b 32 5d 2c 20 26 69 29 20 29 20 72 65  bjv[2], &i) ) re
11d00 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
11d10 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
11d20 6c 74 28 69 6e 74 65 72 70 2c 20 0a 20 20 20 20  lt(interp, .    
11d30 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
11d40 6a 28 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  j(sqlite3_bind_p
11d50 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 70 53  arameter_name(pS
11d60 74 6d 74 2c 69 29 2c 2d 31 29 0a 20 20 29 3b 0a  tmt,i),-1).  );.
11d70 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
11d80 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
11d90 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
11da0 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 20  parameter_index 
11db0 20 53 54 4d 54 20 20 4e 41 4d 45 0a 2a 2a 0a 2a   STMT  NAME.**.*
11dc0 2a 20 52 65 74 75 72 6e 20 74 68 65 20 69 6e 64  * Return the ind
11dd0 65 78 20 6f 66 20 74 68 65 20 77 69 6c 64 63 61  ex of the wildca
11de0 72 64 20 63 61 6c 6c 65 64 20 4e 41 4d 45 2e 20  rd called NAME. 
11df0 20 52 65 74 75 72 6e 20 30 20 69 66 20 74 68 65   Return 0 if the
11e00 72 65 20 69 73 0a 2a 2a 20 6e 6f 20 73 75 63 68  re is.** no such
11e10 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74   wildcard..*/.st
11e20 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69  atic int test_bi
11e30 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64  nd_parameter_ind
11e40 65 78 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  ex(.  void * cli
11e50 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
11e60 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
11e70 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
11e80 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
11e90 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
11ea0 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20  stmt *pStmt;..  
11eb0 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
11ec0 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
11ed0 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
11ee0 62 6a 76 2c 20 22 53 54 4d 54 20 4e 41 4d 45 22  bjv, "STMT NAME"
11ef0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
11f00 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
11f10 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
11f20 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
11f30 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
11f40 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
11f50 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
11f60 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
11f70 28 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54  (interp, .     T
11f80 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 0a 20 20  cl_NewIntObj(.  
11f90 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e       sqlite3_bin
11fa0 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65  d_parameter_inde
11fb0 78 28 70 53 74 6d 74 2c 54 63 6c 5f 47 65 74 53  x(pStmt,Tcl_GetS
11fc0 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 0a  tring(objv[2])).
11fd0 20 20 20 20 20 29 0a 20 20 29 3b 0a 20 20 72 65       ).  );.  re
11fe0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
11ff0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73  /*.** Usage:   s
12000 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e  qlite3_clear_bin
12010 64 69 6e 67 73 20 53 54 4d 54 0a 2a 2a 0a 2a 2f  dings STMT.**.*/
12020 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
12030 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 28  _clear_bindings(
12040 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
12050 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
12060 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
12070 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
12080 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
12090 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
120a0 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28  t *pStmt;..  if(
120b0 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20   objc!=2 ){.    
120c0 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
120d0 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
120e0 2c 20 22 53 54 4d 54 22 29 3b 0a 20 20 20 20 72  , "STMT");.    r
120f0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12100 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74  .  }.  if( getSt
12110 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
12120 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
12130 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
12140 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
12150 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  RROR;.  Tcl_SetO
12160 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
12170 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73   Tcl_NewIntObj(s
12180 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e  qlite3_clear_bin
12190 64 69 6e 67 73 28 70 53 74 6d 74 29 29 29 3b 0a  dings(pStmt)));.
121a0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
121b0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
121c0 20 20 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70     sqlite3_sleep
121d0 20 4d 49 4c 4c 49 53 45 43 4f 4e 44 53 0a 2a 2f   MILLISECONDS.*/
121e0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
121f0 5f 73 6c 65 65 70 28 0a 20 20 76 6f 69 64 20 2a  _sleep(.  void *
12200 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
12210 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
12220 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
12230 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
12240 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 69 6e 74 20  objv[].){.  int 
12250 6d 73 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  ms;..  if( objc!
12260 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =2 ){.    Tcl_Wr
12270 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
12280 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 4d 49 4c  p, 1, objv, "MIL
12290 4c 49 53 45 43 4f 4e 44 53 22 29 3b 0a 20 20 20  LISECONDS");.   
122a0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
122b0 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 63 6c  R;.  }.  if( Tcl
122c0 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
122d0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20  nterp, objv[1], 
122e0 26 6d 73 29 20 29 7b 0a 20 20 20 20 72 65 74 75  &ms) ){.    retu
122f0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
12300 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  }.  Tcl_SetObjRe
12310 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
12320 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74  _NewIntObj(sqlit
12330 65 33 5f 73 6c 65 65 70 28 6d 73 29 29 29 3b 0a  e3_sleep(ms)));.
12340 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
12350 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
12360 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65   sqlite3_errcode
12370 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e   DB.**.** Return
12380 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 70 72   the string repr
12390 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
123a0 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71  e most recent sq
123b0 6c 69 74 65 33 5f 2a 20 41 50 49 0a 2a 2a 20 65  lite3_* API.** e
123c0 72 72 6f 72 20 63 6f 64 65 2e 20 65 2e 67 2e 20  rror code. e.g. 
123d0 22 53 51 4c 49 54 45 5f 45 52 52 4f 52 22 2e 0a  "SQLITE_ERROR"..
123e0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
123f0 73 74 5f 65 72 72 63 6f 64 65 28 0a 20 20 76 6f  st_errcode(.  vo
12400 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
12410 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
12420 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
12430 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
12440 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
12450 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
12460 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 7a 42  nt rc;.  char zB
12470 75 66 5b 33 30 5d 3b 0a 0a 20 20 69 66 28 20 6f  uf[30];..  if( o
12480 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
12490 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
124a0 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
124b0 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
124c0 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
124d0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
124e0 30 5d 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a  0]), " DB", 0);.
124f0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
12500 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
12510 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
12520 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
12530 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
12540 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
12550 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c  RROR;.  rc = sql
12560 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29  ite3_errcode(db)
12570 3b 0a 20 20 69 66 28 20 28 72 63 26 30 78 66 66  ;.  if( (rc&0xff
12580 29 3d 3d 72 63 20 29 7b 0a 20 20 20 20 7a 42 75  )==rc ){.    zBu
12590 66 5b 30 5d 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  f[0] = 0;.  }els
125a0 65 7b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a  e{.    sprintf(z
125b0 42 75 66 2c 22 2b 25 64 22 2c 20 72 63 3e 3e 38  Buf,"+%d", rc>>8
125c0 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70  );.  }.  Tcl_App
125d0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
125e0 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f  , (char *)t1Erro
125f0 72 4e 61 6d 65 28 72 63 29 2c 20 7a 42 75 66 2c  rName(rc), zBuf,
12600 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
12610 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
12620 73 61 67 65 3a 20 20 20 74 65 73 74 5f 65 72 72  sage:   test_err
12630 6d 73 67 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74  msg DB.**.** Ret
12640 75 72 6e 73 20 74 68 65 20 55 54 46 2d 38 20 72  urns the UTF-8 r
12650 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
12660 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
12670 67 65 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ge string for th
12680 65 0a 2a 2a 20 6d 6f 73 74 20 72 65 63 65 6e 74  e.** most recent
12690 20 73 71 6c 69 74 65 33 5f 2a 20 41 50 49 20 63   sqlite3_* API c
126a0 61 6c 6c 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  all..*/.static i
126b0 6e 74 20 74 65 73 74 5f 65 72 72 6d 73 67 28 0a  nt test_errmsg(.
126c0 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
126d0 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
126e0 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
126f0 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
12700 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
12710 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
12720 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
12730 45 72 72 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  Err;..  if( objc
12740 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
12750 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
12760 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
12770 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
12780 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
12790 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
127a0 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20  , " DB", 0);.   
127b0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
127c0 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
127d0 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
127e0 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
127f0 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
12800 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
12810 52 3b 0a 0a 20 20 7a 45 72 72 20 3d 20 73 71 6c  R;..  zErr = sql
12820 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 3b  ite3_errmsg(db);
12830 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
12840 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
12850 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 45 72  NewStringObj(zEr
12860 72 2c 20 2d 31 29 29 3b 0a 20 20 72 65 74 75 72  r, -1));.  retur
12870 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
12880 2a 2a 20 55 73 61 67 65 3a 20 20 20 74 65 73 74  ** Usage:   test
12890 5f 65 72 72 6d 73 67 31 36 20 44 42 0a 2a 2a 0a  _errmsg16 DB.**.
128a0 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 55  ** Returns the U
128b0 54 46 2d 31 36 20 72 65 70 72 65 73 65 6e 74 61  TF-16 representa
128c0 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 72 72 6f  tion of the erro
128d0 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67  r message string
128e0 20 66 6f 72 20 74 68 65 0a 2a 2a 20 6d 6f 73 74   for the.** most
128f0 20 72 65 63 65 6e 74 20 73 71 6c 69 74 65 33 5f   recent sqlite3_
12900 2a 20 41 50 49 20 63 61 6c 6c 2e 20 54 68 69 73  * API call. This
12910 20 69 73 20 61 20 62 79 74 65 20 61 72 72 61 79   is a byte array
12920 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 54   object at the T
12930 43 4c 20 0a 2a 2a 20 6c 65 76 65 6c 2c 20 61 6e  CL .** level, an
12940 64 20 69 74 20 69 6e 63 6c 75 64 65 73 20 74 68  d it includes th
12950 65 20 30 78 30 30 20 30 78 30 30 20 74 65 72 6d  e 0x00 0x00 term
12960 69 6e 61 74 6f 72 20 62 79 74 65 73 20 61 74 20  inator bytes at 
12970 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a 2a  the end of the.*
12980 2a 20 55 54 46 2d 31 36 20 73 74 72 69 6e 67 2e  * UTF-16 string.
12990 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
129a0 65 73 74 5f 65 72 72 6d 73 67 31 36 28 0a 20 20  est_errmsg16(.  
129b0 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
129c0 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
129d0 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
129e0 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
129f0 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
12a00 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
12a10 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69  MIT_UTF16.  sqli
12a20 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74  te3 *db;.  const
12a30 20 76 6f 69 64 20 2a 7a 45 72 72 3b 0a 20 20 69   void *zErr;.  i
12a40 6e 74 20 62 79 74 65 73 20 3d 20 30 3b 0a 0a 20  nt bytes = 0;.. 
12a50 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
12a60 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
12a70 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
12a80 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
12a90 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
12aa0 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
12ab0 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22  (objv[0]), " DB"
12ac0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
12ad0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
12ae0 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
12af0 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
12b00 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
12b10 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ), &db) ) return
12b20 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a   TCL_ERROR;..  z
12b30 45 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 65 72  Err = sqlite3_er
12b40 72 6d 73 67 31 36 28 64 62 29 3b 0a 20 20 69 66  rmsg16(db);.  if
12b50 28 20 7a 45 72 72 20 29 7b 0a 20 20 20 20 62 79  ( zErr ){.    by
12b60 74 65 73 20 3d 20 73 71 6c 69 74 65 33 75 74 66  tes = sqlite3utf
12b70 31 36 42 79 74 65 4c 65 6e 28 7a 45 72 72 2c 20  16ByteLen(zErr, 
12b80 2d 31 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53  -1);.  }.  Tcl_S
12b90 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
12ba0 72 70 2c 20 54 63 6c 5f 4e 65 77 42 79 74 65 41  rp, Tcl_NewByteA
12bb0 72 72 61 79 4f 62 6a 28 7a 45 72 72 2c 20 62 79  rrayObj(zErr, by
12bc0 74 65 73 29 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  tes));.#endif /*
12bd0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
12be0 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54  16 */.  return T
12bf0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
12c00 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 70  Usage: sqlite3_p
12c10 72 65 70 61 72 65 20 44 42 20 73 71 6c 20 62 79  repare DB sql by
12c20 74 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a  tes tailvar.**.*
12c30 2a 20 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f 20  * Compile up to 
12c40 3c 62 79 74 65 73 3e 20 62 79 74 65 73 20 6f 66  <bytes> bytes of
12c50 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 53 51   the supplied SQ
12c60 4c 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20 75  L string <sql> u
12c70 73 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73 65  sing.** database
12c80 20 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54 68   handle <DB>. Th
12c90 65 20 70 61 72 61 6d 65 74 65 72 20 3c 74 61 69  e parameter <tai
12ca0 6c 76 61 6c 3e 20 69 73 20 74 68 65 20 6e 61 6d  lval> is the nam
12cb0 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a  e of a global.**
12cc0 20 76 61 72 69 61 62 6c 65 20 74 68 61 74 20 69   variable that i
12cd0 73 20 73 65 74 20 74 6f 20 74 68 65 20 75 6e 75  s set to the unu
12ce0 73 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20 3c  sed portion of <
12cf0 73 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20 41  sql> (if any). A
12d00 0a 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65 20  .** STMT handle 
12d10 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a  is returned..*/.
12d20 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
12d30 70 72 65 70 61 72 65 28 0a 20 20 76 6f 69 64 20  prepare(.  void 
12d40 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
12d50 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
12d60 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
12d70 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
12d80 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
12d90 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73  ite3 *db;.  cons
12da0 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20  t char *zSql;.  
12db0 69 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 6f 6e  int bytes;.  con
12dc0 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 20 3d  st char *zTail =
12dd0 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74   0;.  sqlite3_st
12de0 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20  mt *pStmt = 0;. 
12df0 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a   char zBuf[50];.
12e00 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
12e10 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20   objc!=5 ){.    
12e20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
12e30 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
12e40 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
12e50 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
12e60 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
12e70 76 5b 30 5d 29 2c 20 22 20 44 42 20 73 71 6c 20  v[0]), " DB sql 
12e80 62 79 74 65 73 20 74 61 69 6c 76 61 72 22 2c 20  bytes tailvar", 
12e90 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
12ea0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
12eb0 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
12ec0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
12ed0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
12ee0 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
12ef0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c  CL_ERROR;.  zSql
12f00 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
12f10 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20 69 66 28  (objv[2]);.  if(
12f20 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
12f30 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
12f40 33 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65  3], &bytes) ) re
12f50 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
12f60 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
12f70 70 72 65 70 61 72 65 28 64 62 2c 20 7a 53 71 6c  prepare(db, zSql
12f80 2c 20 62 79 74 65 73 2c 20 26 70 53 74 6d 74 2c  , bytes, &pStmt,
12f90 20 26 7a 54 61 69 6c 29 3b 0a 20 20 69 66 28 20   &zTail);.  if( 
12fa0 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
12fb0 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
12fc0 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
12fd0 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 7a 54 61  ERROR;.  if( zTa
12fe0 69 6c 20 29 7b 0a 20 20 20 20 69 66 28 20 62 79  il ){.    if( by
12ff0 74 65 73 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20  tes>=0 ){.      
13000 62 79 74 65 73 20 3d 20 62 79 74 65 73 20 2d 20  bytes = bytes - 
13010 28 7a 54 61 69 6c 2d 7a 53 71 6c 29 3b 0a 20 20  (zTail-zSql);.  
13020 20 20 7d 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 53    }.    Tcl_ObjS
13030 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6f  etVar2(interp, o
13040 62 6a 76 5b 34 5d 2c 20 30 2c 20 54 63 6c 5f 4e  bjv[4], 0, Tcl_N
13050 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 54 61 69  ewStringObj(zTai
13060 6c 2c 20 62 79 74 65 73 29 2c 20 30 29 3b 0a 20  l, bytes), 0);. 
13070 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c   }.  if( rc!=SQL
13080 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 61 73  ITE_OK ){.    as
13090 73 65 72 74 28 20 70 53 74 6d 74 3d 3d 30 20 29  sert( pStmt==0 )
130a0 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42  ;.    sprintf(zB
130b0 75 66 2c 20 22 28 25 64 29 20 22 2c 20 72 63 29  uf, "(%d) ", rc)
130c0 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ;.    Tcl_Append
130d0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
130e0 42 75 66 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  Buf, sqlite3_err
130f0 6d 73 67 28 64 62 29 2c 20 30 29 3b 0a 20 20 20  msg(db), 0);.   
13100 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
13110 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 53  R;.  }..  if( pS
13120 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28 20 73  tmt ){.    if( s
13130 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
13140 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c  interStr(interp,
13150 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20 29 20   zBuf, pStmt) ) 
13160 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13170 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ;.    Tcl_Append
13180 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
13190 42 75 66 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72  Buf, 0);.  }.  r
131a0 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
131b0 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
131c0 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
131d0 20 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61   DB sql bytes ta
131e0 69 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  ilvar.**.** Comp
131f0 69 6c 65 20 75 70 20 74 6f 20 3c 62 79 74 65 73  ile up to <bytes
13200 3e 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 73  > bytes of the s
13210 75 70 70 6c 69 65 64 20 53 51 4c 20 73 74 72 69  upplied SQL stri
13220 6e 67 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a  ng <sql> using.*
13230 2a 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  * database handl
13240 65 20 3c 44 42 3e 2e 20 54 68 65 20 70 61 72 61  e <DB>. The para
13250 6d 65 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20  meter <tailval> 
13260 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
13270 20 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61   global.** varia
13280 62 6c 65 20 74 68 61 74 20 69 73 20 73 65 74 20  ble that is set 
13290 74 6f 20 74 68 65 20 75 6e 75 73 65 64 20 70 6f  to the unused po
132a0 72 74 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28  rtion of <sql> (
132b0 69 66 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54  if any). A.** ST
132c0 4d 54 20 68 61 6e 64 6c 65 20 69 73 20 72 65 74  MT handle is ret
132d0 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  urned..*/.static
132e0 20 69 6e 74 20 74 65 73 74 5f 70 72 65 70 61 72   int test_prepar
132f0 65 5f 76 32 28 0a 20 20 76 6f 69 64 20 2a 20 63  e_v2(.  void * c
13300 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
13310 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
13320 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
13330 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
13340 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
13350 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63  3 *db;.  const c
13360 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e 74  har *zSql;.  int
13370 20 62 79 74 65 73 3b 0a 20 20 63 6f 6e 73 74 20   bytes;.  const 
13380 63 68 61 72 20 2a 7a 54 61 69 6c 20 3d 20 30 3b  char *zTail = 0;
13390 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
133a0 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68  *pStmt = 0;.  ch
133b0 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20 69  ar zBuf[50];.  i
133c0 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
133d0 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=5 ){.    Tcl
133e0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
133f0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
13400 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
13410 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
13420 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
13430 5d 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79 74  ]), " DB sql byt
13440 65 73 20 74 61 69 6c 76 61 72 22 2c 20 30 29 3b  es tailvar", 0);
13450 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
13460 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
13470 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
13480 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
13490 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
134a0 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
134b0 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d 20  ERROR;.  zSql = 
134c0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
134d0 6a 76 5b 32 5d 29 3b 0a 20 20 69 66 28 20 54 63  jv[2]);.  if( Tc
134e0 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
134f0 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c  interp, objv[3],
13500 20 26 62 79 74 65 73 29 20 29 20 72 65 74 75 72   &bytes) ) retur
13510 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
13520 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
13530 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 53 71 6c  pare_v2(db, zSql
13540 2c 20 62 79 74 65 73 2c 20 26 70 53 74 6d 74 2c  , bytes, &pStmt,
13550 20 26 7a 54 61 69 6c 29 3b 0a 20 20 69 66 28 20   &zTail);.  if( 
13560 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
13570 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
13580 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
13590 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 7a 54 61  ERROR;.  if( zTa
135a0 69 6c 20 29 7b 0a 20 20 20 20 69 66 28 20 62 79  il ){.    if( by
135b0 74 65 73 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20  tes>=0 ){.      
135c0 62 79 74 65 73 20 3d 20 62 79 74 65 73 20 2d 20  bytes = bytes - 
135d0 28 7a 54 61 69 6c 2d 7a 53 71 6c 29 3b 0a 20 20  (zTail-zSql);.  
135e0 20 20 7d 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 53    }.    Tcl_ObjS
135f0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6f  etVar2(interp, o
13600 62 6a 76 5b 34 5d 2c 20 30 2c 20 54 63 6c 5f 4e  bjv[4], 0, Tcl_N
13610 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 54 61 69  ewStringObj(zTai
13620 6c 2c 20 62 79 74 65 73 29 2c 20 30 29 3b 0a 20  l, bytes), 0);. 
13630 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c   }.  if( rc!=SQL
13640 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 61 73  ITE_OK ){.    as
13650 73 65 72 74 28 20 70 53 74 6d 74 3d 3d 30 20 29  sert( pStmt==0 )
13660 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42  ;.    sprintf(zB
13670 75 66 2c 20 22 28 25 64 29 20 22 2c 20 72 63 29  uf, "(%d) ", rc)
13680 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ;.    Tcl_Append
13690 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
136a0 42 75 66 2c 20 73 71 6c 69 74 65 33 5f 65 72 72  Buf, sqlite3_err
136b0 6d 73 67 28 64 62 29 2c 20 30 29 3b 0a 20 20 20  msg(db), 0);.   
136c0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
136d0 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 53  R;.  }..  if( pS
136e0 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28 20 73  tmt ){.    if( s
136f0 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
13700 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c  interStr(interp,
13710 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20 29 20   zBuf, pStmt) ) 
13720 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13730 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ;.    Tcl_Append
13740 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
13750 42 75 66 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72  Buf, 0);.  }.  r
13760 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
13770 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
13780 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 20  lite3_prepare16 
13790 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69  DB sql bytes tai
137a0 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69  lvar.**.** Compi
137b0 6c 65 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e  le up to <bytes>
137c0 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 73 75   bytes of the su
137d0 70 70 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e  pplied SQL strin
137e0 67 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a  g <sql> using.**
137f0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
13800 20 3c 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d   <DB>. The param
13810 65 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69  eter <tailval> i
13820 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
13830 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62  global.** variab
13840 6c 65 20 74 68 61 74 20 69 73 20 73 65 74 20 74  le that is set t
13850 6f 20 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72  o the unused por
13860 74 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69  tion of <sql> (i
13870 66 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d  f any). A.** STM
13880 54 20 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75  T handle is retu
13890 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rned..*/.static 
138a0 69 6e 74 20 74 65 73 74 5f 70 72 65 70 61 72 65  int test_prepare
138b0 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  16(.  void * cli
138c0 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
138d0 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
138e0 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
138f0 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
13900 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51  [].){.#ifndef SQ
13910 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
13920 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
13930 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 53 71   const void *zSq
13940 6c 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  l;.  const void 
13950 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20 54 63  *zTail = 0;.  Tc
13960 6c 5f 4f 62 6a 20 2a 70 54 61 69 6c 20 3d 20 30  l_Obj *pTail = 0
13970 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  ;.  sqlite3_stmt
13980 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63   *pStmt = 0;.  c
13990 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 20 0a 20  har zBuf[50]; . 
139a0 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 62   int rc;.  int b
139b0 79 74 65 73 3b 20 20 20 20 20 20 20 20 20 20 20  ytes;           
139c0 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65       /* The inte
139d0 67 65 72 20 73 70 65 63 69 66 69 65 64 20 61 73  ger specified as
139e0 20 61 72 67 20 33 20 2a 2f 0a 20 20 69 6e 74 20   arg 3 */.  int 
139f0 6f 62 6a 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  objlen;         
13a00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 62 79 74        /* The byt
13a10 65 2d 61 72 72 61 79 20 6c 65 6e 67 74 68 20 6f  e-array length o
13a20 66 20 61 72 67 20 32 20 2a 2f 0a 0a 20 20 69 66  f arg 2 */..  if
13a30 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20  ( objc!=5 ){.   
13a40 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
13a50 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
13a60 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
13a70 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
13a80 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
13a90 6a 76 5b 30 5d 29 2c 20 22 20 44 42 20 73 71 6c  jv[0]), " DB sql
13aa0 20 62 79 74 65 73 20 74 61 69 6c 76 61 72 22 2c   bytes tailvar",
13ab0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
13ac0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
13ad0 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
13ae0 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
13af0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
13b00 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
13b10 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71  TCL_ERROR;.  zSq
13b20 6c 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41  l = Tcl_GetByteA
13b30 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  rrayFromObj(objv
13b40 5b 32 5d 2c 20 26 6f 62 6a 6c 65 6e 29 3b 0a 20  [2], &objlen);. 
13b50 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
13b60 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
13b70 62 6a 76 5b 33 5d 2c 20 26 62 79 74 65 73 29 20  bjv[3], &bytes) 
13b80 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
13b90 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  OR;..  rc = sqli
13ba0 74 65 33 5f 70 72 65 70 61 72 65 31 36 28 64 62  te3_prepare16(db
13bb0 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c 20 26  , zSql, bytes, &
13bc0 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c 29 3b 0a  pStmt, &zTail);.
13bd0 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
13be0 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
13bf0 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
13c00 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
13c10 66 28 20 72 63 20 29 7b 0a 20 20 20 20 72 65 74  f( rc ){.    ret
13c20 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
13c30 20 7d 0a 0a 20 20 69 66 28 20 7a 54 61 69 6c 20   }..  if( zTail 
13c40 29 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e 20 3d 20  ){.    objlen = 
13c50 6f 62 6a 6c 65 6e 20 2d 20 28 28 75 38 20 2a 29  objlen - ((u8 *)
13c60 7a 54 61 69 6c 2d 28 75 38 20 2a 29 7a 53 71 6c  zTail-(u8 *)zSql
13c70 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
13c80 6f 62 6a 6c 65 6e 20 3d 20 30 3b 0a 20 20 7d 0a  objlen = 0;.  }.
13c90 20 20 70 54 61 69 6c 20 3d 20 54 63 6c 5f 4e 65    pTail = Tcl_Ne
13ca0 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28 28 75  wByteArrayObj((u
13cb0 38 20 2a 29 7a 54 61 69 6c 2c 20 6f 62 6a 6c 65  8 *)zTail, objle
13cc0 6e 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65  n);.  Tcl_IncrRe
13cd0 66 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a 20  fCount(pTail);. 
13ce0 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28   Tcl_ObjSetVar2(
13cf0 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c  interp, objv[4],
13d00 20 30 2c 20 70 54 61 69 6c 2c 20 30 29 3b 0a 20   0, pTail, 0);. 
13d10 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e   Tcl_DecrRefCoun
13d20 74 28 70 54 61 69 6c 29 3b 0a 0a 20 20 69 66 28  t(pTail);..  if(
13d30 20 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 69 66   pStmt ){.    if
13d40 28 20 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b  ( sqlite3TestMak
13d50 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65  ePointerStr(inte
13d60 72 70 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74 29  rp, zBuf, pStmt)
13d70 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
13d80 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41  ROR;.  }.  Tcl_A
13d90 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
13da0 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23 65  rp, zBuf, 0);.#e
13db0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
13dc0 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72  MIT_UTF16 */.  r
13dd0 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
13de0 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
13df0 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 5f  lite3_prepare16_
13e00 76 32 20 44 42 20 73 71 6c 20 62 79 74 65 73 20  v2 DB sql bytes 
13e10 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f  tailvar.**.** Co
13e20 6d 70 69 6c 65 20 75 70 20 74 6f 20 3c 62 79 74  mpile up to <byt
13e30 65 73 3e 20 62 79 74 65 73 20 6f 66 20 74 68 65  es> bytes of the
13e40 20 73 75 70 70 6c 69 65 64 20 53 51 4c 20 73 74   supplied SQL st
13e50 72 69 6e 67 20 3c 73 71 6c 3e 20 75 73 69 6e 67  ring <sql> using
13e60 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 68 61 6e  .** database han
13e70 64 6c 65 20 3c 44 42 3e 2e 20 54 68 65 20 70 61  dle <DB>. The pa
13e80 72 61 6d 65 74 65 72 20 3c 74 61 69 6c 76 61 6c  rameter <tailval
13e90 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  > is the name of
13ea0 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72   a global.** var
13eb0 69 61 62 6c 65 20 74 68 61 74 20 69 73 20 73 65  iable that is se
13ec0 74 20 74 6f 20 74 68 65 20 75 6e 75 73 65 64 20  t to the unused 
13ed0 70 6f 72 74 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e  portion of <sql>
13ee0 20 28 69 66 20 61 6e 79 29 2e 20 41 0a 2a 2a 20   (if any). A.** 
13ef0 53 54 4d 54 20 68 61 6e 64 6c 65 20 69 73 20 72  STMT handle is r
13f00 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74  eturned..*/.stat
13f10 69 63 20 69 6e 74 20 74 65 73 74 5f 70 72 65 70  ic int test_prep
13f20 61 72 65 31 36 5f 76 32 28 0a 20 20 76 6f 69 64  are16_v2(.  void
13f30 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
13f40 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
13f50 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
13f60 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
13f70 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e  T objv[].){.#ifn
13f80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13f90 55 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33 20  UTF16.  sqlite3 
13fa0 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  *db;.  const voi
13fb0 64 20 2a 7a 53 71 6c 3b 0a 20 20 63 6f 6e 73 74  d *zSql;.  const
13fc0 20 76 6f 69 64 20 2a 7a 54 61 69 6c 20 3d 20 30   void *zTail = 0
13fd0 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 54 61  ;.  Tcl_Obj *pTa
13fe0 69 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  il = 0;.  sqlite
13ff0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20  3_stmt *pStmt = 
14000 30 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 35  0;.  char zBuf[5
14010 30 5d 3b 20 0a 20 20 69 6e 74 20 72 63 3b 0a 20  0]; .  int rc;. 
14020 20 69 6e 74 20 62 79 74 65 73 3b 20 20 20 20 20   int bytes;     
14030 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
14040 65 20 69 6e 74 65 67 65 72 20 73 70 65 63 69 66  e integer specif
14050 69 65 64 20 61 73 20 61 72 67 20 33 20 2a 2f 0a  ied as arg 3 */.
14060 20 20 69 6e 74 20 6f 62 6a 6c 65 6e 3b 20 20 20    int objlen;   
14070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
14080 68 65 20 62 79 74 65 2d 61 72 72 61 79 20 6c 65  he byte-array le
14090 6e 67 74 68 20 6f 66 20 61 72 67 20 32 20 2a 2f  ngth of arg 2 */
140a0 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20  ..  if( objc!=5 
140b0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
140c0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
140d0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
140e0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
140f0 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
14100 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
14110 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69  DB sql bytes tai
14120 6c 76 61 72 22 2c 20 30 29 3b 0a 20 20 20 20 72  lvar", 0);.    r
14130 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
14140 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
14150 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
14160 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
14170 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
14180 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
14190 0a 20 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65  .  zSql = Tcl_Ge
141a0 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62  tByteArrayFromOb
141b0 6a 28 6f 62 6a 76 5b 32 5d 2c 20 26 6f 62 6a 6c  j(objv[2], &objl
141c0 65 6e 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  en);.  if( Tcl_G
141d0 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
141e0 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62  erp, objv[3], &b
141f0 79 74 65 73 29 20 29 20 72 65 74 75 72 6e 20 54  ytes) ) return T
14200 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20  CL_ERROR;..  rc 
14210 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
14220 65 31 36 5f 76 32 28 64 62 2c 20 7a 53 71 6c 2c  e16_v2(db, zSql,
14230 20 62 79 74 65 73 2c 20 26 70 53 74 6d 74 2c 20   bytes, &pStmt, 
14240 26 7a 54 61 69 6c 29 3b 0a 20 20 69 66 28 20 73  &zTail);.  if( s
14250 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
14260 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63  e(interp, db, rc
14270 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
14280 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 20 29  RROR;.  if( rc )
14290 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
142a0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
142b0 66 28 20 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20  f( zTail ){.    
142c0 6f 62 6a 6c 65 6e 20 3d 20 6f 62 6a 6c 65 6e 20  objlen = objlen 
142d0 2d 20 28 28 75 38 20 2a 29 7a 54 61 69 6c 2d 28  - ((u8 *)zTail-(
142e0 75 38 20 2a 29 7a 53 71 6c 29 3b 0a 20 20 7d 65  u8 *)zSql);.  }e
142f0 6c 73 65 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e 20  lse{.    objlen 
14300 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 54 61 69 6c  = 0;.  }.  pTail
14310 20 3d 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72   = Tcl_NewByteAr
14320 72 61 79 4f 62 6a 28 28 75 38 20 2a 29 7a 54 61  rayObj((u8 *)zTa
14330 69 6c 2c 20 6f 62 6a 6c 65 6e 29 3b 0a 20 20 54  il, objlen);.  T
14340 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28  cl_IncrRefCount(
14350 70 54 61 69 6c 29 3b 0a 20 20 54 63 6c 5f 4f 62  pTail);.  Tcl_Ob
14360 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  jSetVar2(interp,
14370 20 6f 62 6a 76 5b 34 5d 2c 20 30 2c 20 70 54 61   objv[4], 0, pTa
14380 69 6c 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65  il, 0);.  Tcl_De
14390 63 72 52 65 66 43 6f 75 6e 74 28 70 54 61 69 6c  crRefCount(pTail
143a0 29 3b 0a 0a 20 20 69 66 28 20 70 53 74 6d 74 20  );..  if( pStmt 
143b0 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ){.    if( sqlit
143c0 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65  e3TestMakePointe
143d0 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75  rStr(interp, zBu
143e0 66 2c 20 70 53 74 6d 74 29 20 29 20 72 65 74 75  f, pStmt) ) retu
143f0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
14400 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  }.  Tcl_AppendRe
14410 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
14420 66 2c 20 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  f, 0);.#endif /*
14430 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
14440 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54  16 */.  return T
14450 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
14460 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 6f  Usage: sqlite3_o
14470 70 65 6e 20 66 69 6c 65 6e 61 6d 65 20 3f 6f 70  pen filename ?op
14480 74 69 6f 6e 73 2d 6c 69 73 74 3f 0a 2a 2f 0a 73  tions-list?.*/.s
14490 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6f  tatic int test_o
144a0 70 65 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  pen(.  void * cl
144b0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
144c0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
144d0 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
144e0 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
144f0 76 5b 5d 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63  v[].){.  const c
14500 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 0a  har *zFilename;.
14510 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
14520 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20   int rc;.  char 
14530 7a 42 75 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66  zBuf[100];..  if
14540 28 20 6f 62 6a 63 21 3d 33 20 26 26 20 6f 62 6a  ( objc!=3 && obj
14550 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
14560 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
14570 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
14580 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
14590 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
145a0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
145b0 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65 20 6f 70  ), " filename op
145c0 74 69 6f 6e 73 2d 6c 69 73 74 22 2c 20 30 29 3b  tions-list", 0);
145d0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
145e0 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 46  ERROR;.  }..  zF
145f0 69 6c 65 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65  ilename = Tcl_Ge
14600 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
14610 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
14620 5f 6f 70 65 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c  _open(zFilename,
14630 20 26 64 62 29 3b 0a 20 20 0a 20 20 69 66 28 20   &db);.  .  if( 
14640 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50  sqlite3TestMakeP
14650 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70  ointerStr(interp
14660 2c 20 7a 42 75 66 2c 20 64 62 29 20 29 20 72 65  , zBuf, db) ) re
14670 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
14680 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
14690 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
146a0 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
146b0 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
146c0 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70  sage: sqlite3_op
146d0 65 6e 31 36 20 66 69 6c 65 6e 61 6d 65 20 6f 70  en16 filename op
146e0 74 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20  tions.*/.static 
146f0 69 6e 74 20 74 65 73 74 5f 6f 70 65 6e 31 36 28  int test_open16(
14700 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
14710 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
14720 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
14730 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
14740 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
14750 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
14760 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 63  E_OMIT_UTF16.  c
14770 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 69 6c 65  onst void *zFile
14780 6e 61 6d 65 3b 0a 20 20 73 71 6c 69 74 65 33 20  name;.  sqlite3 
14790 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *db;.  int rc;. 
147a0 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b   char zBuf[100];
147b0 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
147c0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
147d0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
147e0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
147f0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
14800 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
14810 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
14820 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73  filename options
14830 2d 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20 20 20  -list", 0);.    
14840 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
14850 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61  ;.  }..  zFilena
14860 6d 65 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65  me = Tcl_GetByte
14870 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a  ArrayFromObj(obj
14880 76 5b 31 5d 2c 20 30 29 3b 0a 20 20 72 63 20 3d  v[1], 0);.  rc =
14890 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28   sqlite3_open16(
148a0 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 64 62 29 3b  zFilename, &db);
148b0 0a 20 20 0a 20 20 69 66 28 20 73 71 6c 69 74 65  .  .  if( sqlite
148c0 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72  3TestMakePointer
148d0 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  Str(interp, zBuf
148e0 2c 20 64 62 29 20 29 20 72 65 74 75 72 6e 20 54  , db) ) return T
148f0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
14900 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
14910 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23  erp, zBuf, 0);.#
14920 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
14930 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20  OMIT_UTF16 */.  
14940 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
14950 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
14960 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31  qlite3_complete1
14970 36 20 3c 55 54 46 2d 31 36 20 73 74 72 69 6e 67  6 <UTF-16 string
14980 3e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31  >.**.** Return 1
14990 20 69 66 20 74 68 65 20 73 75 70 70 6c 69 65 64   if the supplied
149a0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 63   argument is a c
149b0 6f 6d 70 6c 65 74 65 20 53 51 4c 20 73 74 61 74  omplete SQL stat
149c0 65 6d 65 6e 74 2c 20 6f 72 20 7a 65 72 6f 0a 2a  ement, or zero.*
149d0 2a 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a  * otherwise..*/.
149e0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
149f0 63 6f 6d 70 6c 65 74 65 31 36 28 0a 20 20 76 6f  complete16(.  vo
14a00 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
14a10 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
14a20 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
14a30 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
14a40 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69  NST objv[].){.#i
14a50 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
14a60 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 29  E_OMIT_COMPLETE)
14a70 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
14a80 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 29 0a  ITE_OMIT_UTF16).
14a90 20 20 63 68 61 72 20 2a 7a 42 75 66 3b 0a 0a 20    char *zBuf;.. 
14aa0 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
14ab0 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
14ac0 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
14ad0 6f 62 6a 76 2c 20 22 3c 75 74 66 2d 31 36 20 73  objv, "<utf-16 s
14ae0 71 6c 3e 22 29 3b 0a 20 20 20 20 72 65 74 75 72  ql>");.    retur
14af0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
14b00 0a 0a 20 20 7a 42 75 66 20 3d 20 28 63 68 61 72  ..  zBuf = (char
14b10 2a 29 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72  *)Tcl_GetByteArr
14b20 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31  ayFromObj(objv[1
14b30 5d 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74  ], 0);.  Tcl_Set
14b40 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
14b50 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
14b60 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65  sqlite3_complete
14b70 31 36 28 7a 42 75 66 29 29 29 3b 0a 23 65 6e 64  16(zBuf)));.#end
14b80 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
14b90 54 5f 43 4f 4d 50 4c 45 54 45 20 26 26 20 53 51  T_COMPLETE && SQ
14ba0 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
14bb0 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
14bc0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
14bd0 67 65 3a 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ge: sqlite3_step
14be0 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 41 64 76 61   STMT.**.** Adva
14bf0 6e 63 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e  nce the statemen
14c00 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f  t to the next ro
14c10 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  w..*/.static int
14c20 20 74 65 73 74 5f 73 74 65 70 28 0a 20 20 76 6f   test_step(.  vo
14c30 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
14c40 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
14c50 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
14c60 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
14c70 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
14c80 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
14c90 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  tmt;.  int rc;..
14ca0 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
14cb0 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
14cc0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
14cd0 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
14ce0 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
14cf0 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
14d00 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54  g(objv[0]), " ST
14d10 4d 54 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  MT", 0);.    ret
14d20 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
14d30 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
14d40 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
14d50 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
14d60 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
14d70 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
14d80 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
14d90 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3b  te3_step(pStmt);
14da0 0a 0a 20 20 2f 2a 20 69 66 28 20 72 63 21 3d 53  ..  /* if( rc!=S
14db0 51 4c 49 54 45 5f 44 4f 4e 45 20 26 26 20 72 63  QLITE_DONE && rc
14dc0 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 20 72  !=SQLITE_ROW ) r
14dd0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
14de0 20 2a 2f 0a 20 20 54 63 6c 5f 53 65 74 52 65 73   */.  Tcl_SetRes
14df0 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
14e00 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28  r *)t1ErrorName(
14e10 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  rc), 0);.  retur
14e20 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
14e30 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
14e40 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 53  3_column_count S
14e50 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  TMT .**.** Retur
14e60 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
14e70 63 6f 6c 75 6d 6e 73 20 72 65 74 75 72 6e 65 64  columns returned
14e80 20 62 79 20 74 68 65 20 73 71 6c 20 73 74 61 74   by the sql stat
14e90 65 6d 65 6e 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73  ement STMT..*/.s
14ea0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
14eb0 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 0a 20 20 76  olumn_count(.  v
14ec0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
14ed0 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
14ee0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
14ef0 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
14f00 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
14f10 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
14f20 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  Stmt;..  if( obj
14f30 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
14f40 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
14f50 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
14f60 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
14f70 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
14f80 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
14f90 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
14fa0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
14fb0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
14fc0 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
14fd0 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
14fe0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
14ff0 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
15000 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
15010 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  R;..  Tcl_SetObj
15020 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
15030 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
15040 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
15050 74 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65  t(pStmt)));.  re
15060 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
15070 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
15080 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  ite3_column_type
15090 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a   STMT column.**.
150a0 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 74 79  ** Return the ty
150b0 70 65 20 6f 66 20 74 68 65 20 64 61 74 61 20 69  pe of the data i
150c0 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e  n column 'column
150d0 27 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  ' of the current
150e0 20 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   row..*/.static 
150f0 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f  int test_column_
15100 74 79 70 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  type(.  void * c
15110 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
15120 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
15130 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
15140 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
15150 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
15160 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
15170 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 6e 74 20   int col;.  int 
15180 74 70 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  tp;..  if( objc!
15190 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
151a0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
151b0 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
151c0 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
151d0 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
151e0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
151f0 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
15200 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
15210 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
15220 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
15230 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
15240 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
15250 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
15260 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
15270 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
15280 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
15290 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
152a0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
152b0 4f 52 3b 0a 0a 20 20 74 70 20 3d 20 73 71 6c 69  OR;..  tp = sqli
152c0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28  te3_column_type(
152d0 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 73  pStmt, col);.  s
152e0 77 69 74 63 68 28 20 74 70 20 29 7b 0a 20 20 20  witch( tp ){.   
152f0 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54   case SQLITE_INT
15300 45 47 45 52 3a 20 0a 20 20 20 20 20 20 54 63 6c  EGER: .      Tcl
15310 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
15320 70 2c 20 22 49 4e 54 45 47 45 52 22 2c 20 54 43  p, "INTEGER", TC
15330 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20  L_STATIC); .    
15340 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
15350 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3a 0a 20  e SQLITE_NULL:. 
15360 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75       Tcl_SetResu
15370 6c 74 28 69 6e 74 65 72 70 2c 20 22 4e 55 4c 4c  lt(interp, "NULL
15380 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20  ", TCL_STATIC); 
15390 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
153a0 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4c    case SQLITE_FL
153b0 4f 41 54 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53  OAT:.      Tcl_S
153c0 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
153d0 20 22 46 4c 4f 41 54 22 2c 20 54 43 4c 5f 53 54   "FLOAT", TCL_ST
153e0 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72  ATIC); .      br
153f0 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
15400 4c 49 54 45 5f 54 45 58 54 3a 0a 20 20 20 20 20  LITE_TEXT:.     
15410 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
15420 6e 74 65 72 70 2c 20 22 54 45 58 54 22 2c 20 54  nterp, "TEXT", T
15430 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20  CL_STATIC); .   
15440 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
15450 73 65 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3a 0a  se SQLITE_BLOB:.
15460 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73        Tcl_SetRes
15470 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 42 4c 4f  ult(interp, "BLO
15480 42 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  B", TCL_STATIC);
15490 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20   .      break;. 
154a0 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
154b0 20 20 61 73 73 65 72 74 28 30 29 3b 0a 20 20 7d    assert(0);.  }
154c0 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ..  return TCL_O
154d0 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
154e0 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
154f0 6e 5f 69 6e 74 36 34 20 53 54 4d 54 20 63 6f 6c  n_int64 STMT col
15500 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  umn.**.** Return
15510 20 74 68 65 20 64 61 74 61 20 69 6e 20 63 6f 6c   the data in col
15520 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20  umn 'column' of 
15530 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
15540 63 61 73 74 20 61 73 20 61 6e 0a 2a 2a 20 77 69  cast as an.** wi
15550 64 65 20 28 36 34 2d 62 69 74 29 20 69 6e 74 65  de (64-bit) inte
15560 67 65 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ger..*/.static i
15570 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69  nt test_column_i
15580 6e 74 36 34 28 0a 20 20 76 6f 69 64 20 2a 20 63  nt64(.  void * c
15590 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
155a0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
155b0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
155c0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
155d0 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
155e0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
155f0 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 36 34 20   int col;.  i64 
15600 69 56 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  iVal;..  if( obj
15610 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
15620 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
15630 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
15640 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
15650 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
15660 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
15670 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
15680 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
15690 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
156a0 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
156b0 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
156c0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
156d0 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
156e0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
156f0 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
15700 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
15710 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
15720 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
15730 52 52 4f 52 3b 0a 0a 20 20 69 56 61 6c 20 3d 20  RROR;..  iVal = 
15740 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
15750 6e 74 36 34 28 70 53 74 6d 74 2c 20 63 6f 6c 29  nt64(pStmt, col)
15760 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
15770 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
15780 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 69  _NewWideIntObj(i
15790 56 61 6c 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  Val));.  return 
157a0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
157b0 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
157c0 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 53 54 4d 54  column_blob STMT
157d0 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69   column.*/.stati
157e0 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d  c int test_colum
157f0 6e 5f 62 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a  n_blob(.  void *
15800 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
15810 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
15820 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
15830 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
15840 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
15850 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
15860 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 0a 20 20 69  .  int col;..  i
15870 6e 74 20 6c 65 6e 3b 0a 20 20 63 6f 6e 73 74 20  nt len;.  const 
15880 76 6f 69 64 20 2a 70 42 6c 6f 62 3b 0a 0a 20 20  void *pBlob;..  
15890 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
158a0 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
158b0 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
158c0 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
158d0 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
158e0 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
158f0 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
15900 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
15910 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
15920 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
15930 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
15940 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
15950 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
15960 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
15970 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
15980 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
15990 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
159a0 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72  ], &col) ) retur
159b0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
159c0 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f  pBlob = sqlite3_
159d0 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d  column_blob(pStm
159e0 74 2c 20 63 6f 6c 29 3b 0a 20 20 6c 65 6e 20 3d  t, col);.  len =
159f0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
15a00 62 79 74 65 73 28 70 53 74 6d 74 2c 20 63 6f 6c  bytes(pStmt, col
15a10 29 3b 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 42 79 74 65 41 72 72 61 79 4f 62  l_NewByteArrayOb
15a40 6a 28 70 42 6c 6f 62 2c 20 6c 65 6e 29 29 3b 0a  j(pBlob, len));.
15a50 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
15a60 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
15a70 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
15a80 64 6f 75 62 6c 65 20 53 54 4d 54 20 63 6f 6c 75  double STMT colu
15a90 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  mn.**.** Return 
15aa0 74 68 65 20 64 61 74 61 20 69 6e 20 63 6f 6c 75  the data in colu
15ab0 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74  mn 'column' of t
15ac0 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 63  he current row c
15ad0 61 73 74 20 61 73 20 61 20 64 6f 75 62 6c 65 2e  ast as a double.
15ae0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
15af0 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  est_column_doubl
15b00 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
15b10 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
15b20 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
15b30 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
15b40 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
15b50 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
15b60 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
15b70 74 20 63 6f 6c 3b 0a 20 20 64 6f 75 62 6c 65 20  t col;.  double 
15b80 72 56 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  rVal;..  if( obj
15b90 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
15ba0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
15bb0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
15bc0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
15bd0 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
15be0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
15bf0 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
15c00 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
15c10 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
15c20 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
15c30 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
15c40 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
15c50 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
15c60 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
15c70 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
15c80 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
15c90 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
15ca0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
15cb0 52 52 4f 52 3b 0a 0a 20 20 72 56 61 6c 20 3d 20  RROR;..  rVal = 
15cc0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
15cd0 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20 63 6f 6c  ouble(pStmt, col
15ce0 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  );.  Tcl_SetObjR
15cf0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
15d00 6c 5f 4e 65 77 44 6f 75 62 6c 65 4f 62 6a 28 72  l_NewDoubleObj(r
15d10 56 61 6c 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  Val));.  return 
15d20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
15d30 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
15d40 64 61 74 61 5f 63 6f 75 6e 74 20 53 54 4d 54 20  data_count STMT 
15d50 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
15d60 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
15d70 6d 6e 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  mns returned by 
15d80 74 68 65 20 73 71 6c 20 73 74 61 74 65 6d 65 6e  the sql statemen
15d90 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69  t STMT..*/.stati
15da0 63 20 69 6e 74 20 74 65 73 74 5f 64 61 74 61 5f  c int test_data_
15db0 63 6f 75 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20  count(.  void * 
15dc0 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
15dd0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
15de0 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
15df0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
15e00 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
15e10 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
15e20 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
15e30 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
15e40 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
15e50 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
15e60 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
15e70 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
15e80 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53  ng(objv[0]), " S
15e90 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b  TMT column", 0);
15ea0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
15eb0 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
15ec0 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
15ed0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
15ee0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
15ef0 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
15f00 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
15f10 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
15f20 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
15f30 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 64  IntObj(sqlite3_d
15f40 61 74 61 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  ata_count(pStmt)
15f50 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
15f60 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
15f70 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
15f80 75 6d 6e 5f 74 65 78 74 20 53 54 4d 54 20 63 6f  umn_text STMT co
15f90 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65  lumn.**.** Usage
15fa0 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
15fb0 5f 64 65 63 6c 74 79 70 65 20 53 54 4d 54 20 63  _decltype STMT c
15fc0 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67  olumn.**.** Usag
15fd0 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
15fe0 6e 5f 6e 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75  n_name STMT colu
15ff0 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  mn.*/.static int
16000 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 28   test_stmt_utf8(
16010 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
16020 44 61 74 61 2c 20 20 20 20 20 20 20 20 2f 2a 20  Data,        /* 
16030 50 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c 69 74  Pointer to SQLit
16040 65 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 74  e API function t
16050 6f 20 62 65 20 69 6e 76 6f 6b 65 20 2a 2f 0a 20  o be invoke */. 
16060 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
16070 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
16080 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
16090 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
160a0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
160b0 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20  t;.  int col;.  
160c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 28 2a 78 46  const char *(*xF
160d0 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d  unc)(sqlite3_stm
160e0 74 2a 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e  t*, int) = clien
160f0 74 44 61 74 61 3b 0a 20 20 63 6f 6e 73 74 20 63  tData;.  const c
16100 68 61 72 20 2a 7a 52 65 74 3b 0a 0a 20 20 69 66  har *zRet;..  if
16110 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
16120 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
16130 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
16140 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
16150 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
16160 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
16170 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
16180 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
16190 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
161a0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
161b0 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
161c0 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
161d0 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
161e0 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
161f0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
16200 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
16210 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
16220 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20   &col) ) return 
16230 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 52 65  TCL_ERROR;.  zRe
16240 74 20 3d 20 78 46 75 6e 63 28 70 53 74 6d 74 2c  t = xFunc(pStmt,
16250 20 63 6f 6c 29 3b 0a 20 20 69 66 28 20 7a 52 65   col);.  if( zRe
16260 74 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  t ){.    Tcl_Set
16270 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
16280 63 68 61 72 20 2a 29 7a 52 65 74 2c 20 30 29 3b  char *)zRet, 0);
16290 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
162a0 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  L_OK;.}..static 
162b0 69 6e 74 20 74 65 73 74 5f 67 6c 6f 62 61 6c 5f  int test_global_
162c0 72 65 63 6f 76 65 72 28 0a 20 20 76 6f 69 64 20  recover(.  void 
162d0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
162e0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
162f0 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
16300 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
16310 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
16320 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47  ef SQLITE_OMIT_G
16330 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a 20 20 69  LOBALRECOVER.  i
16340 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 6f 62 6a  nt rc;.  if( obj
16350 63 21 3d 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=1 ){.    Tcl_
16360 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
16370 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 22  erp, 1, objv, ""
16380 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
16390 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
163a0 63 20 3d 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62  c = sqlite3_glob
163b0 61 6c 5f 72 65 63 6f 76 65 72 28 29 3b 0a 20 20  al_recover();.  
163c0 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
163d0 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31  terp, (char *)t1
163e0 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54  ErrorName(rc), T
163f0 43 4c 5f 53 54 41 54 49 43 29 3b 0a 23 65 6e 64  CL_STATIC);.#end
16400 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  if.  return TCL_
16410 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
16420 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ge: sqlite3_colu
16430 6d 6e 5f 74 65 78 74 20 53 54 4d 54 20 63 6f 6c  mn_text STMT col
16440 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a  umn.**.** Usage:
16450 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
16460 64 65 63 6c 74 79 70 65 20 53 54 4d 54 20 63 6f  decltype STMT co
16470 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65  lumn.**.** Usage
16480 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
16490 5f 6e 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75 6d  _name STMT colum
164a0 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  n.*/.static int 
164b0 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 28  test_stmt_utf16(
164c0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
164d0 44 61 74 61 2c 20 20 20 20 20 2f 2a 20 50 6f 69  Data,     /* Poi
164e0 6e 74 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41  nter to SQLite A
164f0 50 49 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62  PI function to b
16500 65 20 69 6e 76 6f 6b 65 64 20 2a 2f 0a 20 20 54  e invoked */.  T
16510 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
16520 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
16530 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
16540 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65  objv[].){.#ifnde
16550 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
16560 46 31 36 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  F16.  sqlite3_st
16570 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74  mt *pStmt;.  int
16580 20 63 6f 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20   col;.  Tcl_Obj 
16590 2a 70 52 65 74 3b 0a 20 20 63 6f 6e 73 74 20 76  *pRet;.  const v
165a0 6f 69 64 20 2a 7a 4e 61 6d 65 31 36 3b 0a 20 20  oid *zName16;.  
165b0 63 6f 6e 73 74 20 76 6f 69 64 20 2a 28 2a 78 46  const void *(*xF
165c0 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d  unc)(sqlite3_stm
165d0 74 2a 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e  t*, int) = clien
165e0 74 44 61 74 61 3b 0a 0a 20 20 69 66 28 20 6f 62  tData;..  if( ob
165f0 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
16600 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
16610 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
16620 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
16630 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
16640 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
16650 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d  ]), " STMT colum
16660 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  n", 0);.    retu
16670 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
16680 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
16690 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
166a0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
166b0 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
166c0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
166d0 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
166e0 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
166f0 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f  rp, objv[2], &co
16700 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  l) ) return TCL_
16710 45 52 52 4f 52 3b 0a 0a 20 20 7a 4e 61 6d 65 31  ERROR;..  zName1
16720 36 20 3d 20 78 46 75 6e 63 28 70 53 74 6d 74 2c  6 = xFunc(pStmt,
16730 20 63 6f 6c 29 3b 0a 20 20 69 66 28 20 7a 4e 61   col);.  if( zNa
16740 6d 65 31 36 20 29 7b 0a 20 20 20 20 70 52 65 74  me16 ){.    pRet
16750 20 3d 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72   = Tcl_NewByteAr
16760 72 61 79 4f 62 6a 28 7a 4e 61 6d 65 31 36 2c 20  rayObj(zName16, 
16770 73 71 6c 69 74 65 33 75 74 66 31 36 42 79 74 65  sqlite3utf16Byte
16780 4c 65 6e 28 7a 4e 61 6d 65 31 36 2c 20 2d 31 29  Len(zName16, -1)
16790 2b 32 29 3b 0a 20 20 20 20 54 63 6c 5f 53 65 74  +2);.    Tcl_Set
167a0 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
167b0 2c 20 70 52 65 74 29 3b 0a 20 20 7d 0a 23 65 6e  , pRet);.  }.#en
167c0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
167d0 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 20 20 72  IT_UTF16 */..  r
167e0 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
167f0 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
16800 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
16810 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a   STMT column.**.
16820 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
16830 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 20 53  3_column_bytes S
16840 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a  TMT column.**.**
16850 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
16860 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20 53  column_bytes16 S
16870 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2f  TMT column.**.*/
16880 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
16890 5f 73 74 6d 74 5f 69 6e 74 28 0a 20 20 76 6f 69  _stmt_int(.  voi
168a0 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 20  d * clientData, 
168b0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
168c0 20 53 51 4c 69 74 65 20 41 50 49 20 66 75 6e 63   SQLite API func
168d0 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b  tion to be invok
168e0 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  ed */.  Tcl_Inte
168f0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
16900 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
16910 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
16920 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
16930 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
16940 63 6f 6c 3b 0a 20 20 69 6e 74 20 28 2a 78 46 75  col;.  int (*xFu
16950 6e 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  nc)(sqlite3_stmt
16960 2a 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74  *, int) = client
16970 44 61 74 61 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  Data;..  if( obj
16980 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
16990 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
169a0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
169b0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
169c0 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
169d0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
169e0 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
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 53 74 6d 74 50  ..  if( getStmtP
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 53 74 6d 74 29 20 29  v[1]), &pStmt) )
16a50 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
16a60 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
16a70 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
16a80 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
16a90 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
16aa0 52 52 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74  RROR;..  Tcl_Set
16ab0 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
16ac0 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
16ad0 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c  xFunc(pStmt, col
16ae0 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  )));.  return TC
16af0 4c 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  L_OK;.}..#ifndef
16b00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53   SQLITE_OMIT_DIS
16b10 4b 49 4f 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  KIO./*.** Usage:
16b20 20 20 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52    sqlite3OsOpenR
16b30 65 61 64 57 72 69 74 65 20 3c 66 69 6c 65 6e 61  eadWrite <filena
16b40 6d 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  me>.*/.static in
16b50 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73  t test_sqlite3Os
16b60 4f 70 65 6e 52 65 61 64 57 72 69 74 65 28 0a 20  OpenReadWrite(. 
16b70 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
16b80 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
16b90 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
16ba0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
16bb0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
16bc0 0a 20 20 4f 73 46 69 6c 65 20 2a 70 46 69 6c 65  .  OsFile *pFile
16bd0 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e  ;.  int rc;.  in
16be0 74 20 64 75 6d 6d 79 3b 0a 20 20 63 68 61 72 20  t dummy;.  char 
16bf0 7a 42 75 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66  zBuf[100];..  if
16c00 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
16c10 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
16c20 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
16c30 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
16c40 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
16c50 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
16c60 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65 6e 61  jv[0]), " filena
16c70 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  me", 0);.    ret
16c80 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
16c90 20 7d 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   }..  rc = sqlit
16ca0 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69 74  e3OsOpenReadWrit
16cb0 65 28 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  e(Tcl_GetString(
16cc0 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65  objv[1]), &pFile
16cd0 2c 20 26 64 75 6d 6d 79 29 3b 0a 20 20 69 66 28  , &dummy);.  if(
16ce0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
16cf0 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73  {.    Tcl_SetRes
16d00 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
16d10 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28  r *)t1ErrorName(
16d20 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  rc), TCL_STATIC)
16d30 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
16d40 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 73 71  _ERROR;.  }.  sq
16d50 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f 69  lite3TestMakePoi
16d60 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20  nterStr(interp, 
16d70 7a 42 75 66 2c 20 70 46 69 6c 65 29 3b 0a 20 20  zBuf, pFile);.  
16d80 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
16d90 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a  terp, zBuf, 0);.
16da0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
16db0 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OR;.}../*.** Usa
16dc0 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73 43 6c  ge:  sqlite3OsCl
16dd0 6f 73 65 20 3c 66 69 6c 65 20 68 61 6e 64 6c 65  ose <file handle
16de0 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  >.*/.static int 
16df0 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 43 6c  test_sqlite3OsCl
16e00 6f 73 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ose(.  void * cl
16e10 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
16e20 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
16e30 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
16e40 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
16e50 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20  v[].){.  OsFile 
16e60 2a 70 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63  *pFile;.  int rc
16e70 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
16e80 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
16e90 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
16ea0 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
16eb0 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
16ec0 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
16ed0 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
16ee0 20 66 69 6c 65 68 61 6e 64 6c 65 22 2c 20 30 29   filehandle", 0)
16ef0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
16f00 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
16f10 66 28 20 67 65 74 46 69 6c 65 50 6f 69 6e 74 65  f( getFilePointe
16f20 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
16f30 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
16f40 2c 20 26 70 46 69 6c 65 29 20 29 7b 0a 20 20 20  , &pFile) ){.   
16f50 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
16f60 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  R;.  }.  rc = sq
16f70 6c 69 74 65 33 4f 73 43 6c 6f 73 65 28 26 70 46  lite3OsClose(&pF
16f80 69 6c 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  ile);.  if( rc!=
16f90 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
16fa0 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
16fb0 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74  nterp, (char *)t
16fc0 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  1ErrorName(rc), 
16fd0 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  TCL_STATIC);.   
16fe0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
16ff0 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  R;.  }.  return 
17000 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
17010 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
17020 4f 73 4c 6f 63 6b 20 3c 66 69 6c 65 20 68 61 6e  OsLock <file han
17030 64 6c 65 3e 20 3c 6c 6f 63 6b 74 79 70 65 3e 0a  dle> <locktype>.
17040 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
17050 73 74 5f 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b  st_sqlite3OsLock
17060 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
17070 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
17080 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
17090 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
170a0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
170b0 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a 20 70  .){.  OsFile * p
170c0 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  File;.  int rc;.
170d0 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
170e0 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
170f0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
17100 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
17110 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
17120 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
17130 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 0a 20  ing(objv[0]), . 
17140 20 20 20 20 20 20 20 22 20 66 69 6c 65 68 61 6e         " filehan
17150 64 6c 65 20 28 53 48 41 52 45 44 7c 52 45 53 45  dle (SHARED|RESE
17160 52 56 45 44 7c 50 45 4e 44 49 4e 47 7c 45 58 43  RVED|PENDING|EXC
17170 4c 55 53 49 56 45 29 22 2c 20 30 29 3b 0a 20 20  LUSIVE)", 0);.  
17180 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
17190 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
171a0 65 74 46 69 6c 65 50 6f 69 6e 74 65 72 28 69 6e  etFilePointer(in
171b0 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
171c0 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
171d0 46 69 6c 65 29 20 29 7b 0a 20 20 20 20 72 65 74  File) ){.    ret
171e0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
171f0 20 7d 0a 0a 20 20 69 66 28 20 30 3d 3d 73 74 72   }..  if( 0==str
17200 63 6d 70 28 22 53 48 41 52 45 44 22 2c 20 54 63  cmp("SHARED", Tc
17210 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
17220 5b 32 5d 29 29 20 29 7b 0a 20 20 20 20 72 63 20  [2])) ){.    rc 
17230 3d 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28  = sqlite3OsLock(
17240 70 46 69 6c 65 2c 20 53 48 41 52 45 44 5f 4c 4f  pFile, SHARED_LO
17250 43 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20  CK);.  }.  else 
17260 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 22 52  if( 0==strcmp("R
17270 45 53 45 52 56 45 44 22 2c 20 54 63 6c 5f 47 65  ESERVED", Tcl_Ge
17280 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29  tString(objv[2])
17290 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  ) ){.    rc = sq
172a0 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c  lite3OsLock(pFil
172b0 65 2c 20 52 45 53 45 52 56 45 44 5f 4c 4f 43 4b  e, RESERVED_LOCK
172c0 29 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66  );.  }.  else if
172d0 28 20 30 3d 3d 73 74 72 63 6d 70 28 22 50 45 4e  ( 0==strcmp("PEN
172e0 44 49 4e 47 22 2c 20 54 63 6c 5f 47 65 74 53 74  DING", Tcl_GetSt
172f0 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29  ring(objv[2])) )
17300 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
17310 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20  e3OsLock(pFile, 
17320 50 45 4e 44 49 4e 47 5f 4c 4f 43 4b 29 3b 0a 20  PENDING_LOCK);. 
17330 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 30 3d   }.  else if( 0=
17340 3d 73 74 72 63 6d 70 28 22 45 58 43 4c 55 53 49  =strcmp("EXCLUSI
17350 56 45 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  VE", Tcl_GetStri
17360 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a  ng(objv[2])) ){.
17370 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
17380 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 45 58  OsLock(pFile, EX
17390 43 4c 55 53 49 56 45 5f 4c 4f 43 4b 29 3b 0a 20  CLUSIVE_LOCK);. 
173a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f   }else{.    Tcl_
173b0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
173c0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
173d0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
173e0 22 2c 20 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  ", .        Tcl_
173f0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
17400 5d 29 2c 20 0a 20 20 20 20 20 20 20 20 22 20 66  ]), .        " f
17410 69 6c 65 68 61 6e 64 6c 65 20 28 53 48 41 52 45  ilehandle (SHARE
17420 44 7c 52 45 53 45 52 56 45 44 7c 50 45 4e 44 49  D|RESERVED|PENDI
17430 4e 47 7c 45 58 43 4c 55 53 49 56 45 29 22 2c 20  NG|EXCLUSIVE)", 
17440 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
17450 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
17460 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
17470 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65  OK ){.    Tcl_Se
17480 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
17490 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e  (char *)t1ErrorN
174a0 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  ame(rc), TCL_STA
174b0 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  TIC);.    return
174c0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
174d0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
174e0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
174f0 20 20 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63    sqlite3OsUnloc
17500 6b 20 3c 66 69 6c 65 20 68 61 6e 64 6c 65 3e 0a  k <file handle>.
17510 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
17520 73 74 5f 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f  st_sqlite3OsUnlo
17530 63 6b 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  ck(.  void * cli
17540 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
17550 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
17560 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
17570 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
17580 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a  [].){.  OsFile *
17590 20 70 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63   pFile;.  int rc
175a0 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
175b0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
175c0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
175d0 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
175e0 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
175f0 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
17600 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
17610 20 66 69 6c 65 68 61 6e 64 6c 65 22 2c 20 30 29   filehandle", 0)
17620 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
17630 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
17640 66 28 20 67 65 74 46 69 6c 65 50 6f 69 6e 74 65  f( getFilePointe
17650 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
17660 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
17670 2c 20 26 70 46 69 6c 65 29 20 29 7b 0a 20 20 20  , &pFile) ){.   
17680 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
17690 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  R;.  }.  rc = sq
176a0 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 28 70 46  lite3OsUnlock(pF
176b0 69 6c 65 2c 20 4e 4f 5f 4c 4f 43 4b 29 3b 0a 20  ile, NO_LOCK);. 
176c0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
176d0 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65  OK ){.    Tcl_Se
176e0 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
176f0 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e  (char *)t1ErrorN
17700 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  ame(rc), TCL_STA
17710 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  TIC);.    return
17720 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
17730 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
17740 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
17750 20 20 73 71 6c 69 74 65 33 4f 73 54 65 6d 70 46    sqlite3OsTempF
17760 69 6c 65 4e 61 6d 65 0a 2a 2f 0a 73 74 61 74 69  ileName.*/.stati
17770 63 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69 74  c int test_sqlit
17780 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65  e3OsTempFileName
17790 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
177a0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
177b0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
177c0 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
177d0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
177e0 0a 29 7b 0a 20 20 63 68 61 72 20 7a 46 69 6c 65  .){.  char zFile
177f0 5b 53 51 4c 49 54 45 5f 54 45 4d 50 4e 41 4d 45  [SQLITE_TEMPNAME
17800 5f 53 49 5a 45 5d 3b 0a 20 20 69 6e 74 20 72 63  _SIZE];.  int rc
17810 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
17820 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28  3OsTempFileName(
17830 7a 46 69 6c 65 29 3b 0a 20 20 69 66 28 20 72 63  zFile);.  if( rc
17840 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
17850 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74     Tcl_SetResult
17860 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
17870 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29  )t1ErrorName(rc)
17880 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20  , TCL_STATIC);. 
17890 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
178a0 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41  ROR;.  }.  Tcl_A
178b0 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
178c0 72 70 2c 20 7a 46 69 6c 65 2c 20 30 29 3b 0a 20  rp, zFile, 0);. 
178d0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
178e0 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
178f0 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 73  Usage:  sqlite_s
17900 65 74 5f 6d 61 67 69 63 20 20 44 42 20 20 4d 41  et_magic  DB  MA
17910 47 49 43 2d 4e 55 4d 42 45 52 0a 2a 2a 0a 2a 2a  GIC-NUMBER.**.**
17920 20 53 65 74 20 74 68 65 20 64 62 2d 3e 6d 61 67   Set the db->mag
17930 69 63 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20  ic value.  This 
17940 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20  is used to test 
17950 65 72 72 6f 72 20 72 65 63 6f 76 65 72 79 20 6c  error recovery l
17960 6f 67 69 63 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ogic..*/.static 
17970 69 6e 74 20 73 71 6c 69 74 65 5f 73 65 74 5f 6d  int sqlite_set_m
17980 61 67 69 63 28 0a 20 20 76 6f 69 64 20 2a 20 63  agic(.  void * c
17990 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
179a0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
179b0 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63  .  int argc,.  c
179c0 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  har **argv.){.  
179d0 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
179e0 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  f( argc!=3 ){.  
179f0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
17a00 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
17a10 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
17a20 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
17a30 2c 0a 20 20 20 20 20 20 20 20 20 22 20 44 42 20  ,.         " DB 
17a40 4d 41 47 49 43 22 2c 20 30 29 3b 0a 20 20 20 20  MAGIC", 0);.    
17a50 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
17a60 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
17a70 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
17a80 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
17a90 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
17aa0 52 3b 0a 20 20 69 66 28 20 73 74 72 63 6d 70 28  R;.  if( strcmp(
17ab0 61 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45  argv[2], "SQLITE
17ac0 5f 4d 41 47 49 43 5f 4f 50 45 4e 22 29 3d 3d 30  _MAGIC_OPEN")==0
17ad0 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69   ){.    db->magi
17ae0 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
17af0 5f 4f 50 45 4e 3b 0a 20 20 7d 65 6c 73 65 20 69  _OPEN;.  }else i
17b00 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b 32  f( strcmp(argv[2
17b10 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41 47 49 43  ], "SQLITE_MAGIC
17b20 5f 43 4c 4f 53 45 44 22 29 3d 3d 30 20 29 7b 0a  _CLOSED")==0 ){.
17b30 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20      db->magic = 
17b40 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
17b50 53 45 44 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  SED;.  }else if(
17b60 20 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c   strcmp(argv[2],
17b70 20 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42   "SQLITE_MAGIC_B
17b80 55 53 59 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  USY")==0 ){.    
17b90 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
17ba0 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20  TE_MAGIC_BUSY;. 
17bb0 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
17bc0 70 28 61 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49  p(argv[2], "SQLI
17bd0 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 22 29  TE_MAGIC_ERROR")
17be0 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d  ==0 ){.    db->m
17bf0 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
17c00 47 49 43 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c  GIC_ERROR;.  }el
17c10 73 65 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  se if( Tcl_GetIn
17c20 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32  t(interp, argv[2
17c30 5d 2c 20 26 64 62 2d 3e 6d 61 67 69 63 29 20 29  ], &db->magic) )
17c40 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
17c50 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65  _ERROR;.  }.  re
17c60 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
17c70 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
17c80 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20  lite3_interrupt 
17c90 20 44 42 20 0a 2a 2a 0a 2a 2a 20 54 72 69 67 67   DB .**.** Trigg
17ca0 65 72 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20  er an interrupt 
17cb0 6f 6e 20 44 42 0a 2a 2f 0a 73 74 61 74 69 63 20  on DB.*/.static 
17cc0 69 6e 74 20 74 65 73 74 5f 69 6e 74 65 72 72 75  int test_interru
17cd0 70 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  pt(.  void * cli
17ce0 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
17cf0 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
17d00 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61   int argc,.  cha
17d10 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71  r **argv.){.  sq
17d20 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28  lite3 *db;.  if(
17d30 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20   argc!=2 ){.    
17d40 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
17d50 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
17d60 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
17d70 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20  e \"", argv[0], 
17d80 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72  " DB", 0);.    r
17d90 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
17da0 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
17db0 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
17dc0 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
17dd0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
17de0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  ;.  sqlite3_inte
17df0 72 72 75 70 74 28 64 62 29 3b 0a 20 20 72 65 74  rrupt(db);.  ret
17e00 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73  urn TCL_OK;.}..s
17e10 74 61 74 69 63 20 75 38 20 2a 73 71 6c 69 74 65  tatic u8 *sqlite
17e20 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65  3_stack_baseline
17e30 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 46 69 6c   = 0;../*.** Fil
17e40 6c 20 74 68 65 20 73 74 61 63 6b 20 77 69 74 68  l the stack with
17e50 20 61 20 6b 6e 6f 77 6e 20 62 69 74 70 61 74 74   a known bitpatt
17e60 65 72 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ern..*/.static v
17e70 6f 69 64 20 70 72 65 70 53 74 61 63 6b 28 76 6f  oid prepStack(vo
17e80 69 64 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  id){.  int i;.  
17e90 75 33 32 20 62 69 67 42 75 66 5b 36 35 35 33 36  u32 bigBuf[65536
17ea0 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
17eb0 73 69 7a 65 6f 66 28 62 69 67 42 75 66 29 3b 20  sizeof(bigBuf); 
17ec0 69 2b 2b 29 20 62 69 67 42 75 66 5b 69 5d 20 3d  i++) bigBuf[i] =
17ed0 20 30 78 64 65 61 64 62 65 65 66 3b 0a 20 20 73   0xdeadbeef;.  s
17ee0 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61 73  qlite3_stack_bas
17ef0 65 6c 69 6e 65 20 3d 20 28 75 38 2a 29 26 62 69  eline = (u8*)&bi
17f00 67 42 75 66 5b 36 35 35 33 36 5d 3b 0a 7d 0a 0a  gBuf[65536];.}..
17f10 2f 2a 0a 2a 2a 20 47 65 74 20 74 68 65 20 63 75  /*.** Get the cu
17f20 72 72 65 6e 74 20 73 74 61 63 6b 20 64 65 70 74  rrent stack dept
17f30 68 2e 20 20 55 73 65 64 20 66 6f 72 20 64 65 62  h.  Used for deb
17f40 75 67 67 69 6e 67 20 6f 6e 6c 79 2e 0a 2a 2f 0a  ugging only..*/.
17f50 75 36 34 20 73 71 6c 69 74 65 33 53 74 61 63 6b  u64 sqlite3Stack
17f60 44 65 70 74 68 28 76 6f 69 64 29 7b 0a 20 20 75  Depth(void){.  u
17f70 38 20 78 3b 0a 20 20 72 65 74 75 72 6e 20 28 75  8 x;.  return (u
17f80 36 34 29 28 73 71 6c 69 74 65 33 5f 73 74 61 63  64)(sqlite3_stac
17f90 6b 5f 62 61 73 65 6c 69 6e 65 20 2d 20 26 78 29  k_baseline - &x)
17fa0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
17fb0 3a 20 20 73 71 6c 69 74 65 33 5f 73 74 61 63 6b  :  sqlite3_stack
17fc0 5f 75 73 65 64 20 44 42 20 53 51 4c 0a 2a 2a 0a  _used DB SQL.**.
17fd0 2a 2a 20 54 72 79 20 74 6f 20 6d 65 61 73 75 72  ** Try to measur
17fe0 65 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  e the amount of 
17ff0 73 74 61 63 6b 20 73 70 61 63 65 20 75 73 65 64  stack space used
18000 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 73 71   by a call to sq
18010 6c 69 74 65 33 5f 65 78 65 63 0a 2a 2f 0a 73 74  lite3_exec.*/.st
18020 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 74  atic int test_st
18030 61 63 6b 5f 75 73 65 64 28 0a 20 20 76 6f 69 64  ack_used(.  void
18040 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
18050 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
18060 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c  erp,.  int argc,
18070 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29  .  char **argv.)
18080 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
18090 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20  .  int i;.  if( 
180a0 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
180b0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
180c0 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
180d0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
180e0 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a   \"", argv[0], .
180f0 20 20 20 20 20 20 20 20 22 20 44 42 20 53 51 4c          " DB SQL
18100 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
18110 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
18120 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
18130 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
18140 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
18150 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
18160 70 72 65 70 53 74 61 63 6b 28 29 3b 0a 20 20 28  prepStack();.  (
18170 76 6f 69 64 29 73 71 6c 69 74 65 33 5f 65 78 65  void)sqlite3_exe
18180 63 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 30  c(db, argv[2], 0
18190 2c 20 30 2c 20 30 29 3b 0a 20 20 66 6f 72 28 69  , 0, 0);.  for(i
181a0 3d 36 35 35 33 35 3b 20 69 3e 3d 30 20 26 26 20  =65535; i>=0 && 
181b0 28 28 75 33 32 2a 29 73 71 6c 69 74 65 33 5f 73  ((u32*)sqlite3_s
181c0 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65 29 5b 2d  tack_baseline)[-
181d0 69 5d 3d 3d 30 78 64 65 61 64 62 65 65 66 3b 20  i]==0xdeadbeef; 
181e0 69 2d 2d 29 7b 7d 0a 20 20 54 63 6c 5f 53 65 74  i--){}.  Tcl_Set
181f0 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
18200 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
18210 69 2a 34 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  i*4));.  return 
18220 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
18230 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f 64   Usage: sqlite_d
18240 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 20 44  elete_function D
18250 42 20 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 0a  B function-name.
18260 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65  **.** Delete the
18270 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 27   user function '
18280 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 27 20 66  function-name' f
18290 72 6f 6d 20 64 61 74 61 62 61 73 65 20 68 61 6e  rom database han
182a0 64 6c 65 20 44 42 2e 20 49 74 0a 2a 2a 20 69 73  dle DB. It.** is
182b0 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 74 68   assumed that th
182c0 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  e user function 
182d0 77 61 73 20 63 72 65 61 74 65 64 20 61 73 20 55  was created as U
182e0 54 46 38 2c 20 61 6e 79 20 6e 75 6d 62 65 72 20  TF8, any number 
182f0 6f 66 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 73 20  of.** arguments 
18300 28 74 68 65 20 77 61 79 20 74 68 65 20 54 43 4c  (the way the TCL
18310 20 69 6e 74 65 72 66 61 63 65 20 64 6f 65 73 20   interface does 
18320 69 74 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  it)..*/.static i
18330 6e 74 20 64 65 6c 65 74 65 5f 66 75 6e 63 74 69  nt delete_functi
18340 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  on(.  void * cli
18350 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
18360 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
18370 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61   int argc,.  cha
18380 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e  r **argv.){.  in
18390 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20  t rc;.  sqlite3 
183a0 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63 21  *db;.  if( argc!
183b0 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
183c0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
183d0 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
183e0 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
183f0 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
18400 20 20 20 22 20 44 42 20 66 75 6e 63 74 69 6f 6e     " DB function
18410 2d 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20  -name", 0);.    
18420 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
18430 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
18440 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
18450 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
18460 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
18470 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
18480 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
18490 6e 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 2d  n(db, argv[2], -
184a0 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  1, SQLITE_UTF8, 
184b0 30 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 54  0, 0, 0, 0);.  T
184c0 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
184d0 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45  erp, (char *)t1E
184e0 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43  rrorName(rc), TC
184f0 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 72 65 74  L_STATIC);.  ret
18500 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
18510 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
18520 74 65 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74  te_delete_collat
18530 69 6f 6e 20 44 42 20 63 6f 6c 6c 61 74 69 6f 6e  ion DB collation
18540 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  -name.**.** Dele
18550 74 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  te the collation
18560 20 73 65 71 75 65 6e 63 65 20 27 63 6f 6c 6c 61   sequence 'colla
18570 74 69 6f 6e 2d 6e 61 6d 65 27 20 66 72 6f 6d 20  tion-name' from 
18580 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
18590 0a 2a 2a 20 44 42 2e 20 49 74 20 69 73 20 61 73  .** DB. It is as
185a0 73 75 6d 65 64 20 74 68 61 74 20 74 68 65 20 63  sumed that the c
185b0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
185c0 65 20 77 61 73 20 63 72 65 61 74 65 64 20 61 73  e was created as
185d0 20 55 54 46 38 20 28 74 68 65 20 0a 2a 2a 20 77   UTF8 (the .** w
185e0 61 79 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72  ay the TCL inter
185f0 66 61 63 65 20 64 6f 65 73 20 69 74 29 2e 0a 2a  face does it)..*
18600 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 64 65 6c  /.static int del
18610 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20  ete_collation(. 
18620 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
18630 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
18640 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
18650 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61  argc,.  char **a
18660 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b  rgv.){.  int rc;
18670 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
18680 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b    if( argc!=3 ){
18690 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
186a0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
186b0 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
186c0 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
186d0 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20  [0], .        " 
186e0 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65  DB function-name
186f0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
18700 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
18710 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
18720 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
18730 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
18740 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
18750 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
18760 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62  ate_collation(db
18770 2c 20 61 72 67 76 5b 32 5d 2c 20 53 51 4c 49 54  , argv[2], SQLIT
18780 45 5f 55 54 46 38 2c 20 30 2c 20 30 29 3b 0a 20  E_UTF8, 0, 0);. 
18790 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
187a0 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74  nterp, (char *)t
187b0 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  1ErrorName(rc), 
187c0 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 72  TCL_STATIC);.  r
187d0 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
187e0 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
187f0 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
18800 6d 6d 69 74 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65  mmit DB.**.** Re
18810 74 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65  turn true if the
18820 20 64 61 74 61 62 61 73 65 20 44 42 20 69 73 20   database DB is 
18830 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 75 74  currently in aut
18840 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 0a 2a  o-commit mode..*
18850 2a 20 52 65 74 75 72 6e 20 66 61 6c 73 65 20 69  * Return false i
18860 66 20 6e 6f 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  f not..*/.static
18870 20 69 6e 74 20 67 65 74 5f 61 75 74 6f 63 6f 6d   int get_autocom
18880 6d 69 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  mit(.  void * cl
18890 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
188a0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
188b0 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68    int argc,.  ch
188c0 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 63  ar **argv.){.  c
188d0 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20  har zBuf[30];.  
188e0 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
188f0 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20  f( argc!=2 ){.  
18900 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
18910 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
18920 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
18930 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
18940 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44 42 22  , .        " DB"
18950 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
18960 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
18970 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
18980 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
18990 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
189a0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73  n TCL_ERROR;.  s
189b0 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64  printf(zBuf, "%d
189c0 22 2c 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61  ", sqlite3_get_a
189d0 75 74 6f 63 6f 6d 6d 69 74 28 64 62 29 29 3b 0a  utocommit(db));.
189e0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
189f0 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
18a00 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
18a10 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
18a20 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 62 75  sage: sqlite3_bu
18a30 73 79 5f 74 69 6d 65 6f 75 74 20 44 42 20 4d 53  sy_timeout DB MS
18a40 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 62  .**.** Set the b
18a50 75 73 79 20 74 69 6d 65 6f 75 74 2e 20 20 54 68  usy timeout.  Th
18a60 69 73 20 69 73 20 6d 6f 72 65 20 65 61 73 69 6c  is is more easil
18a70 79 20 64 6f 6e 65 20 75 73 69 6e 67 20 74 68 65  y done using the
18a80 20 74 69 6d 65 6f 75 74 0a 2a 2a 20 6d 65 74 68   timeout.** meth
18a90 6f 64 20 6f 66 20 74 68 65 20 54 43 4c 20 69 6e  od of the TCL in
18aa0 74 65 72 66 61 63 65 2e 20 20 42 75 74 20 77 65  terface.  But we
18ab0 20 6e 65 65 64 20 61 20 77 61 79 20 74 6f 20 74   need a way to t
18ac0 65 73 74 20 74 68 65 20 63 61 73 65 0a 2a 2a 20  est the case.** 
18ad0 77 68 65 72 65 20 69 74 20 72 65 74 75 72 6e 73  where it returns
18ae0 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0a   SQLITE_MISUSE..
18af0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
18b00 73 74 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  st_busy_timeout(
18b10 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
18b20 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
18b30 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
18b40 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
18b50 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20 72  *argv.){.  int r
18b60 63 2c 20 6d 73 3b 0a 20 20 73 71 6c 69 74 65 33  c, ms;.  sqlite3
18b70 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63   *db;.  if( argc
18b80 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
18b90 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
18ba0 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
18bb0 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
18bc0 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20  , argv[0], .    
18bd0 20 20 20 20 22 20 44 42 22 2c 20 30 29 3b 0a 20      " DB", 0);. 
18be0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
18bf0 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
18c00 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
18c10 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62  rp, argv[1], &db
18c20 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
18c30 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
18c40 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61  GetInt(interp, a
18c50 72 67 76 5b 32 5d 2c 20 26 6d 73 29 20 29 20 72  rgv[2], &ms) ) r
18c60 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
18c70 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
18c80 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c  busy_timeout(db,
18c90 20 6d 73 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65   ms);.  Tcl_Appe
18ca0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
18cb0 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 6f   sqlite3TestErro
18cc0 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20  rName(rc), 0);. 
18cd0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
18ce0 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
18cf0 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79   tcl_variable_ty
18d00 70 65 20 56 41 52 49 41 42 4c 45 4e 41 4d 45 0a  pe VARIABLENAME.
18d10 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
18d20 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 69 6e 74   name of the int
18d30 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
18d40 74 69 6f 6e 20 66 6f 72 20 74 68 65 0a 2a 2a 20  tion for the.** 
18d50 76 61 6c 75 65 20 6f 66 20 74 68 65 20 67 69 76  value of the giv
18d60 65 6e 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2f 0a  en variable..*/.
18d70 73 74 61 74 69 63 20 69 6e 74 20 74 63 6c 5f 76  static int tcl_v
18d80 61 72 69 61 62 6c 65 5f 74 79 70 65 28 0a 20 20  ariable_type(.  
18d90 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
18da0 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
18db0 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
18dc0 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
18dd0 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
18de0 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 56 61 72 3b    Tcl_Obj *pVar;
18df0 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
18e00 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
18e10 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
18e20 2c 20 6f 62 6a 76 2c 20 22 56 41 52 49 41 42 4c  , objv, "VARIABL
18e30 45 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  E");.    return 
18e40 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
18e50 20 70 56 61 72 20 3d 20 54 63 6c 5f 47 65 74 56   pVar = Tcl_GetV
18e60 61 72 32 45 78 28 69 6e 74 65 72 70 2c 20 54 63  ar2Ex(interp, Tc
18e70 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
18e80 5b 31 5d 29 2c 20 30 2c 20 54 43 4c 5f 4c 45 41  [1]), 0, TCL_LEA
18e90 56 45 5f 45 52 52 5f 4d 53 47 29 3b 0a 20 20 69  VE_ERR_MSG);.  i
18ea0 66 28 20 70 56 61 72 3d 3d 30 20 29 20 72 65 74  f( pVar==0 ) ret
18eb0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
18ec0 20 69 66 28 20 70 56 61 72 2d 3e 74 79 70 65 50   if( pVar->typeP
18ed0 74 72 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65  tr ){.    Tcl_Se
18ee0 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
18ef0 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  p, Tcl_NewString
18f00 4f 62 6a 28 70 56 61 72 2d 3e 74 79 70 65 50 74  Obj(pVar->typePt
18f10 72 2d 3e 6e 61 6d 65 2c 20 2d 31 29 29 3b 0a 20  r->name, -1));. 
18f20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f   }.  return TCL_
18f30 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
18f40 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 72 65 6c  ge:  sqlite3_rel
18f50 65 61 73 65 5f 6d 65 6d 6f 72 79 20 3f 4e 3f 0a  ease_memory ?N?.
18f60 2a 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f  **.** Attempt to
18f70 20 72 65 6c 65 61 73 65 20 6d 65 6d 6f 72 79 20   release memory 
18f80 63 75 72 72 65 6e 74 6c 79 20 68 65 6c 64 20 62  currently held b
18f90 75 74 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20  ut not actually 
18fa0 72 65 71 75 69 72 65 64 2e 0a 2a 2a 20 54 68 65  required..** The
18fb0 20 69 6e 74 65 67 65 72 20 4e 20 69 73 20 74 68   integer N is th
18fc0 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
18fd0 73 20 77 65 20 61 72 65 20 74 72 79 69 6e 67 20  s we are trying 
18fe0 74 6f 20 72 65 6c 65 61 73 65 2e 20 20 54 68 65  to release.  The
18ff0 20 0a 2a 2a 20 72 65 74 75 72 6e 20 76 61 6c 75   .** return valu
19000 65 20 69 73 20 74 68 65 20 61 6d 6f 75 6e 74 20  e is the amount 
19010 6f 66 20 6d 65 6d 6f 72 79 20 61 63 74 75 61 6c  of memory actual
19020 6c 79 20 72 65 6c 65 61 73 65 64 2e 0a 2a 2f 0a  ly released..*/.
19030 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
19040 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 0a  release_memory(.
19050 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
19060 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
19070 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
19080 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
19090 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
190a0 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  {.#if defined(SQ
190b0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f  LITE_ENABLE_MEMO
190c0 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 29 20 26  RY_MANAGEMENT) &
190d0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
190e0 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 29 0a 20  E_OMIT_DISKIO). 
190f0 20 69 6e 74 20 4e 3b 0a 20 20 69 6e 74 20 61 6d   int N;.  int am
19100 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 31  t;.  if( objc!=1
19110 20 26 26 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20   && objc!=2 ){. 
19120 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
19130 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
19140 62 6a 76 2c 20 22 3f 4e 3f 22 29 3b 0a 20 20 20  bjv, "?N?");.   
19150 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
19160 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6f 62 6a  R;.  }.  if( obj
19170 63 3d 3d 32 20 29 7b 0a 20 20 20 20 69 66 28 20  c==2 ){.    if( 
19180 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
19190 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31  j(interp, objv[1
191a0 5d 2c 20 26 4e 29 20 29 20 72 65 74 75 72 6e 20  ], &N) ) return 
191b0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c  TCL_ERROR;.  }el
191c0 73 65 7b 0a 20 20 20 20 4e 20 3d 20 2d 31 3b 0a  se{.    N = -1;.
191d0 20 20 7d 0a 20 20 61 6d 74 20 3d 20 73 71 6c 69    }.  amt = sqli
191e0 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  te3_release_memo
191f0 72 79 28 4e 29 3b 0a 20 20 54 63 6c 5f 53 65 74  ry(N);.  Tcl_Set
19200 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
19210 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
19220 61 6d 74 29 29 3b 0a 23 65 6e 64 69 66 0a 20 20  amt));.#endif.  
19230 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
19240 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
19250 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61  sqlite3_soft_hea
19260 70 5f 6c 69 6d 69 74 20 3f 4e 3f 0a 2a 2a 0a 2a  p_limit ?N?.**.*
19270 2a 20 51 75 65 72 79 20 6f 72 20 73 65 74 20 74  * Query or set t
19280 68 65 20 73 6f 66 74 20 68 65 61 70 20 6c 69 6d  he soft heap lim
19290 69 74 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  it for the curre
192a0 6e 74 20 74 68 72 65 61 64 2e 20 20 54 68 65 0a  nt thread.  The.
192b0 2a 2a 20 6c 69 6d 69 74 20 69 73 20 6f 6e 6c 79  ** limit is only
192c0 20 63 68 61 6e 67 65 64 20 69 66 20 74 68 65 20   changed if the 
192d0 4e 20 69 73 20 70 72 65 73 65 6e 74 2e 20 20 54  N is present.  T
192e0 68 65 20 70 72 65 76 69 6f 75 73 20 6c 69 6d 69  he previous limi
192f0 74 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  t.** is returned
19300 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
19310 74 65 73 74 5f 73 6f 66 74 5f 68 65 61 70 5f 6c  test_soft_heap_l
19320 69 6d 69 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  imit(.  void * c
19330 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
19340 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
19350 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
19360 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
19370 6a 76 5b 5d 0a 29 7b 0a 23 69 66 20 64 65 66 69  jv[].){.#if defi
19380 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
19390 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d  E_MEMORY_MANAGEM
193a0 45 4e 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  ENT) && !defined
193b0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53  (SQLITE_OMIT_DIS
193c0 4b 49 4f 29 0a 20 20 69 6e 74 20 61 6d 74 3b 0a  KIO).  int amt;.
193d0 20 20 69 66 28 20 6f 62 6a 63 21 3d 31 20 26 26    if( objc!=1 &&
193e0 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20   objc!=2 ){.    
193f0 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
19400 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
19410 2c 20 22 3f 4e 3f 22 29 3b 0a 20 20 20 20 72 65  , "?N?");.    re
19420 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
19430 20 20 7d 0a 20 20 61 6d 74 20 3d 20 73 71 6c 69    }.  amt = sqli
19440 74 65 33 54 68 72 65 61 64 44 61 74 61 52 65 61  te3ThreadDataRea
19450 64 4f 6e 6c 79 28 29 2d 3e 6e 53 6f 66 74 48 65  dOnly()->nSoftHe
19460 61 70 4c 69 6d 69 74 3b 0a 20 20 69 66 28 20 6f  apLimit;.  if( o
19470 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20 20 69 6e  bjc==2 ){.    in
19480 74 20 4e 3b 0a 20 20 20 20 69 66 28 20 54 63 6c  t N;.    if( Tcl
19490 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
194a0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20  nterp, objv[1], 
194b0 26 4e 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  &N) ) return TCL
194c0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
194d0 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69  te3_soft_heap_li
194e0 6d 69 74 28 4e 29 3b 0a 20 20 7d 0a 20 20 54 63  mit(N);.  }.  Tc
194f0 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
19500 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
19510 74 4f 62 6a 28 61 6d 74 29 29 3b 0a 23 65 6e 64  tObj(amt));.#end
19520 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  if.  return TCL_
19530 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
19540 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 63 6c  ge:   sqlite3_cl
19550 65 61 72 5f 74 73 64 5f 6d 65 6d 64 65 62 75 67  ear_tsd_memdebug
19560 0a 2a 2a 0a 2a 2a 20 43 6c 65 61 72 20 61 6c 6c  .**.** Clear all
19570 20 6f 66 20 74 68 65 20 4d 45 4d 44 45 42 55 47   of the MEMDEBUG
19580 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 75 74   information out
19590 20 6f 66 20 74 68 72 65 61 64 2d 73 70 65 63 69   of thread-speci
195a0 66 69 63 20 64 61 74 61 2e 0a 2a 2a 20 54 68 69  fic data..** Thi
195b0 73 20 77 69 6c 6c 20 61 6c 6c 6f 77 20 69 74 20  s will allow it 
195c0 74 6f 20 62 65 20 64 65 61 6c 6c 6f 63 61 74 65  to be deallocate
195d0 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
195e0 20 74 65 73 74 5f 63 6c 65 61 72 5f 74 73 64 5f   test_clear_tsd_
195f0 6d 65 6d 64 65 62 75 67 28 0a 20 20 76 6f 69 64  memdebug(.  void
19600 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
19610 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
19620 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
19630 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
19640 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 72 65  T objv[].){.  re
19650 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
19660 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73  /*.** Usage:   s
19670 71 6c 69 74 65 33 5f 74 73 64 5f 72 65 6c 65 61  qlite3_tsd_relea
19680 73 65 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 73 71  se.**.** Call sq
19690 6c 69 74 65 33 52 65 6c 65 61 73 65 54 68 72 65  lite3ReleaseThre
196a0 61 64 44 61 74 61 2e 0a 2a 2f 0a 73 74 61 74 69  adData..*/.stati
196b0 63 20 69 6e 74 20 74 65 73 74 5f 74 73 64 5f 72  c int test_tsd_r
196c0 65 6c 65 61 73 65 28 0a 20 20 76 6f 69 64 20 2a  elease(.  void *
196d0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
196e0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
196f0 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
19700 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
19710 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 20 64 65  objv[].){.#if de
19720 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
19730 44 45 42 55 47 29 0a 20 20 73 71 6c 69 74 65 33  DEBUG).  sqlite3
19740 52 65 6c 65 61 73 65 54 68 72 65 61 64 44 61 74  ReleaseThreadDat
19750 61 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65  a();.#endif.  re
19760 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
19770 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73  /*.** Usage:   s
19780 71 6c 69 74 65 33 5f 74 68 72 65 61 64 5f 63 6c  qlite3_thread_cl
19790 65 61 6e 75 70 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c  eanup.**.** Call
197a0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 68 72   the sqlite3_thr
197b0 65 61 64 5f 63 6c 65 61 6e 75 70 20 41 50 49 2e  ead_cleanup API.
197c0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
197d0 65 73 74 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e  est_thread_clean
197e0 75 70 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  up(.  void * cli
197f0 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
19800 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
19810 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
19820 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
19830 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
19840 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 28 29  thread_cleanup()
19850 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
19860 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  K;.}.../*.** Usa
19870 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 70 61  ge:   sqlite3_pa
19880 67 65 72 5f 72 65 66 63 6f 75 6e 74 73 20 20 44  ger_refcounts  D
19890 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61  B.**.** Return a
198a0 20 6c 69 73 74 20 6f 66 20 6e 75 6d 62 65 72 73   list of numbers
198b0 20 77 68 69 63 68 20 61 72 65 20 74 68 65 20 50   which are the P
198c0 61 67 65 72 52 65 66 63 6f 75 6e 74 20 66 6f 72  agerRefcount for
198d0 20 61 6c 6c 0a 2a 2a 20 70 61 67 65 72 73 20 6f   all.** pagers o
198e0 6e 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  n each database 
198f0 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  connection..*/.s
19900 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 70  tatic int test_p
19910 61 67 65 72 5f 72 65 66 63 6f 75 6e 74 73 28 0a  ager_refcounts(.
19920 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
19930 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
19940 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
19950 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
19960 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
19970 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
19980 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
19990 76 2c 20 2a 61 3b 0a 20 20 54 63 6c 5f 4f 62 6a  v, *a;.  Tcl_Obj
199a0 20 2a 70 52 65 73 75 6c 74 3b 0a 0a 20 20 69 66   *pResult;..  if
199b0 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
199c0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
199d0 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
199e0 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
199f0 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
19a00 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
19a10 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
19a20 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20  , " DB", 0);.   
19a30 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
19a40 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
19a50 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
19a60 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
19a70 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
19a80 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
19a90 52 3b 0a 20 20 70 52 65 73 75 6c 74 20 3d 20 54  R;.  pResult = T
19aa0 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a 20 20 66  cl_NewObj();.  f
19ab0 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
19ac0 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  b; i++){.    if(
19ad0 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d   db->aDb[i].pBt=
19ae0 3d 30 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  =0 ){.      v = 
19af0 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  -1;.    }else{. 
19b00 20 20 20 20 20 61 20 3d 20 73 71 6c 69 74 65 33       a = sqlite3
19b10 50 61 67 65 72 53 74 61 74 73 28 73 71 6c 69 74  PagerStats(sqlit
19b20 65 33 42 74 72 65 65 50 61 67 65 72 28 64 62 2d  e3BtreePager(db-
19b30 3e 61 44 62 5b 69 5d 2e 70 42 74 29 29 3b 0a 20  >aDb[i].pBt));. 
19b40 20 20 20 20 20 76 20 3d 20 61 5b 30 5d 3b 0a 20       v = a[0];. 
19b50 20 20 20 7d 0a 20 20 20 20 54 63 6c 5f 4c 69 73     }.    Tcl_Lis
19b60 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
19b70 74 28 30 2c 20 70 52 65 73 75 6c 74 2c 20 54 63  t(0, pResult, Tc
19b80 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 76 29 29 3b  l_NewIntObj(v));
19b90 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62  .  }.  Tcl_SetOb
19ba0 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
19bb0 70 52 65 73 75 6c 74 29 3b 0a 20 20 72 65 74 75  pResult);.  retu
19bc0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f  rn TCL_OK;.}.../
19bd0 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
19be0 65 20 73 65 74 73 20 65 6e 74 72 69 65 73 20 69  e sets entries i
19bf0 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 3a 3a 73  n the global ::s
19c00 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 28 29 20  qlite_options() 
19c10 61 72 72 61 79 20 76 61 72 69 61 62 6c 65 0a 2a  array variable.*
19c20 2a 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  * according to t
19c30 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  he compile-time 
19c40 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 66  configuration of
19c50 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
19c60 54 65 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75 72  Test.** procedur
19c70 65 73 20 75 73 65 20 74 68 69 73 20 74 6f 20 64  es use this to d
19c80 65 74 65 72 6d 69 6e 65 20 77 68 65 6e 20 74 65  etermine when te
19c90 73 74 73 20 73 68 6f 75 6c 64 20 62 65 20 6f 6d  sts should be om
19ca0 69 74 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  itted..*/.static
19cb0 20 76 6f 69 64 20 73 65 74 5f 6f 70 74 69 6f 6e   void set_option
19cc0 73 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  s(Tcl_Interp *in
19cd0 74 65 72 70 29 7b 0a 23 69 66 64 65 66 20 53 51  terp){.#ifdef SQ
19ce0 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44  LITE_32BIT_ROWID
19cf0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
19d00 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
19d10 70 74 69 6f 6e 73 22 2c 20 22 72 6f 77 69 64 33  ptions", "rowid3
19d20 32 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  2", "1", TCL_GLO
19d30 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
19d40 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
19d50 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
19d60 70 74 69 6f 6e 73 22 2c 20 22 72 6f 77 69 64 33  ptions", "rowid3
19d70 32 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  2", "0", TCL_GLO
19d80 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
19d90 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
19da0 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45 5f  _CASE_SENSITIVE_
19db0 4c 49 4b 45 0a 20 20 54 63 6c 5f 53 65 74 56 61  LIKE.  Tcl_SetVa
19dc0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
19dd0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 63 61 73  te_options","cas
19de0 65 73 65 6e 73 69 74 69 76 65 6c 69 6b 65 22 2c  esensitivelike",
19df0 22 31 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  "1",TCL_GLOBAL_O
19e00 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
19e10 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
19e20 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
19e30 73 22 2c 22 63 61 73 65 73 65 6e 73 69 74 69 76  s","casesensitiv
19e40 65 6c 69 6b 65 22 2c 22 30 22 2c 54 43 4c 5f 47  elike","0",TCL_G
19e50 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
19e60 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
19e70 54 45 5f 44 49 53 41 42 4c 45 5f 44 49 52 53 59  TE_DISABLE_DIRSY
19e80 4e 43 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  NC.  Tcl_SetVar2
19e90 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
19ea0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 69 72 73  _options", "dirs
19eb0 79 6e 63 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ync", "0", TCL_G
19ec0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
19ed0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
19ee0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
19ef0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 69 72 73  _options", "dirs
19f00 79 6e 63 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  ync", "1", TCL_G
19f10 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
19f20 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
19f30 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 20  TE_DISABLE_LFS. 
19f40 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
19f50 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
19f60 69 6f 6e 73 22 2c 20 22 6c 66 73 22 2c 20 22 30  ions", "lfs", "0
19f70 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
19f80 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
19f90 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
19fa0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
19fb0 22 2c 20 22 6c 66 73 22 2c 20 22 31 22 2c 20 54  ", "lfs", "1", T
19fc0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
19fd0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
19fe0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
19ff0 52 54 41 42 4c 45 0a 20 20 54 63 6c 5f 53 65 74  RTABLE.  Tcl_Set
1a000 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1a010 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1a020 61 6c 74 65 72 74 61 62 6c 65 22 2c 20 22 30 22  altertable", "0"
1a030 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1a040 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
1a050 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
1a060 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
1a070 2c 20 22 61 6c 74 65 72 74 61 62 6c 65 22 2c 20  , "altertable", 
1a080 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
1a090 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
1a0a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
1a0b0 54 5f 41 4e 41 4c 59 5a 45 0a 20 20 54 63 6c 5f  T_ANALYZE.  Tcl_
1a0c0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
1a0d0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
1a0e0 2c 20 22 61 6e 61 6c 79 7a 65 22 2c 20 22 30 22  , "analyze", "0"
1a0f0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1a100 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
1a110 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
1a120 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
1a130 2c 20 22 61 6e 61 6c 79 7a 65 22 2c 20 22 31 22  , "analyze", "1"
1a140 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1a150 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
1a160 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
1a170 54 54 41 43 48 0a 20 20 54 63 6c 5f 53 65 74 56  TTACH.  Tcl_SetV
1a180 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
1a190 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61  ite_options", "a
1a1a0 74 74 61 63 68 22 2c 20 22 30 22 2c 20 54 43 4c  ttach", "0", TCL
1a1b0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
1a1c0 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
1a1d0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1a1e0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 74  te_options", "at
1a1f0 74 61 63 68 22 2c 20 22 31 22 2c 20 54 43 4c 5f  tach", "1", TCL_
1a200 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1a210 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
1a220 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
1a230 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74  ZATION.  Tcl_Set
1a240 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1a250 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1a260 61 75 74 68 22 2c 20 22 30 22 2c 20 54 43 4c 5f  auth", "0", TCL_
1a270 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1a280 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
1a290 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1a2a0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74  e_options", "aut
1a2b0 68 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  h", "1", TCL_GLO
1a2c0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
1a2d0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
1a2e0 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
1a2f0 45 4e 54 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  ENT.  Tcl_SetVar
1a300 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1a310 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74  e_options", "aut
1a320 6f 69 6e 63 22 2c 20 22 30 22 2c 20 54 43 4c 5f  oinc", "0", TCL_
1a330 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1a340 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
1a350 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1a360 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74  e_options", "aut
1a370 6f 69 6e 63 22 2c 20 22 31 22 2c 20 54 43 4c 5f  oinc", "1", TCL_
1a380 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1a390 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
1a3a0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
1a3b0 55 55 4d 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  UUM.  Tcl_SetVar
1a3c0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1a3d0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74  e_options", "aut
1a3e0 6f 76 61 63 75 75 6d 22 2c 20 22 30 22 2c 20 54  ovacuum", "0", T
1a3f0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1a400 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
1a410 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1a420 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1a430 61 75 74 6f 76 61 63 75 75 6d 22 2c 20 22 31 22  autovacuum", "1"
1a440 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1a450 59 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  Y);.#endif /* SQ
1a460 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
1a470 43 55 55 4d 20 2a 2f 0a 23 69 66 20 21 64 65 66  CUUM */.#if !def
1a480 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41  ined(SQLITE_DEFA
1a490 55 4c 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 20  ULT_AUTOVACUUM) 
1a4a0 7c 7c 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  || SQLITE_DEFAUL
1a4b0 54 5f 41 55 54 4f 56 41 43 55 55 4d 3d 3d 30 0a  T_AUTOVACUUM==0.
1a4c0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1a4d0 74 65 72 70 2c 22 73 71 6c 69 74 65 5f 6f 70 74  terp,"sqlite_opt
1a4e0 69 6f 6e 73 22 2c 22 64 65 66 61 75 6c 74 5f 61  ions","default_a
1a4f0 75 74 6f 76 61 63 75 75 6d 22 2c 22 30 22 2c 54  utovacuum","0",T
1a500 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1a510 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
1a520 56 61 72 32 28 69 6e 74 65 72 70 2c 22 73 71 6c  Var2(interp,"sql
1a530 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 22 64 65  ite_options","de
1a540 66 61 75 6c 74 5f 61 75 74 6f 76 61 63 75 75 6d  fault_autovacuum
1a550 22 2c 22 31 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c  ","1",TCL_GLOBAL
1a560 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
1a570 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
1a580 49 54 5f 42 45 54 57 45 45 4e 5f 4f 50 54 49 4d  IT_BETWEEN_OPTIM
1a590 49 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65  IZATION.  Tcl_Se
1a5a0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1a5b0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1a5c0 22 62 65 74 77 65 65 6e 5f 6f 70 74 22 2c 20 22  "between_opt", "
1a5d0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
1a5e0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
1a5f0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1a600 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1a610 73 22 2c 20 22 62 65 74 77 65 65 6e 5f 6f 70 74  s", "between_opt
1a620 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
1a630 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
1a640 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1a650 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41  OMIT_BLOB_LITERA
1a660 4c 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  L.  Tcl_SetVar2(
1a670 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1a680 6f 70 74 69 6f 6e 73 22 2c 20 22 62 6c 6f 62 6c  options", "blobl
1a690 69 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  it", "0", TCL_GL
1a6a0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
1a6b0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
1a6c0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1a6d0 6f 70 74 69 6f 6e 73 22 2c 20 22 62 6c 6f 62 6c  options", "blobl
1a6e0 69 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  it", "1", TCL_GL
1a6f0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
1a700 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
1a710 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 20 20 54 63  E_OMIT_CAST.  Tc
1a720 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1a730 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1a740 73 22 2c 20 22 63 61 73 74 22 2c 20 22 30 22 2c  s", "cast", "0",
1a750 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1a760 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
1a770 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
1a780 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
1a790 20 22 63 61 73 74 22 2c 20 22 31 22 2c 20 54 43   "cast", "1", TC
1a7a0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
1a7b0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
1a7c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b  QLITE_OMIT_CHECK
1a7d0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1a7e0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1a7f0 70 74 69 6f 6e 73 22 2c 20 22 63 68 65 63 6b 22  ptions", "check"
1a800 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
1a810 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
1a820 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1a830 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1a840 69 6f 6e 73 22 2c 20 22 63 68 65 63 6b 22 2c 20  ions", "check", 
1a850 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
1a860 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
1a870 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1a880 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44  BLE_COLUMN_METAD
1a890 41 54 41 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  ATA.  Tcl_SetVar
1a8a0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1a8b0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6c  e_options", "col
1a8c0 75 6d 6e 6d 65 74 61 64 61 74 61 22 2c 20 22 31  umnmetadata", "1
1a8d0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
1a8e0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
1a8f0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1a900 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1a910 22 2c 20 22 63 6f 6c 75 6d 6e 6d 65 74 61 64 61  ", "columnmetada
1a920 74 61 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ta", "0", TCL_GL
1a930 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
1a940 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
1a950 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 0a  E_OMIT_COMPLETE.
1a960 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1a970 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1a980 74 69 6f 6e 73 22 2c 20 22 63 6f 6d 70 6c 65 74  tions", "complet
1a990 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  e", "0", TCL_GLO
1a9a0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
1a9b0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1a9c0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1a9d0 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6d 70 6c 65  ptions", "comple
1a9e0 74 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  te", "1", TCL_GL
1a9f0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
1aa00 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
1aa10 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f  E_OMIT_COMPOUND_
1aa20 53 45 4c 45 43 54 0a 20 20 54 63 6c 5f 53 65 74  SELECT.  Tcl_Set
1aa30 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1aa40 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1aa50 63 6f 6d 70 6f 75 6e 64 22 2c 20 22 30 22 2c 20  compound", "0", 
1aa60 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
1aa70 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
1aa80 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1aa90 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1aaa0 22 63 6f 6d 70 6f 75 6e 64 22 2c 20 22 31 22 2c  "compound", "1",
1aab0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1aac0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
1aad0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  f SQLITE_OMIT_CO
1aae0 4e 46 4c 49 43 54 5f 43 4c 41 55 53 45 0a 20 20  NFLICT_CLAUSE.  
1aaf0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
1ab00 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
1ab10 6f 6e 73 22 2c 20 22 63 6f 6e 66 6c 69 63 74 22  ons", "conflict"
1ab20 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
1ab30 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
1ab40 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1ab50 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1ab60 69 6f 6e 73 22 2c 20 22 63 6f 6e 66 6c 69 63 74  ions", "conflict
1ab70 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
1ab80 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
1ab90 0a 0a 23 69 66 20 4f 53 5f 55 4e 49 58 0a 20 20  ..#if OS_UNIX.  
1aba0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
1abb0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
1abc0 6f 6e 73 22 2c 20 22 63 72 61 73 68 74 65 73 74  ons", "crashtest
1abd0 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
1abe0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
1abf0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1ac00 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1ac10 74 69 6f 6e 73 22 2c 20 22 63 72 61 73 68 74 65  tions", "crashte
1ac20 73 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  st", "0", TCL_GL
1ac30 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
1ac40 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
1ac50 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f  E_OMIT_DATETIME_
1ac60 46 55 4e 43 53 0a 20 20 54 63 6c 5f 53 65 74 56  FUNCS.  Tcl_SetV
1ac70 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
1ac80 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64  ite_options", "d
1ac90 61 74 65 74 69 6d 65 22 2c 20 22 30 22 2c 20 54  atetime", "0", T
1aca0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1acb0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
1acc0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1acd0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1ace0 64 61 74 65 74 69 6d 65 22 2c 20 22 31 22 2c 20  datetime", "1", 
1acf0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
1ad00 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
1ad10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53   SQLITE_OMIT_DIS
1ad20 4b 49 4f 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  KIO.  Tcl_SetVar
1ad30 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1ad40 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 69 73  e_options", "dis
1ad50 6b 69 6f 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  kio", "0", TCL_G
1ad60 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
1ad70 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  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 64 69 73 6b  _options", "disk
1ada0 69 6f 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  io", "1", TCL_GL
1adb0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
1adc0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
1add0 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20  E_OMIT_EXPLAIN. 
1ade0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1adf0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1ae00 69 6f 6e 73 22 2c 20 22 65 78 70 6c 61 69 6e 22  ions", "explain"
1ae10 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
1ae20 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
1ae30 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1ae40 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1ae50 69 6f 6e 73 22 2c 20 22 65 78 70 6c 61 69 6e 22  ions", "explain"
1ae60 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
1ae70 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1ae80 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1ae90 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
1aea0 4e 54 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  NT.  Tcl_SetVar2
1aeb0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1aec0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66 6c 6f 61  _options", "floa
1aed0 74 69 6e 67 70 6f 69 6e 74 22 2c 20 22 30 22 2c  tingpoint", "0",
1aee0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1aef0 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
1af00 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
1af10 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
1af20 20 22 66 6c 6f 61 74 69 6e 67 70 6f 69 6e 74 22   "floatingpoint"
1af30 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
1af40 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1af50 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1af60 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
1af70 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1af80 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1af90 74 69 6f 6e 73 22 2c 20 22 66 6f 72 65 69 67 6e  tions", "foreign
1afa0 6b 65 79 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  key", "0", TCL_G
1afb0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
1afc0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
1afd0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1afe0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66 6f 72 65  _options", "fore
1aff0 69 67 6e 6b 65 79 22 2c 20 22 31 22 2c 20 54 43  ignkey", "1", TC
1b000 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
1b010 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
1b020 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1b030 31 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  1.  Tcl_SetVar2(
1b040 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1b050 6f 70 74 69 6f 6e 73 22 2c 20 22 66 74 73 31 22  options", "fts1"
1b060 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
1b070 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
1b080 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1b090 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1b0a0 69 6f 6e 73 22 2c 20 22 66 74 73 31 22 2c 20 22  ions", "fts1", "
1b0b0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
1b0c0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
1b0d0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1b0e0 4c 45 5f 46 54 53 32 0a 20 20 54 63 6c 5f 53 65  LE_FTS2.  Tcl_Se
1b0f0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1b100 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1b110 22 66 74 73 32 22 2c 20 22 31 22 2c 20 54 43 4c  "fts2", "1", TCL
1b120 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
1b130 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
1b140 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1b150 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66 74  te_options", "ft
1b160 73 32 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  s2", "0", TCL_GL
1b170 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
1b180 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
1b190 45 5f 4f 4d 49 54 5f 47 4c 4f 42 41 4c 52 45 43  E_OMIT_GLOBALREC
1b1a0 4f 56 45 52 0a 20 20 54 63 6c 5f 53 65 74 56 61  OVER.  Tcl_SetVa
1b1b0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1b1c0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 67 6c  te_options", "gl
1b1d0 6f 62 61 6c 72 65 63 6f 76 65 72 22 2c 20 22 30  obalrecover", "0
1b1e0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
1b1f0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
1b200 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1b210 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1b220 22 2c 20 22 67 6c 6f 62 61 6c 72 65 63 6f 76 65  ", "globalrecove
1b230 72 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  r", "1", TCL_GLO
1b240 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
1b250 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
1b260 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
1b270 43 48 45 43 4b 0a 20 20 54 63 6c 5f 53 65 74 56  CHECK.  Tcl_SetV
1b280 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
1b290 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 69  ite_options", "i
1b2a0 6e 74 65 67 72 69 74 79 63 6b 22 2c 20 22 30 22  ntegrityck", "0"
1b2b0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1b2c0 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
1b2d0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
1b2e0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
1b2f0 2c 20 22 69 6e 74 65 67 72 69 74 79 63 6b 22 2c  , "integrityck",
1b300 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
1b310 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
1b320 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1b330 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f  TE_DEFAULT_FILE_
1b340 46 4f 52 4d 41 54 29 20 26 26 20 53 51 4c 49 54  FORMAT) && SQLIT
1b350 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46  E_DEFAULT_FILE_F
1b360 4f 52 4d 41 54 3d 3d 31 0a 20 20 54 63 6c 5f 53  ORMAT==1.  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 6c 65 67 61 63 79 66 6f 72 6d 61 74 22 2c   "legacyformat",
1b3a0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
1b3b0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
1b3c0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
1b3d0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
1b3e0 6f 6e 73 22 2c 20 22 6c 65 67 61 63 79 66 6f 72  ons", "legacyfor
1b3f0 6d 61 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  mat", "0", TCL_G
1b400 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
1b410 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
1b420 54 45 5f 4f 4d 49 54 5f 4c 49 4b 45 5f 4f 50 54  TE_OMIT_LIKE_OPT
1b430 49 4d 49 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f  IMIZATION.  Tcl_
1b440 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
1b450 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
1b460 2c 20 22 6c 69 6b 65 5f 6f 70 74 22 2c 20 22 30  , "like_opt", "0
1b470 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
1b480 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
1b490 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1b4a0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1b4b0 22 2c 20 22 6c 69 6b 65 5f 6f 70 74 22 2c 20 22  ", "like_opt", "
1b4c0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
1b4d0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
1b4e0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
1b4f0 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
1b500 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1b510 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1b520 74 69 6f 6e 73 22 2c 20 22 6c 6f 61 64 5f 65 78  tions", "load_ex
1b530 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  t", "0", TCL_GLO
1b540 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
1b550 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1b560 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1b570 70 74 69 6f 6e 73 22 2c 20 22 6c 6f 61 64 5f 65  ptions", "load_e
1b580 78 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  xt", "1", TCL_GL
1b590 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
1b5a0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
1b5b0 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 0a  E_OMIT_MEMORYDB.
1b5c0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1b5d0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1b5e0 74 69 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 64  tions", "memoryd
1b5f0 62 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  b", "0", TCL_GLO
1b600 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
1b610 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1b620 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1b630 70 74 69 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72 79  ptions", "memory
1b640 64 62 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  db", "1", TCL_GL
1b650 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
1b660 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
1b670 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f  E_ENABLE_MEMORY_
1b680 4d 41 4e 41 47 45 4d 45 4e 54 0a 20 20 54 63 6c  MANAGEMENT.  Tcl
1b690 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1b6a0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1b6b0 22 2c 20 22 6d 65 6d 6f 72 79 6d 61 6e 61 67 65  ", "memorymanage
1b6c0 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
1b6d0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
1b6e0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1b6f0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1b700 74 69 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 6d  tions", "memorym
1b710 61 6e 61 67 65 22 2c 20 22 30 22 2c 20 54 43 4c  anage", "0", TCL
1b720 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
1b730 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
1b740 4c 49 54 45 5f 4f 4d 49 54 5f 4f 52 5f 4f 50 54  LITE_OMIT_OR_OPT
1b750 49 4d 49 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f  IMIZATION.  Tcl_
1b760 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
1b770 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
1b780 2c 20 22 6f 72 5f 6f 70 74 22 2c 20 22 30 22 2c  , "or_opt", "0",
1b790 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1b7a0 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
1b7b0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
1b7c0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
1b7d0 20 22 6f 72 5f 6f 70 74 22 2c 20 22 31 22 2c 20   "or_opt", "1", 
1b7e0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
1b7f0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
1b800 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
1b810 45 52 5f 50 52 41 47 4d 41 53 0a 20 20 54 63 6c  ER_PRAGMAS.  Tcl
1b820 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1b830 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1b840 22 2c 20 22 70 61 67 65 72 5f 70 72 61 67 6d 61  ", "pager_pragma
1b850 73 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  s", "0", TCL_GLO
1b860 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
1b870 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1b880 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1b890 70 74 69 6f 6e 73 22 2c 20 22 70 61 67 65 72 5f  ptions", "pager_
1b8a0 70 72 61 67 6d 61 73 22 2c 20 22 31 22 2c 20 54  pragmas", "1", T
1b8b0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1b8c0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
1b8d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 52 53  SQLITE_OMIT_PARS
1b8e0 45 52 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  ER.  Tcl_SetVar2
1b8f0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1b900 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 61 72 73  _options", "pars
1b910 65 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  er", "0", TCL_GL
1b920 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
1b930 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
1b940 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1b950 6f 70 74 69 6f 6e 73 22 2c 20 22 70 61 72 73 65  options", "parse
1b960 72 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  r", "1", TCL_GLO
1b970 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
1b980 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
1b990 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
1b9a0 41 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  A) || defined(SQ
1b9b0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
1b9c0 52 41 47 4d 41 53 29 0a 20 20 54 63 6c 5f 53 65  RAGMAS).  Tcl_Se
1b9d0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1b9e0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1b9f0 22 70 72 61 67 6d 61 22 2c 20 22 30 22 2c 20 54  "pragma", "0", T
1ba00 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1ba10 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1ba20 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1ba30 70 74 69 6f 6e 73 22 2c 20 22 69 6e 74 65 67 72  ptions", "integr
1ba40 69 74 79 63 6b 22 2c 20 22 30 22 2c 20 54 43 4c  ityck", "0", TCL
1ba50 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
1ba60 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
1ba70 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1ba80 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72  te_options", "pr
1ba90 61 67 6d 61 22 2c 20 22 31 22 2c 20 54 43 4c 5f  agma", "1", TCL_
1baa0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1bab0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
1bac0 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
1bad0 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 54 63 6c  S_CALLBACK.  Tcl
1bae0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1baf0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1bb00 22 2c 20 22 70 72 6f 67 72 65 73 73 22 2c 20 22  ", "progress", "
1bb10 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
1bb20 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
1bb30 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1bb40 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1bb50 73 22 2c 20 22 70 72 6f 67 72 65 73 73 22 2c 20  s", "progress", 
1bb60 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
1bb70 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
1bb80 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1bb90 42 4c 45 5f 52 45 44 45 46 5f 49 4f 0a 20 20 54  BLE_REDEF_IO.  T
1bba0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
1bbb0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
1bbc0 6e 73 22 2c 20 22 72 65 64 65 66 69 6f 22 2c 20  ns", "redefio", 
1bbd0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
1bbe0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
1bbf0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
1bc00 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
1bc10 6e 73 22 2c 20 22 72 65 64 65 66 69 6f 22 2c 20  ns", "redefio", 
1bc20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
1bc30 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
1bc40 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
1bc50 54 5f 52 45 49 4e 44 45 58 0a 20 20 54 63 6c 5f  T_REINDEX.  Tcl_
1bc60 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
1bc70 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
1bc80 2c 20 22 72 65 69 6e 64 65 78 22 2c 20 22 30 22  , "reindex", "0"
1bc90 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1bca0 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
1bcb0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
1bcc0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
1bcd0 2c 20 22 72 65 69 6e 64 65 78 22 2c 20 22 31 22  , "reindex", "1"
1bce0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1bcf0 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
1bd00 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
1bd10 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20  CHEMA_PRAGMAS.  
1bd20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
1bd30 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
1bd40 6f 6e 73 22 2c 20 22 73 63 68 65 6d 61 5f 70 72  ons", "schema_pr
1bd50 61 67 6d 61 73 22 2c 20 22 30 22 2c 20 54 43 4c  agmas", "0", TCL
1bd60 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
1bd70 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
1bd80 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1bd90 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63  te_options", "sc
1bda0 68 65 6d 61 5f 70 72 61 67 6d 61 73 22 2c 20 22  hema_pragmas", "
1bdb0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
1bdc0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
1bdd0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
1bde0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f  _SCHEMA_VERSION_
1bdf0 50 52 41 47 4d 41 53 0a 20 20 54 63 6c 5f 53 65  PRAGMAS.  Tcl_Se
1be00 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1be10 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1be20 22 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22  "schema_version"
1be30 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
1be40 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
1be50 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1be60 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1be70 69 6f 6e 73 22 2c 20 22 73 63 68 65 6d 61 5f 76  ions", "schema_v
1be80 65 72 73 69 6f 6e 22 2c 20 22 31 22 2c 20 54 43  ersion", "1", TC
1be90 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
1bea0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
1beb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
1bec0 44 5f 43 41 43 48 45 0a 20 20 54 63 6c 5f 53 65  D_CACHE.  Tcl_Se
1bed0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1bee0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1bef0 22 73 68 61 72 65 64 5f 63 61 63 68 65 22 2c 20  "shared_cache", 
1bf00 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
1bf10 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  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 73 68 61 72 65 64 5f 63 61 63  ns", "shared_cac
1bf50 68 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  he", "1", TCL_GL
1bf60 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
1bf70 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
1bf80 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a  E_OMIT_SUBQUERY.
1bf90 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1bfa0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1bfb0 74 69 6f 6e 73 22 2c 20 22 73 75 62 71 75 65 72  tions", "subquer
1bfc0 79 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  y", "0", TCL_GLO
1bfd0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
1bfe0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1bff0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1c000 70 74 69 6f 6e 73 22 2c 20 22 73 75 62 71 75 65  ptions", "subque
1c010 72 79 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  ry", "1", TCL_GL
1c020 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
1c030 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
1c040 45 5f 4f 4d 49 54 5f 54 43 4c 5f 56 41 52 49 41  E_OMIT_TCL_VARIA
1c050 42 4c 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  BLE.  Tcl_SetVar
1c060 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1c070 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 63 6c  e_options", "tcl
1c080 76 61 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  var", "0", TCL_G
1c090 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
1c0a0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
1c0b0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1c0c0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 63 6c 76  _options", "tclv
1c0d0 61 72 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  ar", "1", TCL_GL
1c0e0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
1c0f0 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
1c100 54 48 52 45 41 44 53 41 46 45 29 20 26 26 20 54  THREADSAFE) && T
1c110 48 52 45 41 44 53 41 46 45 0a 20 20 54 63 6c 5f  HREADSAFE.  Tcl_
1c120 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
1c130 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
1c140 2c 20 22 74 68 72 65 61 64 73 61 66 65 22 2c 20  , "threadsafe", 
1c150 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
1c160 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
1c170 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
1c180 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
1c190 6e 73 22 2c 20 22 74 68 72 65 61 64 73 61 66 65  ns", "threadsafe
1c1a0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
1c1b0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
1c1c0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1c1d0 4f 4d 49 54 5f 54 52 41 43 45 0a 20 20 54 63 6c  OMIT_TRACE.  Tcl
1c1e0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1c1f0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1c200 22 2c 20 22 74 72 61 63 65 22 2c 20 22 30 22 2c  ", "trace", "0",
1c210 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1c220 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
1c230 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
1c240 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
1c250 20 22 74 72 61 63 65 22 2c 20 22 31 22 2c 20 54   "trace", "1", T
1c260 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1c270 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
1c280 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
1c290 47 45 52 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  GER.  Tcl_SetVar
1c2a0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1c2b0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72 69  e_options", "tri
1c2c0 67 67 65 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f  gger", "0", TCL_
1c2d0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1c2e0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
1c2f0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1c300 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72 69  e_options", "tri
1c310 67 67 65 72 22 2c 20 22 31 22 2c 20 54 43 4c 5f  gger", "1", TCL_
1c320 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1c330 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
1c340 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a  ITE_OMIT_TEMPDB.
1c350 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1c360 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1c370 74 69 6f 6e 73 22 2c 20 22 74 65 6d 70 64 62 22  tions", "tempdb"
1c380 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
1c390 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
1c3a0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1c3b0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1c3c0 69 6f 6e 73 22 2c 20 22 74 65 6d 70 64 62 22 2c  ions", "tempdb",
1c3d0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
1c3e0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
1c3f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
1c400 49 54 5f 55 54 46 31 36 0a 20 20 54 63 6c 5f 53  IT_UTF16.  Tcl_S
1c410 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
1c420 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
1c430 20 22 75 74 66 31 36 22 2c 20 22 30 22 2c 20 54   "utf16", "0", T
1c440 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1c450 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
1c460 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1c470 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1c480 75 74 66 31 36 22 2c 20 22 31 22 2c 20 54 43 4c  utf16", "1", TCL
1c490 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
1c4a0 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
1c4b0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
1c4c0 41 43 55 55 4d 29 20 7c 7c 20 64 65 66 69 6e 65  ACUUM) || define
1c4d0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54  d(SQLITE_OMIT_AT
1c4e0 54 41 43 48 29 0a 20 20 54 63 6c 5f 53 65 74 56  TACH).  Tcl_SetV
1c4f0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
1c500 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76  ite_options", "v
1c510 61 63 75 75 6d 22 2c 20 22 30 22 2c 20 54 43 4c  acuum", "0", TCL
1c520 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
1c530 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
1c540 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1c550 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76 61  te_options", "va
1c560 63 75 75 6d 22 2c 20 22 31 22 2c 20 54 43 4c 5f  cuum", "1", TCL_
1c570 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1c580 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
1c590 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 0a 20 20  ITE_OMIT_VIEW.  
1c5a0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
1c5b0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
1c5c0 6f 6e 73 22 2c 20 22 76 69 65 77 22 2c 20 22 30  ons", "view", "0
1c5d0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
1c5e0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
1c5f0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1c600 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1c610 22 2c 20 22 76 69 65 77 22 2c 20 22 31 22 2c 20  ", "view", "1", 
1c620 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
1c630 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
1c640 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
1c650 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 63 6c 5f  TUALTABLE.  Tcl_
1c660 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
1c670 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
1c680 2c 20 22 76 74 61 62 22 2c 20 22 30 22 2c 20 54  , "vtab", "0", T
1c690 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1c6a0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
1c6b0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1c6c0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1c6d0 76 74 61 62 22 2c 20 22 31 22 2c 20 54 43 4c 5f  vtab", "1", TCL_
1c6e0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1c6f0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
1c700 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
1c710 5f 46 4f 52 4d 41 54 0a 20 20 54 63 6c 5f 4f 62  _FORMAT.  Tcl_Ob
1c720 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  jSetVar2(interp,
1c730 20 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53   .      Tcl_NewS
1c740 74 72 69 6e 67 4f 62 6a 28 22 73 71 6c 69 74 65  tringObj("sqlite
1c750 5f 64 65 66 61 75 6c 74 5f 66 69 6c 65 5f 66 6f  _default_file_fo
1c760 72 6d 61 74 22 2c 20 2d 31 29 2c 20 30 2c 20 0a  rmat", -1), 0, .
1c770 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 49 6e 74        Tcl_NewInt
1c780 4f 62 6a 28 53 51 4c 49 54 45 5f 44 45 46 41 55  Obj(SQLITE_DEFAU
1c790 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 29 2c  LT_FILE_FORMAT),
1c7a0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1c7b0 0a 20 20 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  .  );.#endif.#if
1c7c0 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 50  def SQLITE_MAX_P
1c7d0 41 47 45 5f 53 49 5a 45 0a 20 20 54 63 6c 5f 4f  AGE_SIZE.  Tcl_O
1c7e0 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  bjSetVar2(interp
1c7f0 2c 20 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77  , .      Tcl_New
1c800 53 74 72 69 6e 67 4f 62 6a 28 22 53 51 4c 49 54  StringObj("SQLIT
1c810 45 5f 4d 41 58 5f 50 41 47 45 5f 53 49 5a 45 22  E_MAX_PAGE_SIZE"
1c820 2c 20 2d 31 29 2c 20 30 2c 20 0a 20 20 20 20 20  , -1), 0, .     
1c830 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 53   Tcl_NewIntObj(S
1c840 51 4c 49 54 45 5f 4d 41 58 5f 50 41 47 45 5f 53  QLITE_MAX_PAGE_S
1c850 49 5a 45 29 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c  IZE), TCL_GLOBAL
1c860 5f 4f 4e 4c 59 0a 20 20 29 3b 0a 23 65 6e 64 69  _ONLY.  );.#endi
1c870 66 0a 23 69 66 64 65 66 20 54 45 4d 50 5f 53 54  f.#ifdef TEMP_ST
1c880 4f 52 45 0a 20 20 54 63 6c 5f 4f 62 6a 53 65 74  ORE.  Tcl_ObjSet
1c890 56 61 72 32 28 69 6e 74 65 72 70 2c 20 0a 20 20  Var2(interp, .  
1c8a0 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e      Tcl_NewStrin
1c8b0 67 4f 62 6a 28 22 54 45 4d 50 5f 53 54 4f 52 45  gObj("TEMP_STORE
1c8c0 22 2c 20 2d 31 29 2c 20 30 2c 20 0a 20 20 20 20  ", -1), 0, .    
1c8d0 20 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28    Tcl_NewIntObj(
1c8e0 54 45 4d 50 5f 53 54 4f 52 45 29 2c 20 54 43 4c  TEMP_STORE), TCL
1c8f0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 0a 20 20 29  _GLOBAL_ONLY.  )
1c900 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a  ;.#endif.}../*.*
1c910 2a 20 74 63 6c 63 6d 64 3a 20 20 20 77 6f 72 6b  * tclcmd:   work
1c920 69 6e 67 5f 36 34 62 69 74 5f 69 6e 74 0a 2a 2a  ing_64bit_int.**
1c930 0a 2a 2a 20 53 6f 6d 65 20 54 43 4c 20 62 75 69  .** Some TCL bui
1c940 6c 64 73 20 28 65 78 3a 20 63 79 67 77 69 6e 29  lds (ex: cygwin)
1c950 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74 20   do not support 
1c960 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 73 2e  64-bit integers.
1c970 20 20 54 68 69 73 0a 2a 2a 20 6c 65 61 64 73 20    This.** leads 
1c980 74 6f 20 61 20 6e 75 6d 62 65 72 20 6f 66 20 74  to a number of t
1c990 65 73 74 20 66 61 69 6c 75 72 65 73 2e 20 20 54  est failures.  T
1c9a0 68 65 20 70 72 65 73 65 6e 74 20 63 6f 6d 6d 61  he present comma
1c9b0 6e 64 20 63 68 65 63 6b 73 20 74 68 65 0a 2a 2a  nd checks the.**
1c9c0 20 54 43 4c 20 62 75 69 6c 64 20 74 6f 20 73 65   TCL build to se
1c9d0 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
1c9e0 20 69 74 20 73 75 70 70 6f 72 74 73 20 36 34 2d   it supports 64-
1c9f0 62 69 74 20 69 6e 74 65 67 65 72 73 2e 20 20 49  bit integers.  I
1ca00 74 0a 2a 2a 20 72 65 74 75 72 6e 73 20 54 52 55  t.** returns TRU
1ca10 45 20 69 66 20 69 74 20 64 6f 65 73 20 61 6e 64  E if it does and
1ca20 20 46 41 4c 53 45 20 69 66 20 6e 6f 74 2e 0a 2a   FALSE if not..*
1ca30 2a 0a 2a 2a 20 54 68 69 73 20 63 6f 6d 6d 61 6e  *.** This comman
1ca40 64 20 69 73 20 75 73 65 64 20 74 6f 20 77 61 72  d is used to war
1ca50 6e 20 75 73 65 72 73 20 74 68 61 74 20 74 68 65  n users that the
1ca60 69 72 20 54 43 4c 20 62 75 69 6c 64 20 69 73 20  ir TCL build is 
1ca70 64 65 66 65 63 74 69 76 65 0a 2a 2a 20 61 6e 64  defective.** and
1ca80 20 74 68 61 74 20 74 68 65 20 65 72 72 6f 72 73   that the errors
1ca90 20 74 68 65 79 20 61 72 65 20 73 65 65 69 6e 67   they are seeing
1caa0 20 69 6e 20 74 68 65 20 74 65 73 74 20 73 63 72   in the test scr
1cab0 69 70 74 73 20 6d 69 67 68 74 20 62 65 0a 2a 2a  ipts might be.**
1cac0 20 61 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65   a result of the
1cad0 69 72 20 64 65 66 65 63 74 69 76 65 20 54 43 4c  ir defective TCL
1cae0 20 72 61 74 68 65 72 20 74 68 61 6e 20 70 72 6f   rather than pro
1caf0 62 6c 65 6d 73 20 69 6e 20 53 51 4c 69 74 65 2e  blems in SQLite.
1cb00 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 77  .*/.static int w
1cb10 6f 72 6b 69 6e 67 5f 36 34 62 69 74 5f 69 6e 74  orking_64bit_int
1cb20 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63  (.  ClientData c
1cb30 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f  lientData, /* Po
1cb40 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  inter to sqlite3
1cb50 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63  _enable_XXX func
1cb60 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  tion */.  Tcl_In
1cb70 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
1cb80 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
1cb90 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
1cba0 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
1cbb0 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  d */.  int objc,
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1cbd0 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
1cbe0 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62  ents */.  Tcl_Ob
1cbf0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20  j *CONST objv[] 
1cc00 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
1cc10 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63  ments */.){.  Tc
1cc20 6c 5f 4f 62 6a 20 2a 70 54 65 73 74 4f 62 6a 3b  l_Obj *pTestObj;
1cc30 0a 20 20 69 6e 74 20 77 6f 72 6b 69 6e 67 20 3d  .  int working =
1cc40 20 30 3b 0a 0a 20 20 70 54 65 73 74 4f 62 6a 20   0;..  pTestObj 
1cc50 3d 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74  = Tcl_NewWideInt
1cc60 4f 62 6a 28 31 30 30 30 30 30 30 2a 28 69 36 34  Obj(1000000*(i64
1cc70 29 31 32 33 34 35 36 37 38 39 30 29 3b 0a 20 20  )1234567890);.  
1cc80 77 6f 72 6b 69 6e 67 20 3d 20 73 74 72 63 6d 70  working = strcmp
1cc90 28 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 70  (Tcl_GetString(p
1cca0 54 65 73 74 4f 62 6a 29 2c 20 22 31 32 33 34 35  TestObj), "12345
1ccb0 36 37 38 39 30 30 30 30 30 30 30 22 29 3d 3d 30  67890000000")==0
1ccc0 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  ;.  Tcl_DecrRefC
1ccd0 6f 75 6e 74 28 70 54 65 73 74 4f 62 6a 29 3b 0a  ount(pTestObj);.
1cce0 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
1ccf0 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
1cd00 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 77 6f 72  ewBooleanObj(wor
1cd10 6b 69 6e 67 29 29 3b 0a 20 20 72 65 74 75 72 6e  king));.  return
1cd20 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a   TCL_OK;.}.../*.
1cd30 2a 2a 20 52 65 67 69 73 74 65 72 20 63 6f 6d 6d  ** Register comm
1cd40 61 6e 64 73 20 77 69 74 68 20 74 68 65 20 54 43  ands with the TC
1cd50 4c 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0a 2a  L interpreter..*
1cd60 2f 0a 69 6e 74 20 53 71 6c 69 74 65 74 65 73 74  /.int Sqlitetest
1cd70 31 5f 49 6e 69 74 28 54 63 6c 5f 49 6e 74 65 72  1_Init(Tcl_Inter
1cd80 70 20 2a 69 6e 74 65 72 70 29 7b 0a 20 20 65 78  p *interp){.  ex
1cd90 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
1cda0 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 3b 0a 20  _search_count;. 
1cdb0 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
1cdc0 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
1cdd0 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  unt;.  extern in
1cde0 74 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 66  t sqlite3_open_f
1cdf0 69 6c 65 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74  ile_count;.  ext
1ce00 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
1ce10 73 6f 72 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78  sort_count;.  ex
1ce20 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
1ce30 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65 3b 0a 20  _current_time;. 
1ce40 20 73 74 61 74 69 63 20 73 74 72 75 63 74 20 7b   static struct {
1ce50 0a 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  .     char *zNam
1ce60 65 3b 0a 20 20 20 20 20 54 63 6c 5f 43 6d 64 50  e;.     Tcl_CmdP
1ce70 72 6f 63 20 2a 78 50 72 6f 63 3b 0a 20 20 7d 20  roc *xProc;.  } 
1ce80 61 43 6d 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  aCmd[] = {.     
1ce90 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
1cea0 74 66 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20  tf_int",        
1ceb0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1cec0 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
1ced0 5f 69 6e 74 20 20 20 20 7d 2c 0a 20 20 20 20 20  _int    },.     
1cee0 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
1cef0 74 66 5f 69 6e 74 36 34 22 2c 20 20 20 20 20 20  tf_int64",      
1cf00 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1cf10 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
1cf20 5f 69 6e 74 36 34 20 20 7d 2c 0a 20 20 20 20 20  _int64  },.     
1cf30 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
1cf40 74 66 5f 73 74 72 22 2c 20 20 20 20 20 20 20 20  tf_str",        
1cf50 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1cf60 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
1cf70 5f 73 74 72 20 20 20 20 7d 2c 0a 20 20 20 20 20  _str    },.     
1cf80 7b 20 22 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  { "sqlite3_snpri
1cf90 6e 74 66 5f 73 74 72 22 2c 20 20 20 20 20 20 20  ntf_str",       
1cfa0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1cfb0 29 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74  )sqlite3_snprint
1cfc0 66 5f 73 74 72 20 20 20 7d 2c 0a 20 20 20 20 20  f_str   },.     
1cfd0 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
1cfe0 74 66 5f 73 74 72 6f 6e 6c 79 22 2c 20 20 20 20  tf_stronly",    
1cff0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1d000 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
1d010 5f 73 74 72 6f 6e 6c 79 7d 2c 0a 20 20 20 20 20  _stronly},.     
1d020 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
1d030 74 66 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20 20  tf_double",     
1d040 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1d050 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
1d060 5f 64 6f 75 62 6c 65 20 7d 2c 0a 20 20 20 20 20  _double },.     
1d070 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
1d080 74 66 5f 73 63 61 6c 65 64 22 2c 20 20 20 20 20  tf_scaled",     
1d090 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1d0a0 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
1d0b0 5f 73 63 61 6c 65 64 20 7d 2c 0a 20 20 20 20 20  _scaled },.     
1d0c0 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
1d0d0 74 66 5f 68 65 78 64 6f 75 62 6c 65 22 2c 20 20  tf_hexdouble",  
1d0e0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
1d0f0 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68  qlite3_mprintf_h
1d100 65 78 64 6f 75 62 6c 65 7d 2c 0a 20 20 20 20 20  exdouble},.     
1d110 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
1d120 74 66 5f 7a 5f 74 65 73 74 22 2c 20 20 20 20 20  tf_z_test",     
1d130 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1d140 29 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f 7a 20  )test_mprintf_z 
1d150 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b         },.     {
1d160 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74   "sqlite3_mprint
1d170 66 5f 6e 5f 74 65 73 74 22 2c 20 20 20 20 20 20  f_n_test",      
1d180 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
1d190 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f 6e 20 20  test_mprintf_n  
1d1a0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
1d1b0 22 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e  "sqlite3_last_in
1d1c0 73 65 72 74 5f 72 6f 77 69 64 22 2c 20 20 20 20  sert_rowid",    
1d1d0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
1d1e0 65 73 74 5f 6c 61 73 74 5f 72 6f 77 69 64 20 20  est_last_rowid  
1d1f0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
1d200 73 71 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69  sqlite3_exec_pri
1d210 6e 74 66 22 2c 20 20 20 20 20 20 20 20 20 20 20  ntf",           
1d220 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
1d230 73 74 5f 65 78 65 63 5f 70 72 69 6e 74 66 20 20  st_exec_printf  
1d240 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
1d250 71 6c 69 74 65 33 5f 65 78 65 63 22 2c 20 20 20  qlite3_exec",   
1d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1d270 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
1d280 74 5f 65 78 65 63 20 20 20 20 20 20 20 20 20 20  t_exec          
1d290 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
1d2a0 6c 69 74 65 33 5f 65 78 65 63 5f 6e 72 22 2c 20  lite3_exec_nr", 
1d2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
1d2c0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
1d2d0 5f 65 78 65 63 5f 6e 72 20 20 20 20 20 20 20 20  _exec_nr        
1d2e0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
1d2f0 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70  ite3_get_table_p
1d300 72 69 6e 74 66 22 2c 20 20 20 20 20 20 28 54 63  rintf",      (Tc
1d310 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
1d320 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66  get_table_printf
1d330 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1d340 74 65 33 5f 63 6c 6f 73 65 22 2c 20 20 20 20 20  te3_close",     
1d350 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
1d360 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65  _CmdProc*)sqlite
1d370 5f 74 65 73 74 5f 63 6c 6f 73 65 20 20 20 20 20  _test_close     
1d380 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1d390 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
1d3a0 6f 6e 22 2c 20 20 20 20 20 20 20 28 54 63 6c 5f  on",       (Tcl_
1d3b0 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 63 72  CmdProc*)test_cr
1d3c0 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 20 7d  eate_function  }
1d3d0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1d3e0 33 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61  3_create_aggrega
1d3f0 74 65 22 2c 20 20 20 20 20 20 28 54 63 6c 5f 43  te",      (Tcl_C
1d400 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 63 72 65  mdProc*)test_cre
1d410 61 74 65 5f 61 67 67 72 65 67 61 74 65 20 7d 2c  ate_aggregate },
1d420 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f  .     { "sqlite_
1d430 72 65 67 69 73 74 65 72 5f 74 65 73 74 5f 66 75  register_test_fu
1d440 6e 63 74 69 6f 6e 22 2c 20 28 54 63 6c 5f 43 6d  nction", (Tcl_Cm
1d450 64 50 72 6f 63 2a 29 74 65 73 74 5f 72 65 67 69  dProc*)test_regi
1d460 73 74 65 72 5f 66 75 6e 63 20 20 20 20 7d 2c 0a  ster_func    },.
1d470 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 61       { "sqlite_a
1d480 62 6f 72 74 22 2c 20 20 20 20 20 20 20 20 20 20  bort",          
1d490 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
1d4a0 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 61 62 6f  Proc*)sqlite_abo
1d4b0 72 74 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 23  rt          },.#
1d4c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
1d4d0 44 45 42 55 47 0a 20 20 20 20 20 7b 20 22 73 71  DEBUG.     { "sq
1d4e0 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c  lite_malloc_fail
1d4f0 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 28 54  ",            (T
1d500 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
1d510 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 20 20  te_malloc_fail  
1d520 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
1d530 69 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 22  ite_malloc_stat"
1d540 2c 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63  ,            (Tc
1d550 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74  l_CmdProc*)sqlit
1d560 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 20 20 20  e_malloc_stat   
1d570 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20   },.#endif.     
1d580 7b 20 22 73 71 6c 69 74 65 5f 62 69 6e 64 22 2c  { "sqlite_bind",
1d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5a0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1d5b0 29 74 65 73 74 5f 62 69 6e 64 20 20 20 20 20 20  )test_bind      
1d5c0 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b         },.     {
1d5d0 20 22 62 72 65 61 6b 70 6f 69 6e 74 22 2c 20 20   "breakpoint",  
1d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5f0 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
1d600 74 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 20  test_breakpoint 
1d610 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
1d620 22 73 71 6c 69 74 65 33 5f 6b 65 79 22 2c 20 20  "sqlite3_key",  
1d630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d640 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
1d650 65 73 74 5f 6b 65 79 20 20 20 20 20 20 20 20 20  est_key         
1d660 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
1d670 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 22 2c 20  sqlite3_rekey", 
1d680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d690 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
1d6a0 73 74 5f 72 65 6b 65 79 20 20 20 20 20 20 20 20  st_rekey        
1d6b0 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
1d6c0 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 22  qlite_set_magic"
1d6d0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  ,              (
1d6e0 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c  Tcl_CmdProc*)sql
1d6f0 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 20 20 20  ite_set_magic   
1d700 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
1d710 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 22  lite3_interrupt"
1d720 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54  ,             (T
1d730 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
1d740 5f 69 6e 74 65 72 72 75 70 74 20 20 20 20 20 20  _interrupt      
1d750 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
1d760 69 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e 63 74  ite_delete_funct
1d770 69 6f 6e 22 2c 20 20 20 20 20 20 20 20 28 54 63  ion",        (Tc
1d780 6c 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65 74  l_CmdProc*)delet
1d790 65 5f 66 75 6e 63 74 69 6f 6e 20 20 20 20 20 20  e_function      
1d7a0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1d7b0 74 65 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74  te_delete_collat
1d7c0 69 6f 6e 22 2c 20 20 20 20 20 20 20 28 54 63 6c  ion",       (Tcl
1d7d0 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65 74 65  _CmdProc*)delete
1d7e0 5f 63 6f 6c 6c 61 74 69 6f 6e 20 20 20 20 20 20  _collation      
1d7f0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1d800 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
1d810 74 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  t",        (Tcl_
1d820 43 6d 64 50 72 6f 63 2a 29 67 65 74 5f 61 75 74  CmdProc*)get_aut
1d830 6f 63 6f 6d 6d 69 74 20 20 20 20 20 20 20 20 7d  ocommit        }
1d840 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1d850 33 5f 73 74 61 63 6b 5f 75 73 65 64 22 2c 20 20  3_stack_used",  
1d860 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
1d870 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 73 74 61  mdProc*)test_sta
1d880 63 6b 5f 75 73 65 64 20 20 20 20 20 20 20 7d 2c  ck_used       },
1d890 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1d8a0 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 22 2c 20  _busy_timeout", 
1d8b0 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
1d8c0 64 50 72 6f 63 2a 29 74 65 73 74 5f 62 75 73 79  dProc*)test_busy
1d8d0 5f 74 69 6d 65 6f 75 74 20 20 20 20 20 7d 2c 0a  _timeout     },.
1d8e0 20 20 20 20 20 7b 20 22 70 72 69 6e 74 66 22 2c       { "printf",
1d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d900 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
1d910 50 72 6f 63 2a 29 74 65 73 74 5f 70 72 69 6e 74  Proc*)test_print
1d920 66 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  f           },. 
1d930 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 69      { "sqlite3_i
1d940 6f 5f 74 72 61 63 65 22 2c 20 20 20 20 20 20 20  o_trace",       
1d950 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
1d960 72 6f 63 2a 29 74 65 73 74 5f 69 6f 5f 74 72 61  roc*)test_io_tra
1d970 63 65 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20  ce         },.  
1d980 7d 3b 0a 20 20 73 74 61 74 69 63 20 73 74 72 75  };.  static stru
1d990 63 74 20 7b 0a 20 20 20 20 20 63 68 61 72 20 2a  ct {.     char *
1d9a0 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 54 63 6c 5f  zName;.     Tcl_
1d9b0 4f 62 6a 43 6d 64 50 72 6f 63 20 2a 78 50 72 6f  ObjCmdProc *xPro
1d9c0 63 3b 0a 20 20 20 20 20 76 6f 69 64 20 2a 63 6c  c;.     void *cl
1d9d0 69 65 6e 74 44 61 74 61 3b 0a 20 20 7d 20 61 4f  ientData;.  } aO
1d9e0 62 6a 43 6d 64 5b 5d 20 3d 20 7b 0a 20 20 20 20  bjCmd[] = {.    
1d9f0 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6e 6e   { "sqlite3_conn
1da00 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 22 2c  ection_pointer",
1da10 20 20 20 20 67 65 74 5f 73 71 6c 69 74 65 5f 70      get_sqlite_p
1da20 6f 69 6e 74 65 72 2c 20 30 20 7d 2c 0a 20 20 20  ointer, 0 },.   
1da30 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e    { "sqlite3_bin
1da40 64 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20  d_int",         
1da50 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 69       test_bind_i
1da60 6e 74 2c 20 20 20 20 20 20 30 20 7d 2c 0a 20 20  nt,      0 },.  
1da70 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
1da80 6e 64 5f 69 6e 74 36 34 22 2c 20 20 20 20 20 20  nd_int64",      
1da90 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f        test_bind_
1daa0 69 6e 74 36 34 2c 20 20 20 20 30 20 7d 2c 0a 20  int64,    0 },. 
1dab0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62      { "sqlite3_b
1dac0 69 6e 64 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20  ind_double",    
1dad0 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64         test_bind
1dae0 5f 64 6f 75 62 6c 65 2c 20 20 20 30 20 7d 2c 0a  _double,   0 },.
1daf0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1db00 62 69 6e 64 5f 6e 75 6c 6c 22 2c 20 20 20 20 20  bind_null",     
1db10 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e          test_bin
1db20 64 5f 6e 75 6c 6c 20 20 20 20 20 2c 30 20 7d 2c  d_null     ,0 },
1db30 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1db40 5f 62 69 6e 64 5f 74 65 78 74 22 2c 20 20 20 20  _bind_text",    
1db50 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69           test_bi
1db60 6e 64 5f 74 65 78 74 20 20 20 20 20 2c 30 20 7d  nd_text     ,0 }
1db70 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1db80 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 22 2c 20  3_bind_text16", 
1db90 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62            test_b
1dba0 69 6e 64 5f 74 65 78 74 31 36 20 20 20 2c 30 20  ind_text16   ,0 
1dbb0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1dbc0 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 22 2c 20 20  e3_bind_blob",  
1dbd0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
1dbe0 62 69 6e 64 5f 62 6c 6f 62 20 20 20 20 20 2c 30  bind_blob     ,0
1dbf0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1dc00 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
1dc10 65 72 5f 63 6f 75 6e 74 22 2c 20 20 74 65 73 74  er_count",  test
1dc20 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
1dc30 63 6f 75 6e 74 2c 20 30 7d 2c 0a 20 20 20 20 20  count, 0},.     
1dc40 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  { "sqlite3_bind_
1dc50 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 22 2c  parameter_name",
1dc60 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72     test_bind_par
1dc70 61 6d 65 74 65 72 5f 6e 61 6d 65 2c 20 20 30 7d  ameter_name,  0}
1dc80 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1dc90 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
1dca0 5f 69 6e 64 65 78 22 2c 20 20 74 65 73 74 5f 62  _index",  test_b
1dcb0 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e  ind_parameter_in
1dcc0 64 65 78 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20  dex, 0},.     { 
1dcd0 22 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62  "sqlite3_clear_b
1dce0 69 6e 64 69 6e 67 73 22 2c 20 20 20 20 20 20 20  indings",       
1dcf0 20 74 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64   test_clear_bind
1dd00 69 6e 67 73 2c 20 30 7d 2c 0a 20 20 20 20 20 7b  ings, 0},.     {
1dd10 20 22 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 22   "sqlite3_sleep"
1dd20 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1dd30 20 20 74 65 73 74 5f 73 6c 65 65 70 2c 20 20 20    test_sleep,   
1dd40 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
1dd50 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  { "sqlite3_errco
1dd60 64 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  de",            
1dd70 20 20 20 74 65 73 74 5f 65 72 72 63 6f 64 65 20     test_errcode 
1dd80 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20        ,0 },.    
1dd90 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72 6d   { "sqlite3_errm
1dda0 73 67 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  sg",            
1ddb0 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67 20      test_errmsg 
1ddc0 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
1ddd0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72    { "sqlite3_err
1dde0 6d 73 67 31 36 22 2c 20 20 20 20 20 20 20 20 20  msg16",         
1ddf0 20 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67       test_errmsg
1de00 31 36 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20  16      ,0 },.  
1de10 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f 70     { "sqlite3_op
1de20 65 6e 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  en",            
1de30 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65 6e 20        test_open 
1de40 20 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20           ,0 },. 
1de50 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f      { "sqlite3_o
1de60 70 65 6e 31 36 22 2c 20 20 20 20 20 20 20 20 20  pen16",         
1de70 20 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65 6e         test_open
1de80 31 36 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a  16        ,0 },.
1de90 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1dea0 63 6f 6d 70 6c 65 74 65 31 36 22 2c 20 20 20 20  complete16",    
1deb0 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6d          test_com
1dec0 70 6c 65 74 65 31 36 20 20 20 20 2c 30 20 7d 2c  plete16    ,0 },
1ded0 0a 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ..     { "sqlite
1dee0 33 5f 70 72 65 70 61 72 65 22 2c 20 20 20 20 20  3_prepare",     
1def0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 70            test_p
1df00 72 65 70 61 72 65 20 20 20 20 20 20 20 2c 30 20  repare       ,0 
1df10 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1df20 65 33 5f 70 72 65 70 61 72 65 31 36 22 2c 20 20  e3_prepare16",  
1df30 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
1df40 70 72 65 70 61 72 65 31 36 20 20 20 20 20 2c 30  prepare16     ,0
1df50 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1df60 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 22 2c  te3_prepare_v2",
1df70 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
1df80 5f 70 72 65 70 61 72 65 5f 76 32 20 20 20 20 2c  _prepare_v2    ,
1df90 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
1dfa0 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 5f 76  ite3_prepare16_v
1dfb0 32 22 2c 20 20 20 20 20 20 20 20 20 20 74 65 73  2",          tes
1dfc0 74 5f 70 72 65 70 61 72 65 31 36 5f 76 32 20 20  t_prepare16_v2  
1dfd0 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
1dfe0 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 22 2c  lite3_finalize",
1dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
1e000 73 74 5f 66 69 6e 61 6c 69 7a 65 20 20 20 20 20  st_finalize     
1e010 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
1e020 71 6c 69 74 65 33 5f 72 65 73 65 74 22 2c 20 20  qlite3_reset",  
1e030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e040 65 73 74 5f 72 65 73 65 74 20 20 20 20 20 20 20  est_reset       
1e050 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
1e060 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64 22  sqlite3_expired"
1e070 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1e080 74 65 73 74 5f 65 78 70 69 72 65 64 20 20 20 20  test_expired    
1e090 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
1e0a0 22 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65  "sqlite3_transfe
1e0b0 72 5f 62 69 6e 64 69 6e 67 73 22 2c 20 20 20 20  r_bindings",    
1e0c0 20 74 65 73 74 5f 74 72 61 6e 73 66 65 72 5f 62   test_transfer_b
1e0d0 69 6e 64 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b  ind ,0 },.     {
1e0e0 20 22 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65   "sqlite3_change
1e0f0 73 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  s",             
1e100 20 20 74 65 73 74 5f 63 68 61 6e 67 65 73 20 20    test_changes  
1e110 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
1e120 7b 20 22 73 71 6c 69 74 65 33 5f 73 74 65 70 22  { "sqlite3_step"
1e130 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1e140 20 20 20 74 65 73 74 5f 73 74 65 70 20 20 20 20     test_step    
1e150 20 20 20 20 20 20 2c 30 20 7d 2c 0a 0a 20 20 20        ,0 },..   
1e160 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 72 65 6c    { "sqlite3_rel
1e170 65 61 73 65 5f 6d 65 6d 6f 72 79 22 2c 20 20 20  ease_memory",   
1e180 20 20 20 20 20 74 65 73 74 5f 72 65 6c 65 61 73       test_releas
1e190 65 5f 6d 65 6d 6f 72 79 2c 20 20 20 20 20 30 7d  e_memory,     0}
1e1a0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1e1b0 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  3_soft_heap_limi
1e1c0 74 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f 73  t",       test_s
1e1d0 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 2c 20  oft_heap_limit, 
1e1e0 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73     0},.     { "s
1e1f0 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 74 73 64  qlite3_clear_tsd
1e200 5f 6d 65 6d 64 65 62 75 67 22 2c 20 20 20 20 74  _memdebug",    t
1e210 65 73 74 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65  est_clear_tsd_me
1e220 6d 64 65 62 75 67 2c 20 30 7d 2c 0a 20 20 20 20  mdebug, 0},.    
1e230 20 7b 20 22 73 71 6c 69 74 65 33 5f 74 73 64 5f   { "sqlite3_tsd_
1e240 72 65 6c 65 61 73 65 22 2c 20 20 20 20 20 20 20  release",       
1e250 20 20 20 20 74 65 73 74 5f 74 73 64 5f 72 65 6c      test_tsd_rel
1e260 65 61 73 65 2c 20 20 20 20 20 20 20 20 30 7d 2c  ease,        0},
1e270 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1e280 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 22  _thread_cleanup"
1e290 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 74 68  ,        test_th
1e2a0 72 65 61 64 5f 63 6c 65 61 6e 75 70 2c 20 20 20  read_cleanup,   
1e2b0 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71    0},.     { "sq
1e2c0 6c 69 74 65 33 5f 70 61 67 65 72 5f 72 65 66 63  lite3_pager_refc
1e2d0 6f 75 6e 74 73 22 2c 20 20 20 20 20 20 20 74 65  ounts",       te
1e2e0 73 74 5f 70 61 67 65 72 5f 72 65 66 63 6f 75 6e  st_pager_refcoun
1e2f0 74 73 2c 20 20 20 20 30 7d 2c 0a 0a 20 20 20 20  ts,    0},..    
1e300 20 7b 20 22 73 71 6c 69 74 65 33 5f 6c 6f 61 64   { "sqlite3_load
1e310 5f 65 78 74 65 6e 73 69 6f 6e 22 2c 20 20 20 20  _extension",    
1e320 20 20 20 20 74 65 73 74 5f 6c 6f 61 64 5f 65 78      test_load_ex
1e330 74 65 6e 73 69 6f 6e 2c 20 20 20 20 20 30 7d 2c  tension,     0},
1e340 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1e350 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74  _enable_load_ext
1e360 65 6e 73 69 6f 6e 22 2c 20 74 65 73 74 5f 65 6e  ension", test_en
1e370 61 62 6c 65 5f 6c 6f 61 64 2c 20 20 20 20 20 20  able_load,      
1e380 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71    0},.     { "sq
1e390 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72  lite3_extended_r
1e3a0 65 73 75 6c 74 5f 63 6f 64 65 73 22 2c 20 74 65  esult_codes", te
1e3b0 73 74 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75  st_extended_resu
1e3c0 6c 74 5f 63 6f 64 65 73 2c 20 30 7d 2c 0a 0a 20  lt_codes, 0},.. 
1e3d0 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 63      /* sqlite3_c
1e3e0 6f 6c 75 6d 6e 5f 2a 28 29 20 41 50 49 20 2a 2f  olumn_*() API */
1e3f0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1e400 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 22 2c 20  _column_count", 
1e410 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f           test_co
1e420 6c 75 6d 6e 5f 63 6f 75 6e 74 20 20 2c 30 20 7d  lumn_count  ,0 }
1e430 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1e440 33 5f 64 61 74 61 5f 63 6f 75 6e 74 22 2c 20 20  3_data_count",  
1e450 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 64            test_d
1e460 61 74 61 5f 63 6f 75 6e 74 20 20 20 20 2c 30 20  ata_count    ,0 
1e470 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1e480 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 22 2c  e3_column_type",
1e490 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
1e4a0 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 20 20 2c 30  column_type   ,0
1e4b0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1e4c0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 22  te3_column_blob"
1e4d0 2c 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74  ,           test
1e4e0 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 20 20 2c  _column_blob   ,
1e4f0 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
1e500 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
1e510 6c 65 22 2c 20 20 20 20 20 20 20 20 20 74 65 73  le",         tes
1e520 74 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20  t_column_double 
1e530 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
1e540 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
1e550 36 34 22 2c 20 20 20 20 20 20 20 20 20 20 74 65  64",          te
1e560 73 74 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20  st_column_int64 
1e570 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
1e580 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
1e590 78 74 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f  xt",       test_
1e5a0 73 74 6d 74 5f 75 74 66 38 2c 20 20 73 71 6c 69  stmt_utf8,  sqli
1e5b0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20  te3_column_text 
1e5c0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
1e5d0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
1e5e0 65 63 6c 74 79 70 65 22 2c 20 20 20 74 65 73 74  ecltype",   test
1e5f0 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 73 71 6c  _stmt_utf8,  sql
1e600 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
1e610 74 79 70 65 20 20 7d 2c 0a 20 20 20 20 20 7b 20  type  },.     { 
1e620 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
1e630 6e 61 6d 65 22 2c 20 20 20 20 20 20 20 74 65 73  name",       tes
1e640 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 73 71  t_stmt_utf8,  sq
1e650 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
1e660 65 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b  e      },.     {
1e670 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
1e680 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20 74 65  _int",        te
1e690 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 20 20 73  st_stmt_int,   s
1e6a0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
1e6b0 74 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  t       },.     
1e6c0 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
1e6d0 6e 5f 62 79 74 65 73 22 2c 20 20 20 20 20 20 74  n_bytes",      t
1e6e0 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 20 20  est_stmt_int,   
1e6f0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
1e700 79 74 65 73 20 20 20 20 20 7d 2c 0a 23 69 66 64  ytes     },.#ifd
1e710 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1e720 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41  _COLUMN_METADATA
1e730 0a 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75  .{ "sqlite3_colu
1e740 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
1e750 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66  ", test_stmt_utf
1e760 38 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  8, sqlite3_colum
1e770 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 7d  n_database_name}
1e780 2c 0a 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c  ,.{ "sqlite3_col
1e790 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 22 2c  umn_table_name",
1e7a0 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c   test_stmt_utf8,
1e7b0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1e7c0 74 61 62 6c 65 5f 6e 61 6d 65 7d 2c 0a 7b 20 22  table_name},.{ "
1e7d0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
1e7e0 72 69 67 69 6e 5f 6e 61 6d 65 22 2c 20 74 65 73  rigin_name", tes
1e7f0 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 73 71 6c  t_stmt_utf8, sql
1e800 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
1e810 69 6e 5f 6e 61 6d 65 7d 2c 0a 23 65 6e 64 69 66  in_name},.#endif
1e820 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
1e830 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 20 20  _OMIT_UTF16.    
1e840 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
1e850 6d 6e 5f 62 79 74 65 73 31 36 22 2c 20 20 20 20  mn_bytes16",    
1e860 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 20  test_stmt_int,  
1e870 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1e880 62 79 74 65 73 31 36 20 20 20 7d 2c 0a 20 20 20  bytes16   },.   
1e890 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
1e8a0 75 6d 6e 5f 74 65 78 74 31 36 22 2c 20 20 20 20  umn_text16",    
1e8b0 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36   test_stmt_utf16
1e8c0 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  , sqlite3_column
1e8d0 5f 74 65 78 74 31 36 20 20 20 20 7d 2c 0a 20 20  _text16    },.  
1e8e0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
1e8f0 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 22  lumn_decltype16"
1e900 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31  , test_stmt_utf1
1e910 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  6, sqlite3_colum
1e920 6e 5f 64 65 63 6c 74 79 70 65 31 36 7d 2c 0a 20  n_decltype16},. 
1e930 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
1e940 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 22 2c 20 20  olumn_name16",  
1e950 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66     test_stmt_utf
1e960 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  16, sqlite3_colu
1e970 6d 6e 5f 6e 61 6d 65 31 36 20 20 20 20 7d 2c 0a  mn_name16    },.
1e980 20 20 20 20 20 7b 20 22 61 64 64 5f 61 6c 69 67       { "add_alig
1e990 6e 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61  nment_test_colla
1e9a0 74 69 6f 6e 73 22 2c 20 61 64 64 5f 61 6c 69 67  tions", add_alig
1e9b0 6e 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61  nment_test_colla
1e9c0 74 69 6f 6e 73 2c 20 30 20 20 20 20 20 20 7d 2c  tions, 0      },
1e9d0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1e9e0 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54  NABLE_COLUMN_MET
1e9f0 41 44 41 54 41 0a 7b 22 73 71 6c 69 74 65 33 5f  ADATA.{"sqlite3_
1ea00 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f  column_database_
1ea10 6e 61 6d 65 31 36 22 2c 0a 20 20 74 65 73 74 5f  name16",.  test_
1ea20 73 74 6d 74 5f 75 74 66 31 36 2c 20 73 71 6c 69  stmt_utf16, sqli
1ea30 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
1ea40 61 73 65 5f 6e 61 6d 65 31 36 7d 2c 0a 7b 22 73  ase_name16},.{"s
1ea50 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61  qlite3_column_ta
1ea60 62 6c 65 5f 6e 61 6d 65 31 36 22 2c 20 74 65 73  ble_name16", tes
1ea70 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73 71  t_stmt_utf16, sq
1ea80 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
1ea90 6c 65 5f 6e 61 6d 65 31 36 7d 2c 0a 7b 22 73 71  le_name16},.{"sq
1eaa0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
1eab0 67 69 6e 5f 6e 61 6d 65 31 36 22 2c 20 74 65 73  gin_name16", tes
1eac0 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73 71  t_stmt_utf16, sq
1ead0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
1eae0 67 69 6e 5f 6e 61 6d 65 31 36 7d 2c 0a 23 65 6e  gin_name16},.#en
1eaf0 64 69 66 0a 23 65 6e 64 69 66 0a 20 20 20 20 20  dif.#endif.     
1eb00 7b 20 22 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61  { "sqlite3_globa
1eb10 6c 5f 72 65 63 6f 76 65 72 22 2c 20 20 20 20 74  l_recover",    t
1eb20 65 73 74 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76  est_global_recov
1eb30 65 72 2c 20 30 20 20 20 7d 2c 0a 20 20 20 20 20  er, 0   },.     
1eb40 7b 20 22 77 6f 72 6b 69 6e 67 5f 36 34 62 69 74  { "working_64bit
1eb50 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20 77  _int",         w
1eb60 6f 72 6b 69 6e 67 5f 36 34 62 69 74 5f 69 6e 74  orking_64bit_int
1eb70 2c 20 20 20 30 20 20 20 7d 2c 0a 0a 20 20 20 20  ,   0   },..    
1eb80 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 66 72   /* Functions fr
1eb90 6f 6d 20 6f 73 2e 68 20 2a 2f 0a 23 69 66 6e 64  om os.h */.#ifnd
1eba0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ef SQLITE_OMIT_D
1ebb0 49 53 4b 49 4f 0a 20 20 20 20 20 7b 20 22 73 71  ISKIO.     { "sq
1ebc0 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61 64 57  lite3OsOpenReadW
1ebd0 72 69 74 65 22 2c 74 65 73 74 5f 73 71 6c 69 74  rite",test_sqlit
1ebe0 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69 74  e3OsOpenReadWrit
1ebf0 65 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22  e, 0 },.     { "
1ec00 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65 22 2c  sqlite3OsClose",
1ec10 20 20 20 20 20 20 20 20 74 65 73 74 5f 73 71 6c          test_sql
1ec20 69 74 65 33 4f 73 43 6c 6f 73 65 2c 20 30 20 7d  ite3OsClose, 0 }
1ec30 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1ec40 33 4f 73 4c 6f 63 6b 22 2c 20 20 20 20 20 20 20  3OsLock",       
1ec50 20 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73    test_sqlite3Os
1ec60 4c 6f 63 6b 2c 20 30 20 7d 2c 0a 20 20 20 20 20  Lock, 0 },.     
1ec70 7b 20 22 73 71 6c 69 74 65 33 4f 73 54 65 6d 70  { "sqlite3OsTemp
1ec80 46 69 6c 65 4e 61 6d 65 22 2c 20 74 65 73 74 5f  FileName", test_
1ec90 73 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c  sqlite3OsTempFil
1eca0 65 4e 61 6d 65 2c 20 30 20 7d 2c 0a 20 20 20 0a  eName, 0 },.   .
1ecb0 20 20 20 20 20 2f 2a 20 43 75 73 74 6f 6d 20 74       /* Custom t
1ecc0 65 73 74 20 69 6e 74 65 72 66 61 63 65 73 20 2a  est interfaces *
1ecd0 2f 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  /.     { "sqlite
1ece0 33 4f 73 55 6e 6c 6f 63 6b 22 2c 20 20 20 20 20  3OsUnlock",     
1ecf0 20 20 20 20 74 65 73 74 5f 73 71 6c 69 74 65 33      test_sqlite3
1ed00 4f 73 55 6e 6c 6f 63 6b 2c 20 30 20 20 20 20 7d  OsUnlock, 0    }
1ed10 2c 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ,.#endif.#ifndef
1ed20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
1ed30 31 36 0a 20 20 20 20 20 7b 20 22 61 64 64 5f 74  16.     { "add_t
1ed40 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 20 20  est_collate",   
1ed50 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 6c 61 74       test_collat
1ed60 65 2c 20 30 20 20 20 20 20 20 20 20 20 20 20 20  e, 0            
1ed70 7d 2c 0a 20 20 20 20 20 7b 20 22 61 64 64 5f 74  },.     { "add_t
1ed80 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64  est_collate_need
1ed90 65 64 22 2c 20 74 65 73 74 5f 63 6f 6c 6c 61 74  ed", test_collat
1eda0 65 5f 6e 65 65 64 65 64 2c 20 30 20 20 20 20 20  e_needed, 0     
1edb0 7d 2c 0a 20 20 20 20 20 7b 20 22 61 64 64 5f 74  },.     { "add_t
1edc0 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 20  est_function",  
1edd0 20 20 20 20 20 74 65 73 74 5f 66 75 6e 63 74 69       test_functi
1ede0 6f 6e 2c 20 30 20 20 20 20 20 20 20 20 20 20 20  on, 0           
1edf0 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  },.#endif.#ifdef
1ee00 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
1ee10 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f  .     { "sqlite_
1ee20 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69  malloc_outstandi
1ee30 6e 67 22 2c 20 73 71 6c 69 74 65 5f 6d 61 6c 6c  ng", sqlite_mall
1ee40 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 2c 20  oc_outstanding, 
1ee50 30 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20  0},.#endif.     
1ee60 7b 20 22 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  { "sqlite3_test_
1ee70 65 72 72 73 74 72 22 2c 20 20 20 20 20 74 65 73  errstr",     tes
1ee80 74 5f 65 72 72 73 74 72 2c 20 30 20 20 20 20 20  t_errstr, 0     
1ee90 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
1eea0 7b 20 22 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f  { "tcl_variable_
1eeb0 74 79 70 65 22 2c 20 20 20 20 20 20 20 74 63 6c  type",       tcl
1eec0 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65 2c 20  _variable_type, 
1eed0 30 20 20 20 20 20 20 20 7d 2c 0a 23 69 66 6e 64  0       },.#ifnd
1eee0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
1eef0 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 20 20  HARED_CACHE.    
1ef00 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 6e 61 62   { "sqlite3_enab
1ef10 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 22  le_shared_cache"
1ef20 2c 20 74 65 73 74 5f 65 6e 61 62 6c 65 5f 73 68  , test_enable_sh
1ef30 61 72 65 64 2c 20 30 20 20 7d 2c 0a 23 65 6e 64  ared, 0  },.#end
1ef40 69 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  if.     { "sqlit
1ef50 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75  e3_libversion_nu
1ef60 6d 62 65 72 22 2c 20 74 65 73 74 5f 6c 69 62 76  mber", test_libv
1ef70 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 2c 20 30  ersion_number, 0
1ef80 20 20 7d 2c 0a 23 69 66 64 65 66 20 53 51 4c 49    },.#ifdef SQLI
1ef90 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
1efa0 5f 4d 45 54 41 44 41 54 41 0a 20 20 20 20 20 7b  _METADATA.     {
1efb0 20 22 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f   "sqlite3_table_
1efc0 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 22  column_metadata"
1efd0 2c 20 74 65 73 74 5f 74 61 62 6c 65 5f 63 6f 6c  , test_table_col
1efe0 75 6d 6e 5f 6d 65 74 61 64 61 74 61 2c 20 30 20  umn_metadata, 0 
1eff0 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7d 3b 0a   },.#endif.  };.
1f000 20 20 73 74 61 74 69 63 20 69 6e 74 20 62 69 74    static int bit
1f010 6d 61 73 6b 5f 73 69 7a 65 20 3d 20 73 69 7a 65  mask_size = size
1f020 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38 3b 0a 20  of(Bitmask)*8;. 
1f030 20 69 6e 74 20 69 3b 0a 20 20 65 78 74 65 72 6e   int i;.  extern
1f040 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 73 5f   int sqlite3_os_
1f050 74 72 61 63 65 3b 0a 20 20 65 78 74 65 72 6e 20  trace;.  extern 
1f060 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 68 65 72  int sqlite3_wher
1f070 65 5f 74 72 61 63 65 3b 0a 20 20 65 78 74 65 72  e_trace;.  exter
1f080 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 79  n int sqlite3_sy
1f090 6e 63 5f 63 6f 75 6e 74 2c 20 73 71 6c 69 74 65  nc_count, sqlite
1f0a0 33 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74  3_fullsync_count
1f0b0 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
1f0c0 71 6c 69 74 65 33 5f 6f 70 65 6e 74 65 6d 70 5f  qlite3_opentemp_
1f0d0 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20  count;.  extern 
1f0e0 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 55  int sqlite3_memU
1f0f0 73 65 64 3b 0a 20 20 65 78 74 65 72 6e 20 63 68  sed;.  extern ch
1f100 61 72 20 2a 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  ar *sqlite3_mall
1f110 6f 63 5f 69 64 3b 0a 20 20 65 78 74 65 72 6e 20  oc_id;.  extern 
1f120 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 4d  int sqlite3_memM
1f130 61 78 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  ax;.  extern int
1f140 20 73 71 6c 69 74 65 33 5f 6c 69 6b 65 5f 63 6f   sqlite3_like_co
1f150 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  unt;.  extern in
1f160 74 20 73 71 6c 69 74 65 33 5f 74 73 64 5f 63 6f  t sqlite3_tsd_co
1f170 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  unt;.  extern in
1f180 74 20 73 71 6c 69 74 65 33 5f 78 66 65 72 6f 70  t sqlite3_xferop
1f190 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72  t_count;.  exter
1f1a0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 70 61  n int sqlite3_pa
1f1b0 67 65 72 5f 72 65 61 64 64 62 5f 63 6f 75 6e 74  ger_readdb_count
1f1c0 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
1f1d0 71 6c 69 74 65 33 5f 70 61 67 65 72 5f 77 72 69  qlite3_pager_wri
1f1e0 74 65 64 62 5f 63 6f 75 6e 74 3b 0a 20 20 65 78  tedb_count;.  ex
1f1f0 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
1f200 5f 70 61 67 65 72 5f 77 72 69 74 65 6a 5f 63 6f  _pager_writej_co
1f210 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  unt;.  extern in
1f220 74 20 73 71 6c 69 74 65 33 5f 70 61 67 65 72 5f  t sqlite3_pager_
1f230 70 67 66 72 65 65 5f 63 6f 75 6e 74 3b 0a 23 69  pgfree_count;.#i
1f240 66 20 4f 53 5f 55 4e 49 58 20 26 26 20 64 65 66  f OS_UNIX && def
1f250 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
1f260 29 20 26 26 20 64 65 66 69 6e 65 64 28 54 48 52  ) && defined(THR
1f270 45 41 44 53 41 46 45 29 20 26 26 20 54 48 52 45  EADSAFE) && THRE
1f280 41 44 53 41 46 45 0a 20 20 65 78 74 65 72 6e 20  ADSAFE.  extern 
1f290 69 6e 74 20 74 68 72 65 61 64 73 4f 76 65 72 72  int threadsOverr
1f2a0 69 64 65 45 61 63 68 4f 74 68 65 72 73 4c 6f 63  ideEachOthersLoc
1f2b0 6b 73 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 4f  ks;.#endif.#if O
1f2c0 53 5f 57 49 4e 0a 20 20 65 78 74 65 72 6e 20 69  S_WIN.  extern i
1f2d0 6e 74 20 73 71 6c 69 74 65 33 5f 6f 73 5f 74 79  nt sqlite3_os_ty
1f2e0 70 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  pe;.#endif.#ifde
1f2f0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1f300 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
1f310 74 65 33 5f 76 64 62 65 5f 61 64 64 6f 70 5f 74  te3_vdbe_addop_t
1f320 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66  race;.#endif.#if
1f330 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1f340 20 20 65 78 74 65 72 6e 20 63 68 61 72 20 73 71    extern char sq
1f350 6c 69 74 65 33 5f 71 75 65 72 79 5f 70 6c 61 6e  lite3_query_plan
1f360 5b 5d 3b 0a 20 20 73 74 61 74 69 63 20 63 68 61  [];.  static cha
1f370 72 20 2a 71 75 65 72 79 5f 70 6c 61 6e 20 3d 20  r *query_plan = 
1f380 73 71 6c 69 74 65 33 5f 71 75 65 72 79 5f 70 6c  sqlite3_query_pl
1f390 61 6e 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 66 6f  an;.#endif..  fo
1f3a0 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28  r(i=0; i<sizeof(
1f3b0 61 43 6d 64 29 2f 73 69 7a 65 6f 66 28 61 43 6d  aCmd)/sizeof(aCm
1f3c0 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20  d[0]); i++){.   
1f3d0 20 54 63 6c 5f 43 72 65 61 74 65 43 6f 6d 6d 61   Tcl_CreateComma
1f3e0 6e 64 28 69 6e 74 65 72 70 2c 20 61 43 6d 64 5b  nd(interp, aCmd[
1f3f0 69 5d 2e 7a 4e 61 6d 65 2c 20 61 43 6d 64 5b 69  i].zName, aCmd[i
1f400 5d 2e 78 50 72 6f 63 2c 20 30 2c 20 30 29 3b 0a  ].xProc, 0, 0);.
1f410 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69    }.  for(i=0; i
1f420 3c 73 69 7a 65 6f 66 28 61 4f 62 6a 43 6d 64 29  <sizeof(aObjCmd)
1f430 2f 73 69 7a 65 6f 66 28 61 4f 62 6a 43 6d 64 5b  /sizeof(aObjCmd[
1f440 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54  0]); i++){.    T
1f450 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d  cl_CreateObjComm
1f460 61 6e 64 28 69 6e 74 65 72 70 2c 20 61 4f 62 6a  and(interp, aObj
1f470 43 6d 64 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 0a 20  Cmd[i].zName, . 
1f480 20 20 20 20 20 20 20 61 4f 62 6a 43 6d 64 5b 69         aObjCmd[i
1f490 5d 2e 78 50 72 6f 63 2c 20 61 4f 62 6a 43 6d 64  ].xProc, aObjCmd
1f4a0 5b 69 5d 2e 63 6c 69 65 6e 74 44 61 74 61 2c 20  [i].clientData, 
1f4b0 30 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 4c 69  0);.  }.  Tcl_Li
1f4c0 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
1f4d0 71 6c 69 74 65 5f 73 65 61 72 63 68 5f 63 6f 75  qlite_search_cou
1f4e0 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61  nt", .      (cha
1f4f0 72 2a 29 26 73 71 6c 69 74 65 33 5f 73 65 61 72  r*)&sqlite3_sear
1f500 63 68 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49  ch_count, TCL_LI
1f510 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c  NK_INT);.  Tcl_L
1f520 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
1f530 73 71 6c 69 74 65 5f 73 6f 72 74 5f 63 6f 75 6e  sqlite_sort_coun
1f540 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72  t", .      (char
1f550 2a 29 26 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  *)&sqlite3_sort_
1f560 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
1f570 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
1f580 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
1f590 69 74 65 5f 6c 69 6b 65 5f 63 6f 75 6e 74 22 2c  ite_like_count",
1f5a0 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26   .      (char*)&
1f5b0 73 71 6c 69 74 65 33 5f 6c 69 6b 65 5f 63 6f 75  sqlite3_like_cou
1f5c0 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  nt, TCL_LINK_INT
1f5d0 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
1f5e0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1f5f0 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
1f600 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a  ", .      (char*
1f610 29 26 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  )&sqlite3_interr
1f620 75 70 74 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c  upt_count, TCL_L
1f630 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
1f640 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
1f650 22 73 71 6c 69 74 65 5f 6f 70 65 6e 5f 66 69 6c  "sqlite_open_fil
1f660 65 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20  e_count", .     
1f670 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
1f680 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74  _open_file_count
1f690 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
1f6a0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1f6b0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 63  nterp, "sqlite_c
1f6c0 75 72 72 65 6e 74 5f 74 69 6d 65 22 2c 20 0a 20  urrent_time", . 
1f6d0 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
1f6e0 69 74 65 33 5f 63 75 72 72 65 6e 74 5f 74 69 6d  ite3_current_tim
1f6f0 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  e, TCL_LINK_INT)
1f700 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
1f710 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1f720 6f 73 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 20  os_trace",.     
1f730 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
1f740 5f 6f 73 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c  _os_trace, TCL_L
1f750 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
1f760 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
1f770 22 73 71 6c 69 74 65 33 5f 74 73 64 5f 63 6f 75  "sqlite3_tsd_cou
1f780 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  nt",.      (char
1f790 2a 29 26 73 71 6c 69 74 65 33 5f 74 73 64 5f 63  *)&sqlite3_tsd_c
1f7a0 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  ount, TCL_LINK_I
1f7b0 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
1f7c0 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1f7d0 74 65 33 5f 78 66 65 72 6f 70 74 5f 63 6f 75 6e  te3_xferopt_coun
1f7e0 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  t",.      (char*
1f7f0 29 26 73 71 6c 69 74 65 33 5f 78 66 65 72 6f 70  )&sqlite3_xferop
1f800 74 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e  t_count, TCL_LIN
1f810 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69  K_INT);.  Tcl_Li
1f820 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
1f830 71 6c 69 74 65 33 5f 70 61 67 65 72 5f 72 65 61  qlite3_pager_rea
1f840 64 64 62 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20  ddb_count",.    
1f850 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
1f860 33 5f 70 61 67 65 72 5f 72 65 61 64 64 62 5f 63  3_pager_readdb_c
1f870 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  ount, TCL_LINK_I
1f880 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
1f890 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1f8a0 74 65 33 5f 70 61 67 65 72 5f 77 72 69 74 65 64  te3_pager_writed
1f8b0 62 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20  b_count",.      
1f8c0 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
1f8d0 70 61 67 65 72 5f 77 72 69 74 65 64 62 5f 63 6f  pager_writedb_co
1f8e0 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  unt, TCL_LINK_IN
1f8f0 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  T);.  Tcl_LinkVa
1f900 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
1f910 65 33 5f 70 61 67 65 72 5f 77 72 69 74 65 6a 5f  e3_pager_writej_
1f920 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63  count",.      (c
1f930 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 70 61  har*)&sqlite3_pa
1f940 67 65 72 5f 77 72 69 74 65 6a 5f 63 6f 75 6e 74  ger_writej_count
1f950 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
1f960 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1f970 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33 5f  nterp, "sqlite3_
1f980 70 61 67 65 72 5f 70 67 66 72 65 65 5f 63 6f 75  pager_pgfree_cou
1f990 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  nt",.      (char
1f9a0 2a 29 26 73 71 6c 69 74 65 33 5f 70 61 67 65 72  *)&sqlite3_pager
1f9b0 5f 70 67 66 72 65 65 5f 63 6f 75 6e 74 2c 20 54  _pgfree_count, T
1f9c0 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 69  CL_LINK_INT);.#i
1f9d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1f9e0 54 5f 55 54 46 31 36 0a 20 20 54 63 6c 5f 4c 69  T_UTF16.  Tcl_Li
1f9f0 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 75  nkVar(interp, "u
1fa00 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e 67 5f  naligned_string_
1fa10 63 6f 75 6e 74 65 72 22 2c 0a 20 20 20 20 20 20  counter",.      
1fa20 28 63 68 61 72 2a 29 26 75 6e 61 6c 69 67 6e 65  (char*)&unaligne
1fa30 64 5f 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72  d_string_counter
1fa40 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
1fa50 0a 23 65 6e 64 69 66 0a 23 69 66 20 4f 53 5f 55  .#endif.#if OS_U
1fa60 4e 49 58 20 26 26 20 64 65 66 69 6e 65 64 28 53  NIX && defined(S
1fa70 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20 64  QLITE_TEST) && d
1fa80 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46  efined(THREADSAF
1fa90 45 29 20 26 26 20 54 48 52 45 41 44 53 41 46 45  E) && THREADSAFE
1faa0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1fab0 6e 74 65 72 70 2c 20 22 74 68 72 65 61 64 73 4f  nterp, "threadsO
1fac0 76 65 72 72 69 64 65 45 61 63 68 4f 74 68 65 72  verrideEachOther
1fad0 73 4c 6f 63 6b 73 22 2c 0a 20 20 20 20 20 20 28  sLocks",.      (
1fae0 63 68 61 72 2a 29 26 74 68 72 65 61 64 73 4f 76  char*)&threadsOv
1faf0 65 72 72 69 64 65 45 61 63 68 4f 74 68 65 72 73  errideEachOthers
1fb00 4c 6f 63 6b 73 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  Locks, TCL_LINK_
1fb10 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  INT);.#endif.#if
1fb20 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1fb30 5f 55 54 46 31 36 0a 20 20 54 63 6c 5f 4c 69 6e  _UTF16.  Tcl_Lin
1fb40 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1fb50 6c 69 74 65 5f 6c 61 73 74 5f 6e 65 65 64 65 64  lite_last_needed
1fb60 5f 63 6f 6c 6c 61 74 69 6f 6e 22 2c 0a 20 20 20  _collation",.   
1fb70 20 20 20 28 63 68 61 72 2a 29 26 70 7a 4e 65 65     (char*)&pzNee
1fb80 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 2c 20 54 43  dedCollation, TC
1fb90 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 7c 54 43  L_LINK_STRING|TC
1fba0 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59  L_LINK_READ_ONLY
1fbb0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
1fbc0 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
1fbd0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1fbe0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d  nterp, "sqlite_m
1fbf0 61 6c 6c 6f 63 5f 69 64 22 2c 0a 20 20 20 20 20  alloc_id",.     
1fc00 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
1fc10 5f 6d 61 6c 6c 6f 63 5f 69 64 2c 20 54 43 4c 5f  _malloc_id, TCL_
1fc20 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a 23 65  LINK_STRING);.#e
1fc30 6e 64 69 66 0a 23 69 66 20 4f 53 5f 57 49 4e 0a  ndif.#if OS_WIN.
1fc40 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
1fc50 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 73  terp, "sqlite_os
1fc60 5f 74 79 70 65 22 2c 0a 20 20 20 20 20 20 28 63  _type",.      (c
1fc70 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 73  har*)&sqlite3_os
1fc80 5f 74 79 70 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  _type, TCL_LINK_
1fc90 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  INT);.#endif.#if
1fca0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1fcb0 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
1fcc0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 71 75  terp, "sqlite_qu
1fcd0 65 72 79 5f 70 6c 61 6e 22 2c 0a 20 20 20 20 20  ery_plan",.     
1fce0 20 28 63 68 61 72 2a 29 26 71 75 65 72 79 5f 70   (char*)&query_p
1fcf0 6c 61 6e 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54  lan, TCL_LINK_ST
1fd00 52 49 4e 47 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45  RING|TCL_LINK_RE
1fd10 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AD_ONLY);.#endif
1fd20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1fd30 45 42 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  EBUG.  Tcl_LinkV
1fd40 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1fd50 74 65 5f 61 64 64 6f 70 5f 74 72 61 63 65 22 2c  te_addop_trace",
1fd60 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1fd70 71 6c 69 74 65 33 5f 76 64 62 65 5f 61 64 64 6f  qlite3_vdbe_addo
1fd80 70 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e  p_trace, TCL_LIN
1fd90 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69  K_INT);.  Tcl_Li
1fda0 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
1fdb0 71 6c 69 74 65 5f 77 68 65 72 65 5f 74 72 61 63  qlite_where_trac
1fdc0 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  e",.      (char*
1fdd0 29 26 73 71 6c 69 74 65 33 5f 77 68 65 72 65 5f  )&sqlite3_where_
1fde0 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  trace, TCL_LINK_
1fdf0 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  INT);.#endif.#if
1fe00 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
1fe10 42 55 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  BUG.  Tcl_LinkVa
1fe20 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
1fe30 65 5f 6d 65 6d 75 73 65 64 22 2c 0a 20 20 20 20  e_memused",.    
1fe40 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
1fe50 33 5f 6d 65 6d 55 73 65 64 2c 20 54 43 4c 5f 4c  3_memUsed, TCL_L
1fe60 49 4e 4b 5f 49 4e 54 20 7c 20 54 43 4c 5f 4c 49  INK_INT | TCL_LI
1fe70 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 20  NK_READ_ONLY);. 
1fe80 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1fe90 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d 65 6d  erp, "sqlite_mem
1fea0 6d 61 78 22 2c 0a 20 20 20 20 20 20 28 63 68 61  max",.      (cha
1feb0 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d 65 6d 4d  r*)&sqlite3_memM
1fec0 61 78 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  ax, TCL_LINK_INT
1fed0 20 7c 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44   | TCL_LINK_READ
1fee0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23  _ONLY);.#endif.#
1fef0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1ff00 49 54 5f 44 49 53 4b 49 4f 0a 20 20 54 63 6c 5f  IT_DISKIO.  Tcl_
1ff10 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
1ff20 22 73 71 6c 69 74 65 5f 6f 70 65 6e 74 65 6d 70  "sqlite_opentemp
1ff30 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28  _count",.      (
1ff40 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f  char*)&sqlite3_o
1ff50 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 2c 20 54  pentemp_count, T
1ff60 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65  CL_LINK_INT);.#e
1ff70 6e 64 69 66 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  ndif.  Tcl_LinkV
1ff80 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1ff90 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76  te_static_bind_v
1ffa0 61 6c 75 65 22 2c 0a 20 20 20 20 20 20 28 63 68  alue",.      (ch
1ffb0 61 72 2a 29 26 73 71 6c 69 74 65 5f 73 74 61 74  ar*)&sqlite_stat
1ffc0 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 2c 20 54  ic_bind_value, T
1ffd0 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b  CL_LINK_STRING);
1ffe0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1fff0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 73  nterp, "sqlite_s
20000 74 61 74 69 63 5f 62 69 6e 64 5f 6e 62 79 74 65  tatic_bind_nbyte
20010 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
20020 26 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62  &sqlite_static_b
20030 69 6e 64 5f 6e 62 79 74 65 2c 20 54 43 4c 5f 4c  ind_nbyte, TCL_L
20040 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
20050 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
20060 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 64 69 72  "sqlite_temp_dir
20070 65 63 74 6f 72 79 22 2c 0a 20 20 20 20 20 20 28  ectory",.      (
20080 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 74  char*)&sqlite3_t
20090 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 2c 20 54  emp_directory, T
200a0 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b  CL_LINK_STRING);
200b0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
200c0 6e 74 65 72 70 2c 20 22 62 69 74 6d 61 73 6b 5f  nterp, "bitmask_
200d0 73 69 7a 65 22 2c 0a 20 20 20 20 20 20 28 63 68  size",.      (ch
200e0 61 72 2a 29 26 62 69 74 6d 61 73 6b 5f 73 69 7a  ar*)&bitmask_siz
200f0 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 7c  e, TCL_LINK_INT|
20100 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e  TCL_LINK_READ_ON
20110 4c 59 29 3b 0a 23 69 66 20 4f 53 5f 55 4e 49 58  LY);.#if OS_UNIX
20120 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
20130 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 73  nterp, "sqlite_s
20140 79 6e 63 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20  ync_count",.    
20150 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
20160 33 5f 73 79 6e 63 5f 63 6f 75 6e 74 2c 20 54 43  3_sync_count, TC
20170 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54  L_LINK_INT);.  T
20180 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
20190 70 2c 20 22 73 71 6c 69 74 65 5f 66 75 6c 6c 73  p, "sqlite_fulls
201a0 79 6e 63 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20  ync_count",.    
201b0 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
201c0 33 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74  3_fullsync_count
201d0 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
201e0 0a 23 65 6e 64 69 66 20 2f 2a 20 4f 53 5f 55 4e  .#endif /* OS_UN
201f0 49 58 20 2a 2f 0a 20 20 73 65 74 5f 6f 70 74 69  IX */.  set_opti
20200 6f 6e 73 28 69 6e 74 65 72 70 29 3b 0a 0a 20 20  ons(interp);..  
20210 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
20220 44 45 42 55 47 0a 20 20 20 20 65 78 74 65 72 6e  DEBUG.    extern
20230 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 68 61   int sqlite3_sha
20240 72 65 64 5f 63 61 63 68 65 5f 72 65 70 6f 72 74  red_cache_report
20250 28 76 6f 69 64 20 2a 2c 20 54 63 6c 5f 49 6e 74  (void *, Tcl_Int
20260 65 72 70 20 2a 2c 0a 20 20 20 20 20 20 20 20 20  erp *,.         
20270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20280 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
20290 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 5b 5d  Tcl_Obj *CONST[]
202a0 29 3b 0a 20 20 20 20 54 63 6c 5f 43 72 65 61 74  );.    Tcl_Creat
202b0 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65  eObjCommand(inte
202c0 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 68 61 72  rp, "sqlite_shar
202d0 65 64 5f 63 61 63 68 65 5f 72 65 70 6f 72 74 22  ed_cache_report"
202e0 2c 20 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  , .        sqlit
202f0 65 33 5f 73 68 61 72 65 64 5f 63 61 63 68 65 5f  e3_shared_cache_
20300 72 65 70 6f 72 74 2c 20 30 2c 20 30 29 3b 0a 23  report, 0, 0);.#
20310 65 6e 64 69 66 0a 20 20 7d 0a 20 20 72 65 74 75  endif.  }.  retu
20320 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a           rn TCL_OK;.}.