/ Hex Artifact Content
Login

Artifact 3a7810d1ff8829268bd52a91c4f29d66f693e431:


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 38 20 32 30 30 37 2f 30 34 2f 31   1.238 2007/04/1
0240: 39 20 31 31 3a 30 39 3a 30 32 20 64 61 6e 69 65  9 11:09:02 danie
0250: 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 2a 2f 0a  lk1977 Exp $.*/.
0260: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
0270: 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  Int.h".#include 
0280: 22 74 63 6c 2e 68 22 0a 23 69 6e 63 6c 75 64 65  "tcl.h".#include
0290: 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65   "os.h".#include
02a0: 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63   <stdlib.h>.#inc
02b0: 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a  lude <string.h>.
02c0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  ./*.** This is a
02d0: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 66 69 72   copy of the fir
02e0: 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 53  st part of the S
02f0: 71 6c 69 74 65 44 62 20 73 74 72 75 63 74 75 72  qliteDb structur
0300: 65 20 69 6e 20 0a 2a 2a 20 74 63 6c 73 71 6c 69  e in .** tclsqli
0310: 74 65 2e 63 2e 20 20 57 65 20 6e 65 65 64 20 69  te.c.  We need i
0320: 74 20 68 65 72 65 20 73 6f 20 74 68 61 74 20 74  t here so that t
0330: 68 65 20 67 65 74 5f 73 71 6c 69 74 65 5f 70 6f  he get_sqlite_po
0340: 69 6e 74 65 72 20 72 6f 75 74 69 6e 65 0a 2a 2a  inter routine.**
0350: 20 63 61 6e 20 65 78 74 72 61 63 74 20 74 68 65   can extract the
0360: 20 73 71 6c 69 74 65 33 2a 20 70 6f 69 6e 74 65   sqlite3* pointe
0370: 72 20 66 72 6f 6d 20 61 6e 20 65 78 69 73 74 69  r from an existi
0380: 6e 67 20 54 63 6c 20 53 51 4c 69 74 65 0a 2a 2a  ng Tcl SQLite.**
0390: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a   connection..*/.
03a0: 73 74 72 75 63 74 20 53 71 6c 69 74 65 44 62 20  struct SqliteDb 
03b0: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
03c0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 54 43 4c  .};../*.** A TCL
03d0: 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 72 65   command that re
03e0: 74 75 72 6e 73 20 74 68 65 20 61 64 64 72 65 73  turns the addres
03f0: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 2a  s of the sqlite*
0400: 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 66 6f 72 20   pointer.** for 
0410: 61 6e 20 73 71 6c 69 74 65 20 63 6f 6e 6e 65 63  an sqlite connec
0420: 74 69 6f 6e 20 69 6e 73 74 61 6e 63 65 2e 20 20  tion instance.  
0430: 42 61 64 20 74 68 69 6e 67 73 20 68 61 70 70 65  Bad things happe
0440: 6e 20 69 66 20 74 68 65 0a 2a 2a 20 69 6e 70 75  n if the.** inpu
0450: 74 20 69 73 20 6e 6f 74 20 61 6e 20 73 71 6c 69  t is not an sqli
0460: 74 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a  te connection..*
0470: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74  /.static int get
0480: 5f 73 71 6c 69 74 65 5f 70 6f 69 6e 74 65 72 28  _sqlite_pointer(
0490: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
04a0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
04b0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
04c0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
04d0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
04e0: 29 7b 0a 20 20 73 74 72 75 63 74 20 53 71 6c 69  ){.  struct Sqli
04f0: 74 65 44 62 20 2a 70 3b 0a 20 20 54 63 6c 5f 43  teDb *p;.  Tcl_C
0500: 6d 64 49 6e 66 6f 20 63 6d 64 49 6e 66 6f 3b 0a  mdInfo cmdInfo;.
0510: 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d    char zBuf[100]
0520: 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ;.  if( objc!=2 
0530: 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
0540: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
0550: 31 2c 20 6f 62 6a 76 2c 20 22 53 51 4c 49 54 45  1, objv, "SQLITE
0560: 2d 43 4f 4e 4e 45 43 54 49 4f 4e 22 29 3b 0a 20  -CONNECTION");. 
0570: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
0580: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 21  ROR;.  }.  if( !
0590: 54 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64 49 6e  Tcl_GetCommandIn
05a0: 66 6f 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  fo(interp, Tcl_G
05b0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
05c0: 29 2c 20 26 63 6d 64 49 6e 66 6f 29 20 29 7b 0a  ), &cmdInfo) ){.
05d0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
05e0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 63 6f  sult(interp, "co
05f0: 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f 75 6e 64 3a  mmand not found:
0600: 20 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 54   ",.           T
0610: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
0620: 76 5b 31 5d 29 2c 20 28 63 68 61 72 2a 29 30 29  v[1]), (char*)0)
0630: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
0640: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 70 20  _ERROR;.  }.  p 
0650: 3d 20 28 73 74 72 75 63 74 20 53 71 6c 69 74 65  = (struct Sqlite
0660: 44 62 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62 6a 43  Db*)cmdInfo.objC
0670: 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 73 70 72  lientData;.  spr
0680: 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 70 22 2c  intf(zBuf, "%p",
0690: 20 70 2d 3e 64 62 29 3b 0a 20 20 69 66 28 20 73   p->db);.  if( s
06a0: 74 72 6e 63 6d 70 28 7a 42 75 66 2c 22 30 78 22  trncmp(zBuf,"0x"
06b0: 2c 32 29 20 29 7b 0a 20 20 20 20 73 70 72 69 6e  ,2) ){.    sprin
06c0: 74 66 28 7a 42 75 66 2c 20 22 30 78 25 70 22 2c  tf(zBuf, "0x%p",
06d0: 20 70 2d 3e 64 62 29 3b 0a 20 20 7d 0a 20 20 54   p->db);.  }.  T
06e0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
06f0: 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29  interp, zBuf, 0)
0700: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
0710: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6f  K;.}../*.** Deco
0720: 64 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  de a pointer to 
0730: 61 6e 20 73 71 6c 69 74 65 33 20 6f 62 6a 65 63  an sqlite3 objec
0740: 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  t..*/.static int
0750: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 54 63   getDbPointer(Tc
0760: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
0770: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41  , const char *zA
0780: 2c 20 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62  , sqlite3 **ppDb
0790: 29 7b 0a 20 20 73 74 72 75 63 74 20 53 71 6c 69  ){.  struct Sqli
07a0: 74 65 44 62 20 2a 70 3b 0a 20 20 54 63 6c 5f 43  teDb *p;.  Tcl_C
07b0: 6d 64 49 6e 66 6f 20 63 6d 64 49 6e 66 6f 3b 0a  mdInfo cmdInfo;.
07c0: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 43 6f 6d    if( Tcl_GetCom
07d0: 6d 61 6e 64 49 6e 66 6f 28 69 6e 74 65 72 70 2c  mandInfo(interp,
07e0: 20 7a 41 2c 20 26 63 6d 64 49 6e 66 6f 29 20 29   zA, &cmdInfo) )
07f0: 7b 0a 20 20 20 20 70 20 3d 20 28 73 74 72 75 63  {.    p = (struc
0800: 74 20 53 71 6c 69 74 65 44 62 2a 29 63 6d 64 49  t SqliteDb*)cmdI
0810: 6e 66 6f 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74  nfo.objClientDat
0820: 61 3b 0a 20 20 20 20 2a 70 70 44 62 20 3d 20 70  a;.    *ppDb = p
0830: 2d 3e 64 62 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ->db;.  }else{. 
0840: 20 20 20 2a 70 70 44 62 20 3d 20 28 73 71 6c 69     *ppDb = (sqli
0850: 74 65 33 2a 29 73 71 6c 69 74 65 33 54 65 78 74  te3*)sqlite3Text
0860: 54 6f 50 74 72 28 7a 41 29 3b 0a 20 20 7d 0a 20  ToPtr(zA);.  }. 
0870: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
0880: 7d 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  }...const char *
0890: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 6f 72  sqlite3TestError
08a0: 4e 61 6d 65 28 69 6e 74 20 72 63 29 7b 0a 20 20  Name(int rc){.  
08b0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
08c0: 65 20 3d 20 30 3b 0a 20 20 73 77 69 74 63 68 28  e = 0;.  switch(
08d0: 20 72 63 20 26 20 30 78 66 66 20 29 7b 0a 20 20   rc & 0xff ){.  
08e0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4f 4b    case SQLITE_OK
08f0: 3a 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  :         zName 
0900: 3d 20 22 53 51 4c 49 54 45 5f 4f 4b 22 3b 20 20  = "SQLITE_OK";  
0910: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
0920: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 45     case SQLITE_E
0930: 52 52 4f 52 3a 20 20 20 20 20 20 7a 4e 61 6d 65  RROR:      zName
0940: 20 3d 20 22 53 51 4c 49 54 45 5f 45 52 52 4f 52   = "SQLITE_ERROR
0950: 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ";       break;.
0960: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
0970: 50 45 52 4d 3a 20 20 20 20 20 20 20 7a 4e 61 6d  PERM:       zNam
0980: 65 20 3d 20 22 53 51 4c 49 54 45 5f 50 45 52 4d  e = "SQLITE_PERM
0990: 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ";        break;
09a0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
09b0: 5f 41 42 4f 52 54 3a 20 20 20 20 20 20 7a 4e 61  _ABORT:      zNa
09c0: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 41 42 4f  me = "SQLITE_ABO
09d0: 52 54 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  RT";       break
09e0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
09f0: 45 5f 42 55 53 59 3a 20 20 20 20 20 20 20 7a 4e  E_BUSY:       zN
0a00: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 42 55  ame = "SQLITE_BU
0a10: 53 59 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  SY";        brea
0a20: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
0a30: 54 45 5f 4c 4f 43 4b 45 44 3a 20 20 20 20 20 7a  TE_LOCKED:     z
0a40: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4c  Name = "SQLITE_L
0a50: 4f 43 4b 45 44 22 3b 20 20 20 20 20 20 62 72 65  OCKED";      bre
0a60: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
0a70: 49 54 45 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20 20  ITE_NOMEM:      
0a80: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
0a90: 4e 4f 4d 45 4d 22 3b 20 20 20 20 20 20 20 62 72  NOMEM";       br
0aa0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0ab0: 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3a 20 20  LITE_READONLY:  
0ac0: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0ad0: 5f 52 45 41 44 4f 4e 4c 59 22 3b 20 20 20 20 62  _READONLY";    b
0ae0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
0af0: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3a  QLITE_INTERRUPT:
0b00: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
0b10: 45 5f 49 4e 54 45 52 52 55 50 54 22 3b 20 20 20  E_INTERRUPT";   
0b20: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0b30: 53 51 4c 49 54 45 5f 49 4f 45 52 52 3a 20 20 20  SQLITE_IOERR:   
0b40: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0b50: 54 45 5f 49 4f 45 52 52 22 3b 20 20 20 20 20 20  TE_IOERR";      
0b60: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
0b70: 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 3a   SQLITE_CORRUPT:
0b80: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
0b90: 49 54 45 5f 43 4f 52 52 55 50 54 22 3b 20 20 20  ITE_CORRUPT";   
0ba0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0bb0: 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3a 20 20  e SQLITE_FULL:  
0bc0: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
0bd0: 4c 49 54 45 5f 46 55 4c 4c 22 3b 20 20 20 20 20  LITE_FULL";     
0be0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
0bf0: 73 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  se SQLITE_CANTOP
0c00: 45 4e 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53  EN:   zName = "S
0c10: 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 22 3b  QLITE_CANTOPEN";
0c20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
0c30: 61 73 65 20 53 51 4c 49 54 45 5f 50 52 4f 54 4f  ase SQLITE_PROTO
0c40: 43 4f 4c 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22  COL:   zName = "
0c50: 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 22  SQLITE_PROTOCOL"
0c60: 3b 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ;    break;.    
0c70: 63 61 73 65 20 53 51 4c 49 54 45 5f 45 4d 50 54  case SQLITE_EMPT
0c80: 59 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  Y:      zName = 
0c90: 22 53 51 4c 49 54 45 5f 45 4d 50 54 59 22 3b 20  "SQLITE_EMPTY"; 
0ca0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
0cb0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 53 43 48   case SQLITE_SCH
0cc0: 45 4d 41 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d  EMA:     zName =
0cd0: 20 22 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 22   "SQLITE_SCHEMA"
0ce0: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
0cf0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f    case SQLITE_CO
0d00: 4e 53 54 52 41 49 4e 54 3a 20 7a 4e 61 6d 65 20  NSTRAINT: zName 
0d10: 3d 20 22 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  = "SQLITE_CONSTR
0d20: 41 49 4e 54 22 3b 20 20 62 72 65 61 6b 3b 0a 20  AINT";  break;. 
0d30: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4d     case SQLITE_M
0d40: 49 53 4d 41 54 43 48 3a 20 20 20 7a 4e 61 6d 65  ISMATCH:   zName
0d50: 20 3d 20 22 53 51 4c 49 54 45 5f 4d 49 53 4d 41   = "SQLITE_MISMA
0d60: 54 43 48 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a  TCH";    break;.
0d70: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
0d80: 4d 49 53 55 53 45 3a 20 20 20 20 20 7a 4e 61 6d  MISUSE:     zNam
0d90: 65 20 3d 20 22 53 51 4c 49 54 45 5f 4d 49 53 55  e = "SQLITE_MISU
0da0: 53 45 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  SE";      break;
0db0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0dc0: 5f 4e 4f 4c 46 53 3a 20 20 20 20 20 20 7a 4e 61  _NOLFS:      zNa
0dd0: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 4c  me = "SQLITE_NOL
0de0: 46 53 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  FS";       break
0df0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0e00: 45 5f 41 55 54 48 3a 20 20 20 20 20 20 20 7a 4e  E_AUTH:       zN
0e10: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 41 55  ame = "SQLITE_AU
0e20: 54 48 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  TH";        brea
0e30: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
0e40: 54 45 5f 46 4f 52 4d 41 54 3a 20 20 20 20 20 7a  TE_FORMAT:     z
0e50: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 46  Name = "SQLITE_F
0e60: 4f 52 4d 41 54 22 3b 20 20 20 20 20 20 62 72 65  ORMAT";      bre
0e70: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
0e80: 49 54 45 5f 52 41 4e 47 45 3a 20 20 20 20 20 20  ITE_RANGE:      
0e90: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
0ea0: 52 41 4e 47 45 22 3b 20 20 20 20 20 20 20 62 72  RANGE";       br
0eb0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0ec0: 4c 49 54 45 5f 52 4f 57 3a 20 20 20 20 20 20 20  LITE_ROW:       
0ed0: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0ee0: 5f 52 4f 57 22 3b 20 20 20 20 20 20 20 20 20 62  _ROW";         b
0ef0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
0f00: 51 4c 49 54 45 5f 44 4f 4e 45 3a 20 20 20 20 20  QLITE_DONE:     
0f10: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
0f20: 45 5f 44 4f 4e 45 22 3b 20 20 20 20 20 20 20 20  E_DONE";        
0f30: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0f40: 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42 3a 20 20  SQLITE_NOTADB:  
0f50: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0f60: 54 45 5f 4e 4f 54 41 44 42 22 3b 20 20 20 20 20  TE_NOTADB";     
0f70: 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
0f80: 75 6c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  ult:            
0f90: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
0fa0: 49 54 45 5f 55 6e 6b 6e 6f 77 6e 22 3b 20 20 20  ITE_Unknown";   
0fb0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72    break;.  }.  r
0fc0: 65 74 75 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23  eturn zName;.}.#
0fd0: 64 65 66 69 6e 65 20 74 31 45 72 72 6f 72 4e 61  define t1ErrorNa
0fe0: 6d 65 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  me sqlite3TestEr
0ff0: 72 6f 72 4e 61 6d 65 0a 0a 2f 2a 0a 2a 2a 20 43  rorName../*.** C
1000: 6f 6e 76 65 72 74 20 61 6e 20 73 71 6c 69 74 65  onvert an sqlite
1010: 33 5f 73 74 6d 74 2a 20 69 6e 74 6f 20 61 6e 20  3_stmt* into an 
1020: 73 71 6c 69 74 65 33 2a 2e 20 20 54 68 69 73 20  sqlite3*.  This 
1030: 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 0a 2a  depends on the.*
1040: 2a 20 66 61 63 74 20 74 68 61 74 20 74 68 65 20  * fact that the 
1050: 73 71 6c 69 74 65 33 2a 20 69 73 20 74 68 65 20  sqlite3* is the 
1060: 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74  first field in t
1070: 68 65 20 56 64 62 65 20 73 74 72 75 63 74 75 72  he Vdbe structur
1080: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  e..*/.#define St
1090: 6d 74 54 6f 44 62 28 58 29 20 20 20 73 71 6c 69  mtToDb(X)   sqli
10a0: 74 65 33 5f 64 62 5f 68 61 6e 64 6c 65 28 58 29  te3_db_handle(X)
10b0: 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 61 20  ../*.** Check a 
10c0: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 74 6f 20  return value to 
10d0: 6d 61 6b 65 20 73 75 72 65 20 69 74 20 61 67 72  make sure it agr
10e0: 65 65 73 20 77 69 74 68 20 74 68 65 20 72 65 73  ees with the res
10f0: 75 6c 74 73 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c  ults.** from sql
1100: 69 74 65 33 5f 65 72 72 63 6f 64 65 2e 0a 2a 2f  ite3_errcode..*/
1110: 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 73 74  .int sqlite3Test
1120: 45 72 72 43 6f 64 65 28 54 63 6c 5f 49 6e 74 65  ErrCode(Tcl_Inte
1130: 72 70 20 2a 69 6e 74 65 72 70 2c 20 73 71 6c 69  rp *interp, sqli
1140: 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 72 63 29  te3 *db, int rc)
1150: 7b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  {.  if( rc!=SQLI
1160: 54 45 5f 4d 49 53 55 53 45 20 26 26 20 72 63 21  TE_MISUSE && rc!
1170: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 73 71  =SQLITE_OK && sq
1180: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62  lite3_errcode(db
1190: 29 21 3d 72 63 20 29 7b 0a 20 20 20 20 63 68 61  )!=rc ){.    cha
11a0: 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20  r zBuf[200];.   
11b0: 20 69 6e 74 20 72 32 20 3d 20 73 71 6c 69 74 65   int r2 = sqlite
11c0: 33 5f 65 72 72 63 6f 64 65 28 64 62 29 3b 0a 20  3_errcode(db);. 
11d0: 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c     sprintf(zBuf,
11e0: 20 22 65 72 72 6f 72 20 63 6f 64 65 20 25 73 20   "error code %s 
11f0: 28 25 64 29 20 64 6f 65 73 20 6e 6f 74 20 6d 61  (%d) does not ma
1200: 74 63 68 20 73 71 6c 69 74 65 33 5f 65 72 72 63  tch sqlite3_errc
1210: 6f 64 65 20 25 73 20 28 25 64 29 22 2c 0a 20 20  ode %s (%d)",.  
1220: 20 20 20 20 20 74 31 45 72 72 6f 72 4e 61 6d 65       t1ErrorName
1230: 28 72 63 29 2c 20 72 63 2c 20 74 31 45 72 72 6f  (rc), rc, t1Erro
1240: 72 4e 61 6d 65 28 72 32 29 2c 20 72 32 29 3b 0a  rName(r2), r2);.
1250: 20 20 20 20 54 63 6c 5f 52 65 73 65 74 52 65 73      Tcl_ResetRes
1260: 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 20 20 20  ult(interp);.   
1270: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
1280: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
1290: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31  0);.    return 1
12a0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  ;.  }.  return 0
12b0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6f 64  ;.}../*.** Decod
12c0: 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  e a pointer to a
12d0: 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 6f  n sqlite3_stmt o
12e0: 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  bject..*/.static
12f0: 20 69 6e 74 20 67 65 74 53 74 6d 74 50 6f 69 6e   int getStmtPoin
1300: 74 65 72 28 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ter(.  Tcl_Inter
1310: 70 20 2a 69 6e 74 65 72 70 2c 20 0a 20 20 63 6f  p *interp, .  co
1320: 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 2c 20  nst char *zArg, 
1330: 20 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   .  sqlite3_stmt
1340: 20 2a 2a 70 70 53 74 6d 74 0a 29 7b 0a 20 20 2a   **ppStmt.){.  *
1350: 70 70 53 74 6d 74 20 3d 20 28 73 71 6c 69 74 65  ppStmt = (sqlite
1360: 33 5f 73 74 6d 74 2a 29 73 71 6c 69 74 65 33 54  3_stmt*)sqlite3T
1370: 65 78 74 54 6f 50 74 72 28 7a 41 72 67 29 3b 0a  extToPtr(zArg);.
1380: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
1390: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6f 64 65  .}../*.** Decode
13a0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
13b0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 6f 62   sqlite3_stmt ob
13c0: 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ject..*/.static 
13d0: 69 6e 74 20 67 65 74 46 69 6c 65 50 6f 69 6e 74  int getFilePoint
13e0: 65 72 28 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  er(.  Tcl_Interp
13f0: 20 2a 69 6e 74 65 72 70 2c 20 0a 20 20 63 6f 6e   *interp, .  con
1400: 73 74 20 63 68 61 72 20 2a 7a 41 72 67 2c 20 20  st char *zArg,  
1410: 0a 20 20 4f 73 46 69 6c 65 20 2a 2a 70 70 46 69  .  OsFile **ppFi
1420: 6c 65 0a 29 7b 0a 20 20 2a 70 70 46 69 6c 65 20  le.){.  *ppFile 
1430: 3d 20 28 4f 73 46 69 6c 65 2a 29 73 71 6c 69 74  = (OsFile*)sqlit
1440: 65 33 54 65 78 74 54 6f 50 74 72 28 7a 41 72 67  e3TextToPtr(zArg
1450: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
1460: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e  OK;.}../*.** Gen
1470: 65 72 61 74 65 20 61 20 74 65 78 74 20 72 65 70  erate a text rep
1480: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  resentation of a
1490: 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20 63 61   pointer that ca
14a0: 6e 20 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 0a  n be understood.
14b0: 2a 2a 20 62 79 20 74 68 65 20 67 65 74 44 62 50  ** by the getDbP
14c0: 6f 69 6e 74 65 72 20 61 6e 64 20 67 65 74 56 6d  ointer and getVm
14d0: 50 6f 69 6e 74 65 72 20 72 6f 75 74 69 6e 65 73  Pointer routines
14e0: 20 61 62 6f 76 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   above..**.** Th
14f0: 65 20 70 72 6f 62 6c 65 6d 20 69 73 2c 20 6f 6e  e problem is, on
1500: 20 73 6f 6d 65 20 6d 61 63 68 69 6e 65 73 20 28   some machines (
1510: 53 6f 6c 61 72 69 73 29 20 69 66 20 79 6f 75 20  Solaris) if you 
1520: 64 6f 20 61 20 70 72 69 6e 74 66 20 77 69 74 68  do a printf with
1530: 0a 2a 2a 20 22 25 70 22 20 79 6f 75 20 63 61 6e  .** "%p" you can
1540: 6e 6f 74 20 74 75 72 6e 20 61 72 6f 75 6e 64 20  not turn around 
1550: 61 6e 64 20 64 6f 20 61 20 73 63 61 6e 66 20 77  and do a scanf w
1560: 69 74 68 20 74 68 65 20 73 61 6d 65 20 22 25 70  ith the same "%p
1570: 22 20 61 6e 64 0a 2a 2a 20 67 65 74 20 79 6f 75  " and.** get you
1580: 72 20 70 6f 69 6e 74 65 72 20 62 61 63 6b 2e 20  r pointer back. 
1590: 20 59 6f 75 20 68 61 76 65 20 74 6f 20 70 72 65   You have to pre
15a0: 70 65 6e 64 20 61 20 22 30 78 22 20 62 65 66 6f  pend a "0x" befo
15b0: 72 65 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 77 6f  re it will.** wo
15c0: 72 6b 2e 20 20 4f 72 20 61 74 20 6c 65 61 73 74  rk.  Or at least
15d0: 20 74 68 61 74 20 69 73 20 77 68 61 74 20 69 73   that is what is
15e0: 20 72 65 70 6f 72 74 65 64 20 74 6f 20 6d 65 20   reported to me 
15f0: 28 64 72 68 29 2e 20 20 42 75 74 20 74 68 69 73  (drh).  But this
1600: 0a 2a 2a 20 62 65 68 61 76 69 6f 72 20 76 61 72  .** behavior var
1610: 69 65 73 20 66 72 6f 6d 20 6d 61 63 68 69 6e 65  ies from machine
1620: 20 74 6f 20 6d 61 63 68 69 6e 65 2e 20 20 54 68   to machine.  Th
1630: 65 20 73 6f 6c 75 74 69 6f 6e 20 75 73 65 64 20  e solution used 
1640: 68 65 72 20 69 73 0a 2a 2a 20 74 6f 20 74 65 73  her is.** to tes
1650: 74 20 74 68 65 20 73 74 72 69 6e 67 20 72 69 67  t the string rig
1660: 68 74 20 61 66 74 65 72 20 69 74 20 69 73 20 67  ht after it is g
1670: 65 6e 65 72 61 74 65 64 20 74 6f 20 73 65 65 20  enerated to see 
1680: 69 66 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20  if it can be.** 
1690: 75 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 73 63  understood by sc
16a0: 61 6e 66 2c 20 61 6e 64 20 69 66 20 6e 6f 74 2c  anf, and if not,
16b0: 20 74 72 79 20 70 72 65 70 65 6e 64 69 6e 67 20   try prepending 
16c0: 61 6e 20 22 30 78 22 20 74 6f 20 73 65 65 20 69  an "0x" to see i
16d0: 66 0a 2a 2a 20 74 68 61 74 20 68 65 6c 70 73 2e  f.** that helps.
16e0: 20 20 49 66 20 6e 6f 74 68 69 6e 67 20 77 6f 72    If nothing wor
16f0: 6b 73 2c 20 61 20 66 61 74 61 6c 20 65 72 72 6f  ks, a fatal erro
1700: 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 0a  r is generated..
1710: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  */.int sqlite3Te
1720: 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72  stMakePointerStr
1730: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Tcl_Interp *int
1740: 65 72 70 2c 20 63 68 61 72 20 2a 7a 50 74 72 2c  erp, char *zPtr,
1750: 20 76 6f 69 64 20 2a 70 29 7b 0a 20 20 73 71 6c   void *p){.  sql
1760: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
1770: 30 2c 20 7a 50 74 72 2c 20 22 25 70 22 2c 20 70  0, zPtr, "%p", p
1780: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
1790: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  OK;.}../*.** The
17a0: 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e   callback routin
17b0: 65 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 65 78  e for sqlite3_ex
17c0: 65 63 5f 70 72 69 6e 74 66 28 29 2e 0a 2a 2f 0a  ec_printf()..*/.
17d0: 73 74 61 74 69 63 20 69 6e 74 20 65 78 65 63 5f  static int exec_
17e0: 70 72 69 6e 74 66 5f 63 62 28 76 6f 69 64 20 2a  printf_cb(void *
17f0: 70 41 72 67 2c 20 69 6e 74 20 61 72 67 63 2c 20  pArg, int argc, 
1800: 63 68 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61  char **argv, cha
1810: 72 20 2a 2a 6e 61 6d 65 29 7b 0a 20 20 54 63 6c  r **name){.  Tcl
1820: 5f 44 53 74 72 69 6e 67 20 2a 73 74 72 20 3d 20  _DString *str = 
1830: 28 54 63 6c 5f 44 53 74 72 69 6e 67 2a 29 70 41  (Tcl_DString*)pA
1840: 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20  rg;.  int i;..  
1850: 69 66 28 20 54 63 6c 5f 44 53 74 72 69 6e 67 4c  if( Tcl_DStringL
1860: 65 6e 67 74 68 28 73 74 72 29 3d 3d 30 20 29 7b  ength(str)==0 ){
1870: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
1880: 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  argc; i++){.    
1890: 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 70    Tcl_DStringApp
18a0: 65 6e 64 45 6c 65 6d 65 6e 74 28 73 74 72 2c 20  endElement(str, 
18b0: 6e 61 6d 65 5b 69 5d 20 3f 20 6e 61 6d 65 5b 69  name[i] ? name[i
18c0: 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20 20  ] : "NULL");.   
18d0: 20 7d 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30   }.  }.  for(i=0
18e0: 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a  ; i<argc; i++){.
18f0: 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 41      Tcl_DStringA
1900: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 73 74 72  ppendElement(str
1910: 2c 20 61 72 67 76 5b 69 5d 20 3f 20 61 72 67 76  , argv[i] ? argv
1920: 5b 69 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20  [i] : "NULL");. 
1930: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d   }.  return 0;.}
1940: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 49 2f 4f 20  ../*.** The I/O 
1950: 74 72 61 63 69 6e 67 20 63 61 6c 6c 62 61 63 6b  tracing callback
1960: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 46 49 4c 45  ..*/.static FILE
1970: 20 2a 69 6f 74 72 61 63 65 5f 66 69 6c 65 20 3d   *iotrace_file =
1980: 20 30 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 20   0;.static void 
1990: 69 6f 5f 74 72 61 63 65 5f 63 61 6c 6c 62 61 63  io_trace_callbac
19a0: 6b 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46  k(const char *zF
19b0: 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a 20 20 76  ormat, ...){.  v
19c0: 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20 76 61 5f  a_list ap;.  va_
19d0: 73 74 61 72 74 28 61 70 2c 20 7a 46 6f 72 6d 61  start(ap, zForma
19e0: 74 29 3b 0a 20 20 76 66 70 72 69 6e 74 66 28 69  t);.  vfprintf(i
19f0: 6f 74 72 61 63 65 5f 66 69 6c 65 2c 20 7a 46 6f  otrace_file, zFo
1a00: 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20 76 61 5f  rmat, ap);.  va_
1a10: 65 6e 64 28 61 70 29 3b 0a 20 20 66 66 6c 75 73  end(ap);.  fflus
1a20: 68 28 69 6f 74 72 61 63 65 5f 66 69 6c 65 29 3b  h(iotrace_file);
1a30: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
1a40: 20 20 69 6f 5f 74 72 61 63 65 20 46 49 4c 45 4e    io_trace FILEN
1a50: 41 4d 45 0a 2a 2a 0a 2a 2a 20 54 75 72 6e 20 49  AME.**.** Turn I
1a60: 2f 4f 20 74 72 61 63 69 6e 67 20 6f 6e 20 6f 72  /O tracing on or
1a70: 20 6f 66 66 2e 20 20 49 66 20 46 49 4c 45 4e 41   off.  If FILENA
1a80: 4d 45 20 69 73 20 6e 6f 74 20 61 6e 20 65 6d 70  ME is not an emp
1a90: 74 79 20 73 74 72 69 6e 67 2c 0a 2a 2a 20 49 2f  ty string,.** I/
1aa0: 4f 20 74 72 61 63 69 6e 67 20 62 65 67 69 6e 73  O tracing begins
1ab0: 20 67 6f 69 6e 67 20 69 6e 74 6f 20 46 49 4c 45   going into FILE
1ac0: 4e 41 4d 45 2e 20 49 66 20 46 49 4c 45 4e 41 4d  NAME. If FILENAM
1ad0: 45 20 69 73 20 61 6e 20 65 6d 70 74 79 0a 2a 2a  E is an empty.**
1ae0: 20 73 74 72 69 6e 67 2c 20 49 2f 4f 20 74 72 61   string, I/O tra
1af0: 63 69 6e 67 20 69 73 20 74 75 72 6e 65 64 20 6f  cing is turned o
1b00: 66 66 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ff..*/.static in
1b10: 74 20 74 65 73 74 5f 69 6f 5f 74 72 61 63 65 28  t test_io_trace(
1b20: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
1b30: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
1b40: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
1b50: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
1b60: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
1b70: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
1b80: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
1b90: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1ba0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
1bb0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
1bc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
1bd0: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
1be0: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20  ent */.){.  if( 
1bf0: 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  argc!=2 ){.    T
1c00: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
1c10: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
1c20: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
1c30: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
1c40: 20 20 20 20 20 20 20 20 20 22 20 46 49 4c 45 4e           " FILEN
1c50: 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  AME\"", 0);.    
1c60: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1c70: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 6f 74 72  ;.  }.  if( iotr
1c80: 61 63 65 5f 66 69 6c 65 20 29 7b 0a 20 20 20 20  ace_file ){.    
1c90: 69 66 28 20 69 6f 74 72 61 63 65 5f 66 69 6c 65  if( iotrace_file
1ca0: 21 3d 73 74 64 6f 75 74 20 26 26 20 69 6f 74 72  !=stdout && iotr
1cb0: 61 63 65 5f 66 69 6c 65 21 3d 73 74 64 65 72 72  ace_file!=stderr
1cc0: 20 29 7b 0a 20 20 20 20 20 20 66 63 6c 6f 73 65   ){.      fclose
1cd0: 28 69 6f 74 72 61 63 65 5f 66 69 6c 65 29 3b 0a  (iotrace_file);.
1ce0: 20 20 20 20 7d 0a 20 20 20 20 69 6f 74 72 61 63      }.    iotrac
1cf0: 65 5f 66 69 6c 65 20 3d 20 30 3b 0a 20 20 20 20  e_file = 0;.    
1d00: 73 71 6c 69 74 65 33 5f 69 6f 5f 74 72 61 63 65  sqlite3_io_trace
1d10: 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
1d20: 61 72 67 76 5b 31 5d 5b 30 5d 20 29 7b 0a 20 20  argv[1][0] ){.  
1d30: 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67    if( strcmp(arg
1d40: 76 5b 31 5d 2c 22 73 74 64 6f 75 74 22 29 3d 3d  v[1],"stdout")==
1d50: 30 20 29 7b 0a 20 20 20 20 20 20 69 6f 74 72 61  0 ){.      iotra
1d60: 63 65 5f 66 69 6c 65 20 3d 20 73 74 64 6f 75 74  ce_file = stdout
1d70: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
1d80: 73 74 72 63 6d 70 28 61 72 67 76 5b 31 5d 2c 22  strcmp(argv[1],"
1d90: 73 74 64 65 72 72 22 29 3d 3d 30 20 29 7b 0a 20  stderr")==0 ){. 
1da0: 20 20 20 20 20 69 6f 74 72 61 63 65 5f 66 69 6c       iotrace_fil
1db0: 65 20 3d 20 73 74 64 65 72 72 3b 0a 20 20 20 20  e = stderr;.    
1dc0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6f 74  }else{.      iot
1dd0: 72 61 63 65 5f 66 69 6c 65 20 3d 20 66 6f 70 65  race_file = fope
1de0: 6e 28 61 72 67 76 5b 31 5d 2c 20 22 77 22 29 3b  n(argv[1], "w");
1df0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
1e00: 65 33 5f 69 6f 5f 74 72 61 63 65 20 3d 20 69 6f  e3_io_trace = io
1e10: 5f 74 72 61 63 65 5f 63 61 6c 6c 62 61 63 6b 3b  _trace_callback;
1e20: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51  .  }.  return SQ
1e30: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a  LITE_OK;.}.../*.
1e40: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
1e50: 65 33 5f 65 78 65 63 5f 70 72 69 6e 74 66 20 20  e3_exec_printf  
1e60: 44 42 20 20 46 4f 52 4d 41 54 20 20 53 54 52 49  DB  FORMAT  STRI
1e70: 4e 47 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20  NG.**.** Invoke 
1e80: 74 68 65 20 73 71 6c 69 74 65 33 5f 65 78 65 63  the sqlite3_exec
1e90: 5f 70 72 69 6e 74 66 28 29 20 69 6e 74 65 72 66  _printf() interf
1ea0: 61 63 65 20 75 73 69 6e 67 20 74 68 65 20 6f 70  ace using the op
1eb0: 65 6e 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 44  en database.** D
1ec0: 42 2e 20 20 54 68 65 20 53 51 4c 20 69 73 20 74  B.  The SQL is t
1ed0: 68 65 20 73 74 72 69 6e 67 20 46 4f 52 4d 41 54  he string FORMAT
1ee0: 2e 20 20 54 68 65 20 66 6f 72 6d 61 74 20 73 74  .  The format st
1ef0: 72 69 6e 67 20 73 68 6f 75 6c 64 20 63 6f 6e 74  ring should cont
1f00: 61 69 6e 0a 2a 2a 20 6f 6e 65 20 25 73 20 6f 72  ain.** one %s or
1f10: 20 25 71 2e 20 20 53 54 52 49 4e 47 20 69 73 20   %q.  STRING is 
1f20: 74 68 65 20 76 61 6c 75 65 20 69 6e 73 65 72 74  the value insert
1f30: 65 64 20 69 6e 74 6f 20 25 73 20 6f 72 20 25 71  ed into %s or %q
1f40: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1f50: 74 65 73 74 5f 65 78 65 63 5f 70 72 69 6e 74 66  test_exec_printf
1f60: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
1f70: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
1f80: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
1f90: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
1fa0: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
1fb0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
1fc0: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
1fd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1fe0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
1ff0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
2000: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2010: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
2020: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  ment */.){.  sql
2030: 69 74 65 33 20 2a 64 62 3b 0a 20 20 54 63 6c 5f  ite3 *db;.  Tcl_
2040: 44 53 74 72 69 6e 67 20 73 74 72 3b 0a 20 20 69  DString str;.  i
2050: 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a  nt rc;.  char *z
2060: 45 72 72 20 3d 20 30 3b 0a 20 20 63 68 61 72 20  Err = 0;.  char 
2070: 2a 7a 53 71 6c 3b 0a 20 20 63 68 61 72 20 7a 42  *zSql;.  char zB
2080: 75 66 5b 33 30 5d 3b 0a 20 20 69 66 28 20 61 72  uf[30];.  if( ar
2090: 67 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=4 ){.    Tcl
20a0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
20b0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
20c0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
20d0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20  "", argv[0], .  
20e0: 20 20 20 20 20 22 20 44 42 20 46 4f 52 4d 41 54       " DB FORMAT
20f0: 20 53 54 52 49 4e 47 22 2c 20 30 29 3b 0a 20 20   STRING", 0);.  
2100: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
2110: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
2120: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
2130: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
2140: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
2150: 52 4f 52 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69  ROR;.  Tcl_DStri
2160: 6e 67 49 6e 69 74 28 26 73 74 72 29 3b 0a 20 20  ngInit(&str);.  
2170: 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d  zSql = sqlite3_m
2180: 70 72 69 6e 74 66 28 61 72 67 76 5b 32 5d 2c 20  printf(argv[2], 
2190: 61 72 67 76 5b 33 5d 29 3b 0a 20 20 72 63 20 3d  argv[3]);.  rc =
21a0: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
21b0: 2c 20 7a 53 71 6c 2c 20 65 78 65 63 5f 70 72 69  , zSql, exec_pri
21c0: 6e 74 66 5f 63 62 2c 20 26 73 74 72 2c 20 26 7a  ntf_cb, &str, &z
21d0: 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Err);.  sqlite3_
21e0: 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 73 70  free(zSql);.  sp
21f0: 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22  rintf(zBuf, "%d"
2200: 2c 20 72 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70  , rc);.  Tcl_App
2210: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
2220: 70 2c 20 7a 42 75 66 29 3b 0a 20 20 54 63 6c 5f  p, zBuf);.  Tcl_
2230: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
2240: 74 65 72 70 2c 20 72 63 3d 3d 53 51 4c 49 54 45  terp, rc==SQLITE
2250: 5f 4f 4b 20 3f 20 54 63 6c 5f 44 53 74 72 69 6e  _OK ? Tcl_DStrin
2260: 67 56 61 6c 75 65 28 26 73 74 72 29 20 3a 20 7a  gValue(&str) : z
2270: 45 72 72 29 3b 0a 20 20 54 63 6c 5f 44 53 74 72  Err);.  Tcl_DStr
2280: 69 6e 67 46 72 65 65 28 26 73 74 72 29 3b 0a 20  ingFree(&str);. 
2290: 20 69 66 28 20 7a 45 72 72 20 29 20 73 71 6c 69   if( zErr ) sqli
22a0: 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a  te3_free(zErr);.
22b0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
22c0: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
22d0: 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
22e0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
22f0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
2300: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
2310: 71 6c 69 74 65 33 5f 65 78 65 63 20 20 44 42 20  qlite3_exec  DB 
2320: 20 53 51 4c 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b   SQL.**.** Invok
2330: 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65 78  e the sqlite3_ex
2340: 65 63 20 69 6e 74 65 72 66 61 63 65 20 75 73 69  ec interface usi
2350: 6e 67 20 74 68 65 20 6f 70 65 6e 20 64 61 74 61  ng the open data
2360: 62 61 73 65 20 44 42 0a 2a 2f 0a 73 74 61 74 69  base DB.*/.stati
2370: 63 20 69 6e 74 20 74 65 73 74 5f 65 78 65 63 28  c int test_exec(
2380: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
2390: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
23a0: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
23b0: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
23c0: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
23d0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
23e0: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
23f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
2400: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
2410: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
2420: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
2430: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
2440: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  ent */.){.  sqli
2450: 74 65 33 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44  te3 *db;.  Tcl_D
2460: 53 74 72 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e  String str;.  in
2470: 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45  t rc;.  char *zE
2480: 72 72 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a  rr = 0;.  char z
2490: 42 75 66 5b 33 30 5d 3b 0a 20 20 69 66 28 20 61  Buf[30];.  if( a
24a0: 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  rgc!=3 ){.    Tc
24b0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
24c0: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
24d0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
24e0: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20  \"", argv[0], . 
24f0: 20 20 20 20 20 20 22 20 44 42 20 53 51 4c 22 2c        " DB SQL",
2500: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
2510: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
2520: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
2530: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
2540: 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
2550: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63   TCL_ERROR;.  Tc
2560: 6c 5f 44 53 74 72 69 6e 67 49 6e 69 74 28 26 73  l_DStringInit(&s
2570: 74 72 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  tr);.  rc = sqli
2580: 74 65 33 5f 65 78 65 63 28 64 62 2c 20 61 72 67  te3_exec(db, arg
2590: 76 5b 32 5d 2c 20 65 78 65 63 5f 70 72 69 6e 74  v[2], exec_print
25a0: 66 5f 63 62 2c 20 26 73 74 72 2c 20 26 7a 45 72  f_cb, &str, &zEr
25b0: 72 29 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42  r);.  sprintf(zB
25c0: 75 66 2c 20 22 25 64 22 2c 20 72 63 29 3b 0a 20  uf, "%d", rc);. 
25d0: 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65   Tcl_AppendEleme
25e0: 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29  nt(interp, zBuf)
25f0: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c  ;.  Tcl_AppendEl
2600: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 63  ement(interp, rc
2610: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 3f 20 54 63  ==SQLITE_OK ? Tc
2620: 6c 5f 44 53 74 72 69 6e 67 56 61 6c 75 65 28 26  l_DStringValue(&
2630: 73 74 72 29 20 3a 20 7a 45 72 72 29 3b 0a 20 20  str) : zErr);.  
2640: 54 63 6c 5f 44 53 74 72 69 6e 67 46 72 65 65 28  Tcl_DStringFree(
2650: 26 73 74 72 29 3b 0a 20 20 69 66 28 20 7a 45 72  &str);.  if( zEr
2660: 72 20 29 20 73 71 6c 69 74 65 33 5f 66 72 65 65  r ) sqlite3_free
2670: 28 7a 45 72 72 29 3b 0a 20 20 69 66 28 20 73 71  (zErr);.  if( sq
2680: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
2690: 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
26a0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
26b0: 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  ROR;.  return TC
26c0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
26d0: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 65  sage:  sqlite3_e
26e0: 78 65 63 5f 6e 72 20 20 44 42 20 20 53 51 4c 0a  xec_nr  DB  SQL.
26f0: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  **.** Invoke the
2700: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 20 69 6e   sqlite3_exec in
2710: 74 65 72 66 61 63 65 20 75 73 69 6e 67 20 74 68  terface using th
2720: 65 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20  e open database 
2730: 44 42 2e 20 20 44 69 73 63 61 72 64 0a 2a 2a 20  DB.  Discard.** 
2740: 61 6c 6c 20 72 65 73 75 6c 74 73 0a 2a 2f 0a 73  all results.*/.s
2750: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65  tatic int test_e
2760: 78 65 63 5f 6e 72 28 0a 20 20 76 6f 69 64 20 2a  xec_nr(.  void *
2770: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
2780: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
2790: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
27a0: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
27b0: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
27c0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
27d0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
27e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
27f0: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
2800: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
2810: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
2820: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
2830: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
2840: 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72    int rc;.  char
2850: 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 69 66   *zErr = 0;.  if
2860: 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20  ( argc!=3 ){.   
2870: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
2880: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
2890: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
28a0: 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
28b0: 20 0a 20 20 20 20 20 20 20 22 20 44 42 20 53 51   .       " DB SQ
28c0: 4c 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  L", 0);.    retu
28d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
28e0: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
28f0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
2900: 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
2910: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
2920: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
2930: 65 63 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20  ec(db, argv[2], 
2940: 30 2c 20 30 2c 20 26 7a 45 72 72 29 3b 0a 20 20  0, 0, &zErr);.  
2950: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
2960: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
2970: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
2980: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74  TCL_ERROR;.  ret
2990: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
29a0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
29b0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f 74  ite3_mprintf_z_t
29c0: 65 73 74 20 20 53 45 50 41 52 41 54 4f 52 20 20  est  SEPARATOR  
29d0: 41 52 47 30 20 20 41 52 47 31 20 2e 2e 2e 0a 2a  ARG0  ARG1 ....*
29e0: 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 25 7a  *.** Test the %z
29f0: 20 66 6f 72 6d 61 74 20 6f 66 20 73 71 6c 69 74   format of sqlit
2a00: 65 4d 50 72 69 6e 74 66 28 29 2e 20 20 55 73 65  eMPrintf().  Use
2a10: 20 6d 75 6c 74 69 70 6c 65 20 6d 70 72 69 6e 74   multiple mprint
2a20: 66 28 29 20 63 61 6c 6c 73 20 74 6f 20 0a 2a 2a  f() calls to .**
2a30: 20 63 6f 6e 63 61 74 65 6e 61 74 65 20 61 72 67   concatenate arg
2a40: 30 20 74 68 72 6f 75 67 68 20 61 72 67 6e 20 75  0 through argn u
2a50: 73 69 6e 67 20 73 65 70 61 72 61 74 6f 72 20 61  sing separator a
2a60: 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 2e  s the separator.
2a70: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72  .** Return the r
2a80: 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  esult..*/.static
2a90: 20 69 6e 74 20 74 65 73 74 5f 6d 70 72 69 6e 74   int test_mprint
2aa0: 66 5f 7a 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  f_z(.  void *Not
2ab0: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
2ac0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
2ad0: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
2ae0: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
2af0: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
2b00: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
2b10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
2b20: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
2b30: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
2b40: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
2b50: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
2b60: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
2b70: 63 68 61 72 20 2a 7a 52 65 73 75 6c 74 20 3d 20  char *zResult = 
2b80: 30 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 66  0;.  int i;..  f
2b90: 6f 72 28 69 3d 32 3b 20 69 3c 61 72 67 63 3b 20  or(i=2; i<argc; 
2ba0: 69 2b 2b 29 7b 0a 20 20 20 20 7a 52 65 73 75 6c  i++){.    zResul
2bb0: 74 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  t = sqlite3MPrin
2bc0: 74 66 28 22 25 7a 25 73 25 73 22 2c 20 7a 52 65  tf("%z%s%s", zRe
2bd0: 73 75 6c 74 2c 20 61 72 67 76 5b 31 5d 2c 20 61  sult, argv[1], a
2be0: 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 54  rgv[i]);.  }.  T
2bf0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
2c00: 69 6e 74 65 72 70 2c 20 7a 52 65 73 75 6c 74 2c  interp, zResult,
2c10: 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65   0);.  sqliteFre
2c20: 65 28 7a 52 65 73 75 6c 74 29 3b 0a 20 20 72 65  e(zResult);.  re
2c30: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
2c40: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
2c50: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 6e 5f  lite3_mprintf_n_
2c60: 74 65 73 74 20 20 53 54 52 49 4e 47 0a 2a 2a 0a  test  STRING.**.
2c70: 2a 2a 20 54 65 73 74 20 74 68 65 20 25 6e 20 66  ** Test the %n f
2c80: 6f 72 6d 61 74 20 6f 66 20 73 71 6c 69 74 65 4d  ormat of sqliteM
2c90: 50 72 69 6e 74 66 28 29 2e 20 20 52 65 74 75 72  Printf().  Retur
2ca0: 6e 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  n the length of 
2cb0: 74 68 65 0a 2a 2a 20 69 6e 70 75 74 20 73 74 72  the.** input str
2cc0: 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ing..*/.static i
2cd0: 6e 74 20 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f  nt test_mprintf_
2ce0: 6e 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  n(.  void *NotUs
2cf0: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
2d00: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
2d10: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
2d20: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
2d30: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
2d40: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
2d50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2d60: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
2d70: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
2d80: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
2d90: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
2da0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68  ument */.){.  ch
2db0: 61 72 20 2a 7a 53 74 72 3b 0a 20 20 69 6e 74 20  ar *zStr;.  int 
2dc0: 6e 20 3d 20 30 3b 0a 20 20 7a 53 74 72 20 3d 20  n = 0;.  zStr = 
2dd0: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 22  sqlite3MPrintf("
2de0: 25 73 25 6e 22 2c 20 61 72 67 76 5b 31 5d 2c 20  %s%n", argv[1], 
2df0: 26 6e 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65  &n);.  sqliteFre
2e00: 65 28 7a 53 74 72 29 3b 0a 20 20 54 63 6c 5f 53  e(zStr);.  Tcl_S
2e10: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
2e20: 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
2e30: 6a 28 6e 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  j(n));.  return 
2e40: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
2e50: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
2e60: 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74  _get_table_print
2e70: 66 20 20 44 42 20 20 46 4f 52 4d 41 54 20 20 53  f  DB  FORMAT  S
2e80: 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f  TRING.**.** Invo
2e90: 6b 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 67  ke the sqlite3_g
2ea0: 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 28  et_table_printf(
2eb0: 29 20 69 6e 74 65 72 66 61 63 65 20 75 73 69 6e  ) interface usin
2ec0: 67 20 74 68 65 20 6f 70 65 6e 20 64 61 74 61 62  g the open datab
2ed0: 61 73 65 0a 2a 2a 20 44 42 2e 20 20 54 68 65 20  ase.** DB.  The 
2ee0: 53 51 4c 20 69 73 20 74 68 65 20 73 74 72 69 6e  SQL is the strin
2ef0: 67 20 46 4f 52 4d 41 54 2e 20 20 54 68 65 20 66  g FORMAT.  The f
2f00: 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73 68 6f  ormat string sho
2f10: 75 6c 64 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 6f  uld contain.** o
2f20: 6e 65 20 25 73 20 6f 72 20 25 71 2e 20 20 53 54  ne %s or %q.  ST
2f30: 52 49 4e 47 20 69 73 20 74 68 65 20 76 61 6c 75  RING is the valu
2f40: 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  e inserted into 
2f50: 25 73 20 6f 72 20 25 71 2e 0a 2a 2f 0a 73 74 61  %s or %q..*/.sta
2f60: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 67 65 74  tic int test_get
2f70: 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 28 0a 20  _table_printf(. 
2f80: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
2f90: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
2fa0: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
2fb0: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
2fc0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
2fd0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
2fe0: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
2ff0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
3000: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
3010: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
3020: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
3030: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
3040: 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  t */.){.  sqlite
3050: 33 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53 74  3 *db;.  Tcl_DSt
3060: 72 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74 20  ring str;.  int 
3070: 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72  rc;.  char *zErr
3080: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 52 6f 77   = 0;.  int nRow
3090: 2c 20 6e 43 6f 6c 3b 0a 20 20 63 68 61 72 20 2a  , nCol;.  char *
30a0: 2a 61 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20  *aResult;.  int 
30b0: 69 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33  i;.  char zBuf[3
30c0: 30 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c  0];.  char *zSql
30d0: 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34 20  ;.  if( argc!=4 
30e0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
30f0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
3100: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
3110: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
3120: 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22  gv[0], .       "
3130: 20 44 42 20 46 4f 52 4d 41 54 20 53 54 52 49 4e   DB FORMAT STRIN
3140: 47 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  G", 0);.    retu
3150: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
3160: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
3170: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
3180: 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
3190: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
31a0: 20 54 63 6c 5f 44 53 74 72 69 6e 67 49 6e 69 74   Tcl_DStringInit
31b0: 28 26 73 74 72 29 3b 0a 20 20 7a 53 71 6c 20 3d  (&str);.  zSql =
31c0: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
31d0: 28 61 72 67 76 5b 32 5d 2c 61 72 67 76 5b 33 5d  (argv[2],argv[3]
31e0: 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
31f0: 33 5f 67 65 74 5f 74 61 62 6c 65 28 64 62 2c 20  3_get_table(db, 
3200: 7a 53 71 6c 2c 20 26 61 52 65 73 75 6c 74 2c 20  zSql, &aResult, 
3210: 26 6e 52 6f 77 2c 20 26 6e 43 6f 6c 2c 20 26 7a  &nRow, &nCol, &z
3220: 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Err);.  sqlite3_
3230: 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 73 70  free(zSql);.  sp
3240: 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22  rintf(zBuf, "%d"
3250: 2c 20 72 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70  , rc);.  Tcl_App
3260: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
3270: 70 2c 20 7a 42 75 66 29 3b 0a 20 20 69 66 28 20  p, zBuf);.  if( 
3280: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
3290: 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75  .    sprintf(zBu
32a0: 66 2c 20 22 25 64 22 2c 20 6e 52 6f 77 29 3b 0a  f, "%d", nRow);.
32b0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c      Tcl_AppendEl
32c0: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42  ement(interp, zB
32d0: 75 66 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66  uf);.    sprintf
32e0: 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 6e 43 6f  (zBuf, "%d", nCo
32f0: 6c 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  l);.    Tcl_Appe
3300: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
3310: 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 6f 72  , zBuf);.    for
3320: 28 69 3d 30 3b 20 69 3c 28 6e 52 6f 77 2b 31 29  (i=0; i<(nRow+1)
3330: 2a 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20  *nCol; i++){.   
3340: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65     Tcl_AppendEle
3350: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 61 52 65  ment(interp, aRe
3360: 73 75 6c 74 5b 69 5d 20 3f 20 61 52 65 73 75 6c  sult[i] ? aResul
3370: 74 5b 69 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a  t[i] : "NULL");.
3380: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
3390: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65     Tcl_AppendEle
33a0: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 45 72  ment(interp, zEr
33b0: 72 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  r);.  }.  sqlite
33c0: 33 5f 66 72 65 65 5f 74 61 62 6c 65 28 61 52 65  3_free_table(aRe
33d0: 73 75 6c 74 29 3b 0a 20 20 69 66 28 20 7a 45 72  sult);.  if( zEr
33e0: 72 20 29 20 73 71 6c 69 74 65 33 5f 66 72 65 65  r ) sqlite3_free
33f0: 28 7a 45 72 72 29 3b 0a 20 20 69 66 28 20 73 71  (zErr);.  if( sq
3400: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
3410: 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
3420: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
3430: 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  ROR;.  return TC
3440: 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  L_OK;.}.../*.** 
3450: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
3460: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
3470: 64 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  d DB.**.** Retur
3480: 6e 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 52  ns the integer R
3490: 4f 57 49 44 20 6f 66 20 74 68 65 20 6d 6f 73 74  OWID of the most
34a0: 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 2e 0a   recent insert..
34b0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
34c0: 73 74 5f 6c 61 73 74 5f 72 6f 77 69 64 28 0a 20  st_last_rowid(. 
34d0: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
34e0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
34f0: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
3500: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
3510: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
3520: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
3530: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
3540: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
3550: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
3560: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
3570: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
3580: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
3590: 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  t */.){.  sqlite
35a0: 33 20 2a 64 62 3b 0a 20 20 63 68 61 72 20 7a 42  3 *db;.  char zB
35b0: 75 66 5b 33 30 5d 3b 0a 0a 20 20 69 66 28 20 61  uf[30];..  if( a
35c0: 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  rgc!=2 ){.    Tc
35d0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
35e0: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
35f0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
3600: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20  \"", argv[0], " 
3610: 44 42 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  DB\"", 0);.    r
3620: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
3630: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
3640: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
3650: 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
3660: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
3670: 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66  ;.  sprintf(zBuf
3680: 2c 20 22 25 6c 6c 64 22 2c 20 73 71 6c 69 74 65  , "%lld", sqlite
3690: 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
36a0: 77 69 64 28 64 62 29 29 3b 0a 20 20 54 63 6c 5f  wid(db));.  Tcl_
36b0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
36c0: 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20  erp, zBuf, 0);. 
36d0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
36e0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
36f0: 65 3a 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 20  e:  sqlite3_key 
3700: 44 42 20 4b 45 59 0a 2a 2a 0a 2a 2a 20 53 65 74  DB KEY.**.** Set
3710: 20 74 68 65 20 63 6f 64 65 63 20 6b 65 79 2e 0a   the codec key..
3720: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
3730: 73 74 5f 6b 65 79 28 0a 20 20 76 6f 69 64 20 2a  st_key(.  void *
3740: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
3750: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
3760: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
3770: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
3780: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
3790: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
37a0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
37b0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
37c0: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
37d0: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
37e0: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
37f0: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
3800: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
3810: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b    const char *zK
3820: 65 79 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a  ey;.  int nKey;.
3830: 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b    if( argc!=3 ){
3840: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
3850: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
3860: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
3870: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
3880: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 49  [0],.       " FI
3890: 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20  LENAME\"", 0);. 
38a0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
38b0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
38c0: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
38d0: 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62  rp, argv[1], &db
38e0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
38f0: 52 52 4f 52 3b 0a 20 20 7a 4b 65 79 20 3d 20 61  RROR;.  zKey = a
3900: 72 67 76 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20 3d  rgv[2];.  nKey =
3910: 20 73 74 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a 23   strlen(zKey);.#
3920: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53  ifdef SQLITE_HAS
3930: 5f 43 4f 44 45 43 0a 20 20 73 71 6c 69 74 65 33  _CODEC.  sqlite3
3940: 5f 6b 65 79 28 64 62 2c 20 7a 4b 65 79 2c 20 6e  _key(db, zKey, n
3950: 4b 65 79 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72  Key);.#endif.  r
3960: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
3970: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
3980: 71 6c 69 74 65 33 5f 72 65 6b 65 79 20 44 42 20  qlite3_rekey DB 
3990: 4b 45 59 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65  KEY.**.** Change
39a0: 20 74 68 65 20 63 6f 64 65 63 20 6b 65 79 2e 0a   the codec key..
39b0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
39c0: 73 74 5f 72 65 6b 65 79 28 0a 20 20 76 6f 69 64  st_rekey(.  void
39d0: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
39e0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
39f0: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
3a00: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
3a10: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
3a20: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
3a30: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
3a40: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
3a50: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
3a60: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
3a70: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
3a80: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
3a90: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
3aa0: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
3ab0: 7a 4b 65 79 3b 0a 20 20 69 6e 74 20 6e 4b 65 79  zKey;.  int nKey
3ac0: 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20  ;.  if( argc!=3 
3ad0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
3ae0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
3af0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
3b00: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
3b10: 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20  gv[0],.       " 
3b20: 46 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b  FILENAME\"", 0);
3b30: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
3b40: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
3b50: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
3b60: 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
3b70: 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
3b80: 5f 45 52 52 4f 52 3b 0a 20 20 7a 4b 65 79 20 3d  _ERROR;.  zKey =
3b90: 20 61 72 67 76 5b 32 5d 3b 0a 20 20 6e 4b 65 79   argv[2];.  nKey
3ba0: 20 3d 20 73 74 72 6c 65 6e 28 7a 4b 65 79 29 3b   = strlen(zKey);
3bb0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
3bc0: 41 53 5f 43 4f 44 45 43 0a 20 20 73 71 6c 69 74  AS_CODEC.  sqlit
3bd0: 65 33 5f 72 65 6b 65 79 28 64 62 2c 20 7a 4b 65  e3_rekey(db, zKe
3be0: 79 2c 20 6e 4b 65 79 29 3b 0a 23 65 6e 64 69 66  y, nKey);.#endif
3bf0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
3c00: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
3c10: 3a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  :  sqlite3_close
3c20: 20 44 42 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 73   DB.**.** Closes
3c30: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6f 70   the database op
3c40: 65 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  ened by sqlite3_
3c50: 6f 70 65 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  open..*/.static 
3c60: 69 6e 74 20 73 71 6c 69 74 65 5f 74 65 73 74 5f  int sqlite_test_
3c70: 63 6c 6f 73 65 28 0a 20 20 76 6f 69 64 20 2a 4e  close(.  void *N
3c80: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
3c90: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
3ca0: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
3cb0: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
3cc0: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
3cd0: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3cf0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
3d00: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
3d10: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
3d20: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
3d30: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
3d40: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
3d50: 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 61   int rc;.  if( a
3d60: 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  rgc!=2 ){.    Tc
3d70: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
3d80: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
3d90: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
3da0: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
3db0: 20 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c       " FILENAME\
3dc0: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
3dd0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
3de0: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
3df0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
3e00: 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
3e10: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
3e20: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6c   rc = sqlite3_cl
3e30: 6f 73 65 28 64 62 29 3b 0a 20 20 54 63 6c 5f 53  ose(db);.  Tcl_S
3e40: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
3e50: 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72   (char *)t1Error
3e60: 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
3e70: 41 54 49 43 29 3b 0a 20 20 72 65 74 75 72 6e 20  ATIC);.  return 
3e80: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
3e90: 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   Implementation 
3ea0: 6f 66 20 74 68 65 20 78 5f 63 6f 61 6c 65 73 63  of the x_coalesc
3eb0: 65 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  e() function..**
3ec0: 20 52 65 74 75 72 6e 20 74 68 65 20 66 69 72 73   Return the firs
3ed0: 74 20 61 72 67 75 6d 65 6e 74 20 6e 6f 6e 2d 4e  t argument non-N
3ee0: 55 4c 4c 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f  ULL argument..*/
3ef0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 31 5f  .static void t1_
3f00: 69 66 6e 75 6c 6c 46 75 6e 63 28 0a 20 20 73 71  ifnullFunc(.  sq
3f10: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
3f20: 6f 6e 74 65 78 74 2c 0a 20 20 69 6e 74 20 61 72  ontext,.  int ar
3f30: 67 63 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  gc,.  sqlite3_va
3f40: 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  lue **argv.){.  
3f50: 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30  int i;.  for(i=0
3f60: 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a  ; i<argc; i++){.
3f70: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e      if( SQLITE_N
3f80: 55 4c 4c 21 3d 73 71 6c 69 74 65 33 5f 76 61 6c  ULL!=sqlite3_val
3f90: 75 65 5f 74 79 70 65 28 61 72 67 76 5b 69 5d 29  ue_type(argv[i])
3fa0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
3fb0: 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f  3_result_text(co
3fc0: 6e 74 65 78 74 2c 20 28 63 68 61 72 2a 29 73 71  ntext, (char*)sq
3fd0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
3fe0: 28 61 72 67 76 5b 69 5d 29 2c 0a 20 20 20 20 20  (argv[i]),.     
3ff0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 61 6c       sqlite3_val
4000: 75 65 5f 62 79 74 65 73 28 61 72 67 76 5b 69 5d  ue_bytes(argv[i]
4010: 29 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  ), SQLITE_TRANSI
4020: 45 4e 54 29 3b 0a 20 20 20 20 20 20 62 72 65 61  ENT);.      brea
4030: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  k;.    }.  }.}..
4040: 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 61 72 65 20  /*.** These are 
4050: 74 65 73 74 20 66 75 6e 63 74 69 6f 6e 73 2e 20  test functions. 
4060: 20 20 20 68 65 78 38 28 29 20 69 6e 74 65 72 70     hex8() interp
4070: 72 65 74 73 20 69 74 73 20 61 72 67 75 6d 65 6e  rets its argumen
4080: 74 20 61 73 0a 2a 2a 20 55 54 46 38 20 61 6e 64  t as.** UTF8 and
4090: 20 72 65 74 75 72 6e 73 20 61 20 68 65 78 20 65   returns a hex e
40a0: 6e 63 6f 64 69 6e 67 2e 20 20 68 65 78 31 36 6c  ncoding.  hex16l
40b0: 65 28 29 20 69 6e 74 65 72 70 72 65 74 73 20 69  e() interprets i
40c0: 74 73 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20 61  ts argument.** a
40d0: 73 20 55 54 46 31 36 6c 65 20 61 6e 64 20 72 65  s UTF16le and re
40e0: 74 75 72 6e 73 20 61 20 68 65 78 20 65 6e 63 6f  turns a hex enco
40f0: 64 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ding..*/.static 
4100: 76 6f 69 64 20 68 65 78 38 46 75 6e 63 28 73 71  void hex8Func(sq
4110: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
4120: 2c 20 69 6e 74 20 61 72 67 63 2c 20 73 71 6c 69  , int argc, sqli
4130: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76  te3_value **argv
4140: 29 7b 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69 67  ){.  const unsig
4150: 6e 65 64 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  ned char *z;.  i
4160: 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 7a 42 75  nt i;.  char zBu
4170: 66 5b 32 30 30 5d 3b 0a 20 20 7a 20 3d 20 73 71  f[200];.  z = sq
4180: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
4190: 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 66 6f 72  (argv[0]);.  for
41a0: 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a  (i=0; i<sizeof(z
41b0: 42 75 66 29 2f 32 20 2d 20 32 20 26 26 20 7a 5b  Buf)/2 - 2 && z[
41c0: 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 70  i]; i++){.    sp
41d0: 72 69 6e 74 66 28 26 7a 42 75 66 5b 69 2a 32 5d  rintf(&zBuf[i*2]
41e0: 2c 20 22 25 30 32 78 22 2c 20 7a 5b 69 5d 26 30  , "%02x", z[i]&0
41f0: 78 66 66 29 3b 0a 20 20 7d 0a 20 20 7a 42 75 66  xff);.  }.  zBuf
4200: 5b 69 2a 32 5d 20 3d 20 30 3b 0a 20 20 73 71 6c  [i*2] = 0;.  sql
4210: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
4220: 28 70 2c 20 28 63 68 61 72 2a 29 7a 42 75 66 2c  (p, (char*)zBuf,
4230: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e   -1, SQLITE_TRAN
4240: 53 49 45 4e 54 29 3b 0a 7d 0a 73 74 61 74 69 63  SIENT);.}.static
4250: 20 76 6f 69 64 20 68 65 78 31 36 46 75 6e 63 28   void hex16Func(
4260: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
4270: 2a 70 2c 20 69 6e 74 20 61 72 67 63 2c 20 73 71  *p, int argc, sq
4280: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
4290: 67 76 29 7b 0a 20 20 63 6f 6e 73 74 20 75 6e 73  gv){.  const uns
42a0: 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 20  igned short int 
42b0: 2a 7a 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63  *z;.  int i;.  c
42c0: 68 61 72 20 7a 42 75 66 5b 34 30 30 5d 3b 0a 20  har zBuf[400];. 
42d0: 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c   z = sqlite3_val
42e0: 75 65 5f 74 65 78 74 31 36 28 61 72 67 76 5b 30  ue_text16(argv[0
42f0: 5d 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  ]);.  for(i=0; i
4300: 3c 73 69 7a 65 6f 66 28 7a 42 75 66 29 2f 34 20  <sizeof(zBuf)/4 
4310: 2d 20 34 20 26 26 20 7a 5b 69 5d 3b 20 69 2b 2b  - 4 && z[i]; i++
4320: 29 7b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 26  ){.    sprintf(&
4330: 7a 42 75 66 5b 69 2a 34 5d 2c 20 22 25 30 34 78  zBuf[i*4], "%04x
4340: 22 2c 20 7a 5b 69 5d 26 30 78 66 66 29 3b 0a 20  ", z[i]&0xff);. 
4350: 20 7d 0a 20 20 7a 42 75 66 5b 69 2a 34 5d 20 3d   }.  zBuf[i*4] =
4360: 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65   0;.  sqlite3_re
4370: 73 75 6c 74 5f 74 65 78 74 28 70 2c 20 28 63 68  sult_text(p, (ch
4380: 61 72 2a 29 7a 42 75 66 2c 20 2d 31 2c 20 53 51  ar*)zBuf, -1, SQ
4390: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
43a0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 74 72 75  .}../*.** A stru
43b0: 63 74 75 72 65 20 69 6e 74 6f 20 77 68 69 63 68  cture into which
43c0: 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74   to accumulate t
43d0: 65 78 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 64  ext..*/.struct d
43e0: 73 74 72 20 7b 0a 20 20 69 6e 74 20 6e 41 6c 6c  str {.  int nAll
43f0: 6f 63 3b 20 20 2f 2a 20 53 70 61 63 65 20 61 6c  oc;  /* Space al
4400: 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74  located */.  int
4410: 20 6e 55 73 65 64 3b 20 20 20 2f 2a 20 53 70 61   nUsed;   /* Spa
4420: 63 65 20 75 73 65 64 20 2a 2f 0a 20 20 63 68 61  ce used */.  cha
4430: 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 68 65  r *z;     /* The
4440: 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   space */.};../*
4450: 0a 2a 2a 20 41 70 70 65 6e 64 20 74 65 78 74 20  .** Append text 
4460: 74 6f 20 61 20 64 73 74 72 0a 2a 2f 0a 73 74 61  to a dstr.*/.sta
4470: 74 69 63 20 76 6f 69 64 20 64 73 74 72 41 70 70  tic void dstrApp
4480: 65 6e 64 28 73 74 72 75 63 74 20 64 73 74 72 20  end(struct dstr 
4490: 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  *p, const char *
44a0: 7a 2c 20 69 6e 74 20 64 69 76 69 64 65 72 29 7b  z, int divider){
44b0: 0a 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65  .  int n = strle
44c0: 6e 28 7a 29 3b 0a 20 20 69 66 28 20 70 2d 3e 6e  n(z);.  if( p->n
44d0: 55 73 65 64 20 2b 20 6e 20 2b 20 32 20 3e 20 70  Used + n + 2 > p
44e0: 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  ->nAlloc ){.    
44f0: 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 20 20  char *zNew;.    
4500: 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 70 2d 3e 6e  p->nAlloc = p->n
4510: 41 6c 6c 6f 63 2a 32 20 2b 20 6e 20 2b 20 32 30  Alloc*2 + n + 20
4520: 30 3b 0a 20 20 20 20 7a 4e 65 77 20 3d 20 73 71  0;.    zNew = sq
4530: 6c 69 74 65 52 65 61 6c 6c 6f 63 28 70 2d 3e 7a  liteRealloc(p->z
4540: 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20  , p->nAlloc);.  
4550: 20 20 69 66 28 20 7a 4e 65 77 3d 3d 30 20 29 7b    if( zNew==0 ){
4560: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 46 72 65  .      sqliteFre
4570: 65 28 70 2d 3e 7a 29 3b 0a 20 20 20 20 20 20 6d  e(p->z);.      m
4580: 65 6d 73 65 74 28 70 2c 20 30 2c 20 73 69 7a 65  emset(p, 0, size
4590: 6f 66 28 2a 70 29 29 3b 0a 20 20 20 20 20 20 72  of(*p));.      r
45a0: 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20  eturn;.    }.   
45b0: 20 70 2d 3e 7a 20 3d 20 7a 4e 65 77 3b 0a 20 20   p->z = zNew;.  
45c0: 7d 0a 20 20 69 66 28 20 64 69 76 69 64 65 72 20  }.  if( divider 
45d0: 26 26 20 70 2d 3e 6e 55 73 65 64 3e 30 20 29 7b  && p->nUsed>0 ){
45e0: 0a 20 20 20 20 70 2d 3e 7a 5b 70 2d 3e 6e 55 73  .    p->z[p->nUs
45f0: 65 64 2b 2b 5d 20 3d 20 64 69 76 69 64 65 72 3b  ed++] = divider;
4600: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70  .  }.  memcpy(&p
4610: 2d 3e 7a 5b 70 2d 3e 6e 55 73 65 64 5d 2c 20 7a  ->z[p->nUsed], z
4620: 2c 20 6e 2b 31 29 3b 0a 20 20 70 2d 3e 6e 55 73  , n+1);.  p->nUs
4630: 65 64 20 2b 3d 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a  ed += n;.}../*.*
4640: 2a 20 49 6e 76 6f 6b 65 64 20 66 6f 72 20 65 61  * Invoked for ea
4650: 63 68 20 63 61 6c 6c 62 61 63 6b 20 66 72 6f 6d  ch callback from
4660: 20 73 71 6c 69 74 65 33 45 78 65 63 46 75 6e 63   sqlite3ExecFunc
4670: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 65  .*/.static int e
4680: 78 65 63 46 75 6e 63 43 61 6c 6c 62 61 63 6b 28  xecFuncCallback(
4690: 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74  void *pData, int
46a0: 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72   argc, char **ar
46b0: 67 76 2c 20 63 68 61 72 20 2a 2a 4e 6f 74 55 73  gv, char **NotUs
46c0: 65 64 29 7b 0a 20 20 73 74 72 75 63 74 20 64 73  ed){.  struct ds
46d0: 74 72 20 2a 70 20 3d 20 28 73 74 72 75 63 74 20  tr *p = (struct 
46e0: 64 73 74 72 2a 29 70 44 61 74 61 3b 0a 20 20 69  dstr*)pData;.  i
46f0: 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  nt i;.  for(i=0;
4700: 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20   i<argc; i++){. 
4710: 20 20 20 69 66 28 20 61 72 67 76 5b 69 5d 3d 3d     if( argv[i]==
4720: 30 20 29 7b 0a 20 20 20 20 20 20 64 73 74 72 41  0 ){.      dstrA
4730: 70 70 65 6e 64 28 70 2c 20 22 4e 55 4c 4c 22 2c  ppend(p, "NULL",
4740: 20 27 20 27 29 3b 0a 20 20 20 20 7d 65 6c 73 65   ' ');.    }else
4750: 7b 0a 20 20 20 20 20 20 64 73 74 72 41 70 70 65  {.      dstrAppe
4760: 6e 64 28 70 2c 20 61 72 67 76 5b 69 5d 2c 20 27  nd(p, argv[i], '
4770: 20 27 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   ');.    }.  }. 
4780: 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
4790: 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69  .** Implementati
47a0: 6f 6e 20 6f 66 20 74 68 65 20 78 5f 73 71 6c 69  on of the x_sqli
47b0: 74 65 5f 65 78 65 63 28 29 20 66 75 6e 63 74 69  te_exec() functi
47c0: 6f 6e 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69  on.  This functi
47d0: 6f 6e 20 74 61 6b 65 73 0a 2a 2a 20 61 20 73 69  on takes.** a si
47e0: 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 20 61 6e  ngle argument an
47f0: 64 20 61 74 74 65 6d 70 74 73 20 74 6f 20 65 78  d attempts to ex
4800: 65 63 75 74 65 20 74 68 61 74 20 61 72 67 75 6d  ecute that argum
4810: 65 6e 74 20 61 73 20 53 51 4c 20 63 6f 64 65 2e  ent as SQL code.
4820: 0a 2a 2a 20 54 68 69 73 20 69 73 20 69 6c 6c 65  .** This is ille
4830: 67 61 6c 20 61 6e 64 20 73 68 6f 75 6c 64 20 73  gal and should s
4840: 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 49  et the SQLITE_MI
4850: 53 55 53 45 20 66 6c 61 67 20 6f 6e 20 74 68 65  SUSE flag on the
4860: 20 64 61 74 61 62 61 73 65 2e 0a 2a 2a 0a 2a 2a   database..**.**
4870: 20 32 30 30 34 2d 4a 61 6e 2d 30 37 3a 20 20 57   2004-Jan-07:  W
4880: 65 20 68 61 76 65 20 63 68 61 6e 67 65 64 20 74  e have changed t
4890: 68 69 73 20 74 6f 20 6d 61 6b 65 20 69 74 20 6c  his to make it l
48a0: 65 67 61 6c 20 74 6f 20 63 61 6c 6c 20 73 71 6c  egal to call sql
48b0: 69 74 65 33 5f 65 78 65 63 28 29 0a 2a 2a 20 66  ite3_exec().** f
48c0: 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 66 75 6e  rom within a fun
48d0: 63 74 69 6f 6e 20 63 61 6c 6c 2e 20 20 0a 2a 2a  ction call.  .**
48e0: 20 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e   .** This routin
48f0: 65 20 73 69 6d 75 6c 61 74 65 73 20 74 68 65 20  e simulates the 
4900: 65 66 66 65 63 74 20 6f 66 20 68 61 76 69 6e 67  effect of having
4910: 20 74 77 6f 20 74 68 72 65 61 64 73 20 61 74 74   two threads att
4920: 65 6d 70 74 20 74 6f 0a 2a 2a 20 75 73 65 20 74  empt to.** use t
4930: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
4940: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
4950: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  e..*/.static voi
4960: 64 20 73 71 6c 69 74 65 33 45 78 65 63 46 75 6e  d sqlite3ExecFun
4970: 63 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  c(.  sqlite3_con
4980: 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20 0a  text *context, .
4990: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 0a 20 20    int argc,  .  
49a0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
49b0: 61 72 67 76 0a 29 7b 0a 20 20 73 74 72 75 63 74  argv.){.  struct
49c0: 20 64 73 74 72 20 78 3b 0a 20 20 6d 65 6d 73 65   dstr x;.  memse
49d0: 74 28 26 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28  t(&x, 0, sizeof(
49e0: 78 29 29 3b 0a 20 20 28 76 6f 69 64 29 73 71 6c  x));.  (void)sql
49f0: 69 74 65 33 5f 65 78 65 63 28 28 73 71 6c 69 74  ite3_exec((sqlit
4a00: 65 33 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72  e3*)sqlite3_user
4a10: 5f 64 61 74 61 28 63 6f 6e 74 65 78 74 29 2c 0a  _data(context),.
4a20: 20 20 20 20 20 20 28 63 68 61 72 2a 29 73 71 6c        (char*)sql
4a30: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
4a40: 61 72 67 76 5b 30 5d 29 2c 0a 20 20 20 20 20 20  argv[0]),.      
4a50: 65 78 65 63 46 75 6e 63 43 61 6c 6c 62 61 63 6b  execFuncCallback
4a60: 2c 20 26 78 2c 20 30 29 3b 0a 20 20 73 71 6c 69  , &x, 0);.  sqli
4a70: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
4a80: 63 6f 6e 74 65 78 74 2c 20 78 2e 7a 2c 20 78 2e  context, x.z, x.
4a90: 6e 55 73 65 64 2c 20 53 51 4c 49 54 45 5f 54 52  nUsed, SQLITE_TR
4aa0: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69  ANSIENT);.  sqli
4ab0: 74 65 46 72 65 65 28 78 2e 7a 29 3b 0a 7d 0a 0a  teFree(x.z);.}..
4ac0: 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61  /*.** Implementa
4ad0: 74 69 6f 6e 20 6f 66 20 74 6b 74 32 32 31 33 66  tion of tkt2213f
4ae0: 75 6e 63 28 29 2c 20 61 20 73 63 61 6c 61 72 20  unc(), a scalar 
4af0: 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 74 61  function that ta
4b00: 6b 65 73 20 65 78 61 63 74 6c 79 0a 2a 2a 20 6f  kes exactly.** o
4b10: 6e 65 20 61 72 67 75 6d 65 6e 74 2e 20 49 74 20  ne argument. It 
4b20: 68 61 73 20 74 77 6f 20 69 6e 74 65 72 65 73 74  has two interest
4b30: 69 6e 67 20 66 65 61 74 75 72 65 73 3a 0a 2a 2a  ing features:.**
4b40: 0a 2a 2a 20 2a 20 49 74 20 63 61 6c 6c 73 20 73  .** * It calls s
4b50: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
4b60: 74 28 29 20 33 20 74 69 6d 65 73 20 6f 6e 20 74  t() 3 times on t
4b70: 68 65 20 61 72 67 75 6d 65 6e 74 20 73 71 6c 69  he argument sqli
4b80: 74 65 33 5f 76 61 6c 75 65 2a 2e 0a 2a 2a 20 20  te3_value*..**  
4b90: 20 49 66 20 74 68 65 20 74 68 72 65 65 20 70 6f   If the three po
4ba0: 69 6e 74 65 72 73 20 72 65 74 75 72 6e 65 64 20  inters returned 
4bb0: 61 72 65 20 6e 6f 74 20 74 68 65 20 73 61 6d 65  are not the same
4bc0: 20 61 6e 20 53 51 4c 20 65 72 72 6f 72 20 69 73   an SQL error is
4bd0: 20 72 61 69 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 2a   raised..**.** *
4be0: 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 72 65   Otherwise it re
4bf0: 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f 66 20  turns a copy of 
4c00: 74 68 65 20 74 65 78 74 20 72 65 70 72 65 73 65  the text represe
4c10: 6e 74 61 74 69 6f 6e 20 6f 66 20 69 74 27 73 20  ntation of it's 
4c20: 0a 2a 2a 20 20 20 61 72 67 75 6d 65 6e 74 20 69  .**   argument i
4c30: 6e 20 73 75 63 68 20 61 20 77 61 79 20 61 73 20  n such a way as 
4c40: 74 68 65 20 56 44 42 45 20 72 65 70 72 65 73 65  the VDBE represe
4c50: 6e 74 61 74 69 6f 6e 20 69 73 20 61 20 4d 65 6d  ntation is a Mem
4c60: 2a 20 63 65 6c 6c 20 0a 2a 2a 20 20 20 77 69 74  * cell .**   wit
4c70: 68 20 74 68 65 20 4d 45 4d 5f 54 65 72 6d 20 66  h the MEM_Term f
4c80: 6c 61 67 20 63 6c 65 61 72 2e 20 0a 2a 2a 0a 2a  lag clear. .**.*
4c90: 2a 20 54 69 63 6b 65 74 20 23 32 32 31 33 20 63  * Ticket #2213 c
4ca0: 61 6e 20 74 68 65 72 65 66 6f 72 65 20 62 65 20  an therefore be 
4cb0: 74 65 73 74 65 64 20 62 79 20 65 76 61 6c 75 61  tested by evalua
4cc0: 74 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ting the followi
4cd0: 6e 67 0a 2a 2a 20 53 51 4c 20 65 78 70 72 65 73  ng.** SQL expres
4ce0: 73 69 6f 6e 3a 0a 2a 2a 0a 2a 2a 20 20 20 74 6b  sion:.**.**   tk
4cf0: 74 32 32 31 33 66 75 6e 63 28 74 6b 74 32 32 31  t2213func(tkt221
4d00: 33 66 75 6e 63 28 27 61 20 73 74 72 69 6e 67 27  3func('a string'
4d10: 29 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ));.*/.static vo
4d20: 69 64 20 74 6b 74 32 32 31 33 46 75 6e 63 74 69  id tkt2213Functi
4d30: 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  on(.  sqlite3_co
4d40: 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20  ntext *context, 
4d50: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 0a 20  .  int argc,  . 
4d60: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
4d70: 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20 6e  *argv.){.  int n
4d80: 54 65 78 74 3b 0a 20 20 75 6e 73 69 67 6e 65 64  Text;.  unsigned
4d90: 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 54 65   char const *zTe
4da0: 78 74 31 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20  xt1;.  unsigned 
4db0: 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 54 65 78  char const *zTex
4dc0: 74 32 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63  t2;.  unsigned c
4dd0: 68 61 72 20 63 6f 6e 73 74 20 2a 7a 54 65 78 74  har const *zText
4de0: 33 3b 0a 0a 20 20 6e 54 65 78 74 20 3d 20 73 71  3;..  nText = sq
4df0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65  lite3_value_byte
4e00: 73 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 7a 54  s(argv[0]);.  zT
4e10: 65 78 74 31 20 3d 20 73 71 6c 69 74 65 33 5f 76  ext1 = sqlite3_v
4e20: 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30  alue_text(argv[0
4e30: 5d 29 3b 0a 20 20 7a 54 65 78 74 32 20 3d 20 73  ]);.  zText2 = s
4e40: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
4e50: 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 7a 54  t(argv[0]);.  zT
4e60: 65 78 74 33 20 3d 20 73 71 6c 69 74 65 33 5f 76  ext3 = sqlite3_v
4e70: 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30  alue_text(argv[0
4e80: 5d 29 3b 0a 0a 20 20 69 66 28 20 7a 54 65 78 74  ]);..  if( zText
4e90: 31 21 3d 7a 54 65 78 74 32 20 7c 7c 20 7a 54 65  1!=zText2 || zTe
4ea0: 78 74 32 21 3d 7a 54 65 78 74 33 20 29 7b 0a 20  xt2!=zText3 ){. 
4eb0: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
4ec0: 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c  t_error(context,
4ed0: 20 22 74 6b 74 32 32 31 33 20 69 73 20 6e 6f 74   "tkt2213 is not
4ee0: 20 66 69 78 65 64 22 2c 20 2d 31 29 3b 0a 20 20   fixed", -1);.  
4ef0: 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20  }else{.    char 
4f00: 2a 7a 43 6f 70 79 20 3d 20 28 63 68 61 72 20 2a  *zCopy = (char *
4f10: 29 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28  )sqlite3_malloc(
4f20: 6e 54 65 78 74 29 3b 0a 20 20 20 20 6d 65 6d 63  nText);.    memc
4f30: 70 79 28 7a 43 6f 70 79 2c 20 7a 54 65 78 74 31  py(zCopy, zText1
4f40: 2c 20 6e 54 65 78 74 29 3b 0a 20 20 20 20 73 71  , nText);.    sq
4f50: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
4f60: 74 28 63 6f 6e 74 65 78 74 2c 20 7a 43 6f 70 79  t(context, zCopy
4f70: 2c 20 6e 54 65 78 74 2c 20 73 71 6c 69 74 65 33  , nText, sqlite3
4f80: 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  _free);.  }.}../
4f90: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
4fa0: 69 74 65 5f 74 65 73 74 5f 63 72 65 61 74 65 5f  ite_test_create_
4fb0: 66 75 6e 63 74 69 6f 6e 20 44 42 0a 2a 2a 0a 2a  function DB.**.*
4fc0: 2a 20 43 61 6c 6c 20 74 68 65 20 73 71 6c 69 74  * Call the sqlit
4fd0: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
4fe0: 6f 6e 20 41 50 49 20 6f 6e 20 74 68 65 20 67 69  on API on the gi
4ff0: 76 65 6e 20 64 61 74 61 62 61 73 65 20 69 6e 20  ven database in 
5000: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 63 72 65 61  order.** to crea
5010: 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 6e 61  te a function na
5020: 6d 65 64 20 22 78 5f 63 6f 61 6c 65 73 63 65 22  med "x_coalesce"
5030: 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  .  This function
5040: 20 64 6f 65 73 20 74 68 65 20 73 61 6d 65 20 74   does the same t
5050: 68 69 6e 67 0a 2a 2a 20 61 73 20 74 68 65 20 22  hing.** as the "
5060: 63 6f 61 6c 65 73 63 65 22 20 66 75 6e 63 74 69  coalesce" functi
5070: 6f 6e 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69  on.  This functi
5080: 6f 6e 20 61 6c 73 6f 20 72 65 67 69 73 74 65 72  on also register
5090: 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
50a0: 6e 0a 2a 2a 20 6e 61 6d 65 64 20 22 78 5f 73 71  n.** named "x_sq
50b0: 6c 69 74 65 5f 65 78 65 63 22 20 74 68 61 74 20  lite_exec" that 
50c0: 69 6e 76 6f 6b 65 73 20 73 71 6c 69 74 65 33 5f  invokes sqlite3_
50d0: 65 78 65 63 28 29 2e 20 20 49 6e 76 6f 6b 69 6e  exec().  Invokin
50e0: 67 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  g sqlite3_exec()
50f0: 0a 2a 2a 20 69 6e 20 74 68 69 73 20 77 61 79 20  .** in this way 
5100: 69 73 20 69 6c 6c 65 67 61 6c 20 72 65 63 75 72  is illegal recur
5110: 73 69 6f 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20  sion and should 
5120: 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f  raise an SQLITE_
5130: 4d 49 53 55 53 45 20 65 72 72 6f 72 2e 0a 2a 2a  MISUSE error..**
5140: 20 54 68 65 20 65 66 66 65 63 74 20 69 73 20 73   The effect is s
5150: 69 6d 69 6c 61 72 20 74 6f 20 74 72 79 69 6e 67  imilar to trying
5160: 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65   to use the same
5170: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
5180: 74 69 6f 6e 20 66 72 6f 6d 0a 2a 2a 20 74 77 6f  tion from.** two
5190: 20 74 68 72 65 61 64 73 20 61 74 20 74 68 65 20   threads at the 
51a0: 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a  same time..**.**
51b0: 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f   The original mo
51c0: 74 69 76 61 74 69 6f 6e 20 66 6f 72 20 74 68 69  tivation for thi
51d0: 73 20 72 6f 75 74 69 6e 65 20 77 61 73 20 74 6f  s routine was to
51e0: 20 62 65 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c   be able to call
51f0: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
5200: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20  create_function 
5210: 66 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20 61  function while a
5220: 20 71 75 65 72 79 20 69 73 20 69 6e 20 70 72 6f   query is in pro
5230: 67 72 65 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a  gress in order.*
5240: 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20 53 51  * to test the SQ
5250: 4c 49 54 45 5f 4d 49 53 55 53 45 20 64 65 74 65  LITE_MISUSE dete
5260: 63 74 69 6f 6e 20 6c 6f 67 69 63 2e 0a 2a 2f 0a  ction logic..*/.
5270: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
5280: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
5290: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
52a0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
52b0: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
52c0: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
52d0: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
52e0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
52f0: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
5300: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
5310: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
5320: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
5330: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
5340: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
5350: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ent */.){.  int 
5360: 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  rc;.  sqlite3 *d
5370: 62 3b 0a 20 20 65 78 74 65 72 6e 20 76 6f 69 64  b;.  extern void
5380: 20 4d 64 35 5f 52 65 67 69 73 74 65 72 28 73 71   Md5_Register(sq
5390: 6c 69 74 65 33 2a 29 3b 0a 0a 20 20 69 66 28 20  lite3*);..  if( 
53a0: 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  argc!=2 ){.    T
53b0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
53c0: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
53d0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
53e0: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
53f0: 20 20 20 20 20 20 22 20 44 42 5c 22 22 2c 20 30        " DB\"", 0
5400: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
5410: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
5420: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
5430: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
5440: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
5450: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
5460: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
5470: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78 5f  function(db, "x_
5480: 63 6f 61 6c 65 73 63 65 22 2c 20 2d 31 2c 20 53  coalesce", -1, S
5490: 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c 20 0a 20  QLITE_ANY, 0, . 
54a0: 20 20 20 20 20 20 20 74 31 5f 69 66 6e 75 6c 6c         t1_ifnull
54b0: 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20 69  Func, 0, 0);.  i
54c0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
54d0: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
54e0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
54f0: 74 69 6f 6e 28 64 62 2c 20 22 68 65 78 38 22 2c  tion(db, "hex8",
5500: 20 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20   1, SQLITE_ANY, 
5510: 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 68 65  0, .          he
5520: 78 38 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20  x8Func, 0, 0);. 
5530: 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
5540: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
5550: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
5560: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22  e_function(db, "
5570: 68 65 78 31 36 22 2c 20 31 2c 20 53 51 4c 49 54  hex16", 1, SQLIT
5580: 45 5f 41 4e 59 2c 20 30 2c 20 0a 20 20 20 20 20  E_ANY, 0, .     
5590: 20 20 20 20 20 68 65 78 31 36 46 75 6e 63 2c 20       hex16Func, 
55a0: 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28  0, 0);.  }.  if(
55b0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
55c0: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
55d0: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
55e0: 6f 6e 28 64 62 2c 20 22 74 6b 74 32 32 31 33 66  on(db, "tkt2213f
55f0: 75 6e 63 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f  unc", 1, SQLITE_
5600: 41 4e 59 2c 20 30 2c 20 0a 20 20 20 20 20 20 20  ANY, 0, .       
5610: 20 20 20 74 6b 74 32 32 31 33 46 75 6e 63 74 69     tkt2213Functi
5620: 6f 6e 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a  on, 0, 0);.  }..
5630: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
5640: 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 20 55  MIT_UTF16.  /* U
5650: 73 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  se the sqlite3_c
5660: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36  reate_function16
5670: 28 29 20 41 50 49 20 68 65 72 65 2e 20 4d 61 69  () API here. Mai
5680: 6e 6c 79 20 66 6f 72 20 66 75 6e 2c 20 62 75 74  nly for fun, but
5690: 20 61 6c 73 6f 20 0a 20 20 2a 2a 20 62 65 63 61   also .  ** beca
56a0: 75 73 65 20 69 74 20 69 73 20 6e 6f 74 20 74 65  use it is not te
56b0: 73 74 65 64 20 61 6e 79 77 68 65 72 65 20 65 6c  sted anywhere el
56c0: 73 65 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  se. */.  if( rc=
56d0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
56e0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
56f0: 2a 70 56 61 6c 3b 0a 23 69 66 64 65 66 20 53 51  *pVal;.#ifdef SQ
5700: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
5710: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 4d    if( sqlite3_iM
5720: 61 6c 6c 6f 63 46 61 69 6c 3e 30 20 29 7b 0a 20  allocFail>0 ){. 
5730: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 4d 61       sqlite3_iMa
5740: 6c 6c 6f 63 46 61 69 6c 2b 2b 3b 0a 20 20 20 20  llocFail++;.    
5750: 7d 0a 23 65 6e 64 69 66 20 0a 20 20 20 20 70 56  }.#endif .    pV
5760: 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75  al = sqlite3Valu
5770: 65 4e 65 77 28 29 3b 0a 20 20 20 20 73 71 6c 69  eNew();.    sqli
5780: 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70  te3ValueSetStr(p
5790: 56 61 6c 2c 20 2d 31 2c 20 22 78 5f 73 71 6c 69  Val, -1, "x_sqli
57a0: 74 65 5f 65 78 65 63 22 2c 20 53 51 4c 49 54 45  te_exec", SQLITE
57b0: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
57c0: 41 54 49 43 29 3b 0a 20 20 20 20 72 63 20 3d 20  ATIC);.    rc = 
57d0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
57e0: 75 6e 63 74 69 6f 6e 31 36 28 64 62 2c 20 0a 20  unction16(db, . 
57f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
5800: 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 70 56  ite3ValueText(pV
5810: 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  al, SQLITE_UTF16
5820: 4e 41 54 49 56 45 29 2c 0a 20 20 20 20 20 20 20  NATIVE),.       
5830: 20 20 20 20 20 20 20 31 2c 20 53 51 4c 49 54 45         1, SQLITE
5840: 5f 55 54 46 31 36 2c 20 64 62 2c 20 73 71 6c 69  _UTF16, db, sqli
5850: 74 65 33 45 78 65 63 46 75 6e 63 2c 20 30 2c 20  te3ExecFunc, 0, 
5860: 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  0);.    sqlite3V
5870: 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a  alueFree(pVal);.
5880: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66    }.#endif..  if
5890: 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
58a0: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c  Code(interp, db,
58b0: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
58c0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53  L_ERROR;.  Tcl_S
58d0: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
58e0: 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72   (char *)t1Error
58f0: 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20  Name(rc), 0);.  
5900: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
5910: 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73  ../*.** Routines
5920: 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
5930: 65 20 78 5f 63 6f 75 6e 74 28 29 20 61 67 67 72  e x_count() aggr
5940: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  egate function..
5950: 2a 2a 0a 2a 2a 20 78 5f 63 6f 75 6e 74 28 29 20  **.** x_count() 
5960: 63 6f 75 6e 74 73 20 74 68 65 20 6e 75 6d 62 65  counts the numbe
5970: 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 20 61 72  r of non-null ar
5980: 67 75 6d 65 6e 74 73 2e 20 20 42 75 74 20 74 68  guments.  But th
5990: 65 72 65 20 61 72 65 0a 2a 2a 20 73 6f 6d 65 20  ere are.** some 
59a0: 74 77 69 73 74 73 20 66 6f 72 20 74 65 73 74 69  twists for testi
59b0: 6e 67 20 70 75 72 70 6f 73 65 73 2e 0a 2a 2a 0a  ng purposes..**.
59c0: 2a 2a 20 49 66 20 74 68 65 20 61 72 67 75 6d 65  ** If the argume
59d0: 6e 74 20 74 6f 20 78 5f 63 6f 75 6e 74 28 29 20  nt to x_count() 
59e0: 69 73 20 34 30 20 74 68 65 6e 20 61 20 55 54 46  is 40 then a UTF
59f0: 2d 38 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  -8 error is repo
5a00: 72 74 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 73  rted.** on the s
5a10: 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 20 20 49  tep function.  I
5a20: 66 20 78 5f 63 6f 75 6e 74 28 34 31 29 20 69 73  f x_count(41) is
5a30: 20 73 65 65 6e 2c 20 74 68 65 6e 20 61 20 55 54   seen, then a UT
5a40: 46 2d 31 36 20 65 72 72 6f 72 0a 2a 2a 20 69 73  F-16 error.** is
5a50: 20 72 65 70 6f 72 74 65 64 20 6f 6e 20 74 68 65   reported on the
5a60: 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 20   step function. 
5a70: 20 49 66 20 74 68 65 20 74 6f 74 61 6c 20 63 6f   If the total co
5a80: 75 6e 74 20 69 73 20 34 32 2c 20 74 68 65 6e 0a  unt is 42, then.
5a90: 2a 2a 20 61 20 55 54 46 2d 38 20 65 72 72 6f 72  ** a UTF-8 error
5aa0: 20 69 73 20 72 65 70 6f 72 74 65 64 20 6f 6e 20   is reported on 
5ab0: 74 68 65 20 66 69 6e 61 6c 69 7a 65 20 66 75 6e  the finalize fun
5ac0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65  ction..*/.typede
5ad0: 66 20 73 74 72 75 63 74 20 74 31 43 6f 75 6e 74  f struct t1Count
5ae0: 43 74 78 20 74 31 43 6f 75 6e 74 43 74 78 3b 0a  Ctx t1CountCtx;.
5af0: 73 74 72 75 63 74 20 74 31 43 6f 75 6e 74 43 74  struct t1CountCt
5b00: 78 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 7d 3b 0a  x {.  int n;.};.
5b10: 73 74 61 74 69 63 20 76 6f 69 64 20 74 31 43 6f  static void t1Co
5b20: 75 6e 74 53 74 65 70 28 0a 20 20 73 71 6c 69 74  untStep(.  sqlit
5b30: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74  e3_context *cont
5b40: 65 78 74 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c  ext,.  int argc,
5b50: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
5b60: 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 74 31 43   **argv.){.  t1C
5b70: 6f 75 6e 74 43 74 78 20 2a 70 3b 0a 20 20 70 20  ountCtx *p;.  p 
5b80: 3d 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  = sqlite3_aggreg
5b90: 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74  ate_context(cont
5ba0: 65 78 74 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29  ext, sizeof(*p))
5bb0: 3b 0a 20 20 69 66 28 20 28 61 72 67 63 3d 3d 30  ;.  if( (argc==0
5bc0: 20 7c 7c 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 21   || SQLITE_NULL!
5bd0: 3d 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  =sqlite3_value_t
5be0: 79 70 65 28 61 72 67 76 5b 30 5d 29 20 29 20 26  ype(argv[0]) ) &
5bf0: 26 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 2b  & p ){.    p->n+
5c00: 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 61 72 67  +;.  }.  if( arg
5c10: 63 3e 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 76  c>0 ){.    int v
5c20: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
5c30: 5f 69 6e 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20  _int(argv[0]);. 
5c40: 20 20 20 69 66 28 20 76 3d 3d 34 30 20 29 7b 0a     if( v==40 ){.
5c50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
5c60: 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65  sult_error(conte
5c70: 78 74 2c 20 22 76 61 6c 75 65 20 6f 66 20 34 30  xt, "value of 40
5c80: 20 68 61 6e 64 65 64 20 74 6f 20 78 5f 63 6f 75   handed to x_cou
5c90: 6e 74 22 2c 20 2d 31 29 3b 0a 23 69 66 6e 64 65  nt", -1);.#ifnde
5ca0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
5cb0: 46 31 36 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  F16.    }else if
5cc0: 28 20 76 3d 3d 34 31 20 29 7b 0a 20 20 20 20 20  ( v==41 ){.     
5cd0: 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 55 74 66   const char zUtf
5ce0: 31 36 45 72 72 4d 73 67 5b 5d 20 3d 20 7b 20 30  16ErrMsg[] = { 0
5cf0: 2c 20 30 78 36 31 2c 20 30 2c 20 30 78 36 32 2c  , 0x61, 0, 0x62,
5d00: 20 30 2c 20 30 78 36 33 2c 20 30 2c 20 30 2c 20   0, 0x63, 0, 0, 
5d10: 30 7d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0};.      sqlite
5d20: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 31 36  3_result_error16
5d30: 28 63 6f 6e 74 65 78 74 2c 20 26 7a 55 74 66 31  (context, &zUtf1
5d40: 36 45 72 72 4d 73 67 5b 31 2d 53 51 4c 49 54 45  6ErrMsg[1-SQLITE
5d50: 5f 42 49 47 45 4e 44 49 41 4e 5d 2c 20 2d 31 29  _BIGENDIAN], -1)
5d60: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20  ;.#endif.    }. 
5d70: 20 7d 0a 7d 20 20 20 0a 73 74 61 74 69 63 20 76   }.}   .static v
5d80: 6f 69 64 20 74 31 43 6f 75 6e 74 46 69 6e 61 6c  oid t1CountFinal
5d90: 69 7a 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ize(sqlite3_cont
5da0: 65 78 74 20 2a 63 6f 6e 74 65 78 74 29 7b 0a 20  ext *context){. 
5db0: 20 74 31 43 6f 75 6e 74 43 74 78 20 2a 70 3b 0a   t1CountCtx *p;.
5dc0: 20 20 70 20 3d 20 73 71 6c 69 74 65 33 5f 61 67    p = sqlite3_ag
5dd0: 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28  gregate_context(
5de0: 63 6f 6e 74 65 78 74 2c 20 73 69 7a 65 6f 66 28  context, sizeof(
5df0: 2a 70 29 29 3b 0a 20 20 69 66 28 20 70 20 29 7b  *p));.  if( p ){
5e00: 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 3d 3d 34  .    if( p->n==4
5e10: 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  2 ){.      sqlit
5e20: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
5e30: 63 6f 6e 74 65 78 74 2c 20 22 78 5f 63 6f 75 6e  context, "x_coun
5e40: 74 20 74 6f 74 61 6c 73 20 74 6f 20 34 32 22 2c  t totals to 42",
5e50: 20 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   -1);.    }else{
5e60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  .      sqlite3_r
5e70: 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78  esult_int(contex
5e80: 74 2c 20 70 20 3f 20 70 2d 3e 6e 20 3a 20 30 29  t, p ? p->n : 0)
5e90: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
5ea0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
5eb0: 69 74 65 5f 74 65 73 74 5f 63 72 65 61 74 65 5f  ite_test_create_
5ec0: 61 67 67 72 65 67 61 74 65 20 44 42 0a 2a 2a 0a  aggregate DB.**.
5ed0: 2a 2a 20 43 61 6c 6c 20 74 68 65 20 73 71 6c 69  ** Call the sqli
5ee0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
5ef0: 69 6f 6e 20 41 50 49 20 6f 6e 20 74 68 65 20 67  ion API on the g
5f00: 69 76 65 6e 20 64 61 74 61 62 61 73 65 20 69 6e  iven database in
5f10: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 63 72 65   order.** to cre
5f20: 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 6e  ate a function n
5f30: 61 6d 65 64 20 22 78 5f 63 6f 75 6e 74 22 2e 20  amed "x_count". 
5f40: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 64   This function d
5f50: 6f 65 73 20 74 68 65 20 73 61 6d 65 20 74 68 69  oes the same thi
5f60: 6e 67 0a 2a 2a 20 61 73 20 74 68 65 20 22 6d 64  ng.** as the "md
5f70: 35 73 75 6d 22 20 66 75 6e 63 74 69 6f 6e 2e 0a  5sum" function..
5f80: 2a 2a 0a 2a 2a 20 54 68 65 20 6f 72 69 67 69 6e  **.** The origin
5f90: 61 6c 20 6d 6f 74 69 76 61 74 69 6f 6e 20 66 6f  al motivation fo
5fa0: 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 77  r this routine w
5fb0: 61 73 20 74 6f 20 62 65 20 61 62 6c 65 20 74 6f  as to be able to
5fc0: 20 63 61 6c 6c 20 74 68 65 0a 2a 2a 20 73 71 6c   call the.** sql
5fd0: 69 74 65 33 5f 63 72 65 61 74 65 5f 61 67 67 72  ite3_create_aggr
5fe0: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77  egate function w
5ff0: 68 69 6c 65 20 61 20 71 75 65 72 79 20 69 73 20  hile a query is 
6000: 69 6e 20 70 72 6f 67 72 65 73 73 20 69 6e 20 6f  in progress in o
6010: 72 64 65 72 0a 2a 2a 20 74 6f 20 74 65 73 74 20  rder.** to test 
6020: 74 68 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  the SQLITE_MISUS
6030: 45 20 64 65 74 65 63 74 69 6f 6e 20 6c 6f 67 69  E detection logi
6040: 63 2e 20 20 53 65 65 20 6d 69 73 75 73 65 2e 74  c.  See misuse.t
6050: 65 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  est..**.** This 
6060: 72 6f 75 74 69 6e 65 20 77 61 73 20 6c 61 74 65  routine was late
6070: 72 20 65 78 74 65 6e 64 65 64 20 74 6f 20 74 65  r extended to te
6080: 73 74 20 74 68 65 20 75 73 65 20 6f 66 20 73 71  st the use of sq
6090: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
60a0: 6f 72 28 29 0a 2a 2a 20 77 69 74 68 69 6e 20 61  or().** within a
60b0: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
60c0: 6e 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ns..*/.static in
60d0: 74 20 74 65 73 74 5f 63 72 65 61 74 65 5f 61 67  t test_create_ag
60e0: 67 72 65 67 61 74 65 28 0a 20 20 76 6f 69 64 20  gregate(.  void 
60f0: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
6100: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
6110: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
6120: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
6130: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
6140: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
6150: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
6160: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
6170: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
6180: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
6190: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
61a0: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
61b0: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
61c0: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28  .  int rc;.  if(
61d0: 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20   argc!=2 ){.    
61e0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
61f0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
6200: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
6210: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a  e \"", argv[0],.
6220: 20 20 20 20 20 20 20 22 20 46 49 4c 45 4e 41 4d         " FILENAM
6230: 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  E\"", 0);.    re
6240: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
6250: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
6260: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
6270: 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
6280: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
6290: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
62a0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
62b0: 64 62 2c 20 22 78 5f 63 6f 75 6e 74 22 2c 20 30  db, "x_count", 0
62c0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30  , SQLITE_UTF8, 0
62d0: 2c 20 30 2c 0a 20 20 20 20 20 20 74 31 43 6f 75  , 0,.      t1Cou
62e0: 6e 74 53 74 65 70 2c 74 31 43 6f 75 6e 74 46 69  ntStep,t1CountFi
62f0: 6e 61 6c 69 7a 65 29 3b 0a 20 20 69 66 28 20 72  nalize);.  if( r
6300: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
6310: 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
6320: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
6330: 22 78 5f 63 6f 75 6e 74 22 2c 20 31 2c 20 53 51  "x_count", 1, SQ
6340: 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 2c  LITE_UTF8, 0, 0,
6350: 0a 20 20 20 20 20 20 20 20 74 31 43 6f 75 6e 74  .        t1Count
6360: 53 74 65 70 2c 74 31 43 6f 75 6e 74 46 69 6e 61  Step,t1CountFina
6370: 6c 69 7a 65 29 3b 0a 20 20 7d 0a 20 20 69 66 28  lize);.  }.  if(
6380: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
6390: 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
63a0: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
63b0: 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e  _ERROR;.  return
63c0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a   TCL_OK;.}.../*.
63d0: 2a 2a 20 55 73 61 67 65 3a 20 20 70 72 69 6e 74  ** Usage:  print
63e0: 66 20 54 45 58 54 0a 2a 2a 0a 2a 2a 20 53 65 6e  f TEXT.**.** Sen
63f0: 64 20 6f 75 74 70 75 74 20 74 6f 20 70 72 69 6e  d output to prin
6400: 74 66 2e 20 20 55 73 65 20 74 68 69 73 20 72 61  tf.  Use this ra
6410: 74 68 65 72 20 74 68 61 6e 20 70 75 74 73 20 74  ther than puts t
6420: 6f 20 6d 65 72 67 65 20 74 68 65 20 6f 75 74 70  o merge the outp
6430: 75 74 0a 2a 2a 20 69 6e 20 74 68 65 20 63 6f 72  ut.** in the cor
6440: 72 65 63 74 20 73 65 71 75 65 6e 63 65 20 77 69  rect sequence wi
6450: 74 68 20 64 65 62 75 67 67 69 6e 67 20 70 72 69  th debugging pri
6460: 6e 74 66 73 20 69 6e 73 65 72 74 65 64 20 69 6e  ntfs inserted in
6470: 74 6f 20 43 20 63 6f 64 65 2e 0a 2a 2a 20 50 75  to C code..** Pu
6480: 74 73 20 75 73 65 73 20 61 20 73 65 70 61 72 61  ts uses a separa
6490: 74 65 20 62 75 66 66 65 72 20 61 6e 64 20 64 65  te buffer and de
64a0: 62 75 67 67 69 6e 67 20 73 74 61 74 65 6d 65 6e  bugging statemen
64b0: 74 73 20 77 69 6c 6c 20 62 65 20 6f 75 74 20 6f  ts will be out o
64c0: 66 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 69 66  f.** sequence if
64d0: 20 69 74 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a   it is used..*/.
64e0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
64f0: 70 72 69 6e 74 66 28 0a 20 20 76 6f 69 64 20 2a  printf(.  void *
6500: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
6510: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
6520: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
6530: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
6540: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
6550: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
6560: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
6570: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
6580: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
6590: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
65a0: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
65b0: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
65c0: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29  .  if( argc!=2 )
65d0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
65e0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
65f0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
6600: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
6610: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 54  v[0],.       " T
6620: 45 58 54 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  EXT\"", 0);.    
6630: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
6640: 3b 0a 20 20 7d 0a 20 20 70 72 69 6e 74 66 28 22  ;.  }.  printf("
6650: 25 73 5c 6e 22 2c 20 61 72 67 76 5b 31 5d 29 3b  %s\n", argv[1]);
6660: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
6670: 3b 0a 7d 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  ;.}..../*.** Usa
6680: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72  ge:  sqlite3_mpr
6690: 69 6e 74 66 5f 69 6e 74 20 46 4f 52 4d 41 54 20  intf_int FORMAT 
66a0: 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 20  INTEGER INTEGER 
66b0: 49 4e 54 45 47 45 52 0a 2a 2a 0a 2a 2a 20 43 61  INTEGER.**.** Ca
66c0: 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68 20  ll mprintf with 
66d0: 74 68 72 65 65 20 69 6e 74 65 67 65 72 20 61 72  three integer ar
66e0: 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61 74 69  guments.*/.stati
66f0: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70  c int sqlite3_mp
6700: 72 69 6e 74 66 5f 69 6e 74 28 0a 20 20 76 6f 69  rintf_int(.  voi
6710: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
6720: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
6730: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
6740: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
6750: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
6760: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
6770: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
6780: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
6790: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
67a0: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
67b0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
67c0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
67d0: 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20  .){.  int a[3], 
67e0: 69 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20  i;.  char *z;.  
67f0: 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20  if( argc!=5 ){. 
6800: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
6810: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
6820: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
6830: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
6840: 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d  ],.       " FORM
6850: 41 54 20 49 4e 54 20 49 4e 54 20 49 4e 54 5c 22  AT INT INT INT\"
6860: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
6870: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
6880: 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 35 3b  .  for(i=2; i<5;
6890: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 54   i++){.    if( T
68a0: 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70  cl_GetInt(interp
68b0: 2c 20 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d  , argv[i], &a[i-
68c0: 32 5d 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  2]) ) return TCL
68d0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20  _ERROR;.  }.  z 
68e0: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
68f0: 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c  f(argv[1], a[0],
6900: 20 61 5b 31 5d 2c 20 61 5b 32 5d 29 3b 0a 20 20   a[1], a[2]);.  
6910: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
6920: 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a  (interp, z, 0);.
6930: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
6940: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
6950: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  OK;.}../*.** If 
6960: 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e 74 73 20  zNum represents 
6970: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
6980: 77 69 6c 6c 20 66 69 74 20 69 6e 20 36 34 2d 62  will fit in 64-b
6990: 69 74 73 2c 20 74 68 65 6e 20 73 65 74 0a 2a 2a  its, then set.**
69a0: 20 2a 70 56 61 6c 75 65 20 74 6f 20 74 68 61 74   *pValue to that
69b0: 20 69 6e 74 65 67 65 72 20 61 6e 64 20 72 65 74   integer and ret
69c0: 75 72 6e 20 74 72 75 65 2e 20 20 4f 74 68 65 72  urn true.  Other
69d0: 77 69 73 65 20 72 65 74 75 72 6e 20 66 61 6c 73  wise return fals
69e0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
69f0: 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 36 34   sqlite3GetInt64
6a00: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 75  (const char *zNu
6a10: 6d 2c 20 69 36 34 20 2a 70 56 61 6c 75 65 29 7b  m, i64 *pValue){
6a20: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 46 69  .  if( sqlite3Fi
6a30: 74 73 49 6e 36 34 42 69 74 73 28 7a 4e 75 6d 29  tsIn64Bits(zNum)
6a40: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 61   ){.    sqlite3a
6a50: 74 6f 69 36 34 28 7a 4e 75 6d 2c 20 70 56 61 6c  toi64(zNum, pVal
6a60: 75 65 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  ue);.    return 
6a70: 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  1;.  }.  return 
6a80: 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  0;.}../*.** Usag
6a90: 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e:  sqlite3_mpri
6aa0: 6e 74 66 5f 69 6e 74 36 34 20 46 4f 52 4d 41 54  ntf_int64 FORMAT
6ab0: 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52   INTEGER INTEGER
6ac0: 20 49 4e 54 45 47 45 52 0a 2a 2a 0a 2a 2a 20 43   INTEGER.**.** C
6ad0: 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68  all mprintf with
6ae0: 20 74 68 72 65 65 20 36 34 2d 62 69 74 20 69 6e   three 64-bit in
6af0: 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 0a  teger arguments.
6b00: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
6b10: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
6b20: 74 36 34 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  t64(.  void *Not
6b30: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
6b40: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
6b50: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
6b60: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
6b70: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
6b80: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
6b90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
6ba0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
6bb0: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
6bc0: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
6bd0: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
6be0: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
6bf0: 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 5f  int i;.  sqlite_
6c00: 69 6e 74 36 34 20 61 5b 33 5d 3b 0a 20 20 63 68  int64 a[3];.  ch
6c10: 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67  ar *z;.  if( arg
6c20: 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=5 ){.    Tcl_
6c30: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
6c40: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
6c50: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
6c60: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
6c70: 20 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20     " FORMAT INT 
6c80: 49 4e 54 20 49 4e 54 5c 22 22 2c 20 30 29 3b 0a  INT INT\"", 0);.
6c90: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
6ca0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28  RROR;.  }.  for(
6cb0: 69 3d 32 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a  i=2; i<5; i++){.
6cc0: 20 20 20 20 69 66 28 20 21 73 71 6c 69 74 65 33      if( !sqlite3
6cd0: 47 65 74 49 6e 74 36 34 28 61 72 67 76 5b 69 5d  GetInt64(argv[i]
6ce0: 2c 20 26 61 5b 69 2d 32 5d 29 20 29 7b 0a 20 20  , &a[i-2]) ){.  
6cf0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
6d00: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 61 72  sult(interp, "ar
6d10: 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 61 20  gument is not a 
6d20: 76 61 6c 69 64 20 36 34 2d 62 69 74 20 69 6e 74  valid 64-bit int
6d30: 65 67 65 72 22 2c 20 30 29 3b 0a 20 20 20 20 20  eger", 0);.     
6d40: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
6d50: 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 7a  R;.    }.  }.  z
6d60: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
6d70: 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d  tf(argv[1], a[0]
6d80: 2c 20 61 5b 31 5d 2c 20 61 5b 32 5d 29 3b 0a 20  , a[1], a[2]);. 
6d90: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
6da0: 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b  t(interp, z, 0);
6db0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
6dc0: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  z);.  return TCL
6dd0: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
6de0: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
6df0: 72 69 6e 74 66 5f 73 74 72 20 46 4f 52 4d 41 54  rintf_str FORMAT
6e00: 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52   INTEGER INTEGER
6e10: 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 43 61   STRING.**.** Ca
6e20: 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68 20  ll mprintf with 
6e30: 74 77 6f 20 69 6e 74 65 67 65 72 20 61 72 67 75  two integer argu
6e40: 6d 65 6e 74 73 20 61 6e 64 20 6f 6e 65 20 73 74  ments and one st
6e50: 72 69 6e 67 20 61 72 67 75 6d 65 6e 74 0a 2a 2f  ring argument.*/
6e60: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
6e70: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 28  te3_mprintf_str(
6e80: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
6e90: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
6ea0: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
6eb0: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
6ec0: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
6ed0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
6ee0: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
6ef0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
6f00: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
6f10: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
6f20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
6f30: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
6f40: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ent */.){.  int 
6f50: 61 5b 33 5d 2c 20 69 3b 0a 20 20 63 68 61 72 20  a[3], i;.  char 
6f60: 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 3c 34  *z;.  if( argc<4
6f70: 20 7c 7c 20 61 72 67 63 3e 35 20 29 7b 0a 20 20   || argc>5 ){.  
6f80: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
6f90: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
6fa0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
6fb0: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
6fc0: 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41  ,.       " FORMA
6fd0: 54 20 49 4e 54 20 49 4e 54 20 3f 53 54 52 49 4e  T INT INT ?STRIN
6fe0: 47 3f 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  G?\"", 0);.    r
6ff0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7000: 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20  .  }.  for(i=2; 
7010: 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<4; i++){.    i
7020: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e  f( Tcl_GetInt(in
7030: 74 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26  terp, argv[i], &
7040: 61 5b 69 2d 32 5d 29 20 29 20 72 65 74 75 72 6e  a[i-2]) ) return
7050: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
7060: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70    z = sqlite3_mp
7070: 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 61  rintf(argv[1], a
7080: 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 72 67 63 3e  [0], a[1], argc>
7090: 34 20 3f 20 61 72 67 76 5b 34 5d 20 3a 20 4e 55  4 ? argv[4] : NU
70a0: 4c 4c 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  LL);.  Tcl_Appen
70b0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
70c0: 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  z, 0);.  sqlite3
70d0: 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75  _free(z);.  retu
70e0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
70f0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
7100: 74 65 33 5f 73 6e 70 72 69 6e 74 66 5f 73 74 72  te3_snprintf_str
7110: 20 49 4e 54 45 47 45 52 20 46 4f 52 4d 41 54 20   INTEGER FORMAT 
7120: 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 20  INTEGER INTEGER 
7130: 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 43 61 6c  STRING.**.** Cal
7140: 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68 20 74  l mprintf with t
7150: 77 6f 20 69 6e 74 65 67 65 72 20 61 72 67 75 6d  wo integer argum
7160: 65 6e 74 73 20 61 6e 64 20 6f 6e 65 20 73 74 72  ents and one str
7170: 69 6e 67 20 61 72 67 75 6d 65 6e 74 0a 2a 2f 0a  ing argument.*/.
7180: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
7190: 65 33 5f 73 6e 70 72 69 6e 74 66 5f 73 74 72 28  e3_snprintf_str(
71a0: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
71b0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
71c0: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
71d0: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
71e0: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
71f0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
7200: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
7210: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
7220: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
7230: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
7240: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
7250: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
7260: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ent */.){.  int 
7270: 61 5b 33 5d 2c 20 69 3b 0a 20 20 69 6e 74 20 6e  a[3], i;.  int n
7280: 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  ;.  char *z;.  i
7290: 66 28 20 61 72 67 63 3c 35 20 7c 7c 20 61 72 67  f( argc<5 || arg
72a0: 63 3e 36 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  c>6 ){.    Tcl_A
72b0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
72c0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
72d0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
72e0: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
72f0: 20 20 22 20 49 4e 54 20 46 4f 52 4d 41 54 20 49    " INT FORMAT I
7300: 4e 54 20 49 4e 54 20 3f 53 54 52 49 4e 47 3f 5c  NT INT ?STRING?\
7310: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
7320: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
7330: 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  }.  if( Tcl_GetI
7340: 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  nt(interp, argv[
7350: 31 5d 2c 20 26 6e 29 20 29 20 72 65 74 75 72 6e  1], &n) ) return
7360: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
7370: 28 20 6e 3c 30 20 29 7b 0a 20 20 20 20 54 63 6c  ( n<0 ){.    Tcl
7380: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
7390: 74 65 72 70 2c 20 22 4e 20 6d 75 73 74 20 62 65  terp, "N must be
73a0: 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 22 2c 20   non-negative", 
73b0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
73c0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
73d0: 66 6f 72 28 69 3d 33 3b 20 69 3c 35 3b 20 69 2b  for(i=3; i<5; i+
73e0: 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f  +){.    if( Tcl_
73f0: 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61  GetInt(interp, a
7400: 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 33 5d 29  rgv[i], &a[i-3])
7410: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
7420: 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73  ROR;.  }.  z = s
7430: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 20 6e  qlite3_malloc( n
7440: 2b 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  +1 );.  sqlite3_
7450: 73 6e 70 72 69 6e 74 66 28 6e 2c 20 7a 2c 20 61  snprintf(n, z, a
7460: 72 67 76 5b 32 5d 2c 20 61 5b 30 5d 2c 20 61 5b  rgv[2], a[0], a[
7470: 31 5d 2c 20 61 72 67 63 3e 34 20 3f 20 61 72 67  1], argc>4 ? arg
7480: 76 5b 35 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 20 20  v[5] : NULL);.  
7490: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
74a0: 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a  (interp, z, 0);.
74b0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
74c0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
74d0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
74e0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72  ge:  sqlite3_mpr
74f0: 69 6e 74 66 5f 64 6f 75 62 6c 65 20 46 4f 52 4d  intf_double FORM
7500: 41 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47  AT INTEGER INTEG
7510: 45 52 20 44 4f 55 42 4c 45 0a 2a 2a 0a 2a 2a 20  ER DOUBLE.**.** 
7520: 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74  Call mprintf wit
7530: 68 20 74 77 6f 20 69 6e 74 65 67 65 72 20 61 72  h two integer ar
7540: 67 75 6d 65 6e 74 73 20 61 6e 64 20 6f 6e 65 20  guments and one 
7550: 64 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 0a  double argument.
7560: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
7570: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f  lite3_mprintf_do
7580: 75 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  uble(.  void *No
7590: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
75a0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
75b0: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
75c0: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
75d0: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
75e0: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7600: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
7610: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
7620: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
7630: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
7640: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
7650: 20 69 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20   int a[3], i;.  
7660: 64 6f 75 62 6c 65 20 72 3b 0a 20 20 63 68 61 72  double r;.  char
7670: 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 21   *z;.  if( argc!
7680: 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =5 ){.    Tcl_Ap
7690: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
76a0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
76b0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
76c0: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
76d0: 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e   " FORMAT INT IN
76e0: 54 20 44 4f 55 42 4c 45 5c 22 22 2c 20 30 29 3b  T DOUBLE\"", 0);
76f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
7700: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72  ERROR;.  }.  for
7710: 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b  (i=2; i<4; i++){
7720: 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74  .    if( Tcl_Get
7730: 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76  Int(interp, argv
7740: 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20  [i], &a[i-2]) ) 
7750: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
7760: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f  ;.  }.  if( Tcl_
7770: 47 65 74 44 6f 75 62 6c 65 28 69 6e 74 65 72 70  GetDouble(interp
7780: 2c 20 61 72 67 76 5b 34 5d 2c 20 26 72 29 20 29  , argv[4], &r) )
7790: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
77a0: 52 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  R;.  z = sqlite3
77b0: 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d  _mprintf(argv[1]
77c0: 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 72 29  , a[0], a[1], r)
77d0: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  ;.  Tcl_AppendRe
77e0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20  sult(interp, z, 
77f0: 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  0);.  sqlite3_fr
7800: 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20  ee(z);.  return 
7810: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
7820: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
7830: 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65 64 20  _mprintf_scaled 
7840: 46 4f 52 4d 41 54 20 44 4f 55 42 4c 45 20 44 4f  FORMAT DOUBLE DO
7850: 55 42 4c 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20  UBLE.**.** Call 
7860: 6d 70 72 69 6e 74 66 20 77 69 74 68 20 61 20 73  mprintf with a s
7870: 69 6e 67 6c 65 20 64 6f 75 62 6c 65 20 61 72 67  ingle double arg
7880: 75 6d 65 6e 74 20 77 68 69 63 68 20 69 73 20 74  ument which is t
7890: 68 65 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68  he product of th
78a0: 65 0a 2a 2a 20 74 77 6f 20 61 72 67 75 6d 65 6e  e.** two argumen
78b0: 74 73 20 67 69 76 65 6e 20 61 62 6f 76 65 2e 20  ts given above. 
78c0: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
78d0: 20 67 65 6e 65 72 61 74 65 20 6f 76 65 72 66 6c   generate overfl
78e0: 6f 77 20 61 6e 64 20 75 6e 64 65 72 66 6c 6f 77  ow and underflow
78f0: 0a 2a 2a 20 64 6f 75 62 6c 65 73 20 74 6f 20 74  .** doubles to t
7900: 65 73 74 20 74 68 61 74 20 74 68 65 79 20 61 72  est that they ar
7910: 65 20 63 6f 6e 76 65 72 74 65 64 20 70 72 6f 70  e converted prop
7920: 65 72 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  erly..*/.static 
7930: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  int sqlite3_mpri
7940: 6e 74 66 5f 73 63 61 6c 65 64 28 0a 20 20 76 6f  ntf_scaled(.  vo
7950: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
7960: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
7970: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
7980: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
7990: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
79a0: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
79b0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
79c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
79d0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
79e0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
79f0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
7a00: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
7a10: 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  /.){.  int i;.  
7a20: 64 6f 75 62 6c 65 20 72 5b 32 5d 3b 0a 20 20 63  double r[2];.  c
7a30: 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72  har *z;.  if( ar
7a40: 67 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=4 ){.    Tcl
7a50: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
7a60: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
7a70: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
7a80: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
7a90: 20 20 20 20 22 20 46 4f 52 4d 41 54 20 44 4f 55      " FORMAT DOU
7aa0: 42 4c 45 20 44 4f 55 42 4c 45 5c 22 22 2c 20 30  BLE DOUBLE\"", 0
7ab0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
7ac0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66  L_ERROR;.  }.  f
7ad0: 6f 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b  or(i=2; i<4; i++
7ae0: 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47  ){.    if( Tcl_G
7af0: 65 74 44 6f 75 62 6c 65 28 69 6e 74 65 72 70 2c  etDouble(interp,
7b00: 20 61 72 67 76 5b 69 5d 2c 20 26 72 5b 69 2d 32   argv[i], &r[i-2
7b10: 5d 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  ]) ) return TCL_
7b20: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d  ERROR;.  }.  z =
7b30: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
7b40: 28 61 72 67 76 5b 31 5d 2c 20 72 5b 30 5d 2a 72  (argv[1], r[0]*r
7b50: 5b 31 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  [1]);.  Tcl_Appe
7b60: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
7b70: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
7b80: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
7b90: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
7ba0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
7bb0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72  ite3_mprintf_str
7bc0: 6f 6e 6c 79 20 46 4f 52 4d 41 54 20 53 54 52 49  only FORMAT STRI
7bd0: 4e 47 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70  NG.**.** Call mp
7be0: 72 69 6e 74 66 20 77 69 74 68 20 61 20 73 69 6e  rintf with a sin
7bf0: 67 6c 65 20 64 6f 75 62 6c 65 20 61 72 67 75 6d  gle double argum
7c00: 65 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  ent which is the
7c10: 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 0a   product of the.
7c20: 2a 2a 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73  ** two arguments
7c30: 20 67 69 76 65 6e 20 61 62 6f 76 65 2e 20 20 54   given above.  T
7c40: 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 67  his is used to g
7c50: 65 6e 65 72 61 74 65 20 6f 76 65 72 66 6c 6f 77  enerate overflow
7c60: 20 61 6e 64 20 75 6e 64 65 72 66 6c 6f 77 0a 2a   and underflow.*
7c70: 2a 20 64 6f 75 62 6c 65 73 20 74 6f 20 74 65 73  * doubles to tes
7c80: 74 20 74 68 61 74 20 74 68 65 79 20 61 72 65 20  t that they are 
7c90: 63 6f 6e 76 65 72 74 65 64 20 70 72 6f 70 65 72  converted proper
7ca0: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ly..*/.static in
7cb0: 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  t sqlite3_mprint
7cc0: 66 5f 73 74 72 6f 6e 6c 79 28 0a 20 20 76 6f 69  f_stronly(.  voi
7cd0: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
7ce0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
7cf0: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
7d00: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
7d10: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
7d20: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
7d30: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
7d40: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
7d50: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
7d60: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
7d70: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
7d80: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
7d90: 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20  .){.  char *z;. 
7da0: 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a   if( argc!=3 ){.
7db0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
7dc0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
7dd0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
7de0: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
7df0: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52  0],.       " FOR
7e00: 4d 41 54 20 53 54 52 49 4e 47 5c 22 22 2c 20 30  MAT STRING\"", 0
7e10: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
7e20: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a  L_ERROR;.  }.  z
7e30: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
7e40: 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 72 67 76  tf(argv[1], argv
7e50: 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  [2]);.  Tcl_Appe
7e60: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
7e70: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
7e80: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
7e90: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
7ea0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
7eb0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78  ite3_mprintf_hex
7ec0: 64 6f 75 62 6c 65 20 46 4f 52 4d 41 54 20 48 45  double FORMAT HE
7ed0: 58 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72  X.**.** Call mpr
7ee0: 69 6e 74 66 20 77 69 74 68 20 61 20 73 69 6e 67  intf with a sing
7ef0: 6c 65 20 64 6f 75 62 6c 65 20 61 72 67 75 6d 65  le double argume
7f00: 6e 74 20 77 68 69 63 68 20 69 73 20 64 65 72 69  nt which is deri
7f10: 76 65 64 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20  ved from the.** 
7f20: 68 65 78 61 64 65 63 69 6d 61 6c 20 65 6e 63 6f  hexadecimal enco
7f30: 64 69 6e 67 20 6f 66 20 61 6e 20 49 45 45 45 20  ding of an IEEE 
7f40: 64 6f 75 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69  double..*/.stati
7f50: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70  c int sqlite3_mp
7f60: 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65 28  rintf_hexdouble(
7f70: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
7f80: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
7f90: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
7fa0: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
7fb0: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
7fc0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
7fd0: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
7fe0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
7ff0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
8000: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
8010: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
8020: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
8030: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72  ent */.){.  char
8040: 20 2a 7a 3b 0a 20 20 64 6f 75 62 6c 65 20 72 3b   *z;.  double r;
8050: 0a 20 20 75 6e 73 69 67 6e 65 64 20 20 78 31 2c  .  unsigned  x1,
8060: 20 78 32 3b 0a 20 20 6c 6f 6e 67 20 6c 6f 6e 67   x2;.  long long
8070: 20 75 6e 73 69 67 6e 65 64 20 64 3b 0a 20 20 69   unsigned d;.  i
8080: 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  f( argc!=3 ){.  
8090: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
80a0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
80b0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
80c0: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
80d0: 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41  ,.       " FORMA
80e0: 54 20 53 54 52 49 4e 47 5c 22 22 2c 20 30 29 3b  T STRING\"", 0);
80f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
8100: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
8110: 20 73 73 63 61 6e 66 28 61 72 67 76 5b 32 5d 2c   sscanf(argv[2],
8120: 20 22 25 30 38 78 25 30 38 78 22 2c 20 26 78 32   "%08x%08x", &x2
8130: 2c 20 26 78 31 29 21 3d 32 20 29 7b 0a 20 20 20  , &x1)!=2 ){.   
8140: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
8150: 74 28 69 6e 74 65 72 70 2c 20 22 32 6e 64 20 61  t(interp, "2nd a
8160: 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64 20 62  rgument should b
8170: 65 20 31 36 2d 63 68 61 72 61 63 74 65 72 73 20  e 16-characters 
8180: 6f 66 20 68 65 78 22 2c 20 30 29 3b 0a 20 20 20  of hex", 0);.   
8190: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
81a0: 52 3b 0a 20 20 7d 0a 20 20 64 20 3d 20 78 32 3b  R;.  }.  d = x2;
81b0: 0a 20 20 64 20 3d 20 28 64 3c 3c 33 32 29 20 2b  .  d = (d<<32) +
81c0: 20 78 31 3b 0a 20 20 6d 65 6d 63 70 79 28 26 72   x1;.  memcpy(&r
81d0: 2c 20 26 64 2c 20 73 69 7a 65 6f 66 28 72 29 29  , &d, sizeof(r))
81e0: 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f  ;.  z = sqlite3_
81f0: 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c  mprintf(argv[1],
8200: 20 72 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e   r);.  Tcl_Appen
8210: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
8220: 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  z, 0);.  sqlite3
8230: 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75  _free(z);.  retu
8240: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
8250: 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
8260: 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 20 4e 20  e_malloc_fail N 
8270: 20 3f 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41   ?REPEAT-INTERVA
8280: 4c 3f 0a 2a 2a 0a 2a 2a 20 52 69 67 20 73 71 6c  L?.**.** Rig sql
8290: 69 74 65 4d 61 6c 6c 6f 63 28 29 20 74 6f 20 66  iteMalloc() to f
82a0: 61 69 6c 20 6f 6e 20 74 68 65 20 4e 2d 74 68 20  ail on the N-th 
82b0: 63 61 6c 6c 20 61 6e 64 20 65 76 65 72 79 20 52  call and every R
82c0: 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20 63  EPEAT-INTERVAL c
82d0: 61 6c 6c 0a 2a 2a 20 61 66 74 65 72 20 74 68 61  all.** after tha
82e0: 74 2e 20 20 49 66 20 52 45 50 45 41 54 2d 49 4e  t.  If REPEAT-IN
82f0: 54 45 52 56 41 4c 20 69 73 20 30 20 6f 72 20 69  TERVAL is 0 or i
8300: 73 20 6f 6d 69 74 74 65 64 2c 20 74 68 65 6e 20  s omitted, then 
8310: 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  only a single.**
8320: 20 6d 61 6c 6c 6f 63 20 77 69 6c 6c 20 66 61 69   malloc will fai
8330: 6c 2e 20 20 49 66 20 52 45 50 45 41 54 2d 49 4e  l.  If REPEAT-IN
8340: 54 45 52 56 41 4c 20 69 73 20 31 20 74 68 65 6e  TERVAL is 1 then
8350: 20 61 6c 6c 20 6d 61 6c 6c 6f 63 73 20 61 66 74   all mallocs aft
8360: 65 72 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20  er the.** first 
8370: 66 61 69 6c 75 72 65 20 77 69 6c 6c 20 63 6f 6e  failure will con
8380: 74 69 6e 75 65 20 74 6f 20 66 61 69 6c 20 6f 6e  tinue to fail on
8390: 20 65 76 65 72 79 20 63 61 6c 6c 2e 20 20 49 66   every call.  If
83a0: 20 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c   REPEAT-INTERVAL
83b0: 20 69 73 0a 2a 2a 20 32 20 74 68 65 6e 20 65 76   is.** 2 then ev
83c0: 65 72 79 20 6f 74 68 65 72 20 6d 61 6c 6c 6f 63  ery other malloc
83d0: 20 77 69 6c 6c 20 66 61 69 6c 2e 20 20 41 6e 64   will fail.  And
83e0: 20 73 6f 20 66 6f 72 74 68 2e 0a 2a 2a 0a 2a 2a   so forth..**.**
83f0: 20 54 75 72 6e 20 6f 66 66 20 74 68 69 73 20 6d   Turn off this m
8400: 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 72 65 73  echanism and res
8410: 65 74 20 74 68 65 20 73 71 6c 69 74 65 33 54 68  et the sqlite3Th
8420: 72 65 61 64 44 61 74 61 28 29 2d 3e 6d 61 6c 6c  readData()->mall
8430: 6f 63 46 61 69 6c 65 64 20 0a 2a 2a 20 76 61 72  ocFailed .** var
8440: 69 61 62 6c 65 20 69 66 20 4e 3d 3d 30 2e 0a 2a  iable if N==0..*
8450: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
8460: 4d 45 4d 44 45 42 55 47 0a 73 74 61 74 69 63 20  MEMDEBUG.static 
8470: 69 6e 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f  int sqlite_mallo
8480: 63 5f 66 61 69 6c 28 0a 20 20 76 6f 69 64 20 2a  c_fail(.  void *
8490: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
84a0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
84b0: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
84c0: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
84d0: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
84e0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
84f0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
8500: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
8510: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
8520: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
8530: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
8540: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
8550: 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20  .  int n;.  int 
8560: 72 65 70 3b 0a 20 20 69 66 28 20 61 72 67 63 21  rep;.  if( argc!
8570: 3d 32 20 26 26 20 61 72 67 63 21 3d 33 20 29 7b  =2 && argc!=3 ){
8580: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
8590: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
85a0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
85b0: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
85c0: 5b 30 5d 2c 20 22 20 4e 5c 22 22 2c 20 30 29 3b  [0], " N\"", 0);
85d0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
85e0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
85f0: 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65   Tcl_GetInt(inte
8600: 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 6e 29  rp, argv[1], &n)
8610: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
8620: 52 4f 52 3b 0a 20 20 69 66 28 20 61 72 67 63 3d  ROR;.  if( argc=
8630: 3d 33 20 29 7b 0a 20 20 20 20 69 66 28 20 54 63  =3 ){.    if( Tc
8640: 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c  l_GetInt(interp,
8650: 20 61 72 67 76 5b 32 5d 2c 20 26 72 65 70 29 20   argv[2], &rep) 
8660: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
8670: 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  OR;.  }else{.   
8680: 20 72 65 70 20 3d 20 30 3b 0a 20 20 7d 0a 20 20   rep = 0;.  }.  
8690: 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46  sqlite3_iMallocF
86a0: 61 69 6c 20 3d 20 6e 3b 0a 20 20 73 71 6c 69 74  ail = n;.  sqlit
86b0: 65 33 5f 69 4d 61 6c 6c 6f 63 52 65 73 65 74 20  e3_iMallocReset 
86c0: 3d 20 72 65 70 3b 0a 20 20 72 65 74 75 72 6e 20  = rep;.  return 
86d0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  TCL_OK;.}.#endif
86e0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
86f0: 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61  qlite_malloc_sta
8700: 74 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  t.**.** Return t
8710: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 72 69  he number of pri
8720: 6f 72 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69  or calls to sqli
8730: 74 65 4d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 73  teMalloc() and s
8740: 71 6c 69 74 65 46 72 65 65 28 29 2e 0a 2a 2f 0a  qliteFree()..*/.
8750: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
8760: 4d 44 45 42 55 47 0a 73 74 61 74 69 63 20 69 6e  MDEBUG.static in
8770: 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  t sqlite_malloc_
8780: 73 74 61 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  stat(.  void *No
8790: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
87a0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
87b0: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
87c0: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
87d0: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
87e0: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
87f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8800: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
8810: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
8820: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
8830: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
8840: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
8850: 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b   char zBuf[200];
8860: 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c  .  sprintf(zBuf,
8870: 20 22 25 64 20 25 64 20 25 64 22 2c 20 73 71 6c   "%d %d %d", sql
8880: 69 74 65 33 5f 6e 4d 61 6c 6c 6f 63 2c 73 71 6c  ite3_nMalloc,sql
8890: 69 74 65 33 5f 6e 46 72 65 65 2c 73 71 6c 69 74  ite3_nFree,sqlit
88a0: 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 29 3b  e3_iMallocFail);
88b0: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
88c0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
88d0: 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
88e0: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
88f0: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 6d  This function im
8900: 70 6c 65 6d 65 6e 74 73 20 61 20 54 63 6c 20 63  plements a Tcl c
8910: 6f 6d 6d 61 6e 64 20 74 68 61 74 20 6d 61 79 20  ommand that may 
8920: 62 65 20 69 6e 76 6f 6b 65 64 20 75 73 69 6e 67  be invoked using
8930: 20 61 6e 79 20 6f 66 0a 2a 2a 20 74 68 65 20 66   any of.** the f
8940: 6f 75 72 20 66 6f 72 6d 73 20 65 6e 75 6d 65 72  our forms enumer
8950: 61 74 65 64 20 62 65 6c 6f 77 2e 0a 2a 2a 0a 2a  ated below..**.*
8960: 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  * sqlite_malloc_
8970: 6f 75 74 73 74 61 6e 64 69 6e 67 0a 2a 2a 20 20  outstanding.**  
8980: 20 20 20 52 65 74 75 72 6e 20 61 20 73 75 6d 6d     Return a summ
8990: 61 72 79 20 6f 66 20 61 6c 6c 20 75 6e 66 72 65  ary of all unfre
89a0: 65 64 20 62 6c 6f 63 6b 73 20 6f 66 20 6d 65 6d  ed blocks of mem
89b0: 6f 72 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ory allocated by
89c0: 20 74 68 65 0a 2a 2a 20 20 20 20 20 63 75 72 72   the.**     curr
89d0: 65 6e 74 20 74 68 72 65 61 64 2e 20 53 65 65 20  ent thread. See 
89e0: 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66  comments above f
89f0: 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 4f  unction sqlite3O
8a00: 75 74 73 74 61 6e 64 69 6e 67 4d 61 6c 6c 6f 63  utstandingMalloc
8a10: 73 28 29 20 0a 2a 2a 20 20 20 20 20 69 6e 20 75  s() .**     in u
8a20: 74 69 6c 2e 63 20 66 6f 72 20 61 20 64 65 73 63  til.c for a desc
8a30: 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 72  ription of the r
8a40: 65 74 75 72 6e 65 64 20 76 61 6c 75 65 2e 0a 2a  eturned value..*
8a50: 2a 0a 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c  *.** sqlite_mall
8a60: 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d  oc_outstanding -
8a70: 62 79 74 65 73 0a 2a 2a 20 20 20 20 20 52 65 74  bytes.**     Ret
8a80: 75 72 6e 20 74 68 65 20 74 6f 74 61 6c 20 61 6d  urn the total am
8a90: 6f 75 6e 74 20 6f 66 20 75 6e 66 72 65 65 64 20  ount of unfreed 
8aa0: 6d 65 6d 6f 72 79 20 28 69 6e 20 62 79 74 65 73  memory (in bytes
8ab0: 29 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a  ) allocated by .
8ac0: 2a 2a 20 20 20 20 20 74 68 69 73 20 74 68 72 65  **     this thre
8ad0: 61 64 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ad..**.** sqlite
8ae0: 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64  _malloc_outstand
8af0: 69 6e 67 20 2d 6d 61 78 62 79 74 65 73 0a 2a 2a  ing -maxbytes.**
8b00: 20 20 20 20 20 52 65 74 75 72 6e 20 74 68 65 20       Return the 
8b10: 6d 61 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f  maximum amount o
8b20: 66 20 64 79 6e 61 6d 69 63 20 6d 65 6d 6f 72 79  f dynamic memory
8b30: 20 69 6e 20 75 73 65 20 61 74 20 6f 6e 65 20 74   in use at one t
8b40: 69 6d 65 20 0a 2a 2a 20 20 20 20 20 62 79 20 74  ime .**     by t
8b50: 68 69 73 20 74 68 72 65 61 64 2e 0a 2a 2a 0a 2a  his thread..**.*
8b60: 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  * sqlite_malloc_
8b70: 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d 63 6c 65  outstanding -cle
8b80: 61 72 6d 61 78 62 79 74 65 73 0a 2a 2a 20 20 20  armaxbytes.**   
8b90: 20 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20    Set the value 
8ba0: 72 65 74 75 72 6e 65 64 20 62 79 20 5b 73 71 6c  returned by [sql
8bb0: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74  ite_malloc_outst
8bc0: 61 6e 64 69 6e 67 20 2d 6d 61 78 62 79 74 65 73  anding -maxbytes
8bd0: 5d 0a 2a 2a 20 20 20 20 20 74 6f 20 74 68 65 20  ].**     to the 
8be0: 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66  current value of
8bf0: 20 5b 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f   [sqlite_malloc_
8c00: 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d 62 79 74  outstanding -byt
8c10: 65 73 5d 2e 20 0a 2a 2f 0a 73 74 61 74 69 63 20  es]. .*/.static 
8c20: 69 6e 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f  int sqlite_mallo
8c30: 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 28 0a 20  c_outstanding(. 
8c40: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
8c50: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
8c60: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
8c70: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
8c80: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
8c90: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
8ca0: 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  d */.  int objc,
8cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8cc0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
8cd0: 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62  ents */.  Tcl_Ob
8ce0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20  j *CONST objv[] 
8cf0: 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
8d00: 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 65 78  ments */.){.  ex
8d10: 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
8d20: 4f 75 74 73 74 61 6e 64 69 6e 67 4d 61 6c 6c 6f  OutstandingMallo
8d30: 63 73 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  cs(Tcl_Interp *i
8d40: 6e 74 65 72 70 29 3b 0a 0a 23 69 66 20 64 65 66  nterp);..#if def
8d50: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
8d60: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
8d70: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 20 26  LITE_MEMDEBUG) &
8d80: 26 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  & SQLITE_MEMDEBU
8d90: 47 3e 31 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d  G>1.  if( objc==
8da0: 32 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  2 ){.    const c
8db0: 68 61 72 20 2a 7a 41 72 67 20 3d 20 54 63 6c 5f  har *zArg = Tcl_
8dc0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
8dd0: 5d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ]);.#ifdef SQLIT
8de0: 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f  E_ENABLE_MEMORY_
8df0: 4d 41 4e 41 47 45 4d 45 4e 54 0a 20 20 20 20 54  MANAGEMENT.    T
8e00: 68 72 65 61 64 44 61 74 61 20 63 6f 6e 73 74 20  hreadData const 
8e10: 2a 70 54 64 20 3d 20 73 71 6c 69 74 65 33 54 68  *pTd = sqlite3Th
8e20: 72 65 61 64 44 61 74 61 52 65 61 64 4f 6e 6c 79  readDataReadOnly
8e30: 28 29 3b 0a 20 20 20 20 69 66 28 20 30 3d 3d 73  ();.    if( 0==s
8e40: 74 72 63 6d 70 28 7a 41 72 67 2c 20 22 2d 62 79  trcmp(zArg, "-by
8e50: 74 65 73 22 29 20 29 7b 0a 20 20 20 20 20 20 54  tes") ){.      T
8e60: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
8e70: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49  interp, Tcl_NewI
8e80: 6e 74 4f 62 6a 28 70 54 64 2d 3e 6e 41 6c 6c 6f  ntObj(pTd->nAllo
8e90: 63 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  c));.    }else i
8ea0: 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 7a 41 72  f( 0==strcmp(zAr
8eb0: 67 2c 20 22 2d 63 6c 65 61 72 6d 61 78 62 79 74  g, "-clearmaxbyt
8ec0: 65 73 22 29 20 29 7b 0a 20 20 20 20 20 20 73 71  es") ){.      sq
8ed0: 6c 69 74 65 33 5f 6e 4d 61 78 41 6c 6c 6f 63 20  lite3_nMaxAlloc 
8ee0: 3d 20 70 54 64 2d 3e 6e 41 6c 6c 6f 63 3b 0a 20  = pTd->nAlloc;. 
8ef0: 20 20 20 7d 65 6c 73 65 20 0a 23 65 6e 64 69 66     }else .#endif
8f00: 0a 20 20 20 20 69 66 28 20 30 3d 3d 73 74 72 63  .    if( 0==strc
8f10: 6d 70 28 7a 41 72 67 2c 20 22 2d 6d 61 78 62 79  mp(zArg, "-maxby
8f20: 74 65 73 22 29 20 29 7b 0a 20 20 20 20 20 20 54  tes") ){.      T
8f30: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
8f40: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 57  interp, Tcl_NewW
8f50: 69 64 65 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65  ideIntObj(sqlite
8f60: 33 5f 6e 4d 61 78 41 6c 6c 6f 63 29 29 3b 0a 20  3_nMaxAlloc));. 
8f70: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
8f80: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
8f90: 28 69 6e 74 65 72 70 2c 20 22 62 61 64 20 6f 70  (interp, "bad op
8fa0: 74 69 6f 6e 20 5c 22 22 2c 20 7a 41 72 67 2c 20  tion \"", zArg, 
8fb0: 0a 20 20 20 20 20 20 20 20 22 5c 22 3a 20 6d 75  .        "\": mu
8fc0: 73 74 20 62 65 20 2d 62 79 74 65 73 2c 20 2d 6d  st be -bytes, -m
8fd0: 61 78 62 79 74 65 73 20 6f 72 20 2d 63 6c 65 61  axbytes or -clea
8fe0: 72 6d 61 78 62 79 74 65 73 22 2c 20 30 0a 20 20  rmaxbytes", 0.  
8ff0: 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 65 74      );.      ret
9000: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
9010: 20 20 20 7d 0a 0a 20 20 20 20 72 65 74 75 72 6e     }..    return
9020: 20 54 43 4c 5f 4f 4b 3b 0a 20 20 7d 0a 0a 20 20   TCL_OK;.  }..  
9030: 69 66 28 20 6f 62 6a 63 21 3d 31 20 29 7b 0a 20  if( objc!=1 ){. 
9040: 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
9050: 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
9060: 62 6a 76 2c 20 22 3f 2d 62 79 74 65 73 3f 22 29  bjv, "?-bytes?")
9070: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
9080: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72  _ERROR;.  }..  r
9090: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 4f 75 74  eturn sqlite3Out
90a0: 73 74 61 6e 64 69 6e 67 4d 61 6c 6c 6f 63 73 28  standingMallocs(
90b0: 69 6e 74 65 72 70 29 3b 0a 23 65 6c 73 65 0a 20  interp);.#else. 
90c0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
90d0: 23 65 6e 64 69 66 0a 7d 0a 23 65 6e 64 69 66 0a  #endif.}.#endif.
90e0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
90f0: 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61  lite3_enable_sha
9100: 72 65 64 5f 63 61 63 68 65 20 20 20 20 20 20 42  red_cache      B
9110: 4f 4f 4c 45 41 4e 0a 2a 2a 0a 2a 2f 0a 23 69 66  OOLEAN.**.*/.#if
9120: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
9130: 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
9140: 48 45 29 0a 73 74 61 74 69 63 20 69 6e 74 20 74  HE).static int t
9150: 65 73 74 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65  est_enable_share
9160: 64 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20  d(.  ClientData 
9170: 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50  clientData, /* P
9180: 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ointer to sqlite
9190: 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e  3_enable_XXX fun
91a0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49  ction */.  Tcl_I
91b0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
91c0: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
91d0: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
91e0: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
91f0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63  nd */.  int objc
9200: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
9210: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
9220: 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f  ments */.  Tcl_O
9230: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
9240: 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67    /* Command arg
9250: 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69  uments */.){.  i
9260: 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 65 6e 61  nt rc;.  int ena
9270: 62 6c 65 3b 0a 20 20 69 6e 74 20 72 65 74 20 3d  ble;.  int ret =
9280: 20 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21   0;..  if( objc!
9290: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =2 ){.    Tcl_Wr
92a0: 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
92b0: 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 42 4f 4f  p, 1, objv, "BOO
92c0: 4c 45 41 4e 22 29 3b 0a 20 20 20 20 72 65 74 75  LEAN");.    retu
92d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
92e0: 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 42  }.  if( Tcl_GetB
92f0: 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e  ooleanFromObj(in
9300: 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26  terp, objv[1], &
9310: 65 6e 61 62 6c 65 29 20 29 7b 0a 20 20 20 20 72  enable) ){.    r
9320: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
9330: 0a 20 20 7d 0a 20 20 72 65 74 20 3d 20 73 71 6c  .  }.  ret = sql
9340: 69 74 65 33 54 68 72 65 61 64 44 61 74 61 52 65  ite3ThreadDataRe
9350: 61 64 4f 6e 6c 79 28 29 2d 3e 75 73 65 53 68 61  adOnly()->useSha
9360: 72 65 64 44 61 74 61 3b 0a 20 20 72 63 20 3d 20  redData;.  rc = 
9370: 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73  sqlite3_enable_s
9380: 68 61 72 65 64 5f 63 61 63 68 65 28 65 6e 61 62  hared_cache(enab
9390: 6c 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  le);.  if( rc!=S
93a0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
93b0: 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
93c0: 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 73 71  terp, (char *)sq
93d0: 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 2c  lite3ErrStr(rc),
93e0: 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20   TCL_STATIC);.  
93f0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
9400: 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65  OR;.  }.  Tcl_Se
9410: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
9420: 70 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65 61  p, Tcl_NewBoolea
9430: 6e 4f 62 6a 28 72 65 74 29 29 3b 0a 20 20 72 65  nObj(ret));.  re
9440: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23  turn TCL_OK;.}.#
9450: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  endif../*.** Usa
9460: 67 65 3a 20 73 71 6c 69 74 65 33 5f 65 78 74 65  ge: sqlite3_exte
9470: 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65  nded_result_code
9480: 73 20 20 20 44 42 20 20 20 20 42 4f 4f 4c 45 41  s   DB    BOOLEA
9490: 4e 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 20 69  N.**.*/.static i
94a0: 6e 74 20 74 65 73 74 5f 65 78 74 65 6e 64 65 64  nt test_extended
94b0: 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28 0a 20  _result_codes(. 
94c0: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
94d0: 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74  ntData, /* Point
94e0: 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e  er to sqlite3_en
94f0: 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f  able_XXX functio
9500: 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  n */.  Tcl_Inter
9510: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
9520: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
9530: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
9540: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
9550: 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
9560: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
9570: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
9580: 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
9590: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
95a0: 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
95b0: 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 65  ts */.){.  int e
95c0: 6e 61 62 6c 65 3b 0a 20 20 73 71 6c 69 74 65 33  nable;.  sqlite3
95d0: 20 2a 64 62 3b 0a 0a 20 20 69 66 28 20 6f 62 6a   *db;..  if( obj
95e0: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
95f0: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
9600: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44  erp, 1, objv, "D
9610: 42 20 42 4f 4f 4c 45 41 4e 22 29 3b 0a 20 20 20  B BOOLEAN");.   
9620: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
9630: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
9640: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
9650: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
9660: 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
9670: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
9680: 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
9690: 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69  BooleanFromObj(i
96a0: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
96b0: 26 65 6e 61 62 6c 65 29 20 29 20 72 65 74 75 72  &enable) ) retur
96c0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73  n TCL_ERROR;.  s
96d0: 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
96e0: 72 65 73 75 6c 74 5f 63 6f 64 65 73 28 64 62 2c  result_codes(db,
96f0: 20 65 6e 61 62 6c 65 29 3b 0a 20 20 72 65 74 75   enable);.  retu
9700: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
9710: 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
9720: 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75  e3_libversion_nu
9730: 6d 62 65 72 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69  mber.**.*/.stati
9740: 63 20 69 6e 74 20 74 65 73 74 5f 6c 69 62 76 65  c int test_libve
9750: 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 0a 20 20  rsion_number(.  
9760: 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
9770: 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65  tData, /* Pointe
9780: 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61  r to sqlite3_ena
9790: 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e  ble_XXX function
97a0: 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
97b0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
97c0: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
97d0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
97e0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
97f0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20  .  int objc,    
9800: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
9810: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
9820: 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43   */.  Tcl_Obj *C
9830: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20  ONST objv[]  /* 
9840: 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74  Command argument
9850: 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 53 65  s */.){.  Tcl_Se
9860: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
9870: 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a  p, Tcl_NewIntObj
9880: 28 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73  (sqlite3_libvers
9890: 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 29 29 3b 0a  ion_number()));.
98a0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
98b0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
98c0: 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63   sqlite3_table_c
98d0: 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 20 44  olumn_metadata D
98e0: 42 20 64 62 6e 61 6d 65 20 74 62 6c 6e 61 6d 65  B dbname tblname
98f0: 20 63 6f 6c 6e 61 6d 65 0a 2a 2a 0a 2a 2f 0a 23   colname.**.*/.#
9900: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
9910: 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44  BLE_COLUMN_METAD
9920: 41 54 41 0a 73 74 61 74 69 63 20 69 6e 74 20 74  ATA.static int t
9930: 65 73 74 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  est_table_column
9940: 5f 6d 65 74 61 64 61 74 61 28 0a 20 20 43 6c 69  _metadata(.  Cli
9950: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
9960: 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  ta, /* Pointer t
9970: 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  o sqlite3_enable
9980: 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  _XXX function */
9990: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
99a0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
99b0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
99c0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
99d0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
99e0: 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
99f0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
9a00: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
9a10: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
9a20: 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
9a30: 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
9a40: 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  /.){.  sqlite3 *
9a50: 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  db;.  const char
9a60: 20 2a 7a 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63   *zDb;.  const c
9a70: 68 61 72 20 2a 7a 54 62 6c 3b 0a 20 20 63 6f 6e  har *zTbl;.  con
9a80: 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 0a 20  st char *zCol;. 
9a90: 20 69 6e 74 20 72 63 3b 0a 20 20 54 63 6c 5f 4f   int rc;.  Tcl_O
9aa0: 62 6a 20 2a 70 52 65 74 3b 0a 0a 20 20 63 6f 6e  bj *pRet;..  con
9ab0: 73 74 20 63 68 61 72 20 2a 7a 44 61 74 61 74 79  st char *zDataty
9ac0: 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  pe;.  const char
9ad0: 20 2a 7a 43 6f 6c 6c 73 65 71 3b 0a 20 20 69 6e   *zCollseq;.  in
9ae0: 74 20 6e 6f 74 6e 75 6c 6c 3b 0a 20 20 69 6e 74  t notnull;.  int
9af0: 20 70 72 69 6d 61 72 79 6b 65 79 3b 0a 20 20 69   primarykey;.  i
9b00: 6e 74 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  nt autoincrement
9b10: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35  ;..  if( objc!=5
9b20: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
9b30: 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
9b40: 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42 20 64 62   1, objv, "DB db
9b50: 6e 61 6d 65 20 74 62 6c 6e 61 6d 65 20 63 6f 6c  name tblname col
9b60: 6e 61 6d 65 22 29 3b 0a 20 20 20 20 72 65 74 75  name");.    retu
9b70: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
9b80: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
9b90: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
9ba0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
9bb0: 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
9bc0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
9bd0: 7a 44 62 20 3d 20 54 63 6c 5f 47 65 74 53 74 72  zDb = Tcl_GetStr
9be0: 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20  ing(objv[2]);.  
9bf0: 7a 54 62 6c 20 3d 20 54 63 6c 5f 47 65 74 53 74  zTbl = Tcl_GetSt
9c00: 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20  ring(objv[3]);. 
9c10: 20 7a 43 6f 6c 20 3d 20 54 63 6c 5f 47 65 74 53   zCol = Tcl_GetS
9c20: 74 72 69 6e 67 28 6f 62 6a 76 5b 34 5d 29 3b 0a  tring(objv[4]);.
9c30: 0a 20 20 69 66 28 20 73 74 72 6c 65 6e 28 7a 44  .  if( strlen(zD
9c40: 62 29 3d 3d 30 20 29 20 7a 44 62 20 3d 20 30 3b  b)==0 ) zDb = 0;
9c50: 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
9c60: 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
9c70: 74 61 64 61 74 61 28 64 62 2c 20 7a 44 62 2c 20  tadata(db, zDb, 
9c80: 7a 54 62 6c 2c 20 7a 43 6f 6c 2c 20 0a 20 20 20  zTbl, zCol, .   
9c90: 20 20 20 26 7a 44 61 74 61 74 79 70 65 2c 20 26     &zDatatype, &
9ca0: 7a 43 6f 6c 6c 73 65 71 2c 20 26 6e 6f 74 6e 75  zCollseq, &notnu
9cb0: 6c 6c 2c 20 26 70 72 69 6d 61 72 79 6b 65 79 2c  ll, &primarykey,
9cc0: 20 26 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 29   &autoincrement)
9cd0: 3b 0a 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  ;..  if( rc!=SQL
9ce0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63  ITE_OK ){.    Tc
9cf0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
9d00: 6e 74 65 72 70 2c 20 73 71 6c 69 74 65 33 5f 65  nterp, sqlite3_e
9d10: 72 72 6d 73 67 28 64 62 29 2c 20 30 29 3b 0a 20  rrmsg(db), 0);. 
9d20: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
9d30: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 70 52 65 74  ROR;.  }..  pRet
9d40: 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b   = Tcl_NewObj();
9d50: 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  .  Tcl_ListObjAp
9d60: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70  pendElement(0, p
9d70: 52 65 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  Ret, Tcl_NewStri
9d80: 6e 67 4f 62 6a 28 7a 44 61 74 61 74 79 70 65 2c  ngObj(zDatatype,
9d90: 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73   -1));.  Tcl_Lis
9da0: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
9db0: 74 28 30 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e  t(0, pRet, Tcl_N
9dc0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 43 6f 6c  ewStringObj(zCol
9dd0: 6c 73 65 71 2c 20 2d 31 29 29 3b 0a 20 20 54 63  lseq, -1));.  Tc
9de0: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
9df0: 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20  lement(0, pRet, 
9e00: 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e 6f  Tcl_NewIntObj(no
9e10: 74 6e 75 6c 6c 29 29 3b 0a 20 20 54 63 6c 5f 4c  tnull));.  Tcl_L
9e20: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
9e30: 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63 6c  ent(0, pRet, Tcl
9e40: 5f 4e 65 77 49 6e 74 4f 62 6a 28 70 72 69 6d 61  _NewIntObj(prima
9e50: 72 79 6b 65 79 29 29 3b 0a 20 20 54 63 6c 5f 4c  rykey));.  Tcl_L
9e60: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
9e70: 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63 6c  ent(0, pRet, Tcl
9e80: 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 75 74 6f 69  _NewIntObj(autoi
9e90: 6e 63 72 65 6d 65 6e 74 29 29 3b 0a 20 20 54 63  ncrement));.  Tc
9ea0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
9eb0: 6e 74 65 72 70 2c 20 70 52 65 74 29 3b 0a 0a 20  nterp, pRet);.. 
9ec0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
9ed0: 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  }.#endif.../*.**
9ee0: 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
9ef0: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 44  load_extension D
9f00: 42 2d 48 41 4e 44 4c 45 20 46 49 4c 45 20 3f 50  B-HANDLE FILE ?P
9f10: 52 4f 43 3f 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ROC?.*/.static i
9f20: 6e 74 20 74 65 73 74 5f 6c 6f 61 64 5f 65 78 74  nt test_load_ext
9f30: 65 6e 73 69 6f 6e 28 0a 20 20 43 6c 69 65 6e 74  ension(.  Client
9f40: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c  Data clientData,
9f50: 20 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f 0a   /* Not used */.
9f60: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
9f70: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
9f80: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
9f90: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
9fa0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
9fb0: 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20  nt objc,        
9fc0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9fd0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
9fe0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
9ff0: 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d   objv[]  /* Comm
a000: 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f  and arguments */
a010: 0a 29 7b 0a 20 20 54 63 6c 5f 43 6d 64 49 6e 66  .){.  Tcl_CmdInf
a020: 6f 20 63 6d 64 49 6e 66 6f 3b 0a 20 20 73 71 6c  o cmdInfo;.  sql
a030: 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
a040: 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 44 62 3b  rc;.  char *zDb;
a050: 0a 20 20 63 68 61 72 20 2a 7a 46 69 6c 65 3b 0a  .  char *zFile;.
a060: 20 20 63 68 61 72 20 2a 7a 50 72 6f 63 20 3d 20    char *zProc = 
a070: 30 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20  0;.  char *zErr 
a080: 3d 20 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  = 0;..  if( objc
a090: 21 3d 34 20 26 26 20 6f 62 6a 63 21 3d 33 20 29  !=4 && objc!=3 )
a0a0: 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
a0b0: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
a0c0: 2c 20 6f 62 6a 76 2c 20 22 44 42 2d 48 41 4e 44  , objv, "DB-HAND
a0d0: 4c 45 20 46 49 4c 45 20 3f 50 52 4f 43 3f 22 29  LE FILE ?PROC?")
a0e0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
a0f0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 44  _ERROR;.  }.  zD
a100: 62 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  b = Tcl_GetStrin
a110: 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20 20 7a 46  g(objv[1]);.  zF
a120: 69 6c 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72  ile = Tcl_GetStr
a130: 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20  ing(objv[2]);.  
a140: 69 66 28 20 6f 62 6a 63 3d 3d 34 20 29 7b 0a 20  if( objc==4 ){. 
a150: 20 20 20 7a 50 72 6f 63 20 3d 20 54 63 6c 5f 47     zProc = Tcl_G
a160: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d  etString(objv[3]
a170: 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74  );.  }..  /* Ext
a180: 72 61 63 74 20 74 68 65 20 43 20 64 61 74 61 62  ract the C datab
a190: 61 73 65 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20  ase handle from 
a1a0: 74 68 65 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 20  the Tcl command 
a1b0: 6e 61 6d 65 20 2a 2f 0a 20 20 69 66 28 20 21 54  name */.  if( !T
a1c0: 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64 49 6e 66  cl_GetCommandInf
a1d0: 6f 28 69 6e 74 65 72 70 2c 20 7a 44 62 2c 20 26  o(interp, zDb, &
a1e0: 63 6d 64 49 6e 66 6f 29 20 29 7b 0a 20 20 20 20  cmdInfo) ){.    
a1f0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
a200: 28 69 6e 74 65 72 70 2c 20 22 63 6f 6d 6d 61 6e  (interp, "comman
a210: 64 20 6e 6f 74 20 66 6f 75 6e 64 3a 20 22 2c 20  d not found: ", 
a220: 7a 44 62 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  zDb, (char*)0);.
a230: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
a240: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 64 62 20 3d  RROR;.  }.  db =
a250: 20 28 28 73 74 72 75 63 74 20 53 71 6c 69 74 65   ((struct Sqlite
a260: 44 62 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62 6a 43  Db*)cmdInfo.objC
a270: 6c 69 65 6e 74 44 61 74 61 29 2d 3e 64 62 3b 0a  lientData)->db;.
a280: 20 20 61 73 73 65 72 74 28 64 62 29 3b 0a 0a 20    assert(db);.. 
a290: 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 75 6e 64   /* Call the und
a2a0: 65 72 6c 79 69 6e 67 20 43 20 66 75 6e 63 74 69  erlying C functi
a2b0: 6f 6e 2e 20 49 66 20 61 6e 20 65 72 72 6f 72 20  on. If an error 
a2c0: 6f 63 63 75 72 73 2c 20 73 65 74 20 72 63 20 74  occurs, set rc t
a2d0: 6f 20 0a 20 20 2a 2a 20 54 43 4c 5f 45 52 52 4f  o .  ** TCL_ERRO
a2e0: 52 20 61 6e 64 20 6c 6f 61 64 20 61 6e 79 20 65  R and load any e
a2f0: 72 72 6f 72 20 73 74 72 69 6e 67 20 69 6e 74 6f  rror string into
a300: 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72   the interpreter
a310: 2e 20 49 66 20 6e 6f 20 0a 20 20 2a 2a 20 65 72  . If no .  ** er
a320: 72 6f 72 20 6f 63 63 75 72 73 2c 20 73 65 74 20  ror occurs, set 
a330: 72 63 20 74 6f 20 54 43 4c 5f 4f 4b 2e 0a 20 20  rc to TCL_OK..  
a340: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
a350: 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e  _OMIT_LOAD_EXTEN
a360: 53 49 4f 4e 0a 20 20 72 63 20 3d 20 53 51 4c 49  SION.  rc = SQLI
a370: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7a 45 72 72  TE_ERROR;.  zErr
a380: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
a390: 74 66 28 22 74 68 69 73 20 62 75 69 6c 64 20 6f  tf("this build o
a3a0: 6d 69 74 73 20 73 71 6c 69 74 65 33 5f 6c 6f 61  mits sqlite3_loa
a3b0: 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 22 29 3b  d_extension()");
a3c0: 0a 23 65 6c 73 65 0a 20 20 72 63 20 3d 20 73 71  .#else.  rc = sq
a3d0: 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e  lite3_load_exten
a3e0: 73 69 6f 6e 28 64 62 2c 20 7a 46 69 6c 65 2c 20  sion(db, zFile, 
a3f0: 7a 50 72 6f 63 2c 20 26 7a 45 72 72 29 3b 0a 23  zProc, &zErr);.#
a400: 65 6e 64 69 66 0a 20 20 69 66 28 20 72 63 21 3d  endif.  if( rc!=
a410: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
a420: 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
a430: 6e 74 65 72 70 2c 20 7a 45 72 72 20 3f 20 7a 45  nterp, zErr ? zE
a440: 72 72 20 3a 20 22 22 2c 20 54 43 4c 5f 56 4f 4c  rr : "", TCL_VOL
a450: 41 54 49 4c 45 29 3b 0a 20 20 20 20 72 63 20 3d  ATILE);.    rc =
a460: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 65   TCL_ERROR;.  }e
a470: 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 54 43  lse{.    rc = TC
a480: 4c 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  L_OK;.  }.  sqli
a490: 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a  te3_free(zErr);.
a4a0: 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a  .  return rc;.}.
a4b0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
a4c0: 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61  lite3_enable_loa
a4d0: 64 5f 65 78 74 65 6e 73 69 6f 6e 20 44 42 2d 48  d_extension DB-H
a4e0: 41 4e 44 4c 45 20 4f 4e 4f 46 46 0a 2a 2f 0a 73  ANDLE ONOFF.*/.s
a4f0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65  tatic int test_e
a500: 6e 61 62 6c 65 5f 6c 6f 61 64 28 0a 20 20 43 6c  nable_load(.  Cl
a510: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
a520: 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75 73 65 64  ata, /* Not used
a530: 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
a540: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
a550: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
a560: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
a570: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
a580: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20  .  int objc,    
a590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a5a0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
a5b0: 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43   */.  Tcl_Obj *C
a5c0: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20  ONST objv[]  /* 
a5d0: 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74  Command argument
a5e0: 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 43 6d  s */.){.  Tcl_Cm
a5f0: 64 49 6e 66 6f 20 63 6d 64 49 6e 66 6f 3b 0a 20  dInfo cmdInfo;. 
a600: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
a610: 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 69 6e 74  char *zDb;.  int
a620: 20 6f 6e 6f 66 66 3b 0a 0a 20 20 69 66 28 20 6f   onoff;..  if( o
a630: 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
a640: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
a650: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
a660: 22 44 42 2d 48 41 4e 44 4c 45 20 4f 4e 4f 46 46  "DB-HANDLE ONOFF
a670: 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
a680: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
a690: 7a 44 62 20 3d 20 54 63 6c 5f 47 65 74 53 74 72  zDb = Tcl_GetStr
a6a0: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 0a 20  ing(objv[1]);.. 
a6b0: 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20   /* Extract the 
a6c0: 43 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  C database handl
a6d0: 65 20 66 72 6f 6d 20 74 68 65 20 54 63 6c 20 63  e from the Tcl c
a6e0: 6f 6d 6d 61 6e 64 20 6e 61 6d 65 20 2a 2f 0a 20  ommand name */. 
a6f0: 20 69 66 28 20 21 54 63 6c 5f 47 65 74 43 6f 6d   if( !Tcl_GetCom
a700: 6d 61 6e 64 49 6e 66 6f 28 69 6e 74 65 72 70 2c  mandInfo(interp,
a710: 20 7a 44 62 2c 20 26 63 6d 64 49 6e 66 6f 29 20   zDb, &cmdInfo) 
a720: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
a730: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
a740: 22 63 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f 75  "command not fou
a750: 6e 64 3a 20 22 2c 20 7a 44 62 2c 20 28 63 68 61  nd: ", zDb, (cha
a760: 72 2a 29 30 29 3b 0a 20 20 20 20 72 65 74 75 72  r*)0);.    retur
a770: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
a780: 0a 20 20 64 62 20 3d 20 28 28 73 74 72 75 63 74  .  db = ((struct
a790: 20 53 71 6c 69 74 65 44 62 2a 29 63 6d 64 49 6e   SqliteDb*)cmdIn
a7a0: 66 6f 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74 61  fo.objClientData
a7b0: 29 2d 3e 64 62 3b 0a 20 20 61 73 73 65 72 74 28  )->db;.  assert(
a7c0: 64 62 29 3b 0a 0a 20 20 2f 2a 20 47 65 74 20 74  db);..  /* Get t
a7d0: 68 65 20 6f 6e 6f 66 66 20 70 61 72 61 6d 65 74  he onoff paramet
a7e0: 65 72 20 2a 2f 0a 20 20 69 66 28 20 54 63 6c 5f  er */.  if( Tcl_
a7f0: 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62  GetBooleanFromOb
a800: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
a810: 5d 2c 20 26 6f 6e 6f 66 66 29 20 29 7b 0a 20 20  ], &onoff) ){.  
a820: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
a830: 4f 52 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20  OR;.  }..#ifdef 
a840: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
a850: 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 54 63 6c  _EXTENSION.  Tcl
a860: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
a870: 74 65 72 70 2c 20 22 74 68 69 73 20 62 75 69 6c  terp, "this buil
a880: 64 20 6f 6d 69 74 73 20 73 71 6c 69 74 65 33 5f  d omits sqlite3_
a890: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
a8a0: 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ");.  return TCL
a8b0: 5f 45 52 52 4f 52 3b 0a 23 65 6c 73 65 0a 20 20  _ERROR;.#else.  
a8c0: 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c  sqlite3_enable_l
a8d0: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 64 62  oad_extension(db
a8e0: 2c 20 6f 6e 6f 66 66 29 3b 0a 20 20 72 65 74 75  , onoff);.  retu
a8f0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 23 65 6e 64 69  rn TCL_OK;.#endi
a900: 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  f.}../*.** Usage
a910: 3a 20 20 73 71 6c 69 74 65 5f 61 62 6f 72 74 0a  :  sqlite_abort.
a920: 2a 2a 0a 2a 2a 20 53 68 75 74 64 6f 77 6e 20 74  **.** Shutdown t
a930: 68 65 20 70 72 6f 63 65 73 73 20 69 6d 6d 65 64  he process immed
a940: 69 61 74 65 6c 79 2e 20 20 54 68 69 73 20 69 73  iately.  This is
a950: 20 6e 6f 74 20 61 20 63 6c 65 61 6e 20 73 68 75   not a clean shu
a960: 74 64 6f 77 6e 2e 0a 2a 2a 20 54 68 69 73 20 63  tdown..** This c
a970: 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74  ommand is used t
a980: 6f 20 74 65 73 74 20 74 68 65 20 72 65 63 6f 76  o test the recov
a990: 65 72 61 62 69 6c 69 74 79 20 6f 66 20 61 20 64  erability of a d
a9a0: 61 74 61 62 61 73 65 20 69 6e 0a 2a 2a 20 74 68  atabase in.** th
a9b0: 65 20 65 76 65 6e 74 20 6f 66 20 61 20 70 72 6f  e event of a pro
a9c0: 67 72 61 6d 20 63 72 61 73 68 2e 0a 2a 2f 0a 73  gram crash..*/.s
a9d0: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
a9e0: 5f 61 62 6f 72 74 28 0a 20 20 76 6f 69 64 20 2a  _abort(.  void *
a9f0: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
aa00: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
aa10: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
aa20: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
aa30: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
aa40: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
aa50: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
aa60: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
aa70: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
aa80: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
aa90: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
aaa0: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
aab0: 0a 20 20 61 73 73 65 72 74 28 20 69 6e 74 65 72  .  assert( inter
aac0: 70 3d 3d 30 20 29 3b 20 20 20 2f 2a 20 54 68 69  p==0 );   /* Thi
aad0: 73 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 66 61  s will always fa
aae0: 69 6c 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54  il */.  return T
aaf0: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
ab00: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f  The following ro
ab10: 75 74 69 6e 65 20 69 73 20 61 20 75 73 65 72 2d  utine is a user-
ab20: 64 65 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63  defined SQL func
ab30: 74 69 6f 6e 20 77 68 6f 73 65 20 70 75 72 70 6f  tion whose purpo
ab40: 73 65 0a 2a 2a 20 69 73 20 74 6f 20 74 65 73 74  se.** is to test
ab50: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 74 5f   the sqlite_set_
ab60: 72 65 73 75 6c 74 28 29 20 41 50 49 2e 0a 2a 2f  result() API..*/
ab70: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 65 73  .static void tes
ab80: 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f  tFunc(sqlite3_co
ab90: 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20  ntext *context, 
aba0: 69 6e 74 20 61 72 67 63 2c 20 73 71 6c 69 74 65  int argc, sqlite
abb0: 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b  3_value **argv){
abc0: 0a 20 20 77 68 69 6c 65 28 20 61 72 67 63 3e 3d  .  while( argc>=
abd0: 32 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  2 ){.    const c
abe0: 68 61 72 20 2a 7a 41 72 67 30 20 3d 20 28 63 68  har *zArg0 = (ch
abf0: 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
ac00: 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b  e_text(argv[0]);
ac10: 0a 20 20 20 20 69 66 28 20 7a 41 72 67 30 20 29  .    if( zArg0 )
ac20: 7b 0a 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73  {.      if( 0==s
ac30: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41  qlite3StrICmp(zA
ac40: 72 67 30 2c 20 22 69 6e 74 22 29 20 29 7b 0a 20  rg0, "int") ){. 
ac50: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
ac60: 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78  esult_int(contex
ac70: 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
ac80: 5f 69 6e 74 28 61 72 67 76 5b 31 5d 29 29 3b 0a  _int(argv[1]));.
ac90: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
aca0: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
acb0: 41 72 67 30 2c 22 69 6e 74 36 34 22 29 3d 3d 30  Arg0,"int64")==0
acc0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
acd0: 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34  te3_result_int64
ace0: 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69 74 65  (context, sqlite
acf0: 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 61 72  3_value_int64(ar
ad00: 67 76 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d  gv[1]));.      }
ad10: 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33  else if( sqlite3
ad20: 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 73  StrICmp(zArg0,"s
ad30: 74 72 69 6e 67 22 29 3d 3d 30 20 29 7b 0a 20 20  tring")==0 ){.  
ad40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
ad50: 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78  sult_text(contex
ad60: 74 2c 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65  t, (char*)sqlite
ad70: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
ad80: 76 5b 31 5d 29 2c 20 2d 31 2c 0a 20 20 20 20 20  v[1]), -1,.     
ad90: 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 54 52         SQLITE_TR
ada0: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20  ANSIENT);.      
adb0: 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
adc0: 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22  3StrICmp(zArg0,"
add0: 64 6f 75 62 6c 65 22 29 3d 3d 30 20 29 7b 0a 20  double")==0 ){. 
ade0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
adf0: 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e  esult_double(con
ae00: 74 65 78 74 2c 20 73 71 6c 69 74 65 33 5f 76 61  text, sqlite3_va
ae10: 6c 75 65 5f 64 6f 75 62 6c 65 28 61 72 67 76 5b  lue_double(argv[
ae20: 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  1]));.      }els
ae30: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
ae40: 49 43 6d 70 28 7a 41 72 67 30 2c 22 6e 75 6c 6c  ICmp(zArg0,"null
ae50: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
ae60: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
ae70: 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0a 20  null(context);. 
ae80: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
ae90: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41  qlite3StrICmp(zA
aea0: 72 67 30 2c 22 76 61 6c 75 65 22 29 3d 3d 30 20  rg0,"value")==0 
aeb0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
aec0: 65 33 5f 72 65 73 75 6c 74 5f 76 61 6c 75 65 28  e3_result_value(
aed0: 63 6f 6e 74 65 78 74 2c 20 61 72 67 76 5b 73 71  context, argv[sq
aee0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28  lite3_value_int(
aef0: 61 72 67 76 5b 31 5d 29 5d 29 3b 0a 20 20 20 20  argv[1])]);.    
af00: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
af10: 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b   goto error_out;
af20: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
af30: 73 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 65  se{.      goto e
af40: 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a  rror_out;.    }.
af50: 20 20 20 20 61 72 67 63 20 2d 3d 20 32 3b 0a 20      argc -= 2;. 
af60: 20 20 20 61 72 67 76 20 2b 3d 20 32 3b 0a 20 20     argv += 2;.  
af70: 7d 0a 20 20 72 65 74 75 72 6e 3b 0a 0a 65 72 72  }.  return;..err
af80: 6f 72 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65  or_out:.  sqlite
af90: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63  3_result_error(c
afa0: 6f 6e 74 65 78 74 2c 22 66 69 72 73 74 20 61 72  ontext,"first ar
afb0: 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64 20 62 65  gument should be
afc0: 20 6f 6e 65 20 6f 66 3a 20 22 0a 20 20 20 20 20   one of: ".     
afd0: 20 22 69 6e 74 20 69 6e 74 36 34 20 73 74 72 69   "int int64 stri
afe0: 6e 67 20 64 6f 75 62 6c 65 20 6e 75 6c 6c 20 76  ng double null v
aff0: 61 6c 75 65 22 2c 20 2d 31 29 3b 0a 7d 0a 0a 2f  alue", -1);.}../
b000: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
b010: 6c 69 74 65 5f 72 65 67 69 73 74 65 72 5f 74 65  lite_register_te
b020: 73 74 5f 66 75 6e 63 74 69 6f 6e 20 20 44 42 20  st_function  DB 
b030: 20 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 67 69   NAME.**.** Regi
b040: 73 74 65 72 20 74 68 65 20 74 65 73 74 20 53 51  ster the test SQ
b050: 4c 20 66 75 6e 63 74 69 6f 6e 20 6f 6e 20 74 68  L function on th
b060: 65 20 64 61 74 61 62 61 73 65 20 44 42 20 75 6e  e database DB un
b070: 64 65 72 20 74 68 65 20 6e 61 6d 65 20 4e 41 4d  der the name NAM
b080: 45 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  E..*/.static int
b090: 20 74 65 73 74 5f 72 65 67 69 73 74 65 72 5f 66   test_register_f
b0a0: 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  unc(.  void *Not
b0b0: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
b0c0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
b0d0: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
b0e0: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
b0f0: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
b100: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
b110: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
b120: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
b130: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
b140: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
b150: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
b160: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
b170: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
b180: 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 61 72 67  nt rc;.  if( arg
b190: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
b1a0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
b1b0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
b1c0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
b1d0: 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20  ", argv[0], .   
b1e0: 20 20 20 20 22 20 44 42 20 46 55 4e 43 54 49 4f      " DB FUNCTIO
b1f0: 4e 2d 4e 41 4d 45 22 2c 20 30 29 3b 0a 20 20 20  N-NAME", 0);.   
b200: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
b210: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
b220: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
b230: 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20  , argv[1], &db) 
b240: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
b250: 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  OR;.  rc = sqlit
b260: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
b270: 6f 6e 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20  on(db, argv[2], 
b280: 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  -1, SQLITE_UTF8,
b290: 20 30 2c 20 0a 20 20 20 20 20 20 74 65 73 74 46   0, .      testF
b2a0: 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20 69 66  unc, 0, 0);.  if
b2b0: 28 20 72 63 21 3d 30 20 29 7b 0a 20 20 20 20 54  ( rc!=0 ){.    T
b2c0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
b2d0: 69 6e 74 65 72 70 2c 20 73 71 6c 69 74 65 33 45  interp, sqlite3E
b2e0: 72 72 53 74 72 28 72 63 29 2c 20 30 29 3b 0a 20  rrStr(rc), 0);. 
b2f0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
b300: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  ROR;.  }.  if( s
b310: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
b320: 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63  e(interp, db, rc
b330: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
b340: 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54  RROR;.  return T
b350: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
b360: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
b370: 66 69 6e 61 6c 69 7a 65 20 20 53 54 4d 54 20 0a  finalize  STMT .
b380: 2a 2a 0a 2a 2a 20 46 69 6e 61 6c 69 7a 65 20 61  **.** Finalize a
b390: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c   statement handl
b3a0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
b3b0: 20 74 65 73 74 5f 66 69 6e 61 6c 69 7a 65 28 0a   test_finalize(.
b3c0: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
b3d0: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
b3e0: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
b3f0: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
b400: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
b410: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
b420: 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72   *pStmt;.  int r
b430: 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  c;.  sqlite3 *db
b440: 20 3d 20 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a   = 0;..  if( obj
b450: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
b460: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
b470: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
b480: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
b490: 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
b4a0: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
b4b0: 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c  objv[0], 0), " <
b4c0: 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20  STMT>", 0);.    
b4d0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
b4e0: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
b4f0: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
b500: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
b510: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
b520: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
b530: 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66 28 20 70  _ERROR;..  if( p
b540: 53 74 6d 74 20 29 7b 0a 20 20 20 20 64 62 20 3d  Stmt ){.    db =
b550: 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29   StmtToDb(pStmt)
b560: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
b570: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53  ite3_finalize(pS
b580: 74 6d 74 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52  tmt);.  Tcl_SetR
b590: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
b5a0: 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d  har *)t1ErrorNam
b5b0: 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49  e(rc), TCL_STATI
b5c0: 43 29 3b 0a 20 20 69 66 28 20 64 62 20 26 26 20  C);.  if( db && 
b5d0: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
b5e0: 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
b5f0: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
b600: 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20  ERROR;.  return 
b610: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
b620: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
b630: 5f 72 65 73 65 74 20 20 53 54 4d 54 20 0a 2a 2a  _reset  STMT .**
b640: 0a 2a 2a 20 52 65 73 65 74 20 61 20 73 74 61 74  .** Reset a stat
b650: 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f  ement handle..*/
b660: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
b670: 5f 72 65 73 65 74 28 0a 20 20 76 6f 69 64 20 2a  _reset(.  void *
b680: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
b690: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
b6a0: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
b6b0: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
b6c0: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
b6d0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
b6e0: 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
b6f0: 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
b700: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
b710: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
b720: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
b730: 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
b740: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
b750: 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
b760: 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b  , " <STMT>", 0);
b770: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
b780: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
b790: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
b7a0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
b7b0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
b7c0: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
b7d0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
b7e0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73  rc = sqlite3_res
b7f0: 65 74 28 70 53 74 6d 74 29 3b 0a 20 20 69 66 28  et(pStmt);.  if(
b800: 20 70 53 74 6d 74 20 26 26 20 73 71 6c 69 74 65   pStmt && sqlite
b810: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
b820: 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53  erp, StmtToDb(pS
b830: 74 6d 74 29 2c 20 72 63 29 20 29 7b 0a 20 20 20  tmt), rc) ){.   
b840: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
b850: 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74  R;.  }.  Tcl_Set
b860: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
b870: 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61  char *)t1ErrorNa
b880: 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54  me(rc), TCL_STAT
b890: 49 43 29 3b 0a 2f 2a 0a 20 20 69 66 28 20 72 63  IC);./*.  if( rc
b8a0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
b8b0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 2a 2f  CL_ERROR;.  }.*/
b8c0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
b8d0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
b8e0: 3a 20 20 73 71 6c 69 74 65 33 5f 65 78 70 69 72  :  sqlite3_expir
b8f0: 65 64 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52  ed STMT .**.** R
b900: 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 61 20  eturn TRUE if a 
b910: 72 65 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 66  recompilation of
b920: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69   the statement i
b930: 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 2e 0a 2a  s recommended..*
b940: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
b950: 74 5f 65 78 70 69 72 65 64 28 0a 20 20 76 6f 69  t_expired(.  voi
b960: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
b970: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
b980: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
b990: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
b9a0: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
b9b0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
b9c0: 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  mt;.  if( objc!=
b9d0: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
b9e0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
b9f0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
ba00: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
ba10: 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53          Tcl_GetS
ba20: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
ba30: 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54 4d  v[0], 0), " <STM
ba40: 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  T>", 0);.    ret
ba50: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
ba60: 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74   }.  if( getStmt
ba70: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
ba80: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
ba90: 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
baa0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
bab0: 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  OR;.  Tcl_SetObj
bac0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
bad0: 63 6c 5f 4e 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a  cl_NewBooleanObj
bae0: 28 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64  (sqlite3_expired
baf0: 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74  (pStmt)));.  ret
bb00: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
bb10: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
bb20: 69 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69  ite3_transfer_bi
bb30: 6e 64 69 6e 67 73 20 46 52 4f 4d 53 54 4d 54 20  ndings FROMSTMT 
bb40: 54 4f 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 54 72 61  TOSTMT.**.** Tra
bb50: 6e 73 66 65 72 20 61 6c 6c 20 62 69 6e 64 69 6e  nsfer all bindin
bb60: 67 73 20 66 72 6f 6d 20 46 52 4f 4d 53 54 4d 54  gs from FROMSTMT
bb70: 20 6f 76 65 72 20 74 6f 20 54 4f 53 54 4d 54 0a   over to TOSTMT.
bb80: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
bb90: 73 74 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64  st_transfer_bind
bba0: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
bbb0: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
bbc0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
bbd0: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
bbe0: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
bbf0: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
bc00: 6d 74 20 2a 70 53 74 6d 74 31 2c 20 2a 70 53 74  mt *pStmt1, *pSt
bc10: 6d 74 32 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21  mt2;.  if( objc!
bc20: 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
bc30: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
bc40: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
bc50: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
bc60: 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  .        Tcl_Get
bc70: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
bc80: 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 46 52 4f  jv[0], 0), " FRO
bc90: 4d 2d 53 54 4d 54 20 54 4f 2d 53 54 4d 54 22 2c  M-STMT TO-STMT",
bca0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
bcb0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
bcc0: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
bcd0: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
bce0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
bcf0: 5d 29 2c 20 26 70 53 74 6d 74 31 29 29 20 72 65  ]), &pStmt1)) re
bd00: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
bd10: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
bd20: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
bd30: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
bd40: 32 5d 29 2c 20 26 70 53 74 6d 74 32 29 29 20 72  2]), &pStmt2)) r
bd50: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
bd60: 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
bd70: 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a 20 20 20  ult(interp, .   
bd80: 20 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28    Tcl_NewIntObj(
bd90: 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72  sqlite3_transfer
bda0: 5f 62 69 6e 64 69 6e 67 73 28 70 53 74 6d 74 31  _bindings(pStmt1
bdb0: 2c 70 53 74 6d 74 32 29 29 29 3b 0a 20 20 72 65  ,pStmt2)));.  re
bdc0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
bdd0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
bde0: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20 44 42  lite3_changes DB
bdf0: 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
be00: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e  e number of chan
be10: 67 65 73 20 6d 61 64 65 20 74 6f 20 74 68 65 20  ges made to the 
be20: 64 61 74 61 62 61 73 65 20 62 79 20 74 68 65 20  database by the 
be30: 6c 61 73 74 20 53 51 4c 0a 2a 2a 20 65 78 65 63  last SQL.** exec
be40: 75 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63  ution..*/.static
be50: 20 69 6e 74 20 74 65 73 74 5f 63 68 61 6e 67 65   int test_change
be60: 73 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  s(.  void * clie
be70: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
be80: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
be90: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
bea0: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
beb0: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ].){.  sqlite3 *
bec0: 64 62 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  db;.  if( objc!=
bed0: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
bee0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
bef0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
bf00: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
bf10: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
bf20: 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
bf30: 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   DB", 0);.    re
bf40: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
bf50: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
bf60: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
bf70: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
bf80: 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
bf90: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
bfa0: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
bfb0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
bfc0: 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
bfd0: 5f 63 68 61 6e 67 65 73 28 64 62 29 29 29 3b 0a  _changes(db)));.
bfe0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
bff0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69  .}../*.** This i
c000: 73 20 74 68 65 20 22 73 74 61 74 69 63 5f 62 69  s the "static_bi
c010: 6e 64 5f 76 61 6c 75 65 22 20 74 68 61 74 20 76  nd_value" that v
c020: 61 72 69 61 62 6c 65 73 20 61 72 65 20 62 6f 75  ariables are bou
c030: 6e 64 20 74 6f 20 77 68 65 6e 0a 2a 2a 20 74 68  nd to when.** th
c040: 65 20 46 4c 41 47 20 6f 70 74 69 6f 6e 20 6f 66  e FLAG option of
c050: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 20 69 73   sqlite3_bind is
c060: 20 22 73 74 61 74 69 63 22 0a 2a 2f 0a 73 74 61   "static".*/.sta
c070: 74 69 63 20 63 68 61 72 20 2a 73 71 6c 69 74 65  tic char *sqlite
c080: 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c  _static_bind_val
c090: 75 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20 69  ue = 0;.static i
c0a0: 6e 74 20 73 71 6c 69 74 65 5f 73 74 61 74 69 63  nt sqlite_static
c0b0: 5f 62 69 6e 64 5f 6e 62 79 74 65 20 3d 20 30 3b  _bind_nbyte = 0;
c0c0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
c0d0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 20 20 56 4d  sqlite3_bind  VM
c0e0: 20 20 49 44 58 20 20 56 41 4c 55 45 20 20 46 4c    IDX  VALUE  FL
c0f0: 41 47 53 0a 2a 2a 0a 2a 2a 20 53 65 74 73 20 74  AGS.**.** Sets t
c100: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
c110: 49 44 58 2d 74 68 20 6f 63 63 75 72 61 6e 63 65  IDX-th occurance
c120: 20 6f 66 20 22 3f 22 20 69 6e 20 74 68 65 20 6f   of "?" in the o
c130: 72 69 67 69 6e 61 6c 20 53 51 4c 0a 2a 2a 20 73  riginal SQL.** s
c140: 74 72 69 6e 67 2e 20 20 56 41 4c 55 45 20 69 73  tring.  VALUE is
c150: 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 2e 20   the new value. 
c160: 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e 75 6c 6c   If FLAGS=="null
c170: 22 20 74 68 65 6e 20 56 41 4c 55 45 20 69 73 0a  " then VALUE is.
c180: 2a 2a 20 69 67 6e 6f 72 65 64 20 61 6e 64 20 74  ** ignored and t
c190: 68 65 20 76 61 6c 75 65 20 69 73 20 73 65 74 20  he value is set 
c1a0: 74 6f 20 4e 55 4c 4c 2e 20 20 49 66 20 46 4c 41  to NULL.  If FLA
c1b0: 47 53 3d 3d 22 73 74 61 74 69 63 22 20 74 68 65  GS=="static" the
c1c0: 6e 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 69  n.** the value i
c1d0: 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
c1e0: 75 65 20 6f 66 20 61 20 73 74 61 74 69 63 20 76  ue of a static v
c1f0: 61 72 69 61 62 6c 65 20 6e 61 6d 65 64 0a 2a 2a  ariable named.**
c200: 20 22 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f   "sqlite_static_
c210: 62 69 6e 64 5f 76 61 6c 75 65 22 2e 20 20 49 66  bind_value".  If
c220: 20 46 4c 41 47 53 3d 3d 22 6e 6f 72 6d 61 6c 22   FLAGS=="normal"
c230: 20 74 68 65 6e 20 61 20 63 6f 70 79 0a 2a 2a 20   then a copy.** 
c240: 6f 66 20 74 68 65 20 56 41 4c 55 45 20 69 73 20  of the VALUE is 
c250: 6d 61 64 65 2e 20 20 49 66 20 46 4c 41 47 53 3d  made.  If FLAGS=
c260: 3d 22 62 6c 6f 62 31 30 22 20 74 68 65 6e 20 61  ="blob10" then a
c270: 20 56 41 4c 55 45 20 69 73 20 69 67 6e 6f 72 65   VALUE is ignore
c280: 64 0a 2a 2a 20 61 6e 20 61 20 31 30 2d 62 79 74  d.** an a 10-byt
c290: 65 20 62 6c 6f 62 20 22 61 62 63 5c 30 30 30 78  e blob "abc\000x
c2a0: 79 7a 5c 30 30 30 70 71 22 20 69 73 20 69 6e 73  yz\000pq" is ins
c2b0: 65 72 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  erted..*/.static
c2c0: 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 28 0a   int test_bind(.
c2d0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
c2e0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
c2f0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
c300: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
c310: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
c320: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
c330: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
c340: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c350: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
c360: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
c370: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
c380: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
c390: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  nt */.){.  sqlit
c3a0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
c3b0: 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
c3c0: 69 64 78 3b 0a 20 20 69 66 28 20 61 72 67 63 21  idx;.  if( argc!
c3d0: 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =5 ){.    Tcl_Ap
c3e0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
c3f0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
c400: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
c410: 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
c420: 20 20 22 20 56 4d 20 49 44 58 20 56 41 4c 55 45    " VM IDX VALUE
c430: 20 28 6e 75 6c 6c 7c 73 74 61 74 69 63 7c 6e 6f   (null|static|no
c440: 72 6d 61 6c 29 5c 22 22 2c 20 30 29 3b 0a 20 20  rmal)\"", 0);.  
c450: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
c460: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
c470: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
c480: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 70  erp, argv[1], &p
c490: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
c4a0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
c4b0: 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72  Tcl_GetInt(inter
c4c0: 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26 69 64 78  p, argv[2], &idx
c4d0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
c4e0: 52 52 4f 52 3b 0a 20 20 69 66 28 20 73 74 72 63  RROR;.  if( strc
c4f0: 6d 70 28 61 72 67 76 5b 34 5d 2c 22 6e 75 6c 6c  mp(argv[4],"null
c500: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  ")==0 ){.    rc 
c510: 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e  = sqlite3_bind_n
c520: 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64 78 29 3b  ull(pStmt, idx);
c530: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72  .  }else if( str
c540: 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 73 74 61  cmp(argv[4],"sta
c550: 74 69 63 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  tic")==0 ){.    
c560: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
c570: 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64  d_text(pStmt, id
c580: 78 2c 20 73 71 6c 69 74 65 5f 73 74 61 74 69 63  x, sqlite_static
c590: 5f 62 69 6e 64 5f 76 61 6c 75 65 2c 20 2d 31 2c  _bind_value, -1,
c5a0: 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   0);.  }else if(
c5b0: 20 73 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c   strcmp(argv[4],
c5c0: 22 73 74 61 74 69 63 2d 6e 62 79 74 65 73 22 29  "static-nbytes")
c5d0: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
c5e0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
c5f0: 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 73 71  t(pStmt, idx, sq
c600: 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64  lite_static_bind
c610: 5f 76 61 6c 75 65 2c 0a 20 20 20 20 20 20 20 20  _value,.        
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 20 20 20 20 20 20 20 20 73                 s
c640: 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e  qlite_static_bin
c650: 64 5f 6e 62 79 74 65 2c 20 30 29 3b 0a 20 20 7d  d_nbyte, 0);.  }
c660: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
c670: 61 72 67 76 5b 34 5d 2c 22 6e 6f 72 6d 61 6c 22  argv[4],"normal"
c680: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  )==0 ){.    rc =
c690: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
c6a0: 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 61  xt(pStmt, idx, a
c6b0: 72 67 76 5b 33 5d 2c 20 2d 31 2c 20 53 51 4c 49  rgv[3], -1, SQLI
c6c0: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
c6d0: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
c6e0: 70 28 61 72 67 76 5b 34 5d 2c 22 62 6c 6f 62 31  p(argv[4],"blob1
c6f0: 30 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  0")==0 ){.    rc
c700: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
c710: 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c  text(pStmt, idx,
c720: 20 22 61 62 63 5c 30 30 30 78 79 7a 5c 30 30 30   "abc\000xyz\000
c730: 70 71 22 2c 20 31 30 2c 20 53 51 4c 49 54 45 5f  pq", 10, SQLITE_
c740: 53 54 41 54 49 43 29 3b 0a 20 20 7d 65 6c 73 65  STATIC);.  }else
c750: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
c760: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
c770: 34 74 68 20 61 72 67 75 6d 65 6e 74 20 73 68 6f  4th argument sho
c780: 75 6c 64 20 62 65 20 22 0a 20 20 20 20 20 20 20  uld be ".       
c790: 20 22 5c 22 6e 75 6c 6c 5c 22 20 6f 72 20 5c 22   "\"null\" or \"
c7a0: 73 74 61 74 69 63 5c 22 20 6f 72 20 5c 22 6e 6f  static\" or \"no
c7b0: 72 6d 61 6c 5c 22 22 2c 20 30 29 3b 0a 20 20 20  rmal\"", 0);.   
c7c0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
c7d0: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  R;.  }.  if( sql
c7e0: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
c7f0: 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
c800: 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
c810: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
c820: 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
c830: 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a   char zBuf[50];.
c840: 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66      sprintf(zBuf
c850: 2c 20 22 28 25 64 29 20 22 2c 20 72 63 29 3b 0a  , "(%d) ", rc);.
c860: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
c870: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
c880: 66 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  f, sqlite3ErrStr
c890: 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65  (rc), 0);.    re
c8a0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
c8b0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c    }.  return TCL
c8c0: 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  _OK;.}..#ifndef 
c8d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
c8e0: 36 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61  6./*.** Usage: a
c8f0: 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20  dd_test_collate 
c900: 3c 64 62 20 70 74 72 3e 20 3c 75 74 66 38 3e 20  <db ptr> <utf8> 
c910: 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66 31 36  <utf16le> <utf16
c920: 62 65 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  be>.**.** This f
c930: 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20  unction is used 
c940: 74 6f 20 74 65 73 74 20 74 68 61 74 20 53 51 4c  to test that SQL
c950: 69 74 65 20 73 65 6c 65 63 74 73 20 74 68 65 20  ite selects the 
c960: 63 6f 72 72 65 63 74 20 63 6f 6c 6c 61 74 69 6f  correct collatio
c970: 6e 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 63 61  n.** sequence ca
c980: 6c 6c 62 61 63 6b 20 77 68 65 6e 20 6d 75 6c 74  llback when mult
c990: 69 70 6c 65 20 76 65 72 73 69 6f 6e 73 20 28 66  iple versions (f
c9a0: 6f 72 20 64 69 66 66 65 72 65 6e 74 20 74 65 78  or different tex
c9b0: 74 20 65 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a 20  t encodings).** 
c9c0: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a  are available..*
c9d0: 2a 0a 2a 2a 20 43 61 6c 6c 69 6e 67 20 74 68 69  *.** Calling thi
c9e0: 73 20 72 6f 75 74 69 6e 65 20 72 65 67 69 73 74  s routine regist
c9f0: 65 72 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  ers the collatio
ca00: 6e 20 73 65 71 75 65 6e 63 65 20 22 74 65 73 74  n sequence "test
ca10: 5f 63 6f 6c 6c 61 74 65 22 0a 2a 2a 20 77 69 74  _collate".** wit
ca20: 68 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  h database handl
ca30: 65 20 3c 64 62 3e 2e 20 54 68 65 20 73 65 63 6f  e <db>. The seco
ca40: 6e 64 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74  nd argument must
ca50: 20 62 65 20 61 20 6c 69 73 74 20 6f 66 20 74 68   be a list of th
ca60: 72 65 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 76  ree.** boolean v
ca70: 61 6c 75 65 73 2e 20 49 66 20 74 68 65 20 66 69  alues. If the fi
ca80: 72 73 74 20 69 73 20 74 72 75 65 2c 20 74 68 65  rst is true, the
ca90: 6e 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  n a version of t
caa0: 65 73 74 5f 63 6f 6c 6c 61 74 65 20 69 73 0a 2a  est_collate is.*
cab0: 2a 20 72 65 67 69 73 74 65 72 65 64 20 66 6f 72  * registered for
cac0: 20 55 54 46 2d 38 2c 20 69 66 20 74 68 65 20 73   UTF-8, if the s
cad0: 65 63 6f 6e 64 20 69 73 20 74 72 75 65 2c 20 61  econd is true, a
cae0: 20 76 65 72 73 69 6f 6e 20 69 73 20 72 65 67 69   version is regi
caf0: 73 74 65 72 65 64 20 66 6f 72 0a 2a 2a 20 55 54  stered for.** UT
cb00: 46 2d 31 36 6c 65 2c 20 69 66 20 74 68 65 20 74  F-16le, if the t
cb10: 68 69 72 64 20 69 73 20 74 72 75 65 2c 20 61 20  hird is true, a 
cb20: 55 54 46 2d 31 36 62 65 20 76 65 72 73 69 6f 6e  UTF-16be version
cb30: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a   is available..*
cb40: 2a 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  * Previous versi
cb50: 6f 6e 73 20 6f 66 20 74 65 73 74 5f 63 6f 6c 6c  ons of test_coll
cb60: 61 74 65 20 61 72 65 20 64 65 6c 65 74 65 64 2e  ate are deleted.
cb70: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 6c 61  .**.** The colla
cb80: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 74 65  tion sequence te
cb90: 73 74 5f 63 6f 6c 6c 61 74 65 20 69 73 20 69 6d  st_collate is im
cba0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c  plemented by cal
cbb0: 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c  ling the.** foll
cbc0: 6f 77 69 6e 67 20 54 43 4c 20 73 63 72 69 70 74  owing TCL script
cbd0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 22 74 65 73 74 5f  :.**.**   "test_
cbe0: 63 6f 6c 6c 61 74 65 20 3c 65 6e 63 3e 20 3c 6c  collate <enc> <l
cbf0: 68 73 3e 20 3c 72 68 73 3e 22 0a 2a 2a 0a 2a 2a  hs> <rhs>".**.**
cc00: 20 54 68 65 20 3c 6c 68 73 3e 20 61 6e 64 20 3c   The <lhs> and <
cc10: 72 68 73 3e 20 61 72 65 20 74 68 65 20 74 77 6f  rhs> are the two
cc20: 20 76 61 6c 75 65 73 20 62 65 69 6e 67 20 63 6f   values being co
cc30: 6d 70 61 72 65 64 2c 20 65 6e 63 6f 64 65 64 20  mpared, encoded 
cc40: 69 6e 20 55 54 46 2d 38 2e 0a 2a 2a 20 54 68 65  in UTF-8..** The
cc50: 20 3c 65 6e 63 3e 20 70 61 72 61 6d 65 74 65 72   <enc> parameter
cc60: 20 69 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67   is the encoding
cc70: 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f   of the collatio
cc80: 6e 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 0a  n function that.
cc90: 2a 2a 20 53 51 4c 69 74 65 20 73 65 6c 65 63 74  ** SQLite select
cca0: 65 64 20 74 6f 20 63 61 6c 6c 2e 20 54 68 65 20  ed to call. The 
ccb0: 54 43 4c 20 74 65 73 74 20 73 63 72 69 70 74 20  TCL test script 
ccc0: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0a 2a  implements the.*
ccd0: 2a 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22  * "test_collate"
cce0: 20 70 72 6f 63 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74   proc..**.** Not
ccf0: 65 20 74 68 61 74 20 74 68 69 73 20 77 69 6c 6c  e that this will
cd00: 20 6f 6e 6c 79 20 77 6f 72 6b 20 77 69 74 68 20   only work with 
cd10: 6f 6e 65 20 69 6e 74 65 70 72 65 74 65 72 20 61  one intepreter a
cd20: 74 20 61 20 74 69 6d 65 2c 20 61 73 20 74 68 65  t a time, as the
cd30: 0a 2a 2a 20 69 6e 74 65 72 70 20 70 6f 69 6e 74  .** interp point
cd40: 65 72 20 74 6f 20 75 73 65 20 77 68 65 6e 20 65  er to use when e
cd50: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 54 43  valuating the TC
cd60: 4c 20 73 63 72 69 70 74 20 69 73 20 73 74 6f 72  L script is stor
cd70: 65 64 20 69 6e 0a 2a 2a 20 70 54 65 73 74 43 6f  ed in.** pTestCo
cd80: 6c 6c 61 74 65 49 6e 74 65 72 70 2e 0a 2a 2f 0a  llateInterp..*/.
cd90: 73 74 61 74 69 63 20 54 63 6c 5f 49 6e 74 65 72  static Tcl_Inter
cda0: 70 2a 20 70 54 65 73 74 43 6f 6c 6c 61 74 65 49  p* pTestCollateI
cdb0: 6e 74 65 72 70 3b 0a 73 74 61 74 69 63 20 69 6e  nterp;.static in
cdc0: 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66  t test_collate_f
cdd0: 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 70 43 74  unc(.  void *pCt
cde0: 78 2c 20 0a 20 20 69 6e 74 20 6e 41 2c 20 63 6f  x, .  int nA, co
cdf0: 6e 73 74 20 76 6f 69 64 20 2a 7a 41 2c 0a 20 20  nst void *zA,.  
ce00: 69 6e 74 20 6e 42 2c 20 63 6f 6e 73 74 20 76 6f  int nB, const vo
ce10: 69 64 20 2a 7a 42 0a 29 7b 0a 20 20 54 63 6c 5f  id *zB.){.  Tcl_
ce20: 49 6e 74 65 72 70 20 2a 69 20 3d 20 70 54 65 73  Interp *i = pTes
ce30: 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 3b 0a  tCollateInterp;.
ce40: 20 20 69 6e 74 20 65 6e 63 69 6e 20 3d 20 28 69    int encin = (i
ce50: 6e 74 29 70 43 74 78 3b 0a 20 20 69 6e 74 20 72  nt)pCtx;.  int r
ce60: 65 73 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20  es;.  int n;..  
ce70: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
ce80: 56 61 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  Val;.  Tcl_Obj *
ce90: 70 58 3b 0a 0a 20 20 70 58 20 3d 20 54 63 6c 5f  pX;..  pX = Tcl_
cea0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65  NewStringObj("te
ceb0: 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 2d 31 29  st_collate", -1)
cec0: 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43  ;.  Tcl_IncrRefC
ced0: 6f 75 6e 74 28 70 58 29 3b 0a 0a 20 20 73 77 69  ount(pX);..  swi
cee0: 74 63 68 28 20 65 6e 63 69 6e 20 29 7b 0a 20 20  tch( encin ){.  
cef0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 55 54    case SQLITE_UT
cf00: 46 38 3a 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69  F8:.      Tcl_Li
cf10: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
cf20: 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53  nt(i,pX,Tcl_NewS
cf30: 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 38 22  tringObj("UTF-8"
cf40: 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20 62 72 65  ,-1));.      bre
cf50: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
cf60: 49 54 45 5f 55 54 46 31 36 4c 45 3a 0a 20 20 20  ITE_UTF16LE:.   
cf70: 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70     Tcl_ListObjAp
cf80: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58  pendElement(i,pX
cf90: 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62  ,Tcl_NewStringOb
cfa0: 6a 28 22 55 54 46 2d 31 36 4c 45 22 2c 2d 31 29  j("UTF-16LE",-1)
cfb0: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
cfc0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
cfd0: 55 54 46 31 36 42 45 3a 0a 20 20 20 20 20 20 54  UTF16BE:.      T
cfe0: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
cff0: 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c  Element(i,pX,Tcl
d000: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55  _NewStringObj("U
d010: 54 46 2d 31 36 42 45 22 2c 2d 31 29 29 3b 0a 20  TF-16BE",-1));. 
d020: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
d030: 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 61  default:.      a
d040: 73 73 65 72 74 28 30 29 3b 0a 20 20 7d 0a 0a 20  ssert(0);.  }.. 
d050: 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56   pVal = sqlite3V
d060: 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c  alueNew();.  sql
d070: 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
d080: 70 56 61 6c 2c 20 6e 41 2c 20 7a 41 2c 20 65 6e  pVal, nA, zA, en
d090: 63 69 6e 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  cin, SQLITE_STAT
d0a0: 49 43 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74  IC);.  n = sqlit
d0b0: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70  e3_value_bytes(p
d0c0: 56 61 6c 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74  Val);.  Tcl_List
d0d0: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
d0e0: 28 69 2c 70 58 2c 0a 20 20 20 20 20 20 54 63 6c  (i,pX,.      Tcl
d0f0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28 63  _NewStringObj((c
d100: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
d110: 75 65 5f 74 65 78 74 28 70 56 61 6c 29 2c 6e 29  ue_text(pVal),n)
d120: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75  );.  sqlite3Valu
d130: 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 6e 42  eSetStr(pVal, nB
d140: 2c 20 7a 42 2c 20 65 6e 63 69 6e 2c 20 53 51 4c  , zB, encin, SQL
d150: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 6e  ITE_STATIC);.  n
d160: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
d170: 5f 62 79 74 65 73 28 70 56 61 6c 29 3b 0a 20 20  _bytes(pVal);.  
d180: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
d190: 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 0a 20  dElement(i,pX,. 
d1a0: 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69       Tcl_NewStri
d1b0: 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73 71 6c  ngObj((char*)sql
d1c0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
d1d0: 70 56 61 6c 29 2c 6e 29 29 3b 0a 20 20 73 71 6c  pVal),n));.  sql
d1e0: 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70 56  ite3ValueFree(pV
d1f0: 61 6c 29 3b 0a 0a 20 20 54 63 6c 5f 45 76 61 6c  al);..  Tcl_Eval
d200: 4f 62 6a 45 78 28 69 2c 20 70 58 2c 20 30 29 3b  ObjEx(i, pX, 0);
d210: 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f  .  Tcl_DecrRefCo
d220: 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f 47  unt(pX);.  Tcl_G
d230: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 2c 20  etIntFromObj(i, 
d240: 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_GetObjResult
d250: 28 69 29 2c 20 26 72 65 73 29 3b 0a 20 20 72 65  (i), &res);.  re
d260: 74 75 72 6e 20 72 65 73 3b 0a 7d 0a 73 74 61 74  turn res;.}.stat
d270: 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c  ic int test_coll
d280: 61 74 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ate(.  void * cl
d290: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
d2a0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
d2b0: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
d2c0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
d2d0: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
d2e0: 20 2a 64 62 3b 0a 20 20 69 6e 74 20 76 61 6c 3b   *db;.  int val;
d2f0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
d300: 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 20 72 63   *pVal;.  int rc
d310: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35  ;..  if( objc!=5
d320: 20 29 20 67 6f 74 6f 20 62 61 64 5f 61 72 67 73   ) goto bad_args
d330: 3b 0a 20 20 70 54 65 73 74 43 6f 6c 6c 61 74 65  ;.  pTestCollate
d340: 49 6e 74 65 72 70 20 3d 20 69 6e 74 65 72 70 3b  Interp = interp;
d350: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
d360: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
d370: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
d380: 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  ]), &db) ) retur
d390: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
d3a0: 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f  if( TCL_OK!=Tcl_
d3b0: 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62  GetBooleanFromOb
d3c0: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
d3d0: 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75 72  ], &val) ) retur
d3e0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
d3f0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
d400: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  te_collation(db,
d410: 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c   "test_collate",
d420: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 0a 20   SQLITE_UTF8, . 
d430: 20 20 20 20 20 20 20 20 20 28 76 6f 69 64 20 2a           (void *
d440: 29 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 76 61  )SQLITE_UTF8, va
d450: 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66  l?test_collate_f
d460: 75 6e 63 3a 30 29 3b 0a 20 20 69 66 28 20 72 63  unc:0);.  if( rc
d470: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
d480: 20 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54     if( TCL_OK!=T
d490: 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f  cl_GetBooleanFro
d4a0: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
d4b0: 76 5b 33 5d 2c 20 26 76 61 6c 29 20 29 20 72 65  v[3], &val) ) re
d4c0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
d4d0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
d4e0: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
d4f0: 6e 28 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c  n(db, "test_coll
d500: 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  ate", SQLITE_UTF
d510: 31 36 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  16LE, .         
d520: 20 20 20 28 76 6f 69 64 20 2a 29 53 51 4c 49 54     (void *)SQLIT
d530: 45 5f 55 54 46 31 36 4c 45 2c 20 76 61 6c 3f 74  E_UTF16LE, val?t
d540: 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63  est_collate_func
d550: 3a 30 29 3b 0a 20 20 20 20 69 66 28 20 54 43 4c  :0);.    if( TCL
d560: 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c  _OK!=Tcl_GetBool
d570: 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  eanFromObj(inter
d580: 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 76 61 6c  p, objv[4], &val
d590: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
d5a0: 52 52 4f 52 3b 0a 0a 23 69 66 64 65 66 20 53 51  RROR;..#ifdef SQ
d5b0: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
d5c0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 4d    if( sqlite3_iM
d5d0: 61 6c 6c 6f 63 46 61 69 6c 3e 30 20 29 7b 0a 20  allocFail>0 ){. 
d5e0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 4d 61       sqlite3_iMa
d5f0: 6c 6c 6f 63 46 61 69 6c 2b 2b 3b 0a 20 20 20 20  llocFail++;.    
d600: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 56 61  }.#endif.    pVa
d610: 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  l = sqlite3Value
d620: 4e 65 77 28 29 3b 0a 20 20 20 20 73 71 6c 69 74  New();.    sqlit
d630: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
d640: 61 6c 2c 20 2d 31 2c 20 22 74 65 73 74 5f 63 6f  al, -1, "test_co
d650: 6c 6c 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 55  llate", SQLITE_U
d660: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
d670: 49 43 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  IC);.    rc = sq
d680: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
d690: 6c 61 74 69 6f 6e 31 36 28 64 62 2c 20 0a 20 20  lation16(db, .  
d6a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d6b0: 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53  alueText(pVal, S
d6c0: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
d6d0: 45 29 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  E), SQLITE_UTF16
d6e0: 42 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 28  BE, .          (
d6f0: 76 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f 55 54  void *)SQLITE_UT
d700: 46 31 36 42 45 2c 20 76 61 6c 3f 74 65 73 74 5f  F16BE, val?test_
d710: 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b  collate_func:0);
d720: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75  .    sqlite3Valu
d730: 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20 7d  eFree(pVal);.  }
d740: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
d750: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
d760: 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
d770: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
d780: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
d790: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f  E_OK ){.    Tcl_
d7a0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
d7b0: 65 72 70 2c 20 73 71 6c 69 74 65 33 54 65 73 74  erp, sqlite3Test
d7c0: 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30  ErrorName(rc), 0
d7d0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
d7e0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
d7f0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 62  eturn TCL_OK;..b
d800: 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 41  ad_args:.  Tcl_A
d810: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
d820: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
d830: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
d840: 2c 0a 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  ,.      Tcl_GetS
d850: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
d860: 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44 42 3e  v[0], 0), " <DB>
d870: 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c 65   <utf8> <utf16le
d880: 3e 20 3c 75 74 66 31 36 62 65 3e 22 2c 20 30 29  > <utf16be>", 0)
d890: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ;.  return TCL_E
d8a0: 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57  RROR;.}../*.** W
d8b0: 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  hen the collatio
d8c0: 6e 20 6e 65 65 64 65 64 20 63 61 6c 6c 62 61 63  n needed callbac
d8d0: 6b 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 72 65  k is invoked, re
d8e0: 63 6f 72 64 20 74 68 65 20 6e 61 6d 65 20 6f 66  cord the name of
d8f0: 20 0a 2a 2a 20 74 68 65 20 72 65 71 75 65 73 74   .** the request
d900: 65 64 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  ed collating fun
d910: 63 74 69 6f 6e 20 68 65 72 65 2e 20 20 54 68 65  ction here.  The
d920: 20 72 65 63 6f 72 64 65 64 20 6e 61 6d 65 20 69   recorded name i
d930: 73 20 6c 69 6e 6b 65 64 0a 2a 2a 20 74 6f 20 61  s linked.** to a
d940: 20 54 43 4c 20 76 61 72 69 61 62 6c 65 20 61 6e   TCL variable an
d950: 64 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73  d used to make s
d960: 75 72 65 20 74 68 61 74 20 74 68 65 20 72 65 71  ure that the req
d970: 75 65 73 74 65 64 20 63 6f 6c 6c 61 74 69 6f 6e  uested collation
d980: 0a 2a 2a 20 6e 61 6d 65 20 69 73 20 63 6f 72 72  .** name is corr
d990: 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63  ect..*/.static c
d9a0: 68 61 72 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61  har zNeededColla
d9b0: 74 69 6f 6e 5b 32 30 30 5d 3b 0a 73 74 61 74 69  tion[200];.stati
d9c0: 63 20 63 68 61 72 20 2a 70 7a 4e 65 65 64 65 64  c char *pzNeeded
d9d0: 43 6f 6c 6c 61 74 69 6f 6e 20 3d 20 7a 4e 65 65  Collation = zNee
d9e0: 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 3b 0a 0a 0a  dedCollation;...
d9f0: 2f 2a 0a 2a 2a 20 43 61 6c 6c 65 64 20 77 68 65  /*.** Called whe
da00: 6e 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  n a collating se
da10: 71 75 65 6e 63 65 20 69 73 20 6e 65 65 64 65 64  quence is needed
da20: 2e 20 20 52 65 67 69 73 74 65 72 65 64 20 75 73  .  Registered us
da30: 69 6e 67 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63  ing.** sqlite3_c
da40: 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31  ollation_needed1
da50: 36 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  6()..*/.static v
da60: 6f 69 64 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65  oid test_collate
da70: 5f 6e 65 65 64 65 64 5f 63 62 28 0a 20 20 76 6f  _needed_cb(.  vo
da80: 69 64 20 2a 70 43 74 78 2c 20 0a 20 20 73 71 6c  id *pCtx, .  sql
da90: 69 74 65 33 20 2a 64 62 2c 0a 20 20 69 6e 74 20  ite3 *db,.  int 
daa0: 65 54 65 78 74 52 65 70 2c 0a 20 20 63 6f 6e 73  eTextRep,.  cons
dab0: 74 20 76 6f 69 64 20 2a 70 4e 61 6d 65 0a 29 7b  t void *pName.){
dac0: 0a 20 20 69 6e 74 20 65 6e 63 20 3d 20 45 4e 43  .  int enc = ENC
dad0: 28 64 62 29 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  (db);.  int i;. 
dae0: 20 63 68 61 72 20 2a 7a 3b 0a 20 20 66 6f 72 28   char *z;.  for(
daf0: 7a 20 3d 20 28 63 68 61 72 2a 29 70 4e 61 6d 65  z = (char*)pName
db00: 2c 20 69 3d 30 3b 20 2a 7a 20 7c 7c 20 7a 5b 31  , i=0; *z || z[1
db10: 5d 3b 20 7a 2b 2b 29 7b 0a 20 20 20 20 69 66 28  ]; z++){.    if(
db20: 20 2a 7a 20 29 20 7a 4e 65 65 64 65 64 43 6f 6c   *z ) zNeededCol
db30: 6c 61 74 69 6f 6e 5b 69 2b 2b 5d 20 3d 20 2a 7a  lation[i++] = *z
db40: 3b 0a 20 20 7d 0a 20 20 7a 4e 65 65 64 65 64 43  ;.  }.  zNeededC
db50: 6f 6c 6c 61 74 69 6f 6e 5b 69 5d 20 3d 20 30 3b  ollation[i] = 0;
db60: 0a 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  .  sqlite3_creat
db70: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 20  e_collation(.   
db80: 20 20 20 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c     db, "test_col
db90: 6c 61 74 65 22 2c 20 45 4e 43 28 64 62 29 2c 20  late", ENC(db), 
dba0: 28 76 6f 69 64 20 2a 29 65 6e 63 2c 20 74 65 73  (void *)enc, tes
dbb0: 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 29 3b  t_collate_func);
dbc0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
dbd0: 20 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74   add_test_collat
dbe0: 65 5f 6e 65 65 64 65 64 20 44 42 0a 2a 2f 0a 73  e_needed DB.*/.s
dbf0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
dc00: 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 28 0a 20  ollate_needed(. 
dc10: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
dc20: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
dc30: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
dc40: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
dc50: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
dc60: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
dc70: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
dc80: 20 6f 62 6a 63 21 3d 32 20 29 20 67 6f 74 6f 20   objc!=2 ) goto 
dc90: 62 61 64 5f 61 72 67 73 3b 0a 20 20 69 66 28 20  bad_args;.  if( 
dca0: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
dcb0: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
dcc0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
dcd0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
dce0: 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c  RROR;.  rc = sql
dcf0: 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e  ite3_collation_n
dd00: 65 65 64 65 64 31 36 28 64 62 2c 20 30 2c 20 74  eeded16(db, 0, t
dd10: 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64  est_collate_need
dd20: 65 64 5f 63 62 29 3b 0a 20 20 7a 4e 65 65 64 65  ed_cb);.  zNeede
dd30: 64 43 6f 6c 6c 61 74 69 6f 6e 5b 30 5d 20 3d 20  dCollation[0] = 
dd40: 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  0;.  if( sqlite3
dd50: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
dd60: 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65  rp, db, rc) ) re
dd70: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
dd80: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
dd90: 0a 0a 62 61 64 5f 61 72 67 73 3a 0a 20 20 54 63  ..bad_args:.  Tc
dda0: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
ddb0: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
ddc0: 22 44 42 22 29 3b 0a 20 20 72 65 74 75 72 6e 20  "DB");.  return 
ddd0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a  TCL_ERROR;.}../*
dde0: 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20 20 20 61 64  .** tclcmd:   ad
ddf0: 64 5f 61 6c 69 67 6e 6d 65 6e 74 5f 74 65 73 74  d_alignment_test
de00: 5f 63 6f 6c 6c 61 74 69 6f 6e 73 20 20 44 42 0a  _collations  DB.
de10: 2a 2a 0a 2a 2a 20 41 64 64 20 74 77 6f 20 6e 65  **.** Add two ne
de20: 77 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  w collating sequ
de30: 65 6e 63 65 73 20 74 6f 20 74 68 65 20 64 61 74  ences to the dat
de40: 61 62 61 73 65 20 44 42 0a 2a 2a 0a 2a 2a 20 20  abase DB.**.**  
de50: 20 20 20 75 74 66 31 36 5f 61 6c 69 67 6e 65 64     utf16_aligned
de60: 0a 2a 2a 20 20 20 20 20 75 74 66 31 36 5f 75 6e  .**     utf16_un
de70: 61 6c 69 67 6e 65 64 0a 2a 2a 0a 2a 2a 20 42 6f  aligned.**.** Bo
de80: 74 68 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  th collating seq
de90: 75 65 6e 63 65 73 20 75 73 65 20 74 68 65 20 73  uences use the s
dea0: 61 6d 65 20 73 6f 72 74 20 6f 72 64 65 72 20 61  ame sort order a
deb0: 73 20 42 49 4e 41 52 59 2e 0a 2a 2a 20 54 68 65  s BINARY..** The
dec0: 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65   only difference
ded0: 20 69 73 20 74 68 61 74 20 74 68 65 20 75 74 66   is that the utf
dee0: 31 36 5f 61 6c 69 67 6e 65 64 20 63 6f 6c 6c 61  16_aligned colla
def0: 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ting.** sequence
df00: 20 69 73 20 64 65 63 6c 61 72 65 64 20 77 69 74   is declared wit
df10: 68 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46  h the SQLITE_UTF
df20: 31 36 5f 41 4c 49 47 4e 45 44 20 66 6c 61 67 2e  16_ALIGNED flag.
df30: 0a 2a 2a 20 42 6f 74 68 20 63 6f 6c 6c 61 74 69  .** Both collati
df40: 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 63  ng functions inc
df50: 72 65 6d 65 6e 74 20 74 68 65 20 75 6e 61 6c 69  rement the unali
df60: 67 6e 65 64 20 75 74 66 31 36 20 63 6f 75 6e 74  gned utf16 count
df70: 65 72 0a 2a 2a 20 77 68 65 6e 65 76 65 72 20 74  er.** whenever t
df80: 68 65 79 20 73 65 65 20 61 20 73 74 72 69 6e 67  hey see a string
df90: 20 74 68 61 74 20 62 65 67 69 6e 73 20 6f 6e 20   that begins on 
dfa0: 61 6e 20 6f 64 64 20 62 79 74 65 20 62 6f 75 6e  an odd byte boun
dfb0: 64 61 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  dary..*/.static 
dfc0: 69 6e 74 20 75 6e 61 6c 69 67 6e 65 64 5f 73 74  int unaligned_st
dfd0: 72 69 6e 67 5f 63 6f 75 6e 74 65 72 20 3d 20 30  ring_counter = 0
dfe0: 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 61 6c 69  ;.static int ali
dff0: 67 6e 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63 28 0a  gnmentCollFunc(.
e000: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
e010: 0a 20 20 69 6e 74 20 6e 4b 65 79 31 2c 20 63 6f  .  int nKey1, co
e020: 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65 79 31 2c  nst void *pKey1,
e030: 0a 20 20 69 6e 74 20 6e 4b 65 79 32 2c 20 63 6f  .  int nKey2, co
e040: 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65 79 32 0a  nst void *pKey2.
e050: 29 7b 0a 20 20 69 6e 74 20 72 63 2c 20 6e 3b 0a  ){.  int rc, n;.
e060: 20 20 6e 20 3d 20 6e 4b 65 79 31 3c 6e 4b 65 79    n = nKey1<nKey
e070: 32 20 3f 20 6e 4b 65 79 31 20 3a 20 6e 4b 65 79  2 ? nKey1 : nKey
e080: 32 3b 0a 20 20 69 66 28 20 6e 4b 65 79 31 3e 30  2;.  if( nKey1>0
e090: 20 26 26 20 31 3d 3d 28 31 26 28 69 6e 74 29 70   && 1==(1&(int)p
e0a0: 4b 65 79 31 29 20 29 20 75 6e 61 6c 69 67 6e 65  Key1) ) unaligne
e0b0: 64 5f 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72  d_string_counter
e0c0: 2b 2b 3b 0a 20 20 69 66 28 20 6e 4b 65 79 32 3e  ++;.  if( nKey2>
e0d0: 30 20 26 26 20 31 3d 3d 28 31 26 28 69 6e 74 29  0 && 1==(1&(int)
e0e0: 70 4b 65 79 32 29 20 29 20 75 6e 61 6c 69 67 6e  pKey2) ) unalign
e0f0: 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65  ed_string_counte
e100: 72 2b 2b 3b 0a 20 20 72 63 20 3d 20 6d 65 6d 63  r++;.  rc = memc
e110: 6d 70 28 70 4b 65 79 31 2c 20 70 4b 65 79 32 2c  mp(pKey1, pKey2,
e120: 20 6e 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30   n);.  if( rc==0
e130: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 6e 4b 65   ){.    rc = nKe
e140: 79 31 20 2d 20 6e 4b 65 79 32 3b 0a 20 20 7d 0a  y1 - nKey2;.  }.
e150: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 73    return rc;.}.s
e160: 74 61 74 69 63 20 69 6e 74 20 61 64 64 5f 61 6c  tatic int add_al
e170: 69 67 6e 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c  ignment_test_col
e180: 6c 61 74 69 6f 6e 73 28 0a 20 20 76 6f 69 64 20  lations(.  void 
e190: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
e1a0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
e1b0: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
e1c0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
e1d0: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
e1e0: 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
e1f0: 6f 62 6a 63 3e 3d 32 20 29 7b 0a 20 20 20 20 69  objc>=2 ){.    i
e200: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
e210: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
e220: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
e230: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
e240: 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c  L_ERROR;.    sql
e250: 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
e260: 61 74 69 6f 6e 28 64 62 2c 20 22 75 74 66 31 36  ation(db, "utf16
e270: 5f 75 6e 61 6c 69 67 6e 65 64 22 2c 0a 20 20 20  _unaligned",.   
e280: 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 31       SQLITE_UTF1
e290: 36 2c 20 0a 20 20 20 20 20 20 20 20 30 2c 20 61  6, .        0, a
e2a0: 6c 69 67 6e 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63  lignmentCollFunc
e2b0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63  );.    sqlite3_c
e2c0: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
e2d0: 64 62 2c 20 22 75 74 66 31 36 5f 61 6c 69 67 6e  db, "utf16_align
e2e0: 65 64 22 2c 0a 20 20 20 20 20 20 20 20 53 51 4c  ed",.        SQL
e2f0: 49 54 45 5f 55 54 46 31 36 20 7c 20 53 51 4c 49  ITE_UTF16 | SQLI
e300: 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45 44  TE_UTF16_ALIGNED
e310: 2c 20 0a 20 20 20 20 20 20 20 20 30 2c 20 61 6c  , .        0, al
e320: 69 67 6e 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63 29  ignmentCollFunc)
e330: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53  ;.  }.  return S
e340: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64  QLITE_OK;.}.#end
e350: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
e360: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
e370: 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  ) */../*.** Usag
e380: 65 3a 20 61 64 64 5f 74 65 73 74 5f 66 75 6e 63  e: add_test_func
e390: 74 69 6f 6e 20 3c 64 62 20 70 74 72 3e 20 3c 75  tion <db ptr> <u
e3a0: 74 66 38 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c  tf8> <utf16le> <
e3b0: 75 74 66 31 36 62 65 3e 0a 2a 2a 0a 2a 2a 20 54  utf16be>.**.** T
e3c0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
e3d0: 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 61  used to test tha
e3e0: 74 20 53 51 4c 69 74 65 20 73 65 6c 65 63 74 73  t SQLite selects
e3f0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 75 73 65   the correct use
e400: 72 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 63 61  r.** function ca
e410: 6c 6c 62 61 63 6b 20 77 68 65 6e 20 6d 75 6c 74  llback when mult
e420: 69 70 6c 65 20 76 65 72 73 69 6f 6e 73 20 28 66  iple versions (f
e430: 6f 72 20 64 69 66 66 65 72 65 6e 74 20 74 65 78  or different tex
e440: 74 20 65 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a 20  t encodings).** 
e450: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a  are available..*
e460: 2a 0a 2a 2a 20 43 61 6c 6c 69 6e 67 20 74 68 69  *.** Calling thi
e470: 73 20 72 6f 75 74 69 6e 65 20 72 65 67 69 73 74  s routine regist
e480: 65 72 73 20 75 70 20 74 6f 20 74 68 72 65 65 20  ers up to three 
e490: 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20  versions of the 
e4a0: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  user function.**
e4b0: 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22   "test_function"
e4c0: 20 77 69 74 68 20 64 61 74 61 62 61 73 65 20 68   with database h
e4d0: 61 6e 64 6c 65 20 3c 64 62 3e 2e 20 20 49 66 20  andle <db>.  If 
e4e0: 74 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d  the second argum
e4f0: 65 6e 74 20 69 73 0a 2a 2a 20 74 72 75 65 2c 20  ent is.** true, 
e500: 74 68 65 6e 20 61 20 76 65 72 73 69 6f 6e 20 6f  then a version o
e510: 66 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20  f test_function 
e520: 69 73 20 72 65 67 69 73 74 65 72 65 64 20 66 6f  is registered fo
e530: 72 20 55 54 46 2d 38 2c 20 69 66 20 74 68 65 0a  r UTF-8, if the.
e540: 2a 2a 20 74 68 69 72 64 20 69 73 20 74 72 75 65  ** third is true
e550: 2c 20 61 20 76 65 72 73 69 6f 6e 20 69 73 20 72  , a version is r
e560: 65 67 69 73 74 65 72 65 64 20 66 6f 72 20 55 54  egistered for UT
e570: 46 2d 31 36 6c 65 2c 20 69 66 20 74 68 65 20 66  F-16le, if the f
e580: 6f 75 72 74 68 20 69 73 0a 2a 2a 20 74 72 75 65  ourth is.** true
e590: 2c 20 61 20 55 54 46 2d 31 36 62 65 20 76 65 72  , a UTF-16be ver
e5a0: 73 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  sion is availabl
e5b0: 65 2e 20 20 50 72 65 76 69 6f 75 73 20 76 65 72  e.  Previous ver
e5c0: 73 69 6f 6e 73 20 6f 66 0a 2a 2a 20 74 65 73 74  sions of.** test
e5d0: 5f 66 75 6e 63 74 69 6f 6e 20 61 72 65 20 64 65  _function are de
e5e0: 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  leted..**.** The
e5f0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 69   user function i
e600: 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
e610: 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 6f 6c   calling the fol
e620: 6c 6f 77 69 6e 67 20 54 43 4c 20 73 63 72 69 70  lowing TCL scrip
e630: 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 22 74 65 73 74  t:.**.**   "test
e640: 5f 66 75 6e 63 74 69 6f 6e 20 3c 65 6e 63 3e 20  _function <enc> 
e650: 3c 61 72 67 3e 22 0a 2a 2a 0a 2a 2a 20 57 68 65  <arg>".**.** Whe
e660: 72 65 20 3c 65 6e 63 3e 20 69 73 20 6f 6e 65 20  re <enc> is one 
e670: 6f 66 20 55 54 46 2d 38 2c 20 55 54 46 2d 31 36  of UTF-8, UTF-16
e680: 4c 45 20 6f 72 20 55 54 46 31 36 42 45 2c 20 61  LE or UTF16BE, a
e690: 6e 64 20 3c 61 72 67 3e 20 69 73 20 74 68 65 0a  nd <arg> is the.
e6a0: 2a 2a 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65  ** single argume
e6b0: 6e 74 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  nt passed to the
e6c0: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20 54   SQL function. T
e6d0: 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
e6e0: 64 20 62 79 0a 2a 2a 20 74 68 65 20 54 43 4c 20  d by.** the TCL 
e6f0: 73 63 72 69 70 74 20 69 73 20 75 73 65 64 20 61  script is used a
e700: 73 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c  s the return val
e710: 75 65 20 6f 66 20 74 68 65 20 53 51 4c 20 66 75  ue of the SQL fu
e720: 6e 63 74 69 6f 6e 2e 20 49 74 0a 2a 2a 20 69 73  nction. It.** is
e730: 20 70 61 73 73 65 64 20 74 6f 20 53 51 4c 69 74   passed to SQLit
e740: 65 20 75 73 69 6e 67 20 55 54 46 2d 31 36 42 45  e using UTF-16BE
e750: 20 66 6f 72 20 61 20 55 54 46 2d 38 20 74 65 73   for a UTF-8 tes
e760: 74 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20 55 54  t_function(), UT
e770: 46 2d 38 0a 2a 2a 20 66 6f 72 20 61 20 55 54 46  F-8.** for a UTF
e780: 2d 31 36 4c 45 20 74 65 73 74 5f 66 75 6e 63 74  -16LE test_funct
e790: 69 6f 6e 28 29 2c 20 61 6e 64 20 55 54 46 2d 31  ion(), and UTF-1
e7a0: 36 4c 45 20 66 6f 72 20 61 6e 20 69 6d 70 6c 65  6LE for an imple
e7b0: 6d 65 6e 74 61 74 69 6f 6e 20 74 68 61 74 0a 2a  mentation that.*
e7c0: 2a 20 70 72 65 66 65 72 73 20 55 54 46 2d 31 36  * prefers UTF-16
e7d0: 42 45 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  BE..*/.#ifndef S
e7e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
e7f0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 65 73  .static void tes
e800: 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 38 28  t_function_utf8(
e810: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
e820: 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74  xt *pCtx, .  int
e830: 20 6e 41 72 67 2c 0a 20 20 73 71 6c 69 74 65 33   nArg,.  sqlite3
e840: 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b  _value **argv.){
e850: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
e860: 6e 74 65 72 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a  nterp;.  Tcl_Obj
e870: 20 2a 70 58 3b 0a 20 20 73 71 6c 69 74 65 33 5f   *pX;.  sqlite3_
e880: 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69  value *pVal;.  i
e890: 6e 74 65 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74  nterp = (Tcl_Int
e8a0: 65 72 70 20 2a 29 73 71 6c 69 74 65 33 5f 75 73  erp *)sqlite3_us
e8b0: 65 72 5f 64 61 74 61 28 70 43 74 78 29 3b 0a 20  er_data(pCtx);. 
e8c0: 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72   pX = Tcl_NewStr
e8d0: 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f 66 75 6e  ingObj("test_fun
e8e0: 63 74 69 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20 54  ction", -1);.  T
e8f0: 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28  cl_IncrRefCount(
e900: 70 58 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  pX);.  Tcl_ListO
e910: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
e920: 69 6e 74 65 72 70 2c 20 70 58 2c 20 54 63 6c 5f  interp, pX, Tcl_
e930: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54  NewStringObj("UT
e940: 46 2d 38 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63  F-8", -1));.  Tc
e950: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
e960: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70  lement(interp, p
e970: 58 2c 20 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65  X, .      Tcl_Ne
e980: 77 53 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72  wStringObj((char
e990: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
e9a0: 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d  text(argv[0]), -
e9b0: 31 29 29 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f  1));.  Tcl_EvalO
e9c0: 62 6a 45 78 28 69 6e 74 65 72 70 2c 20 70 58 2c  bjEx(interp, pX,
e9d0: 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52   0);.  Tcl_DecrR
e9e0: 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 73  efCount(pX);.  s
e9f0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
ea00: 78 74 28 70 43 74 78 2c 20 54 63 6c 5f 47 65 74  xt(pCtx, Tcl_Get
ea10: 53 74 72 69 6e 67 52 65 73 75 6c 74 28 69 6e 74  StringResult(int
ea20: 65 72 70 29 2c 20 2d 31 2c 20 53 51 4c 49 54 45  erp), -1, SQLITE
ea30: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 70  _TRANSIENT);.  p
ea40: 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c  Val = sqlite3Val
ea50: 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74  ueNew();.  sqlit
ea60: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
ea70: 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53  al, -1, Tcl_GetS
ea80: 74 72 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65  tringResult(inte
ea90: 72 70 29 2c 20 0a 20 20 20 20 20 20 53 51 4c 49  rp), .      SQLI
eaa0: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
eab0: 53 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74  STATIC);.  sqlit
eac0: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36  e3_result_text16
ead0: 62 65 28 70 43 74 78 2c 20 73 71 6c 69 74 65 33  be(pCtx, sqlite3
eae0: 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 62 65 28  _value_text16be(
eaf0: 70 56 61 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c  pVal),.      -1,
eb00: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
eb10: 54 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c  T);.  sqlite3Val
eb20: 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a  ueFree(pVal);.}.
eb30: 73 74 61 74 69 63 20 76 6f 69 64 20 74 65 73 74  static void test
eb40: 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 6c  _function_utf16l
eb50: 65 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  e(.  sqlite3_con
eb60: 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 69  text *pCtx, .  i
eb70: 6e 74 20 6e 41 72 67 2c 0a 20 20 73 71 6c 69 74  nt nArg,.  sqlit
eb80: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a  e3_value **argv.
eb90: 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  ){.  Tcl_Interp 
eba0: 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63 6c 5f 4f  *interp;.  Tcl_O
ebb0: 62 6a 20 2a 70 58 3b 0a 20 20 73 71 6c 69 74 65  bj *pX;.  sqlite
ebc0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20  3_value *pVal;. 
ebd0: 20 69 6e 74 65 72 70 20 3d 20 28 54 63 6c 5f 49   interp = (Tcl_I
ebe0: 6e 74 65 72 70 20 2a 29 73 71 6c 69 74 65 33 5f  nterp *)sqlite3_
ebf0: 75 73 65 72 5f 64 61 74 61 28 70 43 74 78 29 3b  user_data(pCtx);
ec00: 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53  .  pX = Tcl_NewS
ec10: 74 72 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f 66  tringObj("test_f
ec20: 75 6e 63 74 69 6f 6e 22 2c 20 2d 31 29 3b 0a 20  unction", -1);. 
ec30: 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e   Tcl_IncrRefCoun
ec40: 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f 4c 69 73  t(pX);.  Tcl_Lis
ec50: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
ec60: 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 54 63  t(interp, pX, Tc
ec70: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
ec80: 55 54 46 2d 31 36 4c 45 22 2c 20 2d 31 29 29 3b  UTF-16LE", -1));
ec90: 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  .  Tcl_ListObjAp
eca0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
ecb0: 72 70 2c 20 70 58 2c 20 0a 20 20 20 20 20 20 54  rp, pX, .      T
ecc0: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
ecd0: 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76  (char*)sqlite3_v
ece0: 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30  alue_text(argv[0
ecf0: 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f  ]), -1));.  Tcl_
ed00: 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74 65 72 70  EvalObjEx(interp
ed10: 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54 63 6c 5f  , pX, 0);.  Tcl_
ed20: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29  DecrRefCount(pX)
ed30: 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74  ;.  pVal = sqlit
ed40: 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20  e3ValueNew();.  
ed50: 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
ed60: 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 54 63 6c  tr(pVal, -1, Tcl
ed70: 5f 47 65 74 53 74 72 69 6e 67 52 65 73 75 6c 74  _GetStringResult
ed80: 28 69 6e 74 65 72 70 29 2c 20 0a 20 20 20 20 20  (interp), .     
ed90: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
eda0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
edb0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
edc0: 65 78 74 28 70 43 74 78 2c 28 63 68 61 72 2a 29  ext(pCtx,(char*)
edd0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
ede0: 78 74 28 70 56 61 6c 29 2c 2d 31 2c 53 51 4c 49  xt(pVal),-1,SQLI
edf0: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
ee00: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
ee10: 65 28 70 56 61 6c 29 3b 0a 7d 0a 73 74 61 74 69  e(pVal);.}.stati
ee20: 63 20 76 6f 69 64 20 74 65 73 74 5f 66 75 6e 63  c void test_func
ee30: 74 69 6f 6e 5f 75 74 66 31 36 62 65 28 0a 20 20  tion_utf16be(.  
ee40: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
ee50: 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41  *pCtx, .  int nA
ee60: 72 67 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg,.  sqlite3_va
ee70: 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  lue **argv.){.  
ee80: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
ee90: 72 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  rp;.  Tcl_Obj *p
eea0: 58 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  X;.  sqlite3_val
eeb0: 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65  ue *pVal;.  inte
eec0: 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70  rp = (Tcl_Interp
eed0: 20 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f   *)sqlite3_user_
eee0: 64 61 74 61 28 70 43 74 78 29 3b 0a 20 20 70 58  data(pCtx);.  pX
eef0: 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67   = Tcl_NewString
ef00: 4f 62 6a 28 22 74 65 73 74 5f 66 75 6e 63 74 69  Obj("test_functi
ef10: 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f  on", -1);.  Tcl_
ef20: 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29  IncrRefCount(pX)
ef30: 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
ef40: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
ef50: 65 72 70 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77  erp, pX, Tcl_New
ef60: 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31  StringObj("UTF-1
ef70: 36 42 45 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63  6BE", -1));.  Tc
ef80: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
ef90: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70  lement(interp, p
efa0: 58 2c 20 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65  X, .      Tcl_Ne
efb0: 77 53 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72  wStringObj((char
efc0: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
efd0: 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d  text(argv[0]), -
efe0: 31 29 29 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f  1));.  Tcl_EvalO
eff0: 62 6a 45 78 28 69 6e 74 65 72 70 2c 20 70 58 2c  bjEx(interp, pX,
f000: 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52   0);.  Tcl_DecrR
f010: 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 70  efCount(pX);.  p
f020: 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c  Val = sqlite3Val
f030: 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74  ueNew();.  sqlit
f040: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
f050: 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53  al, -1, Tcl_GetS
f060: 74 72 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65  tringResult(inte
f070: 72 70 29 2c 20 0a 20 20 20 20 20 20 53 51 4c 49  rp), .      SQLI
f080: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
f090: 53 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74  STATIC);.  sqlit
f0a0: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36  e3_result_text16
f0b0: 6c 65 28 70 43 74 78 2c 20 73 71 6c 69 74 65 33  le(pCtx, sqlite3
f0c0: 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 6c 65 28  _value_text16le(
f0d0: 70 56 61 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c  pVal),.      -1,
f0e0: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
f0f0: 54 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c  T);.  sqlite3Val
f100: 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a  ueFree(pVal);.}.
f110: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
f120: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 73  _OMIT_UTF16 */.s
f130: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 66  tatic int test_f
f140: 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20  unction(.  void 
f150: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
f160: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
f170: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
f180: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
f190: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
f1a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
f1b0: 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33 20 2a  TF16.  sqlite3 *
f1c0: 64 62 3b 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 0a  db;.  int val;..
f1d0: 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 20    if( objc!=5 ) 
f1e0: 67 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20  goto bad_args;. 
f1f0: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
f200: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
f210: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
f220: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
f230: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66  TCL_ERROR;..  if
f240: 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65  ( TCL_OK!=Tcl_Ge
f250: 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28  tBooleanFromObj(
f260: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
f270: 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20   &val) ) return 
f280: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
f290: 20 76 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69   val ){.    sqli
f2a0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
f2b0: 69 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 66 75  ion(db, "test_fu
f2c0: 6e 63 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49  nction", 1, SQLI
f2d0: 54 45 5f 55 54 46 38 2c 20 0a 20 20 20 20 20 20  TE_UTF8, .      
f2e0: 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66    interp, test_f
f2f0: 75 6e 63 74 69 6f 6e 5f 75 74 66 38 2c 20 30 2c  unction_utf8, 0,
f300: 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54   0);.  }.  if( T
f310: 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
f320: 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
f330: 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76  erp, objv[3], &v
f340: 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
f350: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61  _ERROR;.  if( va
f360: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
f370: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
f380: 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74  (db, "test_funct
f390: 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f  ion", 1, SQLITE_
f3a0: 55 54 46 31 36 4c 45 2c 20 0a 20 20 20 20 20 20  UTF16LE, .      
f3b0: 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66    interp, test_f
f3c0: 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 6c 65 2c  unction_utf16le,
f3d0: 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66   0, 0);.  }.  if
f3e0: 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65  ( TCL_OK!=Tcl_Ge
f3f0: 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28  tBooleanFromObj(
f400: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c  interp, objv[4],
f410: 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20   &val) ) return 
f420: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
f430: 20 76 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69   val ){.    sqli
f440: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
f450: 69 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 66 75  ion(db, "test_fu
f460: 6e 63 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49  nction", 1, SQLI
f470: 54 45 5f 55 54 46 31 36 42 45 2c 20 0a 20 20 20  TE_UTF16BE, .   
f480: 20 20 20 20 20 69 6e 74 65 72 70 2c 20 74 65 73       interp, tes
f490: 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36  t_function_utf16
f4a0: 62 65 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a  be, 0, 0);.  }..
f4b0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
f4c0: 0a 62 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c  .bad_args:.  Tcl
f4d0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
f4e0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
f4f0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
f500: 22 22 2c 0a 20 20 20 20 20 20 54 63 6c 5f 47 65  "",.      Tcl_Ge
f510: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
f520: 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44  bjv[0], 0), " <D
f530: 42 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36  B> <utf8> <utf16
f540: 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e 22 2c 20  le> <utf16be>", 
f550: 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  0);.#endif /* SQ
f560: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
f570: 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
f580: 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ERROR;.}../*.** 
f590: 55 73 61 67 65 3a 20 20 20 20 20 20 20 20 20 74  Usage:         t
f5a0: 65 73 74 5f 65 72 72 73 74 72 20 3c 65 72 72 20  est_errstr <err 
f5b0: 63 6f 64 65 3e 0a 2a 2a 0a 2a 2a 20 54 65 73 74  code>.**.** Test
f5c0: 20 74 68 61 74 20 74 68 65 20 65 6e 67 6c 69 73   that the englis
f5d0: 68 20 6c 61 6e 67 75 61 67 65 20 73 74 72 69 6e  h language strin
f5e0: 67 20 65 71 75 69 76 61 6c 65 6e 74 73 20 66 6f  g equivalents fo
f5f0: 72 20 73 71 6c 69 74 65 20 65 72 72 6f 72 20 63  r sqlite error c
f600: 6f 64 65 73 0a 2a 2a 20 61 72 65 20 73 61 6e 65  odes.** are sane
f610: 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20  . The parameter 
f620: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  is an integer re
f630: 70 72 65 73 65 6e 74 69 6e 67 20 61 6e 20 73 71  presenting an sq
f640: 6c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65 2e  lite error code.
f650: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
f660: 73 20 61 20 6c 69 73 74 20 6f 66 20 74 77 6f 20  s a list of two 
f670: 65 6c 65 6d 65 6e 74 73 2c 20 74 68 65 20 73 74  elements, the st
f680: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
f690: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 65 72  ion of the.** er
f6a0: 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 74 68 65  ror code and the
f6b0: 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   english languag
f6c0: 65 20 65 78 70 6c 61 6e 61 74 69 6f 6e 2e 0a 2a  e explanation..*
f6d0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
f6e0: 74 5f 65 72 72 73 74 72 28 0a 20 20 76 6f 69 64  t_errstr(.  void
f6f0: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
f700: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
f710: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
f720: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
f730: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 68  T objv[].){.  ch
f740: 61 72 20 2a 7a 43 6f 64 65 3b 0a 20 20 69 6e 74  ar *zCode;.  int
f750: 20 69 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d   i;.  if( objc!=
f760: 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  1 ){.    Tcl_Wro
f770: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
f780: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3c 65 72 72  , 1, objv, "<err
f790: 6f 72 20 63 6f 64 65 3e 22 29 3b 0a 20 20 7d 0a  or code>");.  }.
f7a0: 0a 20 20 7a 43 6f 64 65 20 3d 20 54 63 6c 5f 47  .  zCode = Tcl_G
f7b0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
f7c0: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
f7d0: 32 30 30 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  200; i++){.    i
f7e0: 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 74 31 45  f( 0==strcmp(t1E
f7f0: 72 72 6f 72 4e 61 6d 65 28 69 29 2c 20 7a 43 6f  rrorName(i), zCo
f800: 64 65 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d  de) ) break;.  }
f810: 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
f820: 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
f830: 29 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  )sqlite3ErrStr(i
f840: 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  ), 0);.  return 
f850: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
f860: 20 55 73 61 67 65 3a 20 20 20 20 62 72 65 61 6b   Usage:    break
f870: 70 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 69 73  point.**.** This
f880: 20 72 6f 75 74 69 6e 65 20 65 78 69 73 74 73 20   routine exists 
f890: 66 6f 72 20 6f 6e 65 20 70 75 72 70 6f 73 65 20  for one purpose 
f8a0: 2d 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 70  - to provide a p
f8b0: 6c 61 63 65 20 74 6f 20 70 75 74 20 61 0a 2a 2a  lace to put a.**
f8c0: 20 62 72 65 61 6b 70 6f 69 6e 74 20 77 69 74 68   breakpoint with
f8d0: 20 47 44 42 20 74 68 61 74 20 63 61 6e 20 62 65   GDB that can be
f8e0: 20 74 72 69 67 67 65 72 65 64 20 75 73 69 6e 67   triggered using
f8f0: 20 54 43 4c 20 63 6f 64 65 2e 20 20 54 68 65 20   TCL code.  The 
f900: 75 73 65 0a 2a 2a 20 66 6f 72 20 74 68 69 73 20  use.** for this 
f910: 69 73 20 77 68 65 6e 20 61 20 70 61 72 74 69 63  is when a partic
f920: 75 6c 61 72 20 74 65 73 74 20 66 61 69 6c 73 20  ular test fails 
f930: 6f 6e 20 28 73 61 79 29 20 74 68 65 20 31 34 38  on (say) the 148
f940: 35 74 68 20 69 74 65 72 61 74 69 6f 6e 2e 0a 2a  5th iteration..*
f950: 2a 20 49 6e 20 74 68 65 20 54 43 4c 20 74 65 73  * In the TCL tes
f960: 74 20 73 63 72 69 70 74 2c 20 77 65 20 63 61 6e  t script, we can
f970: 20 61 64 64 20 63 6f 64 65 20 6c 69 6b 65 20 74   add code like t
f980: 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 69  his:.**.**     i
f990: 66 20 7b 24 69 3d 3d 31 34 38 35 7d 20 62 72 65  f {$i==1485} bre
f9a0: 61 6b 70 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68  akpoint.**.** Th
f9b0: 65 6e 20 72 75 6e 20 74 65 73 74 66 69 78 74 75  en run testfixtu
f9c0: 72 65 20 69 6e 20 74 68 65 20 64 65 62 75 67 67  re in the debugg
f9d0: 65 72 20 61 6e 64 20 77 61 69 74 20 66 6f 72 20  er and wait for 
f9e0: 74 68 65 20 62 72 65 61 6b 70 6f 69 6e 74 20 74  the breakpoint t
f9f0: 6f 0a 2a 2a 20 66 69 72 65 2e 20 20 54 68 65 6e  o.** fire.  Then
fa00: 20 61 64 64 69 74 69 6f 6e 61 6c 20 62 72 65 61   additional brea
fa10: 6b 70 6f 69 6e 74 73 20 63 61 6e 20 62 65 20 73  kpoints can be s
fa20: 65 74 20 74 6f 20 74 72 61 63 65 20 64 6f 77 6e  et to trace down
fa30: 20 74 68 65 20 62 75 67 2e 0a 2a 2f 0a 73 74 61   the bug..*/.sta
fa40: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 72 65  tic int test_bre
fa50: 61 6b 70 6f 69 6e 74 28 0a 20 20 76 6f 69 64 20  akpoint(.  void 
fa60: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
fa70: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
fa80: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
fa90: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
faa0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
fab0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
fac0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
fad0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
fae0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
faf0: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
fb00: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
fb10: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
fb20: 7b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  {.  return TCL_O
fb30: 4b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f  K;         /* Do
fb40: 20 6e 6f 74 68 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f   nothing */.}../
fb50: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
fb60: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 20  lite3_bind_int  
fb70: 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a  STMT N VALUE.**.
fb80: 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69  ** Test the sqli
fb90: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 69 6e 74  te3_bind_int int
fba0: 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73  erface.  STMT is
fbb0: 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74   a prepared stat
fbc0: 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74  ement..** N is t
fbd0: 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69  he index of a wi
fbe0: 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72  ldcard in the pr
fbf0: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
fc00: 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a  .  This command.
fc10: 2a 2a 20 62 69 6e 64 73 20 61 20 33 32 2d 62 69  ** binds a 32-bi
fc20: 74 20 69 6e 74 65 67 65 72 20 56 41 4c 55 45 20  t integer VALUE 
fc30: 74 6f 20 74 68 61 74 20 77 69 6c 64 63 61 72 64  to that wildcard
fc40: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
fc50: 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 28 0a 20  test_bind_int(. 
fc60: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
fc70: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
fc80: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
fc90: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
fca0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
fcb0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
fcc0: 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64  *pStmt;.  int id
fcd0: 78 3b 0a 20 20 69 6e 74 20 76 61 6c 75 65 3b 0a  x;.  int value;.
fce0: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
fcf0: 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20   objc!=4 ){.    
fd00: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
fd10: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
fd20: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
fd30: 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54  e \"",.        T
fd40: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
fd50: 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c  Obj(objv[0], 0),
fd60: 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 22   " STMT N VALUE"
fd70: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
fd80: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
fd90: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
fda0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
fdb0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
fdc0: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
fdd0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
fde0: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
fdf0: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
fe00: 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29  , objv[2], &idx)
fe10: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
fe20: 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
fe30: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
fe40: 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76  erp, objv[3], &v
fe50: 61 6c 75 65 29 20 29 20 72 65 74 75 72 6e 20 54  alue) ) return T
fe60: 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20  CL_ERROR;..  rc 
fe70: 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  = sqlite3_bind_i
fe80: 6e 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76  nt(pStmt, idx, v
fe90: 61 6c 75 65 29 3b 0a 20 20 69 66 28 20 73 71 6c  alue);.  if( sql
fea0: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
feb0: 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
fec0: 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
fed0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
fee0: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
fef0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75  E_OK ){.    retu
ff00: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
ff10: 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  }..  return TCL_
ff20: 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73  OK;.}.../*.** Us
ff30: 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62  age:   sqlite3_b
ff40: 69 6e 64 5f 69 6e 74 36 34 20 20 53 54 4d 54 20  ind_int64  STMT 
ff50: 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65  N VALUE.**.** Te
ff60: 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62  st the sqlite3_b
ff70: 69 6e 64 5f 69 6e 74 36 34 20 69 6e 74 65 72 66  ind_int64 interf
ff80: 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20  ace.  STMT is a 
ff90: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
ffa0: 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20  nt..** N is the 
ffb0: 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63  index of a wildc
ffc0: 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61  ard in the prepa
ffd0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  red statement.  
ffe0: 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20  This command.** 
fff0: 62 69 6e 64 73 20 61 20 36 34 2d 62 69 74 20 69  binds a 64-bit i
10000 6e 74 65 67 65 72 20 56 41 4c 55 45 20 74 6f 20  nteger VALUE to 
10010 74 68 61 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a  that wildcard..*
10020 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
10030 74 5f 62 69 6e 64 5f 69 6e 74 36 34 28 0a 20 20  t_bind_int64(.  
10040 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
10050 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
10060 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
10070 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
10080 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
10090 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
100a0 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78  pStmt;.  int idx
100b0 3b 0a 20 20 69 36 34 20 76 61 6c 75 65 3b 0a 20  ;.  i64 value;. 
100c0 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
100d0 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54  objc!=4 ){.    T
100e0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
100f0 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
10100 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
10110 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
10120 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
10130 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
10140 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c  " STMT N VALUE",
10150 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
10160 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
10170 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
10180 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
10190 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
101a0 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
101b0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
101c0 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
101d0 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
101e0 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20   objv[2], &idx) 
101f0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
10200 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
10210 74 57 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28  tWideIntFromObj(
10220 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c  interp, objv[3],
10230 20 26 76 61 6c 75 65 29 20 29 20 72 65 74 75 72   &value) ) retur
10240 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
10250 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
10260 64 5f 69 6e 74 36 34 28 70 53 74 6d 74 2c 20 69  d_int64(pStmt, i
10270 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69 66  dx, value);.  if
10280 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
10290 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d  Code(interp, Stm
102a0 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63  tToDb(pStmt), rc
102b0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
102c0 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d  RROR;.  if( rc!=
102d0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
102e0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
102f0 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  R;.  }..  return
10300 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a   TCL_OK;.}.../*.
10310 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
10320 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 20  te3_bind_double 
10330 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a   STMT N VALUE.**
10340 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c  .** Test the sql
10350 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
10360 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d   interface.  STM
10370 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20  T is a prepared 
10380 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20  statement..** N 
10390 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
103a0 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68  a wildcard in th
103b0 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
103c0 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d  ment.  This comm
103d0 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 36  and.** binds a 6
103e0 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 56 41  4-bit integer VA
103f0 4c 55 45 20 74 6f 20 74 68 61 74 20 77 69 6c 64  LUE to that wild
10400 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  card..*/.static 
10410 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 64 6f  int test_bind_do
10420 75 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  uble(.  void * c
10430 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
10440 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
10450 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
10460 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
10470 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
10480 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
10490 20 69 6e 74 20 69 64 78 3b 0a 20 20 64 6f 75 62   int idx;.  doub
104a0 6c 65 20 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20  le value;.  int 
104b0 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
104c0 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =4 ){.    Tcl_Ap
104d0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
104e0 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
104f0 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
10500 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  .        Tcl_Get
10510 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
10520 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d  jv[0], 0), " STM
10530 54 20 4e 20 56 41 4c 55 45 22 2c 20 30 29 3b 0a  T N VALUE", 0);.
10540 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
10550 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
10560 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
10570 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
10580 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
10590 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
105a0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
105b0 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
105c0 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
105d0 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74  [2], &idx) ) ret
105e0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
105f0 20 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62   if( Tcl_GetDoub
10600 6c 65 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  leFromObj(interp
10610 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75  , objv[3], &valu
10620 65 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  e) ) return TCL_
10630 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73  ERROR;..  rc = s
10640 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
10650 6c 65 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76  le(pStmt, idx, v
10660 61 6c 75 65 29 3b 0a 20 20 69 66 28 20 73 71 6c  alue);.  if( sql
10670 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
10680 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
10690 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
106a0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
106b0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
106c0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75  E_OK ){.    retu
106d0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
106e0 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  }..  return TCL_
106f0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
10700 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ge:   sqlite3_bi
10710 6e 64 5f 6e 75 6c 6c 20 20 53 54 4d 54 20 4e 0a  nd_null  STMT N.
10720 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73  **.** Test the s
10730 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c  qlite3_bind_null
10740 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d   interface.  STM
10750 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20  T is a prepared 
10760 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20  statement..** N 
10770 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
10780 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68  a wildcard in th
10790 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
107a0 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d  ment.  This comm
107b0 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 4e  and.** binds a N
107c0 55 4c 4c 20 74 6f 20 74 68 65 20 77 69 6c 64 63  ULL to the wildc
107d0 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ard..*/.static i
107e0 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 6e 75 6c  nt test_bind_nul
107f0 6c 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  l(.  void * clie
10800 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
10810 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
10820 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
10830 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
10840 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
10850 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
10860 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 72 63 3b  t idx;.  int rc;
10870 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
10880 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
10890 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
108a0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
108b0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
108c0 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
108d0 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
108e0 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e  0], 0), " STMT N
108f0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
10900 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
10910 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
10920 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
10930 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
10940 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
10950 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
10960 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
10970 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
10980 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78  p, objv[2], &idx
10990 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
109a0 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71  RROR;..  rc = sq
109b0 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28  lite3_bind_null(
109c0 70 53 74 6d 74 2c 20 69 64 78 29 3b 0a 20 20 69  pStmt, idx);.  i
109d0 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
109e0 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74  rCode(interp, St
109f0 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72  mtToDb(pStmt), r
10a00 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
10a10 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21  ERROR;.  if( rc!
10a20 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
10a30 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
10a40 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  OR;.  }..  retur
10a50 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
10a60 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
10a70 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 20 53  te3_bind_text  S
10a80 54 4d 54 20 4e 20 53 54 52 49 4e 47 20 42 59 54  TMT N STRING BYT
10a90 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  ES.**.** Test th
10aa0 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  e sqlite3_bind_t
10ab0 65 78 74 20 69 6e 74 65 72 66 61 63 65 2e 20 20  ext interface.  
10ac0 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72  STMT is a prepar
10ad0 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  ed statement..**
10ae0 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78 20   N is the index 
10af0 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e  of a wildcard in
10b00 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
10b10 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63  atement.  This c
10b20 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20  ommand.** binds 
10b30 61 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 53  a UTF-8 string S
10b40 54 52 49 4e 47 20 74 6f 20 74 68 65 20 77 69 6c  TRING to the wil
10b50 64 63 61 72 64 2e 20 20 54 68 65 20 73 74 72 69  dcard.  The stri
10b60 6e 67 20 69 73 20 42 59 54 45 53 20 62 79 74 65  ng is BYTES byte
10b70 73 0a 2a 2a 20 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74  s.** long..*/.st
10b80 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69  atic int test_bi
10b90 6e 64 5f 74 65 78 74 28 0a 20 20 76 6f 69 64 20  nd_text(.  void 
10ba0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
10bb0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
10bc0 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
10bd0 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
10be0 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
10bf0 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
10c00 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69  ;.  int idx;.  i
10c10 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 68 61 72  nt bytes;.  char
10c20 20 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72   *value;.  int r
10c30 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
10c40 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  5 ){.    Tcl_App
10c50 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
10c60 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
10c70 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
10c80 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53          Tcl_GetS
10c90 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
10ca0 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54  v[0], 0), " STMT
10cb0 20 4e 20 56 41 4c 55 45 20 42 59 54 45 53 22 2c   N VALUE BYTES",
10cc0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
10cd0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
10ce0 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
10cf0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
10d00 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
10d10 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
10d20 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
10d30 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
10d40 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
10d50 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20   objv[2], &idx) 
10d60 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
10d70 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d 20 54 63  OR;.  value = Tc
10d80 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
10d90 5b 33 5d 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f  [3]);.  if( Tcl_
10da0 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
10db0 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26  terp, objv[4], &
10dc0 62 79 74 65 73 29 20 29 20 72 65 74 75 72 6e 20  bytes) ) return 
10dd0 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63  TCL_ERROR;..  rc
10de0 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
10df0 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c  text(pStmt, idx,
10e00 20 76 61 6c 75 65 2c 20 62 79 74 65 73 2c 20 53   value, bytes, S
10e10 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
10e20 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
10e30 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
10e40 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
10e50 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  t), rc) ) return
10e60 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
10e70 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
10e80 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
10e90 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
10ea0 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 6f 72  sqlite3TestError
10eb0 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20  Name(rc), 0);.  
10ec0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
10ed0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  OR;.  }..  retur
10ee0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
10ef0 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
10f00 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 20  te3_bind_text16 
10f10 3f 2d 73 74 61 74 69 63 3f 20 53 54 4d 54 20 4e  ?-static? STMT N
10f20 20 53 54 52 49 4e 47 20 42 59 54 45 53 0a 2a 2a   STRING BYTES.**
10f30 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c  .** Test the sql
10f40 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36  ite3_bind_text16
10f50 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d   interface.  STM
10f60 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20  T is a prepared 
10f70 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20  statement..** N 
10f80 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
10f90 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68  a wildcard in th
10fa0 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
10fb0 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d  ment.  This comm
10fc0 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55  and.** binds a U
10fd0 54 46 2d 31 36 20 73 74 72 69 6e 67 20 53 54 52  TF-16 string STR
10fe0 49 4e 47 20 74 6f 20 74 68 65 20 77 69 6c 64 63  ING to the wildc
10ff0 61 72 64 2e 20 20 54 68 65 20 73 74 72 69 6e 67  ard.  The string
11000 20 69 73 20 42 59 54 45 53 20 62 79 74 65 73 0a   is BYTES bytes.
11010 2a 2a 20 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74  ** long..*/.stat
11020 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64  ic int test_bind
11030 5f 74 65 78 74 31 36 28 0a 20 20 76 6f 69 64 20  _text16(.  void 
11040 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
11050 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
11060 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
11070 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
11080 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
11090 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
110a0 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33 5f 73  TF16.  sqlite3_s
110b0 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
110c0 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 62 79 74  t idx;.  int byt
110d0 65 73 3b 0a 20 20 63 68 61 72 20 2a 76 61 6c 75  es;.  char *valu
110e0 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  e;.  int rc;..  
110f0 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 29 20 3d  void (*xDel)() =
11100 20 28 6f 62 6a 63 3d 3d 36 3f 53 51 4c 49 54 45   (objc==6?SQLITE
11110 5f 53 54 41 54 49 43 3a 53 51 4c 49 54 45 5f 54  _STATIC:SQLITE_T
11120 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 54 63 6c  RANSIENT);.  Tcl
11130 5f 4f 62 6a 20 2a 6f 53 74 6d 74 20 20 20 20 3d  _Obj *oStmt    =
11140 20 6f 62 6a 76 5b 6f 62 6a 63 2d 34 5d 3b 0a 20   objv[objc-4];. 
11150 20 54 63 6c 5f 4f 62 6a 20 2a 6f 4e 20 20 20 20   Tcl_Obj *oN    
11160 20 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 33     = objv[objc-3
11170 5d 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 53  ];.  Tcl_Obj *oS
11180 74 72 69 6e 67 20 20 3d 20 6f 62 6a 76 5b 6f 62  tring  = objv[ob
11190 6a 63 2d 32 5d 3b 0a 20 20 54 63 6c 5f 4f 62 6a  jc-2];.  Tcl_Obj
111a0 20 2a 6f 42 79 74 65 73 20 20 20 3d 20 6f 62 6a   *oBytes   = obj
111b0 76 5b 6f 62 6a 63 2d 31 5d 3b 0a 0a 20 20 69 66  v[objc-1];..  if
111c0 28 20 6f 62 6a 63 21 3d 35 20 26 26 20 6f 62 6a  ( objc!=5 && obj
111d0 63 21 3d 36 29 7b 0a 20 20 20 20 54 63 6c 5f 41  c!=6){.    Tcl_A
111e0 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
111f0 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
11200 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
11210 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
11220 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
11230 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54  bjv[0], 0), " ST
11240 4d 54 20 4e 20 56 41 4c 55 45 20 42 59 54 45 53  MT N VALUE BYTES
11250 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
11260 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
11270 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
11280 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
11290 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 53 74  cl_GetString(oSt
112a0 6d 74 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  mt), &pStmt) ) r
112b0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
112c0 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
112d0 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
112e0 20 6f 4e 2c 20 26 69 64 78 29 20 29 20 72 65 74   oN, &idx) ) ret
112f0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
11300 20 76 61 6c 75 65 20 3d 20 28 63 68 61 72 2a 29   value = (char*)
11310 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79  Tcl_GetByteArray
11320 46 72 6f 6d 4f 62 6a 28 6f 53 74 72 69 6e 67 2c  FromObj(oString,
11330 20 30 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47   0);.  if( Tcl_G
11340 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
11350 65 72 70 2c 20 6f 42 79 74 65 73 2c 20 26 62 79  erp, oBytes, &by
11360 74 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43  tes) ) return TC
11370 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d  L_ERROR;..  rc =
11380 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
11390 78 74 31 36 28 70 53 74 6d 74 2c 20 69 64 78 2c  xt16(pStmt, idx,
113a0 20 28 76 6f 69 64 20 2a 29 76 61 6c 75 65 2c 20   (void *)value, 
113b0 62 79 74 65 73 2c 20 78 44 65 6c 29 3b 0a 20 20  bytes, xDel);.  
113c0 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
113d0 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53  rrCode(interp, S
113e0 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20  tmtToDb(pStmt), 
113f0 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
11400 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63  _ERROR;.  if( rc
11410 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
11420 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
11430 52 4f 52 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66  ROR;.  }..#endif
11440 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
11450 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72  UTF16 */.  retur
11460 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
11470 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
11480 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 20 20 53  te3_bind_blob  S
11490 54 4d 54 20 4e 20 44 41 54 41 20 42 59 54 45 53  TMT N DATA BYTES
114a0 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20  .**.** Test the 
114b0 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
114c0 62 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54  b interface.  ST
114d0 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64  MT is a prepared
114e0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e   statement..** N
114f0 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
11500 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74   a wildcard in t
11510 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
11520 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d  ement.  This com
11530 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20  mand.** binds a 
11540 42 4c 4f 42 20 74 6f 20 74 68 65 20 77 69 6c 64  BLOB to the wild
11550 63 61 72 64 2e 20 20 54 68 65 20 42 4c 4f 42 20  card.  The BLOB 
11560 69 73 20 42 59 54 45 53 20 62 79 74 65 73 20 69  is BYTES bytes i
11570 6e 20 73 69 7a 65 2e 0a 2a 2f 0a 73 74 61 74 69  n size..*/.stati
11580 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
11590 62 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a 20 63  blob(.  void * c
115a0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
115b0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
115c0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
115d0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
115e0 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
115f0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
11600 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20   int idx;.  int 
11610 62 79 74 65 73 3b 0a 20 20 63 68 61 72 20 2a 76  bytes;.  char *v
11620 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  alue;.  int rc;.
11630 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29  .  if( objc!=5 )
11640 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
11650 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
11660 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
11670 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
11680 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
11690 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
116a0 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20  ], 0), " STMT N 
116b0 44 41 54 41 20 42 59 54 45 53 22 2c 20 30 29 3b  DATA BYTES", 0);
116c0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
116d0 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
116e0 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
116f0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
11700 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
11710 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
11720 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
11730 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
11740 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
11750 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65  v[2], &idx) ) re
11760 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
11770 20 20 76 61 6c 75 65 20 3d 20 54 63 6c 5f 47 65    value = Tcl_Ge
11780 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29  tString(objv[3])
11790 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
117a0 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
117b0 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 62 79 74 65  , objv[4], &byte
117c0 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  s) ) return TCL_
117d0 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73  ERROR;..  rc = s
117e0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
117f0 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c  (pStmt, idx, val
11800 75 65 2c 20 62 79 74 65 73 2c 20 53 51 4c 49 54  ue, bytes, SQLIT
11810 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  E_TRANSIENT);.  
11820 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
11830 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53  rrCode(interp, S
11840 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20  tmtToDb(pStmt), 
11850 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
11860 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63  _ERROR;.  if( rc
11870 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
11880 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
11890 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75  ROR;.  }..  retu
118a0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
118b0 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c  .** Usage:   sql
118c0 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
118d0 74 65 72 5f 63 6f 75 6e 74 20 20 53 54 4d 54 0a  ter_count  STMT.
118e0 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
118f0 20 6e 75 6d 62 65 72 20 6f 66 20 77 69 6c 64 63   number of wildc
11900 61 72 64 73 20 69 6e 20 74 68 65 20 67 69 76 65  ards in the give
11910 6e 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  n statement..*/.
11920 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
11930 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63  bind_parameter_c
11940 6f 75 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  ount(.  void * c
11950 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
11960 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
11970 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
11980 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
11990 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
119a0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a  3_stmt *pStmt;..
119b0 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
119c0 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75  .    Tcl_WrongNu
119d0 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
119e0 20 6f 62 6a 76 2c 20 22 53 54 4d 54 22 29 3b 0a   objv, "STMT");.
119f0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
11a00 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
11a10 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
11a20 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
11a30 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
11a40 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
11a50 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
11a60 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
11a70 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
11a80 4f 62 6a 28 73 71 6c 69 74 65 33 5f 62 69 6e 64  Obj(sqlite3_bind
11a90 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74  _parameter_count
11aa0 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74  (pStmt)));.  ret
11ab0 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
11ac0 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
11ad0 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
11ae0 65 74 65 72 5f 6e 61 6d 65 20 20 53 54 4d 54 20  eter_name  STMT 
11af0 20 4e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20   N.**.** Return 
11b00 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
11b10 4e 74 68 20 77 69 6c 64 63 61 72 64 2e 20 20 54  Nth wildcard.  T
11b20 68 65 20 66 69 72 73 74 20 77 69 6c 64 63 61 72  he first wildcar
11b30 64 20 69 73 20 31 2e 0a 2a 2a 20 41 6e 20 65 6d  d is 1..** An em
11b40 70 74 79 20 73 74 72 69 6e 67 20 69 73 20 72 65  pty string is re
11b50 74 75 72 6e 65 64 20 69 66 20 4e 20 69 73 20 6f  turned if N is o
11b60 75 74 20 6f 66 20 72 61 6e 67 65 20 6f 72 20 69  ut of range or i
11b70 66 20 74 68 65 20 77 69 6c 64 63 61 72 64 0a 2a  f the wildcard.*
11b80 2a 20 69 73 20 6e 61 6d 65 6c 65 73 73 2e 0a 2a  * is nameless..*
11b90 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
11ba0 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  t_bind_parameter
11bb0 5f 6e 61 6d 65 28 0a 20 20 76 6f 69 64 20 2a 20  _name(.  void * 
11bc0 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
11bd0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
11be0 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
11bf0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
11c00 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
11c10 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
11c20 20 20 69 6e 74 20 69 3b 0a 0a 20 20 69 66 28 20    int i;..  if( 
11c30 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
11c40 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
11c50 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
11c60 20 22 53 54 4d 54 20 4e 22 29 3b 0a 20 20 20 20   "STMT N");.    
11c70 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
11c80 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53  ;.  }.  if( getS
11c90 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
11ca0 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
11cb0 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
11cc0 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
11cd0 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
11ce0 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
11cf0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
11d00 26 69 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  &i) ) return TCL
11d10 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65  _ERROR;.  Tcl_Se
11d20 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
11d30 70 2c 20 0a 20 20 20 20 20 54 63 6c 5f 4e 65 77  p, .     Tcl_New
11d40 53 74 72 69 6e 67 4f 62 6a 28 73 71 6c 69 74 65  StringObj(sqlite
11d50 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
11d60 5f 6e 61 6d 65 28 70 53 74 6d 74 2c 69 29 2c 2d  _name(pStmt,i),-
11d70 31 29 0a 20 20 29 3b 0a 20 20 72 65 74 75 72 6e  1).  );.  return
11d80 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
11d90 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
11da0 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
11db0 72 5f 69 6e 64 65 78 20 20 53 54 4d 54 20 20 4e  r_index  STMT  N
11dc0 41 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  AME.**.** Return
11dd0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
11de0 65 20 77 69 6c 64 63 61 72 64 20 63 61 6c 6c 65  e wildcard calle
11df0 64 20 4e 41 4d 45 2e 20 20 52 65 74 75 72 6e 20  d NAME.  Return 
11e00 30 20 69 66 20 74 68 65 72 65 20 69 73 0a 2a 2a  0 if there is.**
11e10 20 6e 6f 20 73 75 63 68 20 77 69 6c 64 63 61 72   no such wildcar
11e20 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
11e30 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d   test_bind_param
11e40 65 74 65 72 5f 69 6e 64 65 78 28 0a 20 20 76 6f  eter_index(.  vo
11e50 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
11e60 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
11e70 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
11e80 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
11e90 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
11ea0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
11eb0 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  tmt;..  if( objc
11ec0 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=3 ){.    Tcl_W
11ed0 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
11ee0 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54  rp, 1, objv, "ST
11ef0 4d 54 20 4e 41 4d 45 22 29 3b 0a 20 20 20 20 72  MT NAME");.    r
11f00 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
11f10 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74  .  }.  if( getSt
11f20 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
11f30 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
11f40 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
11f50 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
11f60 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  RROR;.  Tcl_SetO
11f70 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
11f80 20 0a 20 20 20 20 20 54 63 6c 5f 4e 65 77 49 6e   .     Tcl_NewIn
11f90 74 4f 62 6a 28 0a 20 20 20 20 20 20 20 73 71 6c  tObj(.       sql
11fa0 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
11fb0 74 65 72 5f 69 6e 64 65 78 28 70 53 74 6d 74 2c  ter_index(pStmt,
11fc0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
11fd0 6a 76 5b 32 5d 29 29 0a 20 20 20 20 20 29 0a 20  jv[2])).     ). 
11fe0 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   );.  return TCL
11ff0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
12000 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 63  age:   sqlite3_c
12010 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 20 53 54  lear_bindings ST
12020 4d 54 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 20  MT.**.*/.static 
12030 69 6e 74 20 74 65 73 74 5f 63 6c 65 61 72 5f 62  int test_clear_b
12040 69 6e 64 69 6e 67 73 28 0a 20 20 76 6f 69 64 20  indings(.  void 
12050 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
12060 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
12070 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
12080 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
12090 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
120a0 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
120b0 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
120c0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
120d0 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
120e0 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 22   1, objv, "STMT"
120f0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
12100 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
12110 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
12120 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
12130 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
12140 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
12150 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
12160 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
12170 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
12180 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63  IntObj(sqlite3_c
12190 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 70 53  lear_bindings(pS
121a0 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e  tmt)));.  return
121b0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
121c0 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
121d0 65 33 5f 73 6c 65 65 70 20 4d 49 4c 4c 49 53 45  e3_sleep MILLISE
121e0 43 4f 4e 44 53 0a 2a 2f 0a 73 74 61 74 69 63 20  CONDS.*/.static 
121f0 69 6e 74 20 74 65 73 74 5f 73 6c 65 65 70 28 0a  int test_sleep(.
12200 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
12210 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
12220 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
12230 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
12240 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
12250 7b 0a 20 20 69 6e 74 20 6d 73 3b 0a 0a 20 20 69  {.  int ms;..  i
12260 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
12270 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
12280 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
12290 6a 76 2c 20 22 4d 49 4c 4c 49 53 45 43 4f 4e 44  jv, "MILLISECOND
122a0 53 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  S");.    return 
122b0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
122c0 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
122d0 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
122e0 62 6a 76 5b 31 5d 2c 20 26 6d 73 29 20 29 7b 0a  bjv[1], &ms) ){.
122f0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
12300 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  RROR;.  }.  Tcl_
12310 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
12320 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
12330 62 6a 28 73 71 6c 69 74 65 33 5f 73 6c 65 65 70  bj(sqlite3_sleep
12340 28 6d 73 29 29 29 3b 0a 20 20 72 65 74 75 72 6e  (ms)));.  return
12350 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
12360 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
12370 5f 65 72 72 63 6f 64 65 20 44 42 0a 2a 2a 0a 2a  _errcode DB.**.*
12380 2a 20 52 65 74 75 72 6e 20 74 68 65 20 73 74 72  * Return the str
12390 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
123a0 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  on of the most r
123b0 65 63 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20  ecent sqlite3_* 
123c0 41 50 49 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64  API.** error cod
123d0 65 2e 20 65 2e 67 2e 20 22 53 51 4c 49 54 45 5f  e. e.g. "SQLITE_
123e0 45 52 52 4f 52 22 2e 0a 2a 2f 0a 73 74 61 74 69  ERROR"..*/.stati
123f0 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72 63 6f  c int test_errco
12400 64 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  de(.  void * cli
12410 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
12420 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
12430 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
12440 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
12450 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  [].){.  sqlite3 
12460 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *db;.  int rc;. 
12470 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a   char zBuf[30];.
12480 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
12490 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
124a0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
124b0 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
124c0 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
124d0 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
124e0 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44  ng(objv[0]), " D
124f0 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  B", 0);.    retu
12500 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
12510 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
12520 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
12530 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
12540 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
12550 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
12560 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  rc = sqlite3_err
12570 63 6f 64 65 28 64 62 29 3b 0a 20 20 69 66 28 20  code(db);.  if( 
12580 28 72 63 26 30 78 66 66 29 3d 3d 72 63 20 29 7b  (rc&0xff)==rc ){
12590 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 30  .    zBuf[0] = 0
125a0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
125b0 70 72 69 6e 74 66 28 7a 42 75 66 2c 22 2b 25 64  printf(zBuf,"+%d
125c0 22 2c 20 72 63 3e 3e 38 29 3b 0a 20 20 7d 0a 20  ", rc>>8);.  }. 
125d0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
125e0 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
125f0 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63  *)t1ErrorName(rc
12600 29 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72  ), zBuf, 0);.  r
12610 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
12620 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
12630 74 65 73 74 5f 65 72 72 6d 73 67 20 44 42 0a 2a  test_errmsg DB.*
12640 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65  *.** Returns the
12650 20 55 54 46 2d 38 20 72 65 70 72 65 73 65 6e 74   UTF-8 represent
12660 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 72 72  ation of the err
12670 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e  or message strin
12680 67 20 66 6f 72 20 74 68 65 0a 2a 2a 20 6d 6f 73  g for the.** mos
12690 74 20 72 65 63 65 6e 74 20 73 71 6c 69 74 65 33  t recent sqlite3
126a0 5f 2a 20 41 50 49 20 63 61 6c 6c 2e 0a 2a 2f 0a  _* API call..*/.
126b0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
126c0 65 72 72 6d 73 67 28 0a 20 20 76 6f 69 64 20 2a  errmsg(.  void *
126d0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
126e0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
126f0 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
12700 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
12710 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
12720 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74  te3 *db;.  const
12730 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a 0a 20 20   char *zErr;..  
12740 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
12750 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
12760 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
12770 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
12780 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
12790 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
127a0 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c  objv[0]), " DB",
127b0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
127c0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
127d0 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
127e0 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
127f0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
12800 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
12810 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a 45  TCL_ERROR;..  zE
12820 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  rr = sqlite3_err
12830 6d 73 67 28 64 62 29 3b 0a 20 20 54 63 6c 5f 53  msg(db);.  Tcl_S
12840 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
12850 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
12860 67 4f 62 6a 28 7a 45 72 72 2c 20 2d 31 29 29 3b  gObj(zErr, -1));
12870 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
12880 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
12890 3a 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67 31  :   test_errmsg1
128a0 36 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  6 DB.**.** Retur
128b0 6e 73 20 74 68 65 20 55 54 46 2d 31 36 20 72 65  ns the UTF-16 re
128c0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
128d0 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
128e0 65 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  e string for the
128f0 0a 2a 2a 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  .** most recent 
12900 73 71 6c 69 74 65 33 5f 2a 20 41 50 49 20 63 61  sqlite3_* API ca
12910 6c 6c 2e 20 54 68 69 73 20 69 73 20 61 20 62 79  ll. This is a by
12920 74 65 20 61 72 72 61 79 20 6f 62 6a 65 63 74 20  te array object 
12930 61 74 20 74 68 65 20 54 43 4c 20 0a 2a 2a 20 6c  at the TCL .** l
12940 65 76 65 6c 2c 20 61 6e 64 20 69 74 20 69 6e 63  evel, and it inc
12950 6c 75 64 65 73 20 74 68 65 20 30 78 30 30 20 30  ludes the 0x00 0
12960 78 30 30 20 74 65 72 6d 69 6e 61 74 6f 72 20 62  x00 terminator b
12970 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
12980 6f 66 20 74 68 65 0a 2a 2a 20 55 54 46 2d 31 36  of the.** UTF-16
12990 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74   string..*/.stat
129a0 69 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72 6d  ic int test_errm
129b0 73 67 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  sg16(.  void * c
129c0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
129d0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
129e0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
129f0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
12a00 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
12a10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
12a20 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  6.  sqlite3 *db;
12a30 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
12a40 45 72 72 3b 0a 20 20 69 6e 74 20 62 79 74 65 73  Err;.  int bytes
12a50 20 3d 20 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a   = 0;..  if( obj
12a60 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
12a70 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
12a80 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
12a90 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
12aa0 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
12ab0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
12ac0 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20  ), " DB", 0);.  
12ad0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
12ae0 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
12af0 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
12b00 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
12b10 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20  (objv[1]), &db) 
12b20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
12b30 4f 52 3b 0a 0a 20 20 7a 45 72 72 20 3d 20 73 71  OR;..  zErr = sq
12b40 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28 64  lite3_errmsg16(d
12b50 62 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29  b);.  if( zErr )
12b60 7b 0a 20 20 20 20 62 79 74 65 73 20 3d 20 73 71  {.    bytes = sq
12b70 6c 69 74 65 33 75 74 66 31 36 42 79 74 65 4c 65  lite3utf16ByteLe
12b80 6e 28 7a 45 72 72 2c 20 2d 31 29 3b 0a 20 20 7d  n(zErr, -1);.  }
12b90 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
12ba0 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
12bb0 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28  NewByteArrayObj(
12bc0 7a 45 72 72 2c 20 62 79 74 65 73 29 29 3b 0a 23  zErr, bytes));.#
12bd0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
12be0 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20  OMIT_UTF16 */.  
12bf0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
12c00 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
12c10 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 44  qlite3_prepare D
12c20 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c  B sql bytes tail
12c30 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c  var.**.** Compil
12c40 65 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e 20  e up to <bytes> 
12c50 62 79 74 65 73 20 6f 66 20 74 68 65 20 73 75 70  bytes of the sup
12c60 70 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e 67  plied SQL string
12c70 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20   <sql> using.** 
12c80 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
12c90 3c 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d 65  <DB>. The parame
12ca0 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69 73  ter <tailval> is
12cb0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 67   the name of a g
12cc0 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62 6c  lobal.** variabl
12cd0 65 20 74 68 61 74 20 69 73 20 73 65 74 20 74 6f  e that is set to
12ce0 20 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72 74   the unused port
12cf0 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69 66  ion of <sql> (if
12d00 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d 54   any). A.** STMT
12d10 20 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75 72   handle is retur
12d20 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ned..*/.static i
12d30 6e 74 20 74 65 73 74 5f 70 72 65 70 61 72 65 28  nt test_prepare(
12d40 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
12d50 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
12d60 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
12d70 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
12d80 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
12d90 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
12da0 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
12db0 7a 53 71 6c 3b 0a 20 20 69 6e 74 20 62 79 74 65  zSql;.  int byte
12dc0 73 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  s;.  const char 
12dd0 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20 73 71  *zTail = 0;.  sq
12de0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
12df0 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 42  t = 0;.  char zB
12e00 75 66 5b 35 30 5d 3b 0a 20 20 69 6e 74 20 72 63  uf[50];.  int rc
12e10 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35  ;..  if( objc!=5
12e20 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
12e30 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
12e40 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
12e50 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
12e60 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
12e70 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
12e80 20 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61   DB sql bytes ta
12e90 69 6c 76 61 72 22 2c 20 30 29 3b 0a 20 20 20 20  ilvar", 0);.    
12ea0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
12eb0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
12ec0 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
12ed0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
12ee0 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20  bjv[1]), &db) ) 
12ef0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
12f00 3b 0a 20 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47  ;.  zSql = Tcl_G
12f10 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d  etString(objv[2]
12f20 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  );.  if( Tcl_Get
12f30 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
12f40 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74  p, objv[3], &byt
12f50 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  es) ) return TCL
12f60 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
12f70 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
12f80 64 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c  db, zSql, bytes,
12f90 20 26 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c 29   &pStmt, &zTail)
12fa0 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
12fb0 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
12fc0 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74  p, db, rc) ) ret
12fd0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
12fe0 20 69 66 28 20 7a 54 61 69 6c 20 29 7b 0a 20 20   if( zTail ){.  
12ff0 20 20 69 66 28 20 62 79 74 65 73 3e 3d 30 20 29    if( bytes>=0 )
13000 7b 0a 20 20 20 20 20 20 62 79 74 65 73 20 3d 20  {.      bytes = 
13010 62 79 74 65 73 20 2d 20 28 7a 54 61 69 6c 2d 7a  bytes - (zTail-z
13020 53 71 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Sql);.    }.    
13030 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69  Tcl_ObjSetVar2(i
13040 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20  nterp, objv[4], 
13050 30 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  0, Tcl_NewString
13060 4f 62 6a 28 7a 54 61 69 6c 2c 20 62 79 74 65 73  Obj(zTail, bytes
13070 29 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28  ), 0);.  }.  if(
13080 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
13090 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 53  {.    assert( pS
130a0 74 6d 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 70  tmt==0 );.    sp
130b0 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 28 25 64  rintf(zBuf, "(%d
130c0 29 20 22 2c 20 72 63 29 3b 0a 20 20 20 20 54 63  ) ", rc);.    Tc
130d0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
130e0 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 73 71 6c  nterp, zBuf, sql
130f0 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c  ite3_errmsg(db),
13100 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
13110 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
13120 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20    if( pStmt ){. 
13130 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65     if( sqlite3Te
13140 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72  stMakePointerStr
13150 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70  (interp, zBuf, p
13160 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
13170 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 54 63  CL_ERROR;.    Tc
13180 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
13190 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b  nterp, zBuf, 0);
131a0 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
131b0 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
131c0 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 70 72  sage: sqlite3_pr
131d0 65 70 61 72 65 5f 76 32 20 44 42 20 73 71 6c 20  epare_v2 DB sql 
131e0 62 79 74 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a  bytes tailvar.**
131f0 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 75 70 20 74  .** Compile up t
13200 6f 20 3c 62 79 74 65 73 3e 20 62 79 74 65 73 20  o <bytes> bytes 
13210 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  of the supplied 
13220 53 51 4c 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e  SQL string <sql>
13230 20 75 73 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61   using.** databa
13240 73 65 20 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20  se handle <DB>. 
13250 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 3c 74  The parameter <t
13260 61 69 6c 76 61 6c 3e 20 69 73 20 74 68 65 20 6e  ailval> is the n
13270 61 6d 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a  ame of a global.
13280 2a 2a 20 76 61 72 69 61 62 6c 65 20 74 68 61 74  ** variable that
13290 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 75   is set to the u
132a0 6e 75 73 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66  nused portion of
132b0 20 3c 73 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e   <sql> (if any).
132c0 20 41 0a 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c   A.** STMT handl
132d0 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  e is returned..*
132e0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
132f0 74 5f 70 72 65 70 61 72 65 5f 76 32 28 0a 20 20  t_prepare_v2(.  
13300 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
13310 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
13320 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
13330 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
13340 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
13350 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
13360 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71   const char *zSq
13370 6c 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a  l;.  int bytes;.
13380 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
13390 61 69 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  ail = 0;.  sqlit
133a0 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d  e3_stmt *pStmt =
133b0 20 30 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b   0;.  char zBuf[
133c0 35 30 5d 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  50];.  int rc;..
133d0 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b    if( objc!=5 ){
133e0 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
133f0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
13400 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
13410 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
13420 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
13430 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42  g(objv[0]), " DB
13440 20 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c 76   sql bytes tailv
13450 61 72 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  ar", 0);.    ret
13460 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
13470 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
13480 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
13490 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
134a0 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
134b0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
134c0 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65 74 53   zSql = Tcl_GetS
134d0 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a  tring(objv[2]);.
134e0 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
134f0 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
13500 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74 65 73 29  objv[3], &bytes)
13510 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
13520 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
13530 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
13540 64 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c  db, zSql, bytes,
13550 20 26 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c 29   &pStmt, &zTail)
13560 3b 0a 20 20 61 73 73 65 72 74 28 72 63 3d 3d 53  ;.  assert(rc==S
13570 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 53 74 6d  QLITE_OK || pStm
13580 74 3d 3d 30 29 3b 0a 20 20 69 66 28 20 73 71 6c  t==0);.  if( sql
13590 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
135a0 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20  interp, db, rc) 
135b0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
135c0 4f 52 3b 0a 20 20 69 66 28 20 7a 54 61 69 6c 20  OR;.  if( zTail 
135d0 29 7b 0a 20 20 20 20 69 66 28 20 62 79 74 65 73  ){.    if( bytes
135e0 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 79 74  >=0 ){.      byt
135f0 65 73 20 3d 20 62 79 74 65 73 20 2d 20 28 7a 54  es = bytes - (zT
13600 61 69 6c 2d 7a 53 71 6c 29 3b 0a 20 20 20 20 7d  ail-zSql);.    }
13610 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56  .    Tcl_ObjSetV
13620 61 72 32 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  ar2(interp, objv
13630 5b 34 5d 2c 20 30 2c 20 54 63 6c 5f 4e 65 77 53  [4], 0, Tcl_NewS
13640 74 72 69 6e 67 4f 62 6a 28 7a 54 61 69 6c 2c 20  tringObj(zTail, 
13650 62 79 74 65 73 29 2c 20 30 29 3b 0a 20 20 7d 0a  bytes), 0);.  }.
13660 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
13670 5f 4f 4b 20 29 7b 0a 20 20 20 20 61 73 73 65 72  _OK ){.    asser
13680 74 28 20 70 53 74 6d 74 3d 3d 30 20 29 3b 0a 20  t( pStmt==0 );. 
13690 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c     sprintf(zBuf,
136a0 20 22 28 25 64 29 20 22 2c 20 72 63 29 3b 0a 20   "(%d) ", rc);. 
136b0 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
136c0 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
136d0 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
136e0 28 64 62 29 2c 20 30 29 3b 0a 20 20 20 20 72 65  (db), 0);.    re
136f0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
13700 20 20 7d 0a 0a 20 20 69 66 28 20 70 53 74 6d 74    }..  if( pStmt
13710 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   ){.    if( sqli
13720 74 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74  te3TestMakePoint
13730 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42  erStr(interp, zB
13740 75 66 2c 20 70 53 74 6d 74 29 20 29 20 72 65 74  uf, pStmt) ) ret
13750 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
13760 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
13770 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
13780 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  , 0);.  }.  retu
13790 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
137a0 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
137b0 65 33 5f 70 72 65 70 61 72 65 31 36 20 44 42 20  e3_prepare16 DB 
137c0 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c 76 61  sql bytes tailva
137d0 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20  r.**.** Compile 
137e0 75 70 20 74 6f 20 3c 62 79 74 65 73 3e 20 62 79  up to <bytes> by
137f0 74 65 73 20 6f 66 20 74 68 65 20 73 75 70 70 6c  tes of the suppl
13800 69 65 64 20 53 51 4c 20 73 74 72 69 6e 67 20 3c  ied SQL string <
13810 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20 64 61  sql> using.** da
13820 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 44  tabase handle <D
13830 42 3e 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65  B>. The paramete
13840 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69 73 20 74  r <tailval> is t
13850 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 67 6c 6f  he name of a glo
13860 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  bal.** variable 
13870 74 68 61 74 20 69 73 20 73 65 74 20 74 6f 20 74  that is set to t
13880 68 65 20 75 6e 75 73 65 64 20 70 6f 72 74 69 6f  he unused portio
13890 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69 66 20 61  n of <sql> (if a
138a0 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d 54 20 68  ny). A.** STMT h
138b0 61 6e 64 6c 65 20 69 73 20 72 65 74 75 72 6e 65  andle is returne
138c0 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
138d0 20 74 65 73 74 5f 70 72 65 70 61 72 65 31 36 28   test_prepare16(
138e0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
138f0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
13900 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
13910 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
13920 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
13930 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
13940 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73  E_OMIT_UTF16.  s
13950 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f  qlite3 *db;.  co
13960 6e 73 74 20 76 6f 69 64 20 2a 7a 53 71 6c 3b 0a  nst void *zSql;.
13970 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 54    const void *zT
13980 61 69 6c 20 3d 20 30 3b 0a 20 20 54 63 6c 5f 4f  ail = 0;.  Tcl_O
13990 62 6a 20 2a 70 54 61 69 6c 20 3d 20 30 3b 0a 20  bj *pTail = 0;. 
139a0 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
139b0 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61 72  Stmt = 0;.  char
139c0 20 7a 42 75 66 5b 35 30 5d 3b 20 0a 20 20 69 6e   zBuf[50]; .  in
139d0 74 20 72 63 3b 0a 20 20 69 6e 74 20 62 79 74 65  t rc;.  int byte
139e0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
139f0 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72    /* The integer
13a00 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61 72   specified as ar
13a10 67 20 33 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a  g 3 */.  int obj
13a20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
13a30 20 20 20 2f 2a 20 54 68 65 20 62 79 74 65 2d 61     /* The byte-a
13a40 72 72 61 79 20 6c 65 6e 67 74 68 20 6f 66 20 61  rray length of a
13a50 72 67 20 32 20 2a 2f 0a 0a 20 20 69 66 28 20 6f  rg 2 */..  if( o
13a60 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63  bjc!=5 ){.    Tc
13a70 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
13a80 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
13a90 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
13aa0 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
13ab0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
13ac0 30 5d 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79  0]), " DB sql by
13ad0 74 65 73 20 74 61 69 6c 76 61 72 22 2c 20 30 29  tes tailvar", 0)
13ae0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
13af0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
13b00 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
13b10 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
13b20 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
13b30 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
13b40 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d  _ERROR;.  zSql =
13b50 20 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61   Tcl_GetByteArra
13b60 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d  yFromObj(objv[2]
13b70 2c 20 26 6f 62 6a 6c 65 6e 29 3b 0a 20 20 69 66  , &objlen);.  if
13b80 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
13b90 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
13ba0 5b 33 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72  [3], &bytes) ) r
13bb0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
13bc0 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
13bd0 5f 70 72 65 70 61 72 65 31 36 28 64 62 2c 20 7a  _prepare16(db, z
13be0 53 71 6c 2c 20 62 79 74 65 73 2c 20 26 70 53 74  Sql, bytes, &pSt
13bf0 6d 74 2c 20 26 7a 54 61 69 6c 29 3b 0a 20 20 69  mt, &zTail);.  i
13c00 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
13c10 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
13c20 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
13c30 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
13c40 72 63 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  rc ){.    return
13c50 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
13c60 0a 20 20 69 66 28 20 7a 54 61 69 6c 20 29 7b 0a  .  if( zTail ){.
13c70 20 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 6f 62 6a      objlen = obj
13c80 6c 65 6e 20 2d 20 28 28 75 38 20 2a 29 7a 54 61  len - ((u8 *)zTa
13c90 69 6c 2d 28 75 38 20 2a 29 7a 53 71 6c 29 3b 0a  il-(u8 *)zSql);.
13ca0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6f 62 6a    }else{.    obj
13cb0 6c 65 6e 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70  len = 0;.  }.  p
13cc0 54 61 69 6c 20 3d 20 54 63 6c 5f 4e 65 77 42 79  Tail = Tcl_NewBy
13cd0 74 65 41 72 72 61 79 4f 62 6a 28 28 75 38 20 2a  teArrayObj((u8 *
13ce0 29 7a 54 61 69 6c 2c 20 6f 62 6a 6c 65 6e 29 3b  )zTail, objlen);
13cf0 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f  .  Tcl_IncrRefCo
13d00 75 6e 74 28 70 54 61 69 6c 29 3b 0a 20 20 54 63  unt(pTail);.  Tc
13d10 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74  l_ObjSetVar2(int
13d20 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30 2c  erp, objv[4], 0,
13d30 20 70 54 61 69 6c 2c 20 30 29 3b 0a 20 20 54 63   pTail, 0);.  Tc
13d40 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70  l_DecrRefCount(p
13d50 54 61 69 6c 29 3b 0a 0a 20 20 69 66 28 20 70 53  Tail);..  if( pS
13d60 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28 20 73  tmt ){.    if( s
13d70 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
13d80 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c  interStr(interp,
13d90 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20 29 20   zBuf, pStmt) ) 
13da0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13db0 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65  ;.  }.  Tcl_Appe
13dc0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
13dd0 20 7a 42 75 66 2c 20 30 29 3b 0a 23 65 6e 64 69   zBuf, 0);.#endi
13de0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
13df0 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75  _UTF16 */.  retu
13e00 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
13e10 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
13e20 65 33 5f 70 72 65 70 61 72 65 31 36 5f 76 32 20  e3_prepare16_v2 
13e30 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69  DB sql bytes tai
13e40 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69  lvar.**.** Compi
13e50 6c 65 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e  le up to <bytes>
13e60 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 73 75   bytes of the su
13e70 70 70 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e  pplied SQL strin
13e80 67 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a  g <sql> using.**
13e90 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
13ea0 20 3c 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d   <DB>. The param
13eb0 65 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69  eter <tailval> i
13ec0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
13ed0 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62  global.** variab
13ee0 6c 65 20 74 68 61 74 20 69 73 20 73 65 74 20 74  le that is set t
13ef0 6f 20 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72  o the unused por
13f00 74 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69  tion of <sql> (i
13f10 66 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d  f any). A.** STM
13f20 54 20 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75  T handle is retu
13f30 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rned..*/.static 
13f40 69 6e 74 20 74 65 73 74 5f 70 72 65 70 61 72 65  int test_prepare
13f50 31 36 5f 76 32 28 0a 20 20 76 6f 69 64 20 2a 20  16_v2(.  void * 
13f60 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
13f70 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
13f80 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
13f90 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
13fa0 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66  bjv[].){.#ifndef
13fb0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
13fc0 31 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  16.  sqlite3 *db
13fd0 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ;.  const void *
13fe0 7a 53 71 6c 3b 0a 20 20 63 6f 6e 73 74 20 76 6f  zSql;.  const vo
13ff0 69 64 20 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20  id *zTail = 0;. 
14000 20 54 63 6c 5f 4f 62 6a 20 2a 70 54 61 69 6c 20   Tcl_Obj *pTail 
14010 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  = 0;.  sqlite3_s
14020 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a  tmt *pStmt = 0;.
14030 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b    char zBuf[50];
14040 20 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e   .  int rc;.  in
14050 74 20 62 79 74 65 73 3b 20 20 20 20 20 20 20 20  t bytes;        
14060 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69          /* The i
14070 6e 74 65 67 65 72 20 73 70 65 63 69 66 69 65 64  nteger specified
14080 20 61 73 20 61 72 67 20 33 20 2a 2f 0a 20 20 69   as arg 3 */.  i
14090 6e 74 20 6f 62 6a 6c 65 6e 3b 20 20 20 20 20 20  nt objlen;      
140a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
140b0 62 79 74 65 2d 61 72 72 61 79 20 6c 65 6e 67 74  byte-array lengt
140c0 68 20 6f 66 20 61 72 67 20 32 20 2a 2f 0a 0a 20  h of arg 2 */.. 
140d0 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a   if( objc!=5 ){.
140e0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
140f0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
14100 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
14110 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
14120 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
14130 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 20  (objv[0]), " DB 
14140 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c 76 61  sql bytes tailva
14150 72 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  r", 0);.    retu
14160 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
14170 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
14180 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
14190 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
141a0 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
141b0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
141c0 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65 74 42 79  zSql = Tcl_GetBy
141d0 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f  teArrayFromObj(o
141e0 62 6a 76 5b 32 5d 2c 20 26 6f 62 6a 6c 65 6e 29  bjv[2], &objlen)
141f0 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
14200 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
14210 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74 65  , objv[3], &byte
14220 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  s) ) return TCL_
14230 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73  ERROR;..  rc = s
14240 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
14250 5f 76 32 28 64 62 2c 20 7a 53 71 6c 2c 20 62 79  _v2(db, zSql, by
14260 74 65 73 2c 20 26 70 53 74 6d 74 2c 20 26 7a 54  tes, &pStmt, &zT
14270 61 69 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  ail);.  if( sqli
14280 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
14290 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29  nterp, db, rc) )
142a0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
142b0 52 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  R;.  if( rc ){. 
142c0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
142d0 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
142e0 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20 6f 62 6a  zTail ){.    obj
142f0 6c 65 6e 20 3d 20 6f 62 6a 6c 65 6e 20 2d 20 28  len = objlen - (
14300 28 75 38 20 2a 29 7a 54 61 69 6c 2d 28 75 38 20  (u8 *)zTail-(u8 
14310 2a 29 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65  *)zSql);.  }else
14320 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 30  {.    objlen = 0
14330 3b 0a 20 20 7d 0a 20 20 70 54 61 69 6c 20 3d 20  ;.  }.  pTail = 
14340 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79  Tcl_NewByteArray
14350 4f 62 6a 28 28 75 38 20 2a 29 7a 54 61 69 6c 2c  Obj((u8 *)zTail,
14360 20 6f 62 6a 6c 65 6e 29 3b 0a 20 20 54 63 6c 5f   objlen);.  Tcl_
14370 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 54 61  IncrRefCount(pTa
14380 69 6c 29 3b 0a 20 20 54 63 6c 5f 4f 62 6a 53 65  il);.  Tcl_ObjSe
14390 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6f 62  tVar2(interp, ob
143a0 6a 76 5b 34 5d 2c 20 30 2c 20 70 54 61 69 6c 2c  jv[4], 0, pTail,
143b0 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52   0);.  Tcl_DecrR
143c0 65 66 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a  efCount(pTail);.
143d0 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a  .  if( pStmt ){.
143e0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54      if( sqlite3T
143f0 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74  estMakePointerSt
14400 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  r(interp, zBuf, 
14410 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
14420 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
14430 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
14440 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
14450 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  0);.#endif /* SQ
14460 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
14470 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
14480 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
14490 67 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ge: sqlite3_open
144a0 20 66 69 6c 65 6e 61 6d 65 20 3f 6f 70 74 69 6f   filename ?optio
144b0 6e 73 2d 6c 69 73 74 3f 0a 2a 2f 0a 73 74 61 74  ns-list?.*/.stat
144c0 69 63 20 69 6e 74 20 74 65 73 74 5f 6f 70 65 6e  ic int test_open
144d0 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
144e0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
144f0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
14500 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
14510 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
14520 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  .){.  const char
14530 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20 20 73   *zFilename;.  s
14540 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
14550 74 20 72 63 3b 0a 20 20 63 68 61 72 20 7a 42 75  t rc;.  char zBu
14560 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f  f[100];..  if( o
14570 62 6a 63 21 3d 33 20 26 26 20 6f 62 6a 63 21 3d  bjc!=3 && objc!=
14580 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
14590 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
145a0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
145b0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
145c0 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
145d0 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
145e0 22 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f  " filename optio
145f0 6e 73 2d 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20  ns-list", 0);.  
14600 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
14610 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65  OR;.  }..  zFile
14620 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74 53 74  name = Tcl_GetSt
14630 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20  ring(objv[1]);. 
14640 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
14650 65 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 64  en(zFilename, &d
14660 62 29 3b 0a 20 20 0a 20 20 69 66 28 20 73 71 6c  b);.  .  if( sql
14670 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e  ite3TestMakePoin
14680 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a  terStr(interp, z
14690 42 75 66 2c 20 64 62 29 20 29 20 72 65 74 75 72  Buf, db) ) retur
146a0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
146b0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
146c0 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29  interp, zBuf, 0)
146d0 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
146e0 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
146f0 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31  e: sqlite3_open1
14700 36 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f  6 filename optio
14710 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  ns.*/.static int
14720 20 74 65 73 74 5f 6f 70 65 6e 31 36 28 0a 20 20   test_open16(.  
14730 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
14740 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
14750 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
14760 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
14770 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
14780 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
14790 4d 49 54 5f 55 54 46 31 36 0a 20 20 63 6f 6e 73  MIT_UTF16.  cons
147a0 74 20 76 6f 69 64 20 2a 7a 46 69 6c 65 6e 61 6d  t void *zFilenam
147b0 65 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  e;.  sqlite3 *db
147c0 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68  ;.  int rc;.  ch
147d0 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a 0a 20  ar zBuf[100];.. 
147e0 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
147f0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
14800 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
14810 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
14820 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
14830 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
14840 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c  (objv[0]), " fil
14850 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73 2d 6c 69  ename options-li
14860 73 74 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  st", 0);.    ret
14870 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
14880 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20   }..  zFilename 
14890 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72  = Tcl_GetByteArr
148a0 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31  ayFromObj(objv[1
148b0 5d 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71  ], 0);.  rc = sq
148c0 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28 7a 46 69  lite3_open16(zFi
148d0 6c 65 6e 61 6d 65 2c 20 26 64 62 29 3b 0a 20 20  lename, &db);.  
148e0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
148f0 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72  stMakePointerStr
14900 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 64  (interp, zBuf, d
14910 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
14920 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 41 70 70  ERROR;.  Tcl_App
14930 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
14940 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23 65 6e 64  , zBuf, 0);.#end
14950 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
14960 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74  T_UTF16 */.  ret
14970 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
14980 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
14990 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31 36 20 3c  te3_complete16 <
149a0 55 54 46 2d 31 36 20 73 74 72 69 6e 67 3e 0a 2a  UTF-16 string>.*
149b0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31 20 69 66  *.** Return 1 if
149c0 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 61 72   the supplied ar
149d0 67 75 6d 65 6e 74 20 69 73 20 61 20 63 6f 6d 70  gument is a comp
149e0 6c 65 74 65 20 53 51 4c 20 73 74 61 74 65 6d 65  lete SQL stateme
149f0 6e 74 2c 20 6f 72 20 7a 65 72 6f 0a 2a 2a 20 6f  nt, or zero.** o
14a00 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a 73 74 61  therwise..*/.sta
14a10 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6d  tic int test_com
14a20 70 6c 65 74 65 31 36 28 0a 20 20 76 6f 69 64 20  plete16(.  void 
14a30 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
14a40 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
14a50 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
14a60 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
14a70 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 20 21   objv[].){.#if !
14a80 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
14a90 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 29 20 26 26  MIT_COMPLETE) &&
14aa0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
14ab0 5f 4f 4d 49 54 5f 55 54 46 31 36 29 0a 20 20 63  _OMIT_UTF16).  c
14ac0 68 61 72 20 2a 7a 42 75 66 3b 0a 0a 20 20 69 66  har *zBuf;..  if
14ad0 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
14ae0 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
14af0 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
14b00 76 2c 20 22 3c 75 74 66 2d 31 36 20 73 71 6c 3e  v, "<utf-16 sql>
14b10 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
14b20 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
14b30 20 7a 42 75 66 20 3d 20 28 63 68 61 72 2a 29 54   zBuf = (char*)T
14b40 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79 46  cl_GetByteArrayF
14b50 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31 5d 2c 20  romObj(objv[1], 
14b60 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  0);.  Tcl_SetObj
14b70 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
14b80 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
14b90 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31 36 28  ite3_complete16(
14ba0 7a 42 75 66 29 29 29 3b 0a 23 65 6e 64 69 66 20  zBuf)));.#endif 
14bb0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
14bc0 4f 4d 50 4c 45 54 45 20 26 26 20 53 51 4c 49 54  OMPLETE && SQLIT
14bd0 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
14be0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
14bf0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
14c00 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 53 54   sqlite3_step ST
14c10 4d 54 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65  MT.**.** Advance
14c20 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
14c30 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 2e 0a  o the next row..
14c40 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
14c50 73 74 5f 73 74 65 70 28 0a 20 20 76 6f 69 64 20  st_step(.  void 
14c60 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
14c70 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
14c80 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
14c90 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
14ca0 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
14cb0 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
14cc0 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69  ;.  int rc;..  i
14cd0 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
14ce0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
14cf0 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
14d00 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
14d10 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
14d20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
14d30 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 22  bjv[0]), " STMT"
14d40 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
14d50 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
14d60 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
14d70 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
14d80 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
14d90 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
14da0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
14db0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
14dc0 5f 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 0a 20  _step(pStmt);.. 
14dd0 20 2f 2a 20 69 66 28 20 72 63 21 3d 53 51 4c 49   /* if( rc!=SQLI
14de0 54 45 5f 44 4f 4e 45 20 26 26 20 72 63 21 3d 53  TE_DONE && rc!=S
14df0 51 4c 49 54 45 5f 52 4f 57 20 29 20 72 65 74 75  QLITE_ROW ) retu
14e00 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 20 2a 2f  rn TCL_ERROR; */
14e10 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
14e20 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
14e30 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29  )t1ErrorName(rc)
14e40 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
14e50 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
14e60 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63  Usage: sqlite3_c
14e70 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 53 54 4d 54  olumn_count STMT
14e80 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74   .**.** Return t
14e90 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
14ea0 75 6d 6e 73 20 72 65 74 75 72 6e 65 64 20 62 79  umns returned by
14eb0 20 74 68 65 20 73 71 6c 20 73 74 61 74 65 6d 65   the sql stateme
14ec0 6e 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74  nt STMT..*/.stat
14ed0 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75  ic int test_colu
14ee0 6d 6e 5f 63 6f 75 6e 74 28 0a 20 20 76 6f 69 64  mn_count(.  void
14ef0 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
14f00 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
14f10 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
14f20 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
14f30 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
14f40 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
14f50 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  t;..  if( objc!=
14f60 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
14f70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
14f80 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
14f90 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
14fa0 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
14fb0 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
14fc0 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20  " STMT column", 
14fd0 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
14fe0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
14ff0 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
15000 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
15010 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
15020 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
15030 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
15040 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
15050 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
15060 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65  NewIntObj(sqlite
15070 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70  3_column_count(p
15080 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72  Stmt)));.  retur
15090 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
150a0 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
150b0 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 53 54  3_column_type ST
150c0 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20  MT column.**.** 
150d0 52 65 74 75 72 6e 20 74 68 65 20 74 79 70 65 20  Return the type 
150e0 6f 66 20 74 68 65 20 64 61 74 61 20 69 6e 20 63  of the data in c
150f0 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f  olumn 'column' o
15100 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
15110 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  w..*/.static int
15120 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 74 79 70   test_column_typ
15130 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
15140 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
15150 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
15160 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
15170 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
15180 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
15190 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
151a0 74 20 63 6f 6c 3b 0a 20 20 69 6e 74 20 74 70 3b  t col;.  int tp;
151b0 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
151c0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
151d0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
151e0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
151f0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
15200 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
15210 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
15220 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29  STMT column", 0)
15230 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
15240 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
15250 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
15260 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
15270 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
15280 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
15290 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
152a0 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
152b0 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
152c0 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72  jv[2], &col) ) r
152d0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
152e0 0a 0a 20 20 74 70 20 3d 20 73 71 6c 69 74 65 33  ..  tp = sqlite3
152f0 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74  _column_type(pSt
15300 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 73 77 69 74  mt, col);.  swit
15310 63 68 28 20 74 70 20 29 7b 0a 20 20 20 20 63 61  ch( tp ){.    ca
15320 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45  se SQLITE_INTEGE
15330 52 3a 20 0a 20 20 20 20 20 20 54 63 6c 5f 53 65  R: .      Tcl_Se
15340 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
15350 22 49 4e 54 45 47 45 52 22 2c 20 54 43 4c 5f 53  "INTEGER", TCL_S
15360 54 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62  TATIC); .      b
15370 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
15380 51 4c 49 54 45 5f 4e 55 4c 4c 3a 0a 20 20 20 20  QLITE_NULL:.    
15390 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
153a0 69 6e 74 65 72 70 2c 20 22 4e 55 4c 4c 22 2c 20  interp, "NULL", 
153b0 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20  TCL_STATIC); .  
153c0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
153d0 61 73 65 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54  ase SQLITE_FLOAT
153e0 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52  :.      Tcl_SetR
153f0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 46  esult(interp, "F
15400 4c 4f 41 54 22 2c 20 54 43 4c 5f 53 54 41 54 49  LOAT", TCL_STATI
15410 43 29 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b  C); .      break
15420 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
15430 45 5f 54 45 58 54 3a 0a 20 20 20 20 20 20 54 63  E_TEXT:.      Tc
15440 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
15450 72 70 2c 20 22 54 45 58 54 22 2c 20 54 43 4c 5f  rp, "TEXT", TCL_
15460 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20  STATIC); .      
15470 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
15480 53 51 4c 49 54 45 5f 42 4c 4f 42 3a 0a 20 20 20  SQLITE_BLOB:.   
15490 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74     Tcl_SetResult
154a0 28 69 6e 74 65 72 70 2c 20 22 42 4c 4f 42 22 2c  (interp, "BLOB",
154b0 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20   TCL_STATIC); . 
154c0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
154d0 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 61  default:.      a
154e0 73 73 65 72 74 28 30 29 3b 0a 20 20 7d 0a 0a 20  ssert(0);.  }.. 
154f0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
15500 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
15510 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
15520 6e 74 36 34 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  nt64 STMT column
15530 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
15540 65 20 64 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e  e data in column
15550 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65   'column' of the
15560 20 63 75 72 72 65 6e 74 20 72 6f 77 20 63 61 73   current row cas
15570 74 20 61 73 20 61 6e 0a 2a 2a 20 77 69 64 65 20  t as an.** wide 
15580 28 36 34 2d 62 69 74 29 20 69 6e 74 65 67 65 72  (64-bit) integer
15590 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
155a0 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  test_column_int6
155b0 34 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  4(.  void * clie
155c0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
155d0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
155e0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
155f0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
15600 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
15610 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
15620 74 20 63 6f 6c 3b 0a 20 20 69 36 34 20 69 56 61  t col;.  i64 iVa
15630 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  l;..  if( objc!=
15640 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
15650 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
15660 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
15670 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
15680 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
15690 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
156a0 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20  " STMT column", 
156b0 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
156c0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
156d0 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
156e0 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
156f0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
15700 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
15710 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
15720 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
15730 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
15740 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29  objv[2], &col) )
15750 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
15760 52 3b 0a 0a 20 20 69 56 61 6c 20 3d 20 73 71 6c  R;..  iVal = sql
15770 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
15780 34 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20  4(pStmt, col);. 
15790 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
157a0 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
157b0 77 57 69 64 65 49 6e 74 4f 62 6a 28 69 56 61 6c  wWideIntObj(iVal
157c0 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
157d0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
157e0 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
157f0 75 6d 6e 5f 62 6c 6f 62 20 53 54 4d 54 20 63 6f  umn_blob STMT co
15800 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  lumn.*/.static i
15810 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 62  nt test_column_b
15820 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  lob(.  void * cl
15830 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
15840 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
15850 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
15860 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
15870 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
15880 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
15890 69 6e 74 20 63 6f 6c 3b 0a 0a 20 20 69 6e 74 20  int col;..  int 
158a0 6c 65 6e 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  len;.  const voi
158b0 64 20 2a 70 42 6c 6f 62 3b 0a 0a 20 20 69 66 28  d *pBlob;..  if(
158c0 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20   objc!=3 ){.    
158d0 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
158e0 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
158f0 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
15900 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
15910 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
15920 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f  v[0]), " STMT co
15930 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72  lumn", 0);.    r
15940 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
15950 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
15960 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
15970 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
15980 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
15990 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
159a0 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
159b0 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
159c0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
159d0 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54  &col) ) return T
159e0 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 70 42 6c  CL_ERROR;..  pBl
159f0 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  ob = sqlite3_col
15a00 75 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 20  umn_blob(pStmt, 
15a10 63 6f 6c 29 3b 0a 20 20 6c 65 6e 20 3d 20 73 71  col);.  len = sq
15a20 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
15a30 65 73 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a  es(pStmt, col);.
15a40 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
15a50 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
15a60 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28 70  ewByteArrayObj(p
15a70 42 6c 6f 62 2c 20 6c 65 6e 29 29 3b 0a 20 20 72  Blob, len));.  r
15a80 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
15a90 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
15aa0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
15ab0 62 6c 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ble STMT column.
15ac0 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
15ad0 20 64 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e 20   data in column 
15ae0 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65 20  'column' of the 
15af0 63 75 72 72 65 6e 74 20 72 6f 77 20 63 61 73 74  current row cast
15b00 20 61 73 20 61 20 64 6f 75 62 6c 65 2e 0a 2a 2f   as a double..*/
15b10 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
15b20 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 0a  _column_double(.
15b30 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
15b40 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
15b50 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
15b60 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
15b70 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
15b80 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
15b90 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63   *pStmt;.  int c
15ba0 6f 6c 3b 0a 20 20 64 6f 75 62 6c 65 20 72 56 61  ol;.  double rVa
15bb0 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  l;..  if( objc!=
15bc0 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
15bd0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
15be0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
15bf0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
15c00 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
15c10 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
15c20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20  " STMT column", 
15c30 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
15c40 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
15c50 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
15c60 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
15c70 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
15c80 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
15c90 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
15ca0 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
15cb0 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
15cc0 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29  objv[2], &col) )
15cd0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
15ce0 52 3b 0a 0a 20 20 72 56 61 6c 20 3d 20 73 71 6c  R;..  rVal = sql
15cf0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
15d00 6c 65 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a  le(pStmt, col);.
15d10 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
15d20 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
15d30 65 77 44 6f 75 62 6c 65 4f 62 6a 28 72 56 61 6c  ewDoubleObj(rVal
15d40 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
15d50 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
15d60 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 64 61 74  age: sqlite3_dat
15d70 61 5f 63 6f 75 6e 74 20 53 54 4d 54 20 0a 2a 2a  a_count STMT .**
15d80 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
15d90 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
15da0 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
15db0 20 73 71 6c 20 73 74 61 74 65 6d 65 6e 74 20 53   sql statement S
15dc0 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  TMT..*/.static i
15dd0 6e 74 20 74 65 73 74 5f 64 61 74 61 5f 63 6f 75  nt test_data_cou
15de0 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  nt(.  void * cli
15df0 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
15e00 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
15e10 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
15e20 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
15e30 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
15e40 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20  stmt *pStmt;..  
15e50 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
15e60 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
15e70 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
15e80 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
15e90 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
15ea0 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
15eb0 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
15ec0 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
15ed0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
15ee0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
15ef0 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
15f00 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
15f10 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
15f20 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
15f30 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 54 63 6c  CL_ERROR;..  Tcl
15f40 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
15f50 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
15f60 4f 62 6a 28 73 71 6c 69 74 65 33 5f 64 61 74 61  Obj(sqlite3_data
15f70 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 29 29 3b  _count(pStmt)));
15f80 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
15f90 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
15fa0 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
15fb0 5f 74 65 78 74 20 53 54 4d 54 20 63 6f 6c 75 6d  _text STMT colum
15fc0 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  n.**.** Usage: s
15fd0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
15fe0 63 6c 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75  cltype STMT colu
15ff0 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  mn.**.** Usage: 
16000 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
16010 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ame STMT column.
16020 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
16030 73 74 5f 73 74 6d 74 5f 75 74 66 38 28 0a 20 20  st_stmt_utf8(.  
16040 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
16050 61 2c 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  a,        /* Poi
16060 6e 74 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41  nter to SQLite A
16070 50 49 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62  PI function to b
16080 65 20 69 6e 76 6f 6b 65 20 2a 2f 0a 20 20 54 63  e invoke */.  Tc
16090 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
160a0 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
160b0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
160c0 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
160d0 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
160e0 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 63 6f 6e    int col;.  con
160f0 73 74 20 63 68 61 72 20 2a 28 2a 78 46 75 6e 63  st char *(*xFunc
16100 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c  )(sqlite3_stmt*,
16110 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61   int) = clientDa
16120 74 61 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ta;.  const char
16130 20 2a 7a 52 65 74 3b 0a 0a 20 20 69 66 28 20 6f   *zRet;..  if( o
16140 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
16150 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
16160 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
16170 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
16180 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
16190 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
161a0 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75  0]), " STMT colu
161b0 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  mn", 0);.    ret
161c0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
161d0 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
161e0 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
161f0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
16200 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
16210 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
16220 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
16230 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
16240 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63  erp, objv[2], &c
16250 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ol) ) return TCL
16260 5f 45 52 52 4f 52 3b 0a 20 20 7a 52 65 74 20 3d  _ERROR;.  zRet =
16270 20 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f   xFunc(pStmt, co
16280 6c 29 3b 0a 20 20 69 66 28 20 7a 52 65 74 20 29  l);.  if( zRet )
16290 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73  {.    Tcl_SetRes
162a0 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
162b0 72 20 2a 29 7a 52 65 74 2c 20 30 29 3b 0a 20 20  r *)zRet, 0);.  
162c0 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  }.  return TCL_O
162d0 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74  K;.}..static int
162e0 20 74 65 73 74 5f 67 6c 6f 62 61 6c 5f 72 65 63   test_global_rec
162f0 6f 76 65 72 28 0a 20 20 76 6f 69 64 20 2a 20 63  over(.  void * c
16300 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
16310 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
16320 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
16330 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
16340 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
16350 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f 42  SQLITE_OMIT_GLOB
16360 41 4c 52 45 43 4f 56 45 52 0a 20 20 69 6e 74 20  ALRECOVER.  int 
16370 72 63 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  rc;.  if( objc!=
16380 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  1 ){.    Tcl_Wro
16390 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
163a0 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 22 29 3b 0a  , 1, objv, "");.
163b0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
163c0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  RROR;.  }.  rc =
163d0 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f   sqlite3_global_
163e0 72 65 63 6f 76 65 72 28 29 3b 0a 20 20 54 63 6c  recover();.  Tcl
163f0 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
16400 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72  p, (char *)t1Err
16410 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f  orName(rc), TCL_
16420 53 54 41 54 49 43 29 3b 0a 23 65 6e 64 69 66 0a  STATIC);.#endif.
16430 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
16440 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
16450 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
16460 74 65 78 74 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  text STMT column
16470 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  .**.** Usage: sq
16480 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
16490 6c 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75 6d  ltype STMT colum
164a0 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  n.**.** Usage: s
164b0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
164c0 6d 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a  me STMT column.*
164d0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
164e0 74 5f 73 74 6d 74 5f 75 74 66 31 36 28 0a 20 20  t_stmt_utf16(.  
164f0 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
16500 61 2c 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  a,     /* Pointe
16510 72 20 74 6f 20 53 51 4c 69 74 65 20 41 50 49 20  r to SQLite API 
16520 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 69  function to be i
16530 6e 76 6f 6b 65 64 20 2a 2f 0a 20 20 54 63 6c 5f  nvoked */.  Tcl_
16540 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
16550 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
16560 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
16570 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53  v[].){.#ifndef S
16580 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
16590 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
165a0 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f  *pStmt;.  int co
165b0 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 52  l;.  Tcl_Obj *pR
165c0 65 74 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  et;.  const void
165d0 20 2a 7a 4e 61 6d 65 31 36 3b 0a 20 20 63 6f 6e   *zName16;.  con
165e0 73 74 20 76 6f 69 64 20 2a 28 2a 78 46 75 6e 63  st void *(*xFunc
165f0 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c  )(sqlite3_stmt*,
16600 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61   int) = clientDa
16610 74 61 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  ta;..  if( objc!
16620 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
16630 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
16640 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
16650 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
16660 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
16670 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
16680 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
16690 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
166a0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
166b0 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
166c0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
166d0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
166e0 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
166f0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
16700 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
16710 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
16720 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
16730 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
16740 4f 52 3b 0a 0a 20 20 7a 4e 61 6d 65 31 36 20 3d  OR;..  zName16 =
16750 20 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f   xFunc(pStmt, co
16760 6c 29 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65 31  l);.  if( zName1
16770 36 20 29 7b 0a 20 20 20 20 70 52 65 74 20 3d 20  6 ){.    pRet = 
16780 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79  Tcl_NewByteArray
16790 4f 62 6a 28 7a 4e 61 6d 65 31 36 2c 20 73 71 6c  Obj(zName16, sql
167a0 69 74 65 33 75 74 66 31 36 42 79 74 65 4c 65 6e  ite3utf16ByteLen
167b0 28 7a 4e 61 6d 65 31 36 2c 20 2d 31 29 2b 32 29  (zName16, -1)+2)
167c0 3b 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a  ;.    Tcl_SetObj
167d0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 70  Result(interp, p
167e0 52 65 74 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  Ret);.  }.#endif
167f0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
16800 55 54 46 31 36 20 2a 2f 0a 0a 20 20 72 65 74 75  UTF16 */..  retu
16810 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
16820 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
16830 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 53 54  e3_column_int ST
16840 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20  MT column.**.** 
16850 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63  Usage: sqlite3_c
16860 6f 6c 75 6d 6e 5f 62 79 74 65 73 20 53 54 4d 54  olumn_bytes STMT
16870 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73   column.**.** Us
16880 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
16890 75 6d 6e 5f 62 79 74 65 73 31 36 20 53 54 4d 54  umn_bytes16 STMT
168a0 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2f 0a 73 74   column.**.*/.st
168b0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 74  atic int test_st
168c0 6d 74 5f 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a  mt_int(.  void *
168d0 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20   clientData,    
168e0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 51  /* Pointer to SQ
168f0 4c 69 74 65 20 41 50 49 20 66 75 6e 63 74 69 6f  Lite API functio
16900 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20  n to be invoked 
16910 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  */.  Tcl_Interp 
16920 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
16930 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
16940 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
16950 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
16960 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c  pStmt;.  int col
16970 3b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29  ;.  int (*xFunc)
16980 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 20  (sqlite3_stmt*, 
16990 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61 74  int) = clientDat
169a0 61 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  a;..  if( objc!=
169b0 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
169c0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
169d0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
169e0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
169f0 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
16a00 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
16a10 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20  " STMT column", 
16a20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
16a30 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
16a40 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
16a50 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
16a60 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
16a70 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
16a80 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
16a90 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
16aa0 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
16ab0 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29  objv[2], &col) )
16ac0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
16ad0 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  R;..  Tcl_SetObj
16ae0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
16af0 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 78 46 75  cl_NewIntObj(xFu
16b00 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c 29 29 29  nc(pStmt, col)))
16b10 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
16b20 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  K;.}..#ifndef SQ
16b30 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f  LITE_OMIT_DISKIO
16b40 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
16b50 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61 64  qlite3OsOpenRead
16b60 57 72 69 74 65 20 3c 66 69 6c 65 6e 61 6d 65 3e  Write <filename>
16b70 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
16b80 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 4f 70 65  est_sqlite3OsOpe
16b90 6e 52 65 61 64 57 72 69 74 65 28 0a 20 20 76 6f  nReadWrite(.  vo
16ba0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
16bb0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
16bc0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
16bd0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
16be0 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
16bf0 4f 73 46 69 6c 65 20 2a 70 46 69 6c 65 3b 0a 20  OsFile *pFile;. 
16c00 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 64   int rc;.  int d
16c10 75 6d 6d 79 3b 0a 20 20 63 68 61 72 20 7a 42 75  ummy;.  char zBu
16c20 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f  f[100];..  if( o
16c30 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
16c40 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
16c50 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
16c60 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
16c70 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
16c80 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
16c90 30 5d 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65 22  0]), " filename"
16ca0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
16cb0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
16cc0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f  .  rc = sqlite3O
16cd0 73 4f 70 65 6e 52 65 61 64 57 72 69 74 65 28 54  sOpenReadWrite(T
16ce0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
16cf0 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65 2c 20 26  v[1]), &pFile, &
16d00 64 75 6d 6d 79 29 3b 0a 20 20 69 66 28 20 72 63  dummy);.  if( rc
16d10 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
16d20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74     Tcl_SetResult
16d30 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
16d40 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29  )t1ErrorName(rc)
16d50 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20  , TCL_STATIC);. 
16d60 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
16d70 52 4f 52 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ROR;.  }.  sqlit
16d80 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65  e3TestMakePointe
16d90 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75  rStr(interp, zBu
16da0 66 2c 20 70 46 69 6c 65 29 3b 0a 20 20 54 63 6c  f, pFile);.  Tcl
16db0 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
16dc0 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72  p, zBuf, 0);.  r
16dd0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
16de0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
16df0 20 20 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65    sqlite3OsClose
16e00 20 3c 66 69 6c 65 20 68 61 6e 64 6c 65 3e 0a 2a   <file handle>.*
16e10 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
16e20 74 5f 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65  t_sqlite3OsClose
16e30 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
16e40 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
16e50 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
16e60 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
16e70 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
16e80 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a 70 46  .){.  OsFile *pF
16e90 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  ile;.  int rc;..
16ea0 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
16eb0 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
16ec0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
16ed0 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
16ee0 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
16ef0 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
16f00 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69  g(objv[0]), " fi
16f10 6c 65 68 61 6e 64 6c 65 22 2c 20 30 29 3b 0a 20  lehandle", 0);. 
16f20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
16f30 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
16f40 67 65 74 46 69 6c 65 50 6f 69 6e 74 65 72 28 69  getFilePointer(i
16f50 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
16f60 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
16f70 70 46 69 6c 65 29 20 29 7b 0a 20 20 20 20 72 65  pFile) ){.    re
16f80 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
16f90 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
16fa0 65 33 4f 73 43 6c 6f 73 65 28 26 70 46 69 6c 65  e3OsClose(&pFile
16fb0 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
16fc0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63  ITE_OK ){.    Tc
16fd0 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
16fe0 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72  rp, (char *)t1Er
16ff0 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
17000 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 65  _STATIC);.    re
17010 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
17020 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c    }.  return TCL
17030 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
17040 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73 4c  age:  sqlite3OsL
17050 6f 63 6b 20 3c 66 69 6c 65 20 68 61 6e 64 6c 65  ock <file handle
17060 3e 20 3c 6c 6f 63 6b 74 79 70 65 3e 0a 2a 2f 0a  > <locktype>.*/.
17070 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
17080 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 0a 20  sqlite3OsLock(. 
17090 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
170a0 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
170b0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
170c0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
170d0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
170e0 0a 20 20 4f 73 46 69 6c 65 20 2a 20 70 46 69 6c  .  OsFile * pFil
170f0 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  e;.  int rc;..  
17100 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
17110 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
17120 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
17130 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
17140 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
17150 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
17160 28 6f 62 6a 76 5b 30 5d 29 2c 20 0a 20 20 20 20  (objv[0]), .    
17170 20 20 20 20 22 20 66 69 6c 65 68 61 6e 64 6c 65      " filehandle
17180 20 28 53 48 41 52 45 44 7c 52 45 53 45 52 56 45   (SHARED|RESERVE
17190 44 7c 50 45 4e 44 49 4e 47 7c 45 58 43 4c 55 53  D|PENDING|EXCLUS
171a0 49 56 45 29 22 2c 20 30 29 3b 0a 20 20 20 20 72  IVE)", 0);.    r
171b0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
171c0 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 46  .  }..  if( getF
171d0 69 6c 65 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  ilePointer(inter
171e0 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
171f0 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c  (objv[1]), &pFil
17200 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  e) ){.    return
17210 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
17220 0a 20 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70  .  if( 0==strcmp
17230 28 22 53 48 41 52 45 44 22 2c 20 54 63 6c 5f 47  ("SHARED", Tcl_G
17240 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d  etString(objv[2]
17250 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  )) ){.    rc = s
17260 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69  qlite3OsLock(pFi
17270 6c 65 2c 20 53 48 41 52 45 44 5f 4c 4f 43 4b 29  le, SHARED_LOCK)
17280 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28  ;.  }.  else if(
17290 20 30 3d 3d 73 74 72 63 6d 70 28 22 52 45 53 45   0==strcmp("RESE
172a0 52 56 45 44 22 2c 20 54 63 6c 5f 47 65 74 53 74  RVED", Tcl_GetSt
172b0 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29  ring(objv[2])) )
172c0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
172d0 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20  e3OsLock(pFile, 
172e0 52 45 53 45 52 56 45 44 5f 4c 4f 43 4b 29 3b 0a  RESERVED_LOCK);.
172f0 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 30    }.  else if( 0
17300 3d 3d 73 74 72 63 6d 70 28 22 50 45 4e 44 49 4e  ==strcmp("PENDIN
17310 47 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  G", Tcl_GetStrin
17320 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20  g(objv[2])) ){. 
17330 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
17340 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 50 45 4e  sLock(pFile, PEN
17350 44 49 4e 47 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 0a  DING_LOCK);.  }.
17360 20 20 65 6c 73 65 20 69 66 28 20 30 3d 3d 73 74    else if( 0==st
17370 72 63 6d 70 28 22 45 58 43 4c 55 53 49 56 45 22  rcmp("EXCLUSIVE"
17380 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
17390 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20  objv[2])) ){.   
173a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c   rc = sqlite3OsL
173b0 6f 63 6b 28 70 46 69 6c 65 2c 20 45 58 43 4c 55  ock(pFile, EXCLU
173c0 53 49 56 45 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 65  SIVE_LOCK);.  }e
173d0 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  lse{.    Tcl_App
173e0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
173f0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
17400 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
17410 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  .        Tcl_Get
17420 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
17430 20 0a 20 20 20 20 20 20 20 20 22 20 66 69 6c 65   .        " file
17440 68 61 6e 64 6c 65 20 28 53 48 41 52 45 44 7c 52  handle (SHARED|R
17450 45 53 45 52 56 45 44 7c 50 45 4e 44 49 4e 47 7c  ESERVED|PENDING|
17460 45 58 43 4c 55 53 49 56 45 29 22 2c 20 30 29 3b  EXCLUSIVE)", 0);
17470 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
17480 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
17490 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
174a0 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65  ){.    Tcl_SetRe
174b0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
174c0 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65  ar *)t1ErrorName
174d0 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43  (rc), TCL_STATIC
174e0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
174f0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
17500 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
17510 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
17520 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 20 3c  qlite3OsUnlock <
17530 66 69 6c 65 20 68 61 6e 64 6c 65 3e 0a 2a 2f 0a  file handle>.*/.
17540 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
17550 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 28  sqlite3OsUnlock(
17560 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
17570 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
17580 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
17590 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
175a0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
175b0 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a 20 70 46  ){.  OsFile * pF
175c0 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  ile;.  int rc;..
175d0 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
175e0 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
175f0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
17600 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
17610 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
17620 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
17630 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69  g(objv[0]), " fi
17640 6c 65 68 61 6e 64 6c 65 22 2c 20 30 29 3b 0a 20  lehandle", 0);. 
17650 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
17660 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
17670 67 65 74 46 69 6c 65 50 6f 69 6e 74 65 72 28 69  getFilePointer(i
17680 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
17690 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
176a0 70 46 69 6c 65 29 20 29 7b 0a 20 20 20 20 72 65  pFile) ){.    re
176b0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
176c0 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
176d0 65 33 4f 73 55 6e 6c 6f 63 6b 28 70 46 69 6c 65  e3OsUnlock(pFile
176e0 2c 20 4e 4f 5f 4c 4f 43 4b 29 3b 0a 20 20 69 66  , NO_LOCK);.  if
176f0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
17700 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65  ){.    Tcl_SetRe
17710 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
17720 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65  ar *)t1ErrorName
17730 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43  (rc), TCL_STATIC
17740 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
17750 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
17760 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
17770 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
17780 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65  qlite3OsTempFile
17790 4e 61 6d 65 0a 2a 2f 0a 73 74 61 74 69 63 20 69  Name.*/.static i
177a0 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f  nt test_sqlite3O
177b0 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 0a 20  sTempFileName(. 
177c0 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
177d0 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
177e0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
177f0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
17800 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
17810 0a 20 20 63 68 61 72 20 7a 46 69 6c 65 5b 53 51  .  char zFile[SQ
17820 4c 49 54 45 5f 54 45 4d 50 4e 41 4d 45 5f 53 49  LITE_TEMPNAME_SI
17830 5a 45 5d 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  ZE];.  int rc;..
17840 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73    rc = sqlite3Os
17850 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 7a 46 69  TempFileName(zFi
17860 6c 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  le);.  if( rc!=S
17870 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
17880 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
17890 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31  terp, (char *)t1
178a0 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54  ErrorName(rc), T
178b0 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  CL_STATIC);.    
178c0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
178d0 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65  ;.  }.  Tcl_Appe
178e0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
178f0 20 7a 46 69 6c 65 2c 20 30 29 3b 0a 20 20 72 65   zFile, 0);.  re
17900 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23  turn TCL_OK;.}.#
17910 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  endif../*.** Usa
17920 67 65 3a 20 20 73 71 6c 69 74 65 5f 73 65 74 5f  ge:  sqlite_set_
17930 6d 61 67 69 63 20 20 44 42 20 20 4d 41 47 49 43  magic  DB  MAGIC
17940 2d 4e 55 4d 42 45 52 0a 2a 2a 0a 2a 2a 20 53 65  -NUMBER.**.** Se
17950 74 20 74 68 65 20 64 62 2d 3e 6d 61 67 69 63 20  t the db->magic 
17960 76 61 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20  value.  This is 
17970 75 73 65 64 20 74 6f 20 74 65 73 74 20 65 72 72  used to test err
17980 6f 72 20 72 65 63 6f 76 65 72 79 20 6c 6f 67 69  or recovery logi
17990 63 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  c..*/.static int
179a0 20 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69   sqlite_set_magi
179b0 63 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  c(.  void * clie
179c0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
179d0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
179e0 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72  int argc,.  char
179f0 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c   **argv.){.  sql
17a00 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
17a10 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
17a20 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
17a30 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
17a40 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
17a50 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
17a60 20 20 20 20 20 20 20 20 22 20 44 42 20 4d 41 47          " DB MAG
17a70 49 43 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  IC", 0);.    ret
17a80 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
17a90 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
17aa0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
17ab0 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
17ac0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
17ad0 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67    if( strcmp(arg
17ae0 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41  v[2], "SQLITE_MA
17af0 47 49 43 5f 4f 50 45 4e 22 29 3d 3d 30 20 29 7b  GIC_OPEN")==0 ){
17b00 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  .    db->magic =
17b10 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
17b20 45 4e 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  EN;.  }else if( 
17b30 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20  strcmp(argv[2], 
17b40 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c  "SQLITE_MAGIC_CL
17b50 4f 53 45 44 22 29 3d 3d 30 20 29 7b 0a 20 20 20  OSED")==0 ){.   
17b60 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c   db->magic = SQL
17b70 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
17b80 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
17b90 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53  rcmp(argv[2], "S
17ba0 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
17bb0 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d  ")==0 ){.    db-
17bc0 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
17bd0 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 7d 65  MAGIC_BUSY;.  }e
17be0 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61  lse if( strcmp(a
17bf0 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f  rgv[2], "SQLITE_
17c00 4d 41 47 49 43 5f 45 52 52 4f 52 22 29 3d 3d 30  MAGIC_ERROR")==0
17c10 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69   ){.    db->magi
17c20 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
17c30 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 20  _ERROR;.  }else 
17c40 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69  if( Tcl_GetInt(i
17c50 6e 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20  nterp, argv[2], 
17c60 26 64 62 2d 3e 6d 61 67 69 63 29 20 29 7b 0a 20  &db->magic) ){. 
17c70 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
17c80 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ROR;.  }.  retur
17c90 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
17ca0 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
17cb0 65 33 5f 69 6e 74 65 72 72 75 70 74 20 20 44 42  e3_interrupt  DB
17cc0 20 0a 2a 2a 0a 2a 2a 20 54 72 69 67 67 65 72 20   .**.** Trigger 
17cd0 61 6e 20 69 6e 74 65 72 72 75 70 74 20 6f 6e 20  an interrupt on 
17ce0 44 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  DB.*/.static int
17cf0 20 74 65 73 74 5f 69 6e 74 65 72 72 75 70 74 28   test_interrupt(
17d00 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
17d10 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
17d20 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
17d30 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
17d40 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74  *argv.){.  sqlit
17d50 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72  e3 *db;.  if( ar
17d60 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
17d70 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
17d80 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
17d90 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
17da0 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44  "", argv[0], " D
17db0 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  B", 0);.    retu
17dc0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
17dd0 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
17de0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
17df0 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
17e00 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
17e10 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
17e20 70 74 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e  pt(db);.  return
17e30 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74   TCL_OK;.}..stat
17e40 69 63 20 75 38 20 2a 73 71 6c 69 74 65 33 5f 73  ic u8 *sqlite3_s
17e50 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65 20 3d 20  tack_baseline = 
17e60 30 3b 0a 0a 2f 2a 0a 2a 2a 20 46 69 6c 6c 20 74  0;../*.** Fill t
17e70 68 65 20 73 74 61 63 6b 20 77 69 74 68 20 61 20  he stack with a 
17e80 6b 6e 6f 77 6e 20 62 69 74 70 61 74 74 65 72 6e  known bitpattern
17e90 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
17ea0 20 70 72 65 70 53 74 61 63 6b 28 76 6f 69 64 29   prepStack(void)
17eb0 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 75 33 32  {.  int i;.  u32
17ec0 20 62 69 67 42 75 66 5b 36 35 35 33 36 5d 3b 0a   bigBuf[65536];.
17ed0 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a    for(i=0; i<siz
17ee0 65 6f 66 28 62 69 67 42 75 66 29 3b 20 69 2b 2b  eof(bigBuf); i++
17ef0 29 20 62 69 67 42 75 66 5b 69 5d 20 3d 20 30 78  ) bigBuf[i] = 0x
17f00 64 65 61 64 62 65 65 66 3b 0a 20 20 73 71 6c 69  deadbeef;.  sqli
17f10 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69  te3_stack_baseli
17f20 6e 65 20 3d 20 28 75 38 2a 29 26 62 69 67 42 75  ne = (u8*)&bigBu
17f30 66 5b 36 35 35 33 36 5d 3b 0a 7d 0a 0a 2f 2a 0a  f[65536];.}../*.
17f40 2a 2a 20 47 65 74 20 74 68 65 20 63 75 72 72 65  ** Get the curre
17f50 6e 74 20 73 74 61 63 6b 20 64 65 70 74 68 2e 20  nt stack depth. 
17f60 20 55 73 65 64 20 66 6f 72 20 64 65 62 75 67 67   Used for debugg
17f70 69 6e 67 20 6f 6e 6c 79 2e 0a 2a 2f 0a 75 36 34  ing only..*/.u64
17f80 20 73 71 6c 69 74 65 33 53 74 61 63 6b 44 65 70   sqlite3StackDep
17f90 74 68 28 76 6f 69 64 29 7b 0a 20 20 75 38 20 78  th(void){.  u8 x
17fa0 3b 0a 20 20 72 65 74 75 72 6e 20 28 75 36 34 29  ;.  return (u64)
17fb0 28 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62  (sqlite3_stack_b
17fc0 61 73 65 6c 69 6e 65 20 2d 20 26 78 29 3b 0a 7d  aseline - &x);.}
17fd0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
17fe0 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 75 73  sqlite3_stack_us
17ff0 65 64 20 44 42 20 53 51 4c 0a 2a 2a 0a 2a 2a 20  ed DB SQL.**.** 
18000 54 72 79 20 74 6f 20 6d 65 61 73 75 72 65 20 74  Try to measure t
18010 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 73 74 61  he amount of sta
18020 63 6b 20 73 70 61 63 65 20 75 73 65 64 20 62 79  ck space used by
18030 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74   a call to sqlit
18040 65 33 5f 65 78 65 63 0a 2a 2f 0a 73 74 61 74 69  e3_exec.*/.stati
18050 63 20 69 6e 74 20 74 65 73 74 5f 73 74 61 63 6b  c int test_stack
18060 5f 75 73 65 64 28 0a 20 20 76 6f 69 64 20 2a 20  _used(.  void * 
18070 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
18080 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
18090 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20  ,.  int argc,.  
180a0 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20  char **argv.){. 
180b0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
180c0 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 61 72 67  int i;.  if( arg
180d0 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
180e0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
180f0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
18100 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
18110 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20  ", argv[0], .   
18120 20 20 20 20 20 22 20 44 42 20 53 51 4c 22 2c 20       " DB SQL", 
18130 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
18140 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
18150 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
18160 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
18170 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
18180 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 70 72 65  TCL_ERROR;.  pre
18190 70 53 74 61 63 6b 28 29 3b 0a 20 20 28 76 6f 69  pStack();.  (voi
181a0 64 29 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  d)sqlite3_exec(d
181b0 62 2c 20 61 72 67 76 5b 32 5d 2c 20 30 2c 20 30  b, argv[2], 0, 0
181c0 2c 20 30 29 3b 0a 20 20 66 6f 72 28 69 3d 36 35  , 0);.  for(i=65
181d0 35 33 35 3b 20 69 3e 3d 30 20 26 26 20 28 28 75  535; i>=0 && ((u
181e0 33 32 2a 29 73 71 6c 69 74 65 33 5f 73 74 61 63  32*)sqlite3_stac
181f0 6b 5f 62 61 73 65 6c 69 6e 65 29 5b 2d 69 5d 3d  k_baseline)[-i]=
18200 3d 30 78 64 65 61 64 62 65 65 66 3b 20 69 2d 2d  =0xdeadbeef; i--
18210 29 7b 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  ){}.  Tcl_SetObj
18220 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
18230 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 69 2a 34  cl_NewIntObj(i*4
18240 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
18250 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
18260 61 67 65 3a 20 73 71 6c 69 74 65 5f 64 65 6c 65  age: sqlite_dele
18270 74 65 5f 66 75 6e 63 74 69 6f 6e 20 44 42 20 66  te_function DB f
18280 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a  unction-name.**.
18290 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 75 73  ** Delete the us
182a0 65 72 20 66 75 6e 63 74 69 6f 6e 20 27 66 75 6e  er function 'fun
182b0 63 74 69 6f 6e 2d 6e 61 6d 65 27 20 66 72 6f 6d  ction-name' from
182c0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
182d0 20 44 42 2e 20 49 74 0a 2a 2a 20 69 73 20 61 73   DB. It.** is as
182e0 73 75 6d 65 64 20 74 68 61 74 20 74 68 65 20 75  sumed that the u
182f0 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  ser function was
18300 20 63 72 65 61 74 65 64 20 61 73 20 55 54 46 38   created as UTF8
18310 2c 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 0a  , any number of.
18320 2a 2a 20 61 72 67 75 6d 65 6e 74 73 20 28 74 68  ** arguments (th
18330 65 20 77 61 79 20 74 68 65 20 54 43 4c 20 69 6e  e way the TCL in
18340 74 65 72 66 61 63 65 20 64 6f 65 73 20 69 74 29  terface does it)
18350 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
18360 64 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 28  delete_function(
18370 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
18380 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
18390 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
183a0 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
183b0 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20 72  *argv.){.  int r
183c0 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  c;.  sqlite3 *db
183d0 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20  ;.  if( argc!=3 
183e0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
183f0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
18400 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
18410 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
18420 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20  gv[0], .        
18430 22 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e 61  " DB function-na
18440 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  me", 0);.    ret
18450 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
18460 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
18470 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
18480 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
18490 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
184a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
184b0 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64  reate_function(d
184c0 62 2c 20 61 72 67 76 5b 32 5d 2c 20 2d 31 2c 20  b, argv[2], -1, 
184d0 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20  SQLITE_UTF8, 0, 
184e0 30 2c 20 30 2c 20 30 29 3b 0a 20 20 54 63 6c 5f  0, 0, 0);.  Tcl_
184f0 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
18500 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f  , (char *)t1Erro
18510 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53  rName(rc), TCL_S
18520 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75 72 6e  TATIC);.  return
18530 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
18540 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f  * Usage: sqlite_
18550 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  delete_collation
18560 20 44 42 20 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61   DB collation-na
18570 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  me.**.** Delete 
18580 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
18590 71 75 65 6e 63 65 20 27 63 6f 6c 6c 61 74 69 6f  quence 'collatio
185a0 6e 2d 6e 61 6d 65 27 20 66 72 6f 6d 20 64 61 74  n-name' from dat
185b0 61 62 61 73 65 20 68 61 6e 64 6c 65 20 0a 2a 2a  abase handle .**
185c0 20 44 42 2e 20 49 74 20 69 73 20 61 73 73 75 6d   DB. It is assum
185d0 65 64 20 74 68 61 74 20 74 68 65 20 63 6f 6c 6c  ed that the coll
185e0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
185f0 61 73 20 63 72 65 61 74 65 64 20 61 73 20 55 54  as created as UT
18600 46 38 20 28 74 68 65 20 0a 2a 2a 20 77 61 79 20  F8 (the .** way 
18610 74 68 65 20 54 43 4c 20 69 6e 74 65 72 66 61 63  the TCL interfac
18620 65 20 64 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a 73  e does it)..*/.s
18630 74 61 74 69 63 20 69 6e 74 20 64 65 6c 65 74 65  tatic int delete
18640 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 76 6f  _collation(.  vo
18650 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
18660 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
18670 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67  nterp,.  int arg
18680 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  c,.  char **argv
18690 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  .){.  int rc;.  
186a0 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
186b0 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  f( argc!=3 ){.  
186c0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
186d0 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
186e0 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
186f0 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
18700 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44 42 20  , .        " DB 
18710 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 22 2c 20  function-name", 
18720 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
18730 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
18740 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
18750 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
18760 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
18770 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
18780 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
18790 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 61  _collation(db, a
187a0 72 67 76 5b 32 5d 2c 20 53 51 4c 49 54 45 5f 55  rgv[2], SQLITE_U
187b0 54 46 38 2c 20 30 2c 20 30 29 3b 0a 20 20 54 63  TF8, 0, 0);.  Tc
187c0 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
187d0 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72  rp, (char *)t1Er
187e0 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
187f0 5f 53 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75  _STATIC);.  retu
18800 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
18810 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
18820 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
18830 74 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  t DB.**.** Retur
18840 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 64 61  n true if the da
18850 74 61 62 61 73 65 20 44 42 20 69 73 20 63 75 72  tabase DB is cur
18860 72 65 6e 74 6c 79 20 69 6e 20 61 75 74 6f 2d 63  rently in auto-c
18870 6f 6d 6d 69 74 20 6d 6f 64 65 2e 0a 2a 2a 20 52  ommit mode..** R
18880 65 74 75 72 6e 20 66 61 6c 73 65 20 69 66 20 6e  eturn false if n
18890 6f 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ot..*/.static in
188a0 74 20 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  t get_autocommit
188b0 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
188c0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
188d0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
188e0 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20  nt argc,.  char 
188f0 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 63 68 61 72  **argv.){.  char
18900 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 73 71 6c   zBuf[30];.  sql
18910 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
18920 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  argc!=2 ){.    T
18930 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
18940 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
18950 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
18960 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a   \"", argv[0], .
18970 20 20 20 20 20 20 20 20 22 20 44 42 22 2c 20 30          " DB", 0
18980 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
18990 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
189a0 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
189b0 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
189c0 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
189d0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 70 72 69  CL_ERROR;.  spri
189e0 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20  ntf(zBuf, "%d", 
189f0 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
18a00 63 6f 6d 6d 69 74 28 64 62 29 29 3b 0a 20 20 54  commit(db));.  T
18a10 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
18a20 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29  interp, zBuf, 0)
18a30 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
18a40 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
18a50 65 3a 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f  e: sqlite3_busy_
18a60 74 69 6d 65 6f 75 74 20 44 42 20 4d 53 0a 2a 2a  timeout DB MS.**
18a70 0a 2a 2a 20 53 65 74 20 74 68 65 20 62 75 73 79  .** Set the busy
18a80 20 74 69 6d 65 6f 75 74 2e 20 20 54 68 69 73 20   timeout.  This 
18a90 69 73 20 6d 6f 72 65 20 65 61 73 69 6c 79 20 64  is more easily d
18aa0 6f 6e 65 20 75 73 69 6e 67 20 74 68 65 20 74 69  one using the ti
18ab0 6d 65 6f 75 74 0a 2a 2a 20 6d 65 74 68 6f 64 20  meout.** method 
18ac0 6f 66 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72  of the TCL inter
18ad0 66 61 63 65 2e 20 20 42 75 74 20 77 65 20 6e 65  face.  But we ne
18ae0 65 64 20 61 20 77 61 79 20 74 6f 20 74 65 73 74  ed a way to test
18af0 20 74 68 65 20 63 61 73 65 0a 2a 2a 20 77 68 65   the case.** whe
18b00 72 65 20 69 74 20 72 65 74 75 72 6e 73 20 53 51  re it returns SQ
18b10 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0a 2a 2f 0a  LITE_MISUSE..*/.
18b20 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
18b30 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 0a 20 20  busy_timeout(.  
18b40 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
18b50 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
18b60 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61  *interp,.  int a
18b70 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72  rgc,.  char **ar
18b80 67 76 0a 29 7b 0a 20 20 69 6e 74 20 72 63 2c 20  gv.){.  int rc, 
18b90 6d 73 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  ms;.  sqlite3 *d
18ba0 62 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33  b;.  if( argc!=3
18bb0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
18bc0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
18bd0 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
18be0 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
18bf0 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20  rgv[0], .       
18c00 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20   " DB", 0);.    
18c10 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
18c20 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
18c30 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
18c40 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
18c50 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
18c60 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
18c70 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76  Int(interp, argv
18c80 5b 32 5d 2c 20 26 6d 73 29 20 29 20 72 65 74 75  [2], &ms) ) retu
18c90 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
18ca0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 75 73  rc = sqlite3_bus
18cb0 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 6d 73  y_timeout(db, ms
18cc0 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  );.  Tcl_AppendR
18cd0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71  esult(interp, sq
18ce0 6c 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61  lite3TestErrorNa
18cf0 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 72 65  me(rc), 0);.  re
18d00 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
18d10 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 74 63  /*.** Usage:  tc
18d20 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65 20  l_variable_type 
18d30 56 41 52 49 41 42 4c 45 4e 41 4d 45 0a 2a 2a 0a  VARIABLENAME.**.
18d40 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61  ** Return the na
18d50 6d 65 20 6f 66 20 74 68 65 20 69 6e 74 65 72 6e  me of the intern
18d60 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
18d70 6e 20 66 6f 72 20 74 68 65 0a 2a 2a 20 76 61 6c  n for the.** val
18d80 75 65 20 6f 66 20 74 68 65 20 67 69 76 65 6e 20  ue of the given 
18d90 76 61 72 69 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61  variable..*/.sta
18da0 74 69 63 20 69 6e 74 20 74 63 6c 5f 76 61 72 69  tic int tcl_vari
18db0 61 62 6c 65 5f 74 79 70 65 28 0a 20 20 76 6f 69  able_type(.  voi
18dc0 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
18dd0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
18de0 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
18df0 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
18e00 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 54  ST objv[].){.  T
18e10 63 6c 5f 4f 62 6a 20 2a 70 56 61 72 3b 0a 20 20  cl_Obj *pVar;.  
18e20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
18e30 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
18e40 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
18e50 62 6a 76 2c 20 22 56 41 52 49 41 42 4c 45 22 29  bjv, "VARIABLE")
18e60 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
18e70 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 70 56  _ERROR;.  }.  pV
18e80 61 72 20 3d 20 54 63 6c 5f 47 65 74 56 61 72 32  ar = Tcl_GetVar2
18e90 45 78 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  Ex(interp, Tcl_G
18ea0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
18eb0 29 2c 20 30 2c 20 54 43 4c 5f 4c 45 41 56 45 5f  ), 0, TCL_LEAVE_
18ec0 45 52 52 5f 4d 53 47 29 3b 0a 20 20 69 66 28 20  ERR_MSG);.  if( 
18ed0 70 56 61 72 3d 3d 30 20 29 20 72 65 74 75 72 6e  pVar==0 ) return
18ee0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
18ef0 28 20 70 56 61 72 2d 3e 74 79 70 65 50 74 72 20  ( pVar->typePtr 
18f00 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62  ){.    Tcl_SetOb
18f10 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
18f20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
18f30 28 70 56 61 72 2d 3e 74 79 70 65 50 74 72 2d 3e  (pVar->typePtr->
18f40 6e 61 6d 65 2c 20 2d 31 29 29 3b 0a 20 20 7d 0a  name, -1));.  }.
18f50 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
18f60 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
18f70 20 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73    sqlite3_releas
18f80 65 5f 6d 65 6d 6f 72 79 20 3f 4e 3f 0a 2a 2a 0a  e_memory ?N?.**.
18f90 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65  ** Attempt to re
18fa0 6c 65 61 73 65 20 6d 65 6d 6f 72 79 20 63 75 72  lease memory cur
18fb0 72 65 6e 74 6c 79 20 68 65 6c 64 20 62 75 74 20  rently held but 
18fc0 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 72 65 71  not actually req
18fd0 75 69 72 65 64 2e 0a 2a 2a 20 54 68 65 20 69 6e  uired..** The in
18fe0 74 65 67 65 72 20 4e 20 69 73 20 74 68 65 20 6e  teger N is the n
18ff0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 77  umber of bytes w
19000 65 20 61 72 65 20 74 72 79 69 6e 67 20 74 6f 20  e are trying to 
19010 72 65 6c 65 61 73 65 2e 20 20 54 68 65 20 0a 2a  release.  The .*
19020 2a 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69  * return value i
19030 73 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  s the amount of 
19040 6d 65 6d 6f 72 79 20 61 63 74 75 61 6c 6c 79 20  memory actually 
19050 72 65 6c 65 61 73 65 64 2e 0a 2a 2f 0a 73 74 61  released..*/.sta
19060 74 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65 6c  tic int test_rel
19070 65 61 73 65 5f 6d 65 6d 6f 72 79 28 0a 20 20 76  ease_memory(.  v
19080 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
19090 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
190a0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
190b0 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
190c0 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23  ONST objv[].){.#
190d0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
190e0 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f  E_ENABLE_MEMORY_
190f0 4d 41 4e 41 47 45 4d 45 4e 54 29 20 26 26 20 21  MANAGEMENT) && !
19100 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
19110 4d 49 54 5f 44 49 53 4b 49 4f 29 0a 20 20 69 6e  MIT_DISKIO).  in
19120 74 20 4e 3b 0a 20 20 69 6e 74 20 61 6d 74 3b 0a  t N;.  int amt;.
19130 20 20 69 66 28 20 6f 62 6a 63 21 3d 31 20 26 26    if( objc!=1 &&
19140 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20   objc!=2 ){.    
19150 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
19160 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
19170 2c 20 22 3f 4e 3f 22 29 3b 0a 20 20 20 20 72 65  , "?N?");.    re
19180 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
19190 20 20 7d 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d    }.  if( objc==
191a0 32 20 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c  2 ){.    if( Tcl
191b0 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
191c0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20  nterp, objv[1], 
191d0 26 4e 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  &N) ) return TCL
191e0 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b  _ERROR;.  }else{
191f0 0a 20 20 20 20 4e 20 3d 20 2d 31 3b 0a 20 20 7d  .    N = -1;.  }
19200 0a 20 20 61 6d 74 20 3d 20 73 71 6c 69 74 65 33  .  amt = sqlite3
19210 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
19220 4e 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  N);.  Tcl_SetObj
19230 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
19240 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 6d 74  cl_NewIntObj(amt
19250 29 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74  ));.#endif.  ret
19260 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
19270 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
19280 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c  ite3_soft_heap_l
19290 69 6d 69 74 20 3f 4e 3f 0a 2a 2a 0a 2a 2a 20 51  imit ?N?.**.** Q
192a0 75 65 72 79 20 6f 72 20 73 65 74 20 74 68 65 20  uery or set the 
192b0 73 6f 66 74 20 68 65 61 70 20 6c 69 6d 69 74 20  soft heap limit 
192c0 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
192d0 74 68 72 65 61 64 2e 20 20 54 68 65 0a 2a 2a 20  thread.  The.** 
192e0 6c 69 6d 69 74 20 69 73 20 6f 6e 6c 79 20 63 68  limit is only ch
192f0 61 6e 67 65 64 20 69 66 20 74 68 65 20 4e 20 69  anged if the N i
19300 73 20 70 72 65 73 65 6e 74 2e 20 20 54 68 65 20  s present.  The 
19310 70 72 65 76 69 6f 75 73 20 6c 69 6d 69 74 0a 2a  previous limit.*
19320 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  * is returned..*
19330 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
19340 74 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  t_soft_heap_limi
19350 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  t(.  void * clie
19360 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
19370 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
19380 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
19390 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
193a0 5d 0a 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64  ].){.#if defined
193b0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  (SQLITE_ENABLE_M
193c0 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54  EMORY_MANAGEMENT
193d0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
193e0 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f  LITE_OMIT_DISKIO
193f0 29 0a 20 20 69 6e 74 20 61 6d 74 3b 0a 20 20 69  ).  int amt;.  i
19400 66 28 20 6f 62 6a 63 21 3d 31 20 26 26 20 6f 62  f( objc!=1 && ob
19410 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
19420 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
19430 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
19440 3f 4e 3f 22 29 3b 0a 20 20 20 20 72 65 74 75 72  ?N?");.    retur
19450 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
19460 0a 20 20 61 6d 74 20 3d 20 73 71 6c 69 74 65 33  .  amt = sqlite3
19470 54 68 72 65 61 64 44 61 74 61 52 65 61 64 4f 6e  ThreadDataReadOn
19480 6c 79 28 29 2d 3e 6e 53 6f 66 74 48 65 61 70 4c  ly()->nSoftHeapL
19490 69 6d 69 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63  imit;.  if( objc
194a0 3d 3d 32 20 29 7b 0a 20 20 20 20 69 6e 74 20 4e  ==2 ){.    int N
194b0 3b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65  ;.    if( Tcl_Ge
194c0 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
194d0 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 4e 29  rp, objv[1], &N)
194e0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
194f0 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ROR;.    sqlite3
19500 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
19510 28 4e 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53  (N);.  }.  Tcl_S
19520 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
19530 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
19540 6a 28 61 6d 74 29 29 3b 0a 23 65 6e 64 69 66 0a  j(amt));.#endif.
19550 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
19560 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
19570 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72     sqlite3_clear
19580 5f 74 73 64 5f 6d 65 6d 64 65 62 75 67 0a 2a 2a  _tsd_memdebug.**
19590 0a 2a 2a 20 43 6c 65 61 72 20 61 6c 6c 20 6f 66  .** Clear all of
195a0 20 74 68 65 20 4d 45 4d 44 45 42 55 47 20 69 6e   the MEMDEBUG in
195b0 66 6f 72 6d 61 74 69 6f 6e 20 6f 75 74 20 6f 66  formation out of
195c0 20 74 68 72 65 61 64 2d 73 70 65 63 69 66 69 63   thread-specific
195d0 20 64 61 74 61 2e 0a 2a 2a 20 54 68 69 73 20 77   data..** This w
195e0 69 6c 6c 20 61 6c 6c 6f 77 20 69 74 20 74 6f 20  ill allow it to 
195f0 62 65 20 64 65 61 6c 6c 6f 63 61 74 65 64 2e 0a  be deallocated..
19600 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
19610 73 74 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65 6d  st_clear_tsd_mem
19620 64 65 62 75 67 28 0a 20 20 76 6f 69 64 20 2a 20  debug(.  void * 
19630 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
19640 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
19650 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
19660 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
19670 62 6a 76 5b 5d 0a 29 7b 0a 20 20 72 65 74 75 72  bjv[].){.  retur
19680 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
19690 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
196a0 74 65 33 5f 74 73 64 5f 72 65 6c 65 61 73 65 0a  te3_tsd_release.
196b0 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74  **.** Call sqlit
196c0 65 33 52 65 6c 65 61 73 65 54 68 72 65 61 64 44  e3ReleaseThreadD
196d0 61 74 61 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ata..*/.static i
196e0 6e 74 20 74 65 73 74 5f 74 73 64 5f 72 65 6c 65  nt test_tsd_rele
196f0 61 73 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ase(.  void * cl
19700 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
19710 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
19720 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
19730 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
19740 76 5b 5d 0a 29 7b 0a 23 69 66 20 64 65 66 69 6e  v[].){.#if defin
19750 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
19760 55 47 29 0a 20 20 73 71 6c 69 74 65 33 52 65 6c  UG).  sqlite3Rel
19770 65 61 73 65 54 68 72 65 61 64 44 61 74 61 28 29  easeThreadData()
19780 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
19790 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
197a0 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
197b0 74 65 33 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e  te3_thread_clean
197c0 75 70 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 74 68  up.**.** Call th
197d0 65 20 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64  e sqlite3_thread
197e0 5f 63 6c 65 61 6e 75 70 20 41 50 49 2e 0a 2a 2f  _cleanup API..*/
197f0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
19800 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 28  _thread_cleanup(
19810 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
19820 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
19830 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
19840 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
19850 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
19860 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 74 68 72  ){.  sqlite3_thr
19870 65 61 64 5f 63 6c 65 61 6e 75 70 28 29 3b 0a 20  ead_cleanup();. 
19880 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
19890 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  }.../*.** Usage:
198a0 20 20 20 73 71 6c 69 74 65 33 5f 70 61 67 65 72     sqlite3_pager
198b0 5f 72 65 66 63 6f 75 6e 74 73 20 20 44 42 0a 2a  _refcounts  DB.*
198c0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 6c 69  *.** Return a li
198d0 73 74 20 6f 66 20 6e 75 6d 62 65 72 73 20 77 68  st of numbers wh
198e0 69 63 68 20 61 72 65 20 74 68 65 20 50 61 67 65  ich are the Page
198f0 72 52 65 66 63 6f 75 6e 74 20 66 6f 72 20 61 6c  rRefcount for al
19900 6c 0a 2a 2a 20 70 61 67 65 72 73 20 6f 6e 20 65  l.** pagers on e
19910 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
19920 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74  nection..*/.stat
19930 69 63 20 69 6e 74 20 74 65 73 74 5f 70 61 67 65  ic int test_page
19940 72 5f 72 65 66 63 6f 75 6e 74 73 28 0a 20 20 76  r_refcounts(.  v
19950 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
19960 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
19970 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
19980 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
19990 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
199a0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
199b0 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 76 2c 20  int i;.  int v, 
199c0 2a 61 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  *a;.  Tcl_Obj *p
199d0 52 65 73 75 6c 74 3b 0a 0a 20 20 69 66 28 20 6f  Result;..  if( o
199e0 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
199f0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
19a00 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
19a10 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
19a20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c  \"",.        Tcl
19a30 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
19a40 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
19a50 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   DB", 0);.    re
19a60 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
19a70 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
19a80 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
19a90 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
19aa0 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
19ab0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
19ac0 20 20 70 52 65 73 75 6c 74 20 3d 20 54 63 6c 5f    pResult = Tcl_
19ad0 4e 65 77 4f 62 6a 28 29 3b 0a 20 20 66 6f 72 28  NewObj();.  for(
19ae0 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
19af0 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 64 62  i++){.    if( db
19b00 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20  ->aDb[i].pBt==0 
19b10 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 2d 31 3b  ){.      v = -1;
19b20 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
19b30 20 20 61 20 3d 20 73 71 6c 69 74 65 33 50 61 67    a = sqlite3Pag
19b40 65 72 53 74 61 74 73 28 73 71 6c 69 74 65 33 42  erStats(sqlite3B
19b50 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44  treePager(db->aD
19b60 62 5b 69 5d 2e 70 42 74 29 29 3b 0a 20 20 20 20  b[i].pBt));.    
19b70 20 20 76 20 3d 20 61 5b 30 5d 3b 0a 20 20 20 20    v = a[0];.    
19b80 7d 0a 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62  }.    Tcl_ListOb
19b90 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30  jAppendElement(0
19ba0 2c 20 70 52 65 73 75 6c 74 2c 20 54 63 6c 5f 4e  , pResult, Tcl_N
19bb0 65 77 49 6e 74 4f 62 6a 28 76 29 29 3b 0a 20 20  ewIntObj(v));.  
19bc0 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  }.  Tcl_SetObjRe
19bd0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 70 52 65  sult(interp, pRe
19be0 73 75 6c 74 29 3b 0a 20 20 72 65 74 75 72 6e 20  sult);.  return 
19bf0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  TCL_OK;.}.../*.*
19c00 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73  * This routine s
19c10 65 74 73 20 65 6e 74 72 69 65 73 20 69 6e 20 74  ets entries in t
19c20 68 65 20 67 6c 6f 62 61 6c 20 3a 3a 73 71 6c 69  he global ::sqli
19c30 74 65 5f 6f 70 74 69 6f 6e 73 28 29 20 61 72 72  te_options() arr
19c40 61 79 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 61  ay variable.** a
19c50 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
19c60 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e  compile-time con
19c70 66 69 67 75 72 61 74 69 6f 6e 20 6f 66 20 74 68  figuration of th
19c80 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 65 73  e database.  Tes
19c90 74 0a 2a 2a 20 70 72 6f 63 65 64 75 72 65 73 20  t.** procedures 
19ca0 75 73 65 20 74 68 69 73 20 74 6f 20 64 65 74 65  use this to dete
19cb0 72 6d 69 6e 65 20 77 68 65 6e 20 74 65 73 74 73  rmine when tests
19cc0 20 73 68 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74   should be omitt
19cd0 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ed..*/.static vo
19ce0 69 64 20 73 65 74 5f 6f 70 74 69 6f 6e 73 28 54  id set_options(T
19cf0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
19d00 70 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  p){.#ifdef SQLIT
19d10 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 20 20  E_32BIT_ROWID.  
19d20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
19d30 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
19d40 6f 6e 73 22 2c 20 22 72 6f 77 69 64 33 32 22 2c  ons", "rowid32",
19d50 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
19d60 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
19d70 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
19d80 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
19d90 6f 6e 73 22 2c 20 22 72 6f 77 69 64 33 32 22 2c  ons", "rowid32",
19da0 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
19db0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
19dc0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43 41  #ifdef SQLITE_CA
19dd0 53 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b  SE_SENSITIVE_LIK
19de0 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  E.  Tcl_SetVar2(
19df0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
19e00 6f 70 74 69 6f 6e 73 22 2c 22 63 61 73 65 73 65  options","casese
19e10 6e 73 69 74 69 76 65 6c 69 6b 65 22 2c 22 31 22  nsitivelike","1"
19e20 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59  ,TCL_GLOBAL_ONLY
19e30 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
19e40 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
19e50 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
19e60 22 63 61 73 65 73 65 6e 73 69 74 69 76 65 6c 69  "casesensitiveli
19e70 6b 65 22 2c 22 30 22 2c 54 43 4c 5f 47 4c 4f 42  ke","0",TCL_GLOB
19e80 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
19e90 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
19ea0 44 49 53 41 42 4c 45 5f 44 49 52 53 59 4e 43 0a  DISABLE_DIRSYNC.
19eb0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
19ec0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
19ed0 74 69 6f 6e 73 22 2c 20 22 64 69 72 73 79 6e 63  tions", "dirsync
19ee0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
19ef0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
19f00 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
19f10 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
19f20 74 69 6f 6e 73 22 2c 20 22 64 69 72 73 79 6e 63  tions", "dirsync
19f30 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
19f40 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
19f50 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
19f60 44 49 53 41 42 4c 45 5f 4c 46 53 0a 20 20 54 63  DISABLE_LFS.  Tc
19f70 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
19f80 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
19f90 73 22 2c 20 22 6c 66 73 22 2c 20 22 30 22 2c 20  s", "lfs", "0", 
19fa0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
19fb0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
19fc0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
19fd0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
19fe0 22 6c 66 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f  "lfs", "1", TCL_
19ff0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1a000 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
1a010 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
1a020 42 4c 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  BLE.  Tcl_SetVar
1a030 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1a040 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 6c 74  e_options", "alt
1a050 65 72 74 61 62 6c 65 22 2c 20 22 30 22 2c 20 54  ertable", "0", T
1a060 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1a070 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
1a080 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1a090 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1a0a0 61 6c 74 65 72 74 61 62 6c 65 22 2c 20 22 31 22  altertable", "1"
1a0b0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1a0c0 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
1a0d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
1a0e0 4e 41 4c 59 5a 45 0a 20 20 54 63 6c 5f 53 65 74  NALYZE.  Tcl_Set
1a0f0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1a100 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1a110 61 6e 61 6c 79 7a 65 22 2c 20 22 30 22 2c 20 54  analyze", "0", T
1a120 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1a130 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
1a140 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1a150 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1a160 61 6e 61 6c 79 7a 65 22 2c 20 22 31 22 2c 20 54  analyze", "1", T
1a170 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1a180 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
1a190 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41  SQLITE_OMIT_ATTA
1a1a0 43 48 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  CH.  Tcl_SetVar2
1a1b0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1a1c0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 74 74 61  _options", "atta
1a1d0 63 68 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ch", "0", TCL_GL
1a1e0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
1a1f0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
1a200 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1a210 6f 70 74 69 6f 6e 73 22 2c 20 22 61 74 74 61 63  options", "attac
1a220 68 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  h", "1", TCL_GLO
1a230 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
1a240 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
1a250 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
1a260 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  ION.  Tcl_SetVar
1a270 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1a280 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74  e_options", "aut
1a290 68 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  h", "0", TCL_GLO
1a2a0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
1a2b0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1a2c0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1a2d0 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 68 22 2c  ptions", "auth",
1a2e0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
1a2f0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
1a300 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
1a310 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
1a320 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1a330 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1a340 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 69 6e  ptions", "autoin
1a350 63 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  c", "0", TCL_GLO
1a360 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
1a370 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1a380 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1a390 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 69 6e  ptions", "autoin
1a3a0 63 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  c", "1", TCL_GLO
1a3b0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
1a3c0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
1a3d0 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
1a3e0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1a3f0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1a400 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 76 61  ptions", "autova
1a410 63 75 75 6d 22 2c 20 22 30 22 2c 20 54 43 4c 5f  cuum", "0", TCL_
1a420 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1a430 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
1a440 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1a450 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 75 74  e_options", "aut
1a460 6f 76 61 63 75 75 6d 22 2c 20 22 31 22 2c 20 54  ovacuum", "1", T
1a470 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1a480 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
1a490 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
1a4a0 4d 20 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  M */.#if !define
1a4b0 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  d(SQLITE_DEFAULT
1a4c0 5f 41 55 54 4f 56 41 43 55 55 4d 29 20 7c 7c 20  _AUTOVACUUM) || 
1a4d0 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 41  SQLITE_DEFAULT_A
1a4e0 55 54 4f 56 41 43 55 55 4d 3d 3d 30 0a 20 20 54  UTOVACUUM==0.  T
1a4f0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
1a500 70 2c 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  p,"sqlite_option
1a510 73 22 2c 22 64 65 66 61 75 6c 74 5f 61 75 74 6f  s","default_auto
1a520 76 61 63 75 75 6d 22 2c 22 30 22 2c 54 43 4c 5f  vacuum","0",TCL_
1a530 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1a540 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
1a550 32 28 69 6e 74 65 72 70 2c 22 73 71 6c 69 74 65  2(interp,"sqlite
1a560 5f 6f 70 74 69 6f 6e 73 22 2c 22 64 65 66 61 75  _options","defau
1a570 6c 74 5f 61 75 74 6f 76 61 63 75 75 6d 22 2c 22  lt_autovacuum","
1a580 31 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  1",TCL_GLOBAL_ON
1a590 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
1a5a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1a5b0 42 45 54 57 45 45 4e 5f 4f 50 54 49 4d 49 5a 41  BETWEEN_OPTIMIZA
1a5c0 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61  TION.  Tcl_SetVa
1a5d0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1a5e0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 62 65  te_options", "be
1a5f0 74 77 65 65 6e 5f 6f 70 74 22 2c 20 22 30 22 2c  tween_opt", "0",
1a600 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1a610 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
1a620 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
1a630 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
1a640 20 22 62 65 74 77 65 65 6e 5f 6f 70 74 22 2c 20   "between_opt", 
1a650 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
1a660 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
1a670 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
1a680 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 0a 20  T_BLOB_LITERAL. 
1a690 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1a6a0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1a6b0 69 6f 6e 73 22 2c 20 22 62 6c 6f 62 6c 69 74 22  ions", "bloblit"
1a6c0 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
1a6d0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
1a6e0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1a6f0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1a700 69 6f 6e 73 22 2c 20 22 62 6c 6f 62 6c 69 74 22  ions", "bloblit"
1a710 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
1a720 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1a730 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1a740 4d 49 54 5f 43 41 53 54 0a 20 20 54 63 6c 5f 53  MIT_CAST.  Tcl_S
1a750 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
1a760 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
1a770 20 22 63 61 73 74 22 2c 20 22 30 22 2c 20 54 43   "cast", "0", TC
1a780 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
1a790 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
1a7a0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
1a7b0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63  ite_options", "c
1a7c0 61 73 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  ast", "1", TCL_G
1a7d0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
1a7e0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
1a7f0 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20  TE_OMIT_CHECK.  
1a800 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
1a810 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
1a820 6f 6e 73 22 2c 20 22 63 68 65 63 6b 22 2c 20 22  ons", "check", "
1a830 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
1a840 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
1a850 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1a860 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1a870 73 22 2c 20 22 63 68 65 63 6b 22 2c 20 22 31 22  s", "check", "1"
1a880 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1a890 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
1a8a0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1a8b0 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41  _COLUMN_METADATA
1a8c0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1a8d0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1a8e0 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6c 75 6d 6e  ptions", "column
1a8f0 6d 65 74 61 64 61 74 61 22 2c 20 22 31 22 2c 20  metadata", "1", 
1a900 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
1a910 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
1a920 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1a930 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1a940 22 63 6f 6c 75 6d 6e 6d 65 74 61 64 61 74 61 22  "columnmetadata"
1a950 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
1a960 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1a970 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1a980 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 0a 20 20 54  MIT_COMPLETE.  T
1a990 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
1a9a0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
1a9b0 6e 73 22 2c 20 22 63 6f 6d 70 6c 65 74 65 22 2c  ns", "complete",
1a9c0 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
1a9d0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
1a9e0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
1a9f0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
1aa00 6f 6e 73 22 2c 20 22 63 6f 6d 70 6c 65 74 65 22  ons", "complete"
1aa10 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
1aa20 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1aa30 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1aa40 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c  MIT_COMPOUND_SEL
1aa50 45 43 54 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  ECT.  Tcl_SetVar
1aa60 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1aa70 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6d  e_options", "com
1aa80 70 6f 75 6e 64 22 2c 20 22 30 22 2c 20 54 43 4c  pound", "0", TCL
1aa90 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
1aaa0 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
1aab0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1aac0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f  te_options", "co
1aad0 6d 70 6f 75 6e 64 22 2c 20 22 31 22 2c 20 54 43  mpound", "1", TC
1aae0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
1aaf0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
1ab00 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4e 46 4c  QLITE_OMIT_CONFL
1ab10 49 43 54 5f 43 4c 41 55 53 45 0a 20 20 54 63 6c  ICT_CLAUSE.  Tcl
1ab20 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1ab30 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1ab40 22 2c 20 22 63 6f 6e 66 6c 69 63 74 22 2c 20 22  ", "conflict", "
1ab50 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
1ab60 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
1ab70 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1ab80 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1ab90 73 22 2c 20 22 63 6f 6e 66 6c 69 63 74 22 2c 20  s", "conflict", 
1aba0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
1abb0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
1abc0 69 66 20 4f 53 5f 55 4e 49 58 0a 20 20 54 63 6c  if OS_UNIX.  Tcl
1abd0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1abe0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1abf0 22 2c 20 22 63 72 61 73 68 74 65 73 74 22 2c 20  ", "crashtest", 
1ac00 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
1ac10 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
1ac20 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
1ac30 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
1ac40 6e 73 22 2c 20 22 63 72 61 73 68 74 65 73 74 22  ns", "crashtest"
1ac50 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
1ac60 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1ac70 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1ac80 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e  MIT_DATETIME_FUN
1ac90 43 53 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  CS.  Tcl_SetVar2
1aca0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1acb0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 61 74 65  _options", "date
1acc0 74 69 6d 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f  time", "0", TCL_
1acd0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1ace0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
1acf0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1ad00 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64 61 74  e_options", "dat
1ad10 65 74 69 6d 65 22 2c 20 22 31 22 2c 20 54 43 4c  etime", "1", TCL
1ad20 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
1ad30 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
1ad40 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f  LITE_OMIT_DISKIO
1ad50 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1ad60 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1ad70 70 74 69 6f 6e 73 22 2c 20 22 64 69 73 6b 69 6f  ptions", "diskio
1ad80 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
1ad90 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
1ada0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1adb0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1adc0 74 69 6f 6e 73 22 2c 20 22 64 69 73 6b 69 6f 22  tions", "diskio"
1add0 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
1ade0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1adf0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1ae00 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 54 63  MIT_EXPLAIN.  Tc
1ae10 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1ae20 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1ae30 73 22 2c 20 22 65 78 70 6c 61 69 6e 22 2c 20 22  s", "explain", "
1ae40 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
1ae50 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
1ae60 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1ae70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1ae80 73 22 2c 20 22 65 78 70 6c 61 69 6e 22 2c 20 22  s", "explain", "
1ae90 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
1aea0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
1aeb0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
1aec0 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
1aed0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1aee0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1aef0 74 69 6f 6e 73 22 2c 20 22 66 6c 6f 61 74 69 6e  tions", "floatin
1af00 67 70 6f 69 6e 74 22 2c 20 22 30 22 2c 20 54 43  gpoint", "0", TC
1af10 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
1af20 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
1af30 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
1af40 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66  ite_options", "f
1af50 6c 6f 61 74 69 6e 67 70 6f 69 6e 74 22 2c 20 22  loatingpoint", "
1af60 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
1af70 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
1af80 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
1af90 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 54  _FOREIGN_KEY.  T
1afa0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
1afb0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
1afc0 6e 73 22 2c 20 22 66 6f 72 65 69 67 6e 6b 65 79  ns", "foreignkey
1afd0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
1afe0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
1aff0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1b000 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1b010 74 69 6f 6e 73 22 2c 20 22 66 6f 72 65 69 67 6e  tions", "foreign
1b020 6b 65 79 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  key", "1", TCL_G
1b030 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
1b040 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
1b050 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 31 0a 20  TE_ENABLE_FTS1. 
1b060 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1b070 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1b080 69 6f 6e 73 22 2c 20 22 66 74 73 31 22 2c 20 22  ions", "fts1", "
1b090 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
1b0a0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
1b0b0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1b0c0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1b0d0 73 22 2c 20 22 66 74 73 31 22 2c 20 22 30 22 2c  s", "fts1", "0",
1b0e0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1b0f0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
1b100 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1b110 46 54 53 32 0a 20 20 54 63 6c 5f 53 65 74 56 61  FTS2.  Tcl_SetVa
1b120 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1b130 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66 74  te_options", "ft
1b140 73 32 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  s2", "1", TCL_GL
1b150 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
1b160 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
1b170 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1b180 6f 70 74 69 6f 6e 73 22 2c 20 22 66 74 73 32 22  options", "fts2"
1b190 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
1b1a0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1b1b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1b1c0 4d 49 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56 45  MIT_GLOBALRECOVE
1b1d0 52 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  R.  Tcl_SetVar2(
1b1e0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1b1f0 6f 70 74 69 6f 6e 73 22 2c 20 22 67 6c 6f 62 61  options", "globa
1b200 6c 72 65 63 6f 76 65 72 22 2c 20 22 30 22 2c 20  lrecover", "0", 
1b210 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
1b220 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
1b230 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1b240 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1b250 22 67 6c 6f 62 61 6c 72 65 63 6f 76 65 72 22 2c  "globalrecover",
1b260 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
1b270 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
1b280 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
1b290 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
1b2a0 43 4b 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  CK.  Tcl_SetVar2
1b2b0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1b2c0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 69 6e 74 65  _options", "inte
1b2d0 67 72 69 74 79 63 6b 22 2c 20 22 30 22 2c 20 54  grityck", "0", T
1b2e0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1b2f0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
1b300 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1b310 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1b320 69 6e 74 65 67 72 69 74 79 63 6b 22 2c 20 22 31  integrityck", "1
1b330 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
1b340 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
1b350 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1b360 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
1b370 4d 41 54 29 20 26 26 20 53 51 4c 49 54 45 5f 44  MAT) && SQLITE_D
1b380 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d  EFAULT_FILE_FORM
1b390 41 54 3d 3d 31 0a 20 20 54 63 6c 5f 53 65 74 56  AT==1.  Tcl_SetV
1b3a0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
1b3b0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6c  ite_options", "l
1b3c0 65 67 61 63 79 66 6f 72 6d 61 74 22 2c 20 22 31  egacyformat", "1
1b3d0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
1b3e0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
1b3f0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1b400 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1b410 22 2c 20 22 6c 65 67 61 63 79 66 6f 72 6d 61 74  ", "legacyformat
1b420 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
1b430 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
1b440 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1b450 4f 4d 49 54 5f 4c 49 4b 45 5f 4f 50 54 49 4d 49  OMIT_LIKE_OPTIMI
1b460 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74  ZATION.  Tcl_Set
1b470 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1b480 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1b490 6c 69 6b 65 5f 6f 70 74 22 2c 20 22 30 22 2c 20  like_opt", "0", 
1b4a0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
1b4b0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
1b4c0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1b4d0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1b4e0 22 6c 69 6b 65 5f 6f 70 74 22 2c 20 22 31 22 2c  "like_opt", "1",
1b4f0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1b500 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
1b510 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
1b520 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 54  AD_EXTENSION.  T
1b530 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
1b540 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
1b550 6e 73 22 2c 20 22 6c 6f 61 64 5f 65 78 74 22 2c  ns", "load_ext",
1b560 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
1b570 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
1b580 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
1b590 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
1b5a0 6f 6e 73 22 2c 20 22 6c 6f 61 64 5f 65 78 74 22  ons", "load_ext"
1b5b0 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
1b5c0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1b5d0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1b5e0 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 0a 20 20 54  MIT_MEMORYDB.  T
1b5f0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
1b600 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
1b610 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 64 62 22 2c  ns", "memorydb",
1b620 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
1b630 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
1b640 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
1b650 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
1b660 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 64 62 22  ons", "memorydb"
1b670 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
1b680 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1b690 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1b6a0 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1b6b0 41 47 45 4d 45 4e 54 0a 20 20 54 63 6c 5f 53 65  AGEMENT.  Tcl_Se
1b6c0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1b6d0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1b6e0 22 6d 65 6d 6f 72 79 6d 61 6e 61 67 65 22 2c 20  "memorymanage", 
1b6f0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
1b700 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
1b710 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
1b720 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
1b730 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 6d 61 6e 61  ns", "memorymana
1b740 67 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ge", "0", TCL_GL
1b750 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
1b760 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
1b770 45 5f 4f 4d 49 54 5f 4f 52 5f 4f 50 54 49 4d 49  E_OMIT_OR_OPTIMI
1b780 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74  ZATION.  Tcl_Set
1b790 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1b7a0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1b7b0 6f 72 5f 6f 70 74 22 2c 20 22 30 22 2c 20 54 43  or_opt", "0", TC
1b7c0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
1b7d0 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
1b7e0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
1b7f0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6f  ite_options", "o
1b800 72 5f 6f 70 74 22 2c 20 22 31 22 2c 20 54 43 4c  r_opt", "1", TCL
1b810 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
1b820 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
1b830 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
1b840 50 52 41 47 4d 41 53 0a 20 20 54 63 6c 5f 53 65  PRAGMAS.  Tcl_Se
1b850 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1b860 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1b870 22 70 61 67 65 72 5f 70 72 61 67 6d 61 73 22 2c  "pager_pragmas",
1b880 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
1b890 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
1b8a0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
1b8b0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
1b8c0 6f 6e 73 22 2c 20 22 70 61 67 65 72 5f 70 72 61  ons", "pager_pra
1b8d0 67 6d 61 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f  gmas", "1", TCL_
1b8e0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1b8f0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
1b900 49 54 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52 0a  ITE_OMIT_PARSER.
1b910 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1b920 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1b930 74 69 6f 6e 73 22 2c 20 22 70 61 72 73 65 72 22  tions", "parser"
1b940 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
1b950 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
1b960 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
1b970 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
1b980 69 6f 6e 73 22 2c 20 22 70 61 72 73 65 72 22 2c  ions", "parser",
1b990 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
1b9a0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
1b9b0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1b9c0 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 29 20  TE_OMIT_PRAGMA) 
1b9d0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
1b9e0 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47  E_OMIT_FLAG_PRAG
1b9f0 4d 41 53 29 0a 20 20 54 63 6c 5f 53 65 74 56 61  MAS).  Tcl_SetVa
1ba00 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1ba10 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72  te_options", "pr
1ba20 61 67 6d 61 22 2c 20 22 30 22 2c 20 54 43 4c 5f  agma", "0", TCL_
1ba30 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 20 20  GLOBAL_ONLY);.  
1ba40 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
1ba50 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
1ba60 6f 6e 73 22 2c 20 22 69 6e 74 65 67 72 69 74 79  ons", "integrity
1ba70 63 6b 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ck", "0", TCL_GL
1ba80 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
1ba90 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
1baa0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1bab0 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72 61 67 6d  options", "pragm
1bac0 61 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  a", "1", TCL_GLO
1bad0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
1bae0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
1baf0 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
1bb00 41 4c 4c 42 41 43 4b 0a 20 20 54 63 6c 5f 53 65  ALLBACK.  Tcl_Se
1bb10 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1bb20 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1bb30 22 70 72 6f 67 72 65 73 73 22 2c 20 22 30 22 2c  "progress", "0",
1bb40 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1bb50 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
1bb60 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
1bb70 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
1bb80 20 22 70 72 6f 67 72 65 73 73 22 2c 20 22 31 22   "progress", "1"
1bb90 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1bba0 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
1bbb0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1bbc0 5f 52 45 44 45 46 5f 49 4f 0a 20 20 54 63 6c 5f  _REDEF_IO.  Tcl_
1bbd0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
1bbe0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
1bbf0 2c 20 22 72 65 64 65 66 69 6f 22 2c 20 22 31 22  , "redefio", "1"
1bc00 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1bc10 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
1bc20 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
1bc30 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
1bc40 2c 20 22 72 65 64 65 66 69 6f 22 2c 20 22 30 22  , "redefio", "0"
1bc50 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1bc60 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
1bc70 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 52  ef SQLITE_OMIT_R
1bc80 45 49 4e 44 45 58 0a 20 20 54 63 6c 5f 53 65 74  EINDEX.  Tcl_Set
1bc90 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1bca0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1bcb0 72 65 69 6e 64 65 78 22 2c 20 22 30 22 2c 20 54  reindex", "0", T
1bcc0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1bcd0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
1bce0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1bcf0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1bd00 72 65 69 6e 64 65 78 22 2c 20 22 31 22 2c 20 54  reindex", "1", T
1bd10 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
1bd20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
1bd30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
1bd40 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 54 63 6c  MA_PRAGMAS.  Tcl
1bd50 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1bd60 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1bd70 22 2c 20 22 73 63 68 65 6d 61 5f 70 72 61 67 6d  ", "schema_pragm
1bd80 61 73 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  as", "0", TCL_GL
1bd90 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
1bda0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
1bdb0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1bdc0 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63 68 65 6d  options", "schem
1bdd0 61 5f 70 72 61 67 6d 61 73 22 2c 20 22 31 22 2c  a_pragmas", "1",
1bde0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
1bdf0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
1be00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  f SQLITE_OMIT_SC
1be10 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41  HEMA_VERSION_PRA
1be20 47 4d 41 53 0a 20 20 54 63 6c 5f 53 65 74 56 61  GMAS.  Tcl_SetVa
1be30 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1be40 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63  te_options", "sc
1be50 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 2c 20 22  hema_version", "
1be60 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
1be70 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
1be80 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1be90 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1bea0 73 22 2c 20 22 73 63 68 65 6d 61 5f 76 65 72 73  s", "schema_vers
1beb0 69 6f 6e 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  ion", "1", TCL_G
1bec0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
1bed0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
1bee0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
1bef0 41 43 48 45 0a 20 20 54 63 6c 5f 53 65 74 56 61  ACHE.  Tcl_SetVa
1bf00 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
1bf10 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 68  te_options", "sh
1bf20 61 72 65 64 5f 63 61 63 68 65 22 2c 20 22 30 22  ared_cache", "0"
1bf30 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1bf40 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
1bf50 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
1bf60 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
1bf70 2c 20 22 73 68 61 72 65 64 5f 63 61 63 68 65 22  , "shared_cache"
1bf80 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
1bf90 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1bfa0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1bfb0 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 20 20 54  MIT_SUBQUERY.  T
1bfc0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
1bfd0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
1bfe0 6e 73 22 2c 20 22 73 75 62 71 75 65 72 79 22 2c  ns", "subquery",
1bff0 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
1c000 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
1c010 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
1c020 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
1c030 6f 6e 73 22 2c 20 22 73 75 62 71 75 65 72 79 22  ons", "subquery"
1c040 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
1c050 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1c060 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
1c070 4d 49 54 5f 54 43 4c 5f 56 41 52 49 41 42 4c 45  MIT_TCL_VARIABLE
1c080 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1c090 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1c0a0 70 74 69 6f 6e 73 22 2c 20 22 74 63 6c 76 61 72  ptions", "tclvar
1c0b0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
1c0c0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
1c0d0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
1c0e0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
1c0f0 74 69 6f 6e 73 22 2c 20 22 74 63 6c 76 61 72 22  tions", "tclvar"
1c100 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
1c110 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
1c120 0a 23 69 66 20 64 65 66 69 6e 65 64 28 54 48 52  .#if defined(THR
1c130 45 41 44 53 41 46 45 29 20 26 26 20 54 48 52 45  EADSAFE) && THRE
1c140 41 44 53 41 46 45 0a 20 20 54 63 6c 5f 53 65 74  ADSAFE.  Tcl_Set
1c150 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1c160 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1c170 74 68 72 65 61 64 73 61 66 65 22 2c 20 22 31 22  threadsafe", "1"
1c180 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
1c190 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
1c1a0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
1c1b0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
1c1c0 2c 20 22 74 68 72 65 61 64 73 61 66 65 22 2c 20  , "threadsafe", 
1c1d0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
1c1e0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
1c1f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
1c200 54 5f 54 52 41 43 45 0a 20 20 54 63 6c 5f 53 65  T_TRACE.  Tcl_Se
1c210 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1c220 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1c230 22 74 72 61 63 65 22 2c 20 22 30 22 2c 20 54 43  "trace", "0", TC
1c240 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
1c250 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
1c260 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
1c270 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74  ite_options", "t
1c280 72 61 63 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f  race", "1", TCL_
1c290 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1c2a0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
1c2b0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
1c2c0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1c2d0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1c2e0 70 74 69 6f 6e 73 22 2c 20 22 74 72 69 67 67 65  ptions", "trigge
1c2f0 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  r", "0", TCL_GLO
1c300 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
1c310 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
1c320 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1c330 70 74 69 6f 6e 73 22 2c 20 22 74 72 69 67 67 65  ptions", "trigge
1c340 72 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  r", "1", TCL_GLO
1c350 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
1c360 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
1c370 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 20 20 54  _OMIT_TEMPDB.  T
1c380 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
1c390 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
1c3a0 6e 73 22 2c 20 22 74 65 6d 70 64 62 22 2c 20 22  ns", "tempdb", "
1c3b0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
1c3c0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
1c3d0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
1c3e0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
1c3f0 73 22 2c 20 22 74 65 6d 70 64 62 22 2c 20 22 31  s", "tempdb", "1
1c400 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
1c410 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
1c420 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1c430 55 54 46 31 36 0a 20 20 54 63 6c 5f 53 65 74 56  UTF16.  Tcl_SetV
1c440 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
1c450 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 75  ite_options", "u
1c460 74 66 31 36 22 2c 20 22 30 22 2c 20 54 43 4c 5f  tf16", "0", TCL_
1c470 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1c480 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
1c490 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1c4a0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 75 74 66  e_options", "utf
1c4b0 31 36 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  16", "1", TCL_GL
1c4c0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
1c4d0 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
1c4e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55  SQLITE_OMIT_VACU
1c4f0 55 4d 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UM) || defined(S
1c500 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43  QLITE_OMIT_ATTAC
1c510 48 29 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  H).  Tcl_SetVar2
1c520 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1c530 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76 61 63 75  _options", "vacu
1c540 75 6d 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  um", "0", TCL_GL
1c550 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
1c560 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
1c570 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1c580 6f 70 74 69 6f 6e 73 22 2c 20 22 76 61 63 75 75  options", "vacuu
1c590 6d 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  m", "1", TCL_GLO
1c5a0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
1c5b0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
1c5c0 5f 4f 4d 49 54 5f 56 49 45 57 0a 20 20 54 63 6c  _OMIT_VIEW.  Tcl
1c5d0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
1c5e0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
1c5f0 22 2c 20 22 76 69 65 77 22 2c 20 22 30 22 2c 20  ", "view", "0", 
1c600 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
1c610 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
1c620 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
1c630 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
1c640 22 76 69 65 77 22 2c 20 22 31 22 2c 20 54 43 4c  "view", "1", TCL
1c650 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
1c660 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
1c670 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1c680 4c 54 41 42 4c 45 0a 20 20 54 63 6c 5f 53 65 74  LTABLE.  Tcl_Set
1c690 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
1c6a0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
1c6b0 76 74 61 62 22 2c 20 22 30 22 2c 20 54 43 4c 5f  vtab", "0", TCL_
1c6c0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
1c6d0 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
1c6e0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
1c6f0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76 74 61  e_options", "vta
1c700 62 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  b", "1", TCL_GLO
1c710 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
1c720 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
1c730 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
1c740 52 4d 41 54 0a 20 20 54 63 6c 5f 4f 62 6a 53 65  RMAT.  Tcl_ObjSe
1c750 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 0a 20  tVar2(interp, . 
1c760 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69       Tcl_NewStri
1c770 6e 67 4f 62 6a 28 22 73 71 6c 69 74 65 5f 64 65  ngObj("sqlite_de
1c780 66 61 75 6c 74 5f 66 69 6c 65 5f 66 6f 72 6d 61  fault_file_forma
1c790 74 22 2c 20 2d 31 29 2c 20 30 2c 20 0a 20 20 20  t", -1), 0, .   
1c7a0 20 20 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a     Tcl_NewIntObj
1c7b0 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  (SQLITE_DEFAULT_
1c7c0 46 49 4c 45 5f 46 4f 52 4d 41 54 29 2c 20 54 43  FILE_FORMAT), TC
1c7d0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 0a 20 20  L_GLOBAL_ONLY.  
1c7e0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
1c7f0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 50 41 47 45   SQLITE_MAX_PAGE
1c800 5f 53 49 5a 45 0a 20 20 54 63 6c 5f 4f 62 6a 53  _SIZE.  Tcl_ObjS
1c810 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 0a  etVar2(interp, .
1c820 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72        Tcl_NewStr
1c830 69 6e 67 4f 62 6a 28 22 53 51 4c 49 54 45 5f 4d  ingObj("SQLITE_M
1c840 41 58 5f 50 41 47 45 5f 53 49 5a 45 22 2c 20 2d  AX_PAGE_SIZE", -
1c850 31 29 2c 20 30 2c 20 0a 20 20 20 20 20 20 54 63  1), 0, .      Tc
1c860 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 53 51 4c 49  l_NewIntObj(SQLI
1c870 54 45 5f 4d 41 58 5f 50 41 47 45 5f 53 49 5a 45  TE_MAX_PAGE_SIZE
1c880 29 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ), TCL_GLOBAL_ON
1c890 4c 59 0a 20 20 29 3b 0a 23 65 6e 64 69 66 0a 23  LY.  );.#endif.#
1c8a0 69 66 64 65 66 20 54 45 4d 50 5f 53 54 4f 52 45  ifdef TEMP_STORE
1c8b0 0a 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72  .  Tcl_ObjSetVar
1c8c0 32 28 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20  2(interp, .     
1c8d0 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
1c8e0 6a 28 22 54 45 4d 50 5f 53 54 4f 52 45 22 2c 20  j("TEMP_STORE", 
1c8f0 2d 31 29 2c 20 30 2c 20 0a 20 20 20 20 20 20 54  -1), 0, .      T
1c900 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 54 45 4d  cl_NewIntObj(TEM
1c910 50 5f 53 54 4f 52 45 29 2c 20 54 43 4c 5f 47 4c  P_STORE), TCL_GL
1c920 4f 42 41 4c 5f 4f 4e 4c 59 0a 20 20 29 3b 0a 23  OBAL_ONLY.  );.#
1c930 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74  endif.}../*.** t
1c940 63 6c 63 6d 64 3a 20 20 20 77 6f 72 6b 69 6e 67  clcmd:   working
1c950 5f 36 34 62 69 74 5f 69 6e 74 0a 2a 2a 0a 2a 2a  _64bit_int.**.**
1c960 20 53 6f 6d 65 20 54 43 4c 20 62 75 69 6c 64 73   Some TCL builds
1c970 20 28 65 78 3a 20 63 79 67 77 69 6e 29 20 64 6f   (ex: cygwin) do
1c980 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 36 34 2d   not support 64-
1c990 62 69 74 20 69 6e 74 65 67 65 72 73 2e 20 20 54  bit integers.  T
1c9a0 68 69 73 0a 2a 2a 20 6c 65 61 64 73 20 74 6f 20  his.** leads to 
1c9b0 61 20 6e 75 6d 62 65 72 20 6f 66 20 74 65 73 74  a number of test
1c9c0 20 66 61 69 6c 75 72 65 73 2e 20 20 54 68 65 20   failures.  The 
1c9d0 70 72 65 73 65 6e 74 20 63 6f 6d 6d 61 6e 64 20  present command 
1c9e0 63 68 65 63 6b 73 20 74 68 65 0a 2a 2a 20 54 43  checks the.** TC
1c9f0 4c 20 62 75 69 6c 64 20 74 6f 20 73 65 65 20 77  L build to see w
1ca00 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 69 74  hether or not it
1ca10 20 73 75 70 70 6f 72 74 73 20 36 34 2d 62 69 74   supports 64-bit
1ca20 20 69 6e 74 65 67 65 72 73 2e 20 20 49 74 0a 2a   integers.  It.*
1ca30 2a 20 72 65 74 75 72 6e 73 20 54 52 55 45 20 69  * returns TRUE i
1ca40 66 20 69 74 20 64 6f 65 73 20 61 6e 64 20 46 41  f it does and FA
1ca50 4c 53 45 20 69 66 20 6e 6f 74 2e 0a 2a 2a 0a 2a  LSE if not..**.*
1ca60 2a 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69  * This command i
1ca70 73 20 75 73 65 64 20 74 6f 20 77 61 72 6e 20 75  s used to warn u
1ca80 73 65 72 73 20 74 68 61 74 20 74 68 65 69 72 20  sers that their 
1ca90 54 43 4c 20 62 75 69 6c 64 20 69 73 20 64 65 66  TCL build is def
1caa0 65 63 74 69 76 65 0a 2a 2a 20 61 6e 64 20 74 68  ective.** and th
1cab0 61 74 20 74 68 65 20 65 72 72 6f 72 73 20 74 68  at the errors th
1cac0 65 79 20 61 72 65 20 73 65 65 69 6e 67 20 69 6e  ey are seeing in
1cad0 20 74 68 65 20 74 65 73 74 20 73 63 72 69 70 74   the test script
1cae0 73 20 6d 69 67 68 74 20 62 65 0a 2a 2a 20 61 20  s might be.** a 
1caf0 72 65 73 75 6c 74 20 6f 66 20 74 68 65 69 72 20  result of their 
1cb00 64 65 66 65 63 74 69 76 65 20 54 43 4c 20 72 61  defective TCL ra
1cb10 74 68 65 72 20 74 68 61 6e 20 70 72 6f 62 6c 65  ther than proble
1cb20 6d 73 20 69 6e 20 53 51 4c 69 74 65 2e 0a 2a 2f  ms in SQLite..*/
1cb30 0a 73 74 61 74 69 63 20 69 6e 74 20 77 6f 72 6b  .static int work
1cb40 69 6e 67 5f 36 34 62 69 74 5f 69 6e 74 28 0a 20  ing_64bit_int(. 
1cb50 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
1cb60 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74  ntData, /* Point
1cb70 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e  er to sqlite3_en
1cb80 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f  able_XXX functio
1cb90 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  n */.  Tcl_Inter
1cba0 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
1cbb0 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
1cbc0 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
1cbd0 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
1cbe0 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
1cbf0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1cc00 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
1cc10 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
1cc20 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
1cc30 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
1cc40 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 4f  ts */.){.  Tcl_O
1cc50 62 6a 20 2a 70 54 65 73 74 4f 62 6a 3b 0a 20 20  bj *pTestObj;.  
1cc60 69 6e 74 20 77 6f 72 6b 69 6e 67 20 3d 20 30 3b  int working = 0;
1cc70 0a 0a 20 20 70 54 65 73 74 4f 62 6a 20 3d 20 54  ..  pTestObj = T
1cc80 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a  cl_NewWideIntObj
1cc90 28 31 30 30 30 30 30 30 2a 28 69 36 34 29 31 32  (1000000*(i64)12
1cca0 33 34 35 36 37 38 39 30 29 3b 0a 20 20 77 6f 72  34567890);.  wor
1ccb0 6b 69 6e 67 20 3d 20 73 74 72 63 6d 70 28 54 63  king = strcmp(Tc
1ccc0 6c 5f 47 65 74 53 74 72 69 6e 67 28 70 54 65 73  l_GetString(pTes
1ccd0 74 4f 62 6a 29 2c 20 22 31 32 33 34 35 36 37 38  tObj), "12345678
1cce0 39 30 30 30 30 30 30 30 22 29 3d 3d 30 3b 0a 20  90000000")==0;. 
1ccf0 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e   Tcl_DecrRefCoun
1cd00 74 28 70 54 65 73 74 4f 62 6a 29 3b 0a 20 20 54  t(pTestObj);.  T
1cd10 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
1cd20 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42  interp, Tcl_NewB
1cd30 6f 6f 6c 65 61 6e 4f 62 6a 28 77 6f 72 6b 69 6e  ooleanObj(workin
1cd40 67 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  g));.  return TC
1cd50 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  L_OK;.}.../*.** 
1cd60 52 65 67 69 73 74 65 72 20 63 6f 6d 6d 61 6e 64  Register command
1cd70 73 20 77 69 74 68 20 74 68 65 20 54 43 4c 20 69  s with the TCL i
1cd80 6e 74 65 72 70 72 65 74 65 72 2e 0a 2a 2f 0a 69  nterpreter..*/.i
1cd90 6e 74 20 53 71 6c 69 74 65 74 65 73 74 31 5f 49  nt Sqlitetest1_I
1cda0 6e 69 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a  nit(Tcl_Interp *
1cdb0 69 6e 74 65 72 70 29 7b 0a 20 20 65 78 74 65 72  interp){.  exter
1cdc0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 65  n int sqlite3_se
1cdd0 61 72 63 68 5f 63 6f 75 6e 74 3b 0a 20 20 65 78  arch_count;.  ex
1cde0 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
1cdf0 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
1ce00 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
1ce10 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 66 69 6c 65  qlite3_open_file
1ce20 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e  _count;.  extern
1ce30 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72   int sqlite3_sor
1ce40 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72  t_count;.  exter
1ce50 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 63 75  n int sqlite3_cu
1ce60 72 72 65 6e 74 5f 74 69 6d 65 3b 0a 20 20 73 74  rrent_time;.  st
1ce70 61 74 69 63 20 73 74 72 75 63 74 20 7b 0a 20 20  atic struct {.  
1ce80 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a     char *zName;.
1ce90 20 20 20 20 20 54 63 6c 5f 43 6d 64 50 72 6f 63       Tcl_CmdProc
1cea0 20 2a 78 50 72 6f 63 3b 0a 20 20 7d 20 61 43 6d   *xProc;.  } aCm
1ceb0 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20 22  d[] = {.     { "
1cec0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
1ced0 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 20  int",           
1cee0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
1cef0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
1cf00 74 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22  t    },.     { "
1cf10 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
1cf20 69 6e 74 36 34 22 2c 20 20 20 20 20 20 20 20 20  int64",         
1cf30 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
1cf40 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
1cf50 74 36 34 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22  t64  },.     { "
1cf60 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
1cf70 73 74 72 22 2c 20 20 20 20 20 20 20 20 20 20 20  str",           
1cf80 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
1cf90 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74  lite3_mprintf_st
1cfa0 72 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22  r    },.     { "
1cfb0 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
1cfc0 5f 73 74 72 22 2c 20 20 20 20 20 20 20 20 20 20  _str",          
1cfd0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
1cfe0 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 5f 73  lite3_snprintf_s
1cff0 74 72 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22  tr   },.     { "
1d000 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
1d010 73 74 72 6f 6e 6c 79 22 2c 20 20 20 20 20 20 20  stronly",       
1d020 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
1d030 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74  lite3_mprintf_st
1d040 72 6f 6e 6c 79 7d 2c 0a 20 20 20 20 20 7b 20 22  ronly},.     { "
1d050 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
1d060 64 6f 75 62 6c 65 22 2c 20 20 20 20 20 20 20 20  double",        
1d070 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
1d080 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f  lite3_mprintf_do
1d090 75 62 6c 65 20 7d 2c 0a 20 20 20 20 20 7b 20 22  uble },.     { "
1d0a0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
1d0b0 73 63 61 6c 65 64 22 2c 20 20 20 20 20 20 20 20  scaled",        
1d0c0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71  (Tcl_CmdProc*)sq
1d0d0 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63  lite3_mprintf_sc
1d0e0 61 6c 65 64 20 7d 2c 0a 20 20 20 20 20 7b 20 22  aled },.     { "
1d0f0 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
1d100 68 65 78 64 6f 75 62 6c 65 22 2c 20 20 20 28 54  hexdouble",   (T
1d110 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
1d120 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78 64  te3_mprintf_hexd
1d130 6f 75 62 6c 65 7d 2c 0a 20 20 20 20 20 7b 20 22  ouble},.     { "
1d140 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
1d150 7a 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20 20  z_test",        
1d160 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
1d170 73 74 5f 6d 70 72 69 6e 74 66 5f 7a 20 20 20 20  st_mprintf_z    
1d180 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
1d190 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 6e  qlite3_mprintf_n
1d1a0 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20 20 28  _test",        (
1d1b0 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
1d1c0 74 5f 6d 70 72 69 6e 74 66 5f 6e 20 20 20 20 20  t_mprintf_n     
1d1d0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
1d1e0 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
1d1f0 74 5f 72 6f 77 69 64 22 2c 20 20 20 20 20 28 54  t_rowid",     (T
1d200 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
1d210 5f 6c 61 73 74 5f 72 6f 77 69 64 20 20 20 20 20  _last_rowid     
1d220 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
1d230 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74 66  ite3_exec_printf
1d240 22 2c 20 20 20 20 20 20 20 20 20 20 20 28 54 63  ",           (Tc
1d250 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
1d260 65 78 65 63 5f 70 72 69 6e 74 66 20 20 20 20 20  exec_printf     
1d270 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1d280 74 65 33 5f 65 78 65 63 22 2c 20 20 20 20 20 20  te3_exec",      
1d290 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
1d2a0 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 65  _CmdProc*)test_e
1d2b0 78 65 63 20 20 20 20 20 20 20 20 20 20 20 20 20  xec             
1d2c0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1d2d0 65 33 5f 65 78 65 63 5f 6e 72 22 2c 20 20 20 20  e3_exec_nr",    
1d2e0 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
1d2f0 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 65 78  CmdProc*)test_ex
1d300 65 63 5f 6e 72 20 20 20 20 20 20 20 20 20 20 7d  ec_nr          }
1d310 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1d320 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e  3_get_table_prin
1d330 74 66 22 2c 20 20 20 20 20 20 28 54 63 6c 5f 43  tf",      (Tcl_C
1d340 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 67 65 74  mdProc*)test_get
1d350 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 20 7d 2c  _table_printf },
1d360 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1d370 5f 63 6c 6f 73 65 22 2c 20 20 20 20 20 20 20 20  _close",        
1d380 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
1d390 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 74 65  dProc*)sqlite_te
1d3a0 73 74 5f 63 6c 6f 73 65 20 20 20 20 20 7d 2c 0a  st_close     },.
1d3b0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1d3c0 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 22  create_function"
1d3d0 2c 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64  ,       (Tcl_Cmd
1d3e0 50 72 6f 63 2a 29 74 65 73 74 5f 63 72 65 61 74  Proc*)test_creat
1d3f0 65 5f 66 75 6e 63 74 69 6f 6e 20 20 7d 2c 0a 20  e_function  },. 
1d400 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
1d410 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 22  reate_aggregate"
1d420 2c 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50  ,      (Tcl_CmdP
1d430 72 6f 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65  roc*)test_create
1d440 5f 61 67 67 72 65 67 61 74 65 20 7d 2c 0a 20 20  _aggregate },.  
1d450 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 72 65 67     { "sqlite_reg
1d460 69 73 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74  ister_test_funct
1d470 69 6f 6e 22 2c 20 28 54 63 6c 5f 43 6d 64 50 72  ion", (Tcl_CmdPr
1d480 6f 63 2a 29 74 65 73 74 5f 72 65 67 69 73 74 65  oc*)test_registe
1d490 72 5f 66 75 6e 63 20 20 20 20 7d 2c 0a 20 20 20  r_func    },.   
1d4a0 20 20 7b 20 22 73 71 6c 69 74 65 5f 61 62 6f 72    { "sqlite_abor
1d4b0 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  t",             
1d4c0 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
1d4d0 63 2a 29 73 71 6c 69 74 65 5f 61 62 6f 72 74 20  c*)sqlite_abort 
1d4e0 20 20 20 20 20 20 20 20 20 7d 2c 0a 23 69 66 64           },.#ifd
1d4f0 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
1d500 55 47 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  UG.     { "sqlit
1d510 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 22 2c 20  e_malloc_fail", 
1d520 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
1d530 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f  CmdProc*)sqlite_
1d540 6d 61 6c 6c 6f 63 5f 66 61 69 6c 20 20 20 20 7d  malloc_fail    }
1d550 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1d560 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 22 2c 20 20  _malloc_stat",  
1d570 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
1d580 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 6d  mdProc*)sqlite_m
1d590 61 6c 6c 6f 63 5f 73 74 61 74 20 20 20 20 7d 2c  alloc_stat    },
1d5a0 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22  .#endif.     { "
1d5b0 73 71 6c 69 74 65 5f 62 69 6e 64 22 2c 20 20 20  sqlite_bind",   
1d5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5d0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
1d5e0 73 74 5f 62 69 6e 64 20 20 20 20 20 20 20 20 20  st_bind         
1d5f0 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 62      },.     { "b
1d600 72 65 61 6b 70 6f 69 6e 74 22 2c 20 20 20 20 20  reakpoint",     
1d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1d620 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
1d630 74 5f 62 72 65 61 6b 70 6f 69 6e 74 20 20 20 20  t_breakpoint    
1d640 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
1d650 6c 69 74 65 33 5f 6b 65 79 22 2c 20 20 20 20 20  lite3_key",     
1d660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
1d670 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
1d680 5f 6b 65 79 20 20 20 20 20 20 20 20 20 20 20 20  _key            
1d690 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
1d6a0 69 74 65 33 5f 72 65 6b 65 79 22 2c 20 20 20 20  ite3_rekey",    
1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
1d6c0 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
1d6d0 72 65 6b 65 79 20 20 20 20 20 20 20 20 20 20 20  rekey           
1d6e0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1d6f0 74 65 5f 73 65 74 5f 6d 61 67 69 63 22 2c 20 20  te_set_magic",  
1d700 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
1d710 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65  _CmdProc*)sqlite
1d720 5f 73 65 74 5f 6d 61 67 69 63 20 20 20 20 20 20  _set_magic      
1d730 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1d740 65 33 5f 69 6e 74 65 72 72 75 70 74 22 2c 20 20  e3_interrupt",  
1d750 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
1d760 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 69 6e  CmdProc*)test_in
1d770 74 65 72 72 75 70 74 20 20 20 20 20 20 20 20 7d  terrupt        }
1d780 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1d790 5f 64 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e  _delete_function
1d7a0 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43  ",        (Tcl_C
1d7b0 6d 64 50 72 6f 63 2a 29 64 65 6c 65 74 65 5f 66  mdProc*)delete_f
1d7c0 75 6e 63 74 69 6f 6e 20 20 20 20 20 20 20 7d 2c  unction       },
1d7d0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f  .     { "sqlite_
1d7e0 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  delete_collation
1d7f0 22 2c 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d  ",       (Tcl_Cm
1d800 64 50 72 6f 63 2a 29 64 65 6c 65 74 65 5f 63 6f  dProc*)delete_co
1d810 6c 6c 61 74 69 6f 6e 20 20 20 20 20 20 7d 2c 0a  llation      },.
1d820 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1d830 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 22 2c  get_autocommit",
1d840 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
1d850 50 72 6f 63 2a 29 67 65 74 5f 61 75 74 6f 63 6f  Proc*)get_autoco
1d860 6d 6d 69 74 20 20 20 20 20 20 20 20 7d 2c 0a 20  mmit        },. 
1d870 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 73      { "sqlite3_s
1d880 74 61 63 6b 5f 75 73 65 64 22 2c 20 20 20 20 20  tack_used",     
1d890 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
1d8a0 72 6f 63 2a 29 74 65 73 74 5f 73 74 61 63 6b 5f  roc*)test_stack_
1d8b0 75 73 65 64 20 20 20 20 20 20 20 7d 2c 0a 20 20  used       },.  
1d8c0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 75     { "sqlite3_bu
1d8d0 73 79 5f 74 69 6d 65 6f 75 74 22 2c 20 20 20 20  sy_timeout",    
1d8e0 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
1d8f0 6f 63 2a 29 74 65 73 74 5f 62 75 73 79 5f 74 69  oc*)test_busy_ti
1d900 6d 65 6f 75 74 20 20 20 20 20 7d 2c 0a 20 20 20  meout     },.   
1d910 20 20 7b 20 22 70 72 69 6e 74 66 22 2c 20 20 20    { "printf",   
1d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d930 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
1d940 63 2a 29 74 65 73 74 5f 70 72 69 6e 74 66 20 20  c*)test_printf  
1d950 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
1d960 20 7b 20 22 73 71 6c 69 74 65 33 5f 69 6f 5f 74   { "sqlite3_io_t
1d970 72 61 63 65 22 2c 20 20 20 20 20 20 20 20 20 20  race",          
1d980 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
1d990 2a 29 74 65 73 74 5f 69 6f 5f 74 72 61 63 65 20  *)test_io_trace 
1d9a0 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7d 3b 0a          },.  };.
1d9b0 20 20 73 74 61 74 69 63 20 73 74 72 75 63 74 20    static struct 
1d9c0 7b 0a 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  {.     char *zNa
1d9d0 6d 65 3b 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a  me;.     Tcl_Obj
1d9e0 43 6d 64 50 72 6f 63 20 2a 78 50 72 6f 63 3b 0a  CmdProc *xProc;.
1d9f0 20 20 20 20 20 76 6f 69 64 20 2a 63 6c 69 65 6e       void *clien
1da00 74 44 61 74 61 3b 0a 20 20 7d 20 61 4f 62 6a 43  tData;.  } aObjC
1da10 6d 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20  md[] = {.     { 
1da20 22 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74  "sqlite3_connect
1da30 69 6f 6e 5f 70 6f 69 6e 74 65 72 22 2c 20 20 20  ion_pointer",   
1da40 20 67 65 74 5f 73 71 6c 69 74 65 5f 70 6f 69 6e   get_sqlite_poin
1da50 74 65 72 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b  ter, 0 },.     {
1da60 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69   "sqlite3_bind_i
1da70 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  nt",            
1da80 20 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 2c    test_bind_int,
1da90 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 20 20 20        0 },.     
1daa0 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  { "sqlite3_bind_
1dab0 69 6e 74 36 34 22 2c 20 20 20 20 20 20 20 20 20  int64",         
1dac0 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74     test_bind_int
1dad0 36 34 2c 20 20 20 20 30 20 7d 2c 0a 20 20 20 20  64,    0 },.    
1dae0 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64   { "sqlite3_bind
1daf0 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20 20 20 20  _double",       
1db00 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 64 6f      test_bind_do
1db10 75 62 6c 65 2c 20 20 20 30 20 7d 2c 0a 20 20 20  uble,   0 },.   
1db20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e    { "sqlite3_bin
1db30 64 5f 6e 75 6c 6c 22 2c 20 20 20 20 20 20 20 20  d_null",        
1db40 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 6e       test_bind_n
1db50 75 6c 6c 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20  ull     ,0 },.  
1db60 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
1db70 6e 64 5f 74 65 78 74 22 2c 20 20 20 20 20 20 20  nd_text",       
1db80 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f        test_bind_
1db90 74 65 78 74 20 20 20 20 20 2c 30 20 7d 2c 0a 20  text     ,0 },. 
1dba0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62      { "sqlite3_b
1dbb0 69 6e 64 5f 74 65 78 74 31 36 22 2c 20 20 20 20  ind_text16",    
1dbc0 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64         test_bind
1dbd0 5f 74 65 78 74 31 36 20 20 20 2c 30 20 7d 2c 0a  _text16   ,0 },.
1dbe0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1dbf0 62 69 6e 64 5f 62 6c 6f 62 22 2c 20 20 20 20 20  bind_blob",     
1dc00 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e          test_bin
1dc10 64 5f 62 6c 6f 62 20 20 20 20 20 2c 30 20 7d 2c  d_blob     ,0 },
1dc20 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1dc30 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
1dc40 63 6f 75 6e 74 22 2c 20 20 74 65 73 74 5f 62 69  count",  test_bi
1dc50 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75  nd_parameter_cou
1dc60 6e 74 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22  nt, 0},.     { "
1dc70 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
1dc80 61 6d 65 74 65 72 5f 6e 61 6d 65 22 2c 20 20 20  ameter_name",   
1dc90 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65  test_bind_parame
1dca0 74 65 72 5f 6e 61 6d 65 2c 20 20 30 7d 2c 0a 20  ter_name,  0},. 
1dcb0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62      { "sqlite3_b
1dcc0 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e  ind_parameter_in
1dcd0 64 65 78 22 2c 20 20 74 65 73 74 5f 62 69 6e 64  dex",  test_bind
1dce0 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
1dcf0 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  , 0},.     { "sq
1dd00 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64  lite3_clear_bind
1dd10 69 6e 67 73 22 2c 20 20 20 20 20 20 20 20 74 65  ings",        te
1dd20 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67  st_clear_binding
1dd30 73 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73  s, 0},.     { "s
1dd40 71 6c 69 74 65 33 5f 73 6c 65 65 70 22 2c 20 20  qlite3_sleep",  
1dd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1dd60 65 73 74 5f 73 6c 65 65 70 2c 20 20 20 20 20 20  est_sleep,      
1dd70 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22      0},.     { "
1dd80 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 22  sqlite3_errcode"
1dd90 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1dda0 74 65 73 74 5f 65 72 72 63 6f 64 65 20 20 20 20  test_errcode    
1ddb0 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
1ddc0 22 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 22  "sqlite3_errmsg"
1ddd0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1dde0 20 74 65 73 74 5f 65 72 72 6d 73 67 20 20 20 20   test_errmsg    
1ddf0 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
1de00 20 22 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67   "sqlite3_errmsg
1de10 31 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  16",            
1de20 20 20 74 65 73 74 5f 65 72 72 6d 73 67 31 36 20    test_errmsg16 
1de30 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
1de40 7b 20 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 22  { "sqlite3_open"
1de50 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1de60 20 20 20 74 65 73 74 5f 6f 70 65 6e 20 20 20 20     test_open    
1de70 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20        ,0 },.    
1de80 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e   { "sqlite3_open
1de90 31 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  16",            
1dea0 20 20 20 20 74 65 73 74 5f 6f 70 65 6e 31 36 20      test_open16 
1deb0 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
1dec0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6d    { "sqlite3_com
1ded0 70 6c 65 74 65 31 36 22 2c 20 20 20 20 20 20 20  plete16",       
1dee0 20 20 20 20 20 74 65 73 74 5f 63 6f 6d 70 6c 65       test_comple
1def0 74 65 31 36 20 20 20 20 2c 30 20 7d 2c 0a 0a 20  te16    ,0 },.. 
1df00 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 70      { "sqlite3_p
1df10 72 65 70 61 72 65 22 2c 20 20 20 20 20 20 20 20  repare",        
1df20 20 20 20 20 20 20 20 74 65 73 74 5f 70 72 65 70         test_prep
1df30 61 72 65 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a  are       ,0 },.
1df40 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1df50 70 72 65 70 61 72 65 31 36 22 2c 20 20 20 20 20  prepare16",     
1df60 20 20 20 20 20 20 20 20 74 65 73 74 5f 70 72 65          test_pre
1df70 70 61 72 65 31 36 20 20 20 20 20 2c 30 20 7d 2c  pare16     ,0 },
1df80 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1df90 5f 70 72 65 70 61 72 65 5f 76 32 22 2c 20 20 20  _prepare_v2",   
1dfa0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 70 72           test_pr
1dfb0 65 70 61 72 65 5f 76 32 20 20 20 20 2c 30 20 7d  epare_v2    ,0 }
1dfc0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1dfd0 33 5f 70 72 65 70 61 72 65 31 36 5f 76 32 22 2c  3_prepare16_v2",
1dfe0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 70            test_p
1dff0 72 65 70 61 72 65 31 36 5f 76 32 20 20 2c 30 20  repare16_v2  ,0 
1e000 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1e010 65 33 5f 66 69 6e 61 6c 69 7a 65 22 2c 20 20 20  e3_finalize",   
1e020 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
1e030 66 69 6e 61 6c 69 7a 65 20 20 20 20 20 20 2c 30  finalize      ,0
1e040 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1e050 74 65 33 5f 72 65 73 65 74 22 2c 20 20 20 20 20  te3_reset",     
1e060 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
1e070 5f 72 65 73 65 74 20 20 20 20 20 20 20 20 20 2c  _reset         ,
1e080 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
1e090 69 74 65 33 5f 65 78 70 69 72 65 64 22 2c 20 20  ite3_expired",  
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
1e0b0 74 5f 65 78 70 69 72 65 64 20 20 20 20 20 20 20  t_expired       
1e0c0 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
1e0d0 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62  lite3_transfer_b
1e0e0 69 6e 64 69 6e 67 73 22 2c 20 20 20 20 20 74 65  indings",     te
1e0f0 73 74 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64  st_transfer_bind
1e100 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
1e110 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 22 2c  qlite3_changes",
1e120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e130 65 73 74 5f 63 68 61 6e 67 65 73 20 20 20 20 20  est_changes     
1e140 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
1e150 73 71 6c 69 74 65 33 5f 73 74 65 70 22 2c 20 20  sqlite3_step",  
1e160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e170 74 65 73 74 5f 73 74 65 70 20 20 20 20 20 20 20  test_step       
1e180 20 20 20 2c 30 20 7d 2c 0a 0a 20 20 20 20 20 7b     ,0 },..     {
1e190 20 22 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73   "sqlite3_releas
1e1a0 65 5f 6d 65 6d 6f 72 79 22 2c 20 20 20 20 20 20  e_memory",      
1e1b0 20 20 74 65 73 74 5f 72 65 6c 65 61 73 65 5f 6d    test_release_m
1e1c0 65 6d 6f 72 79 2c 20 20 20 20 20 30 7d 2c 0a 20  emory,     0},. 
1e1d0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 73      { "sqlite3_s
1e1e0 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 22 2c  oft_heap_limit",
1e1f0 20 20 20 20 20 20 20 74 65 73 74 5f 73 6f 66 74         test_soft
1e200 5f 68 65 61 70 5f 6c 69 6d 69 74 2c 20 20 20 20  _heap_limit,    
1e210 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  0},.     { "sqli
1e220 74 65 33 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65  te3_clear_tsd_me
1e230 6d 64 65 62 75 67 22 2c 20 20 20 20 74 65 73 74  mdebug",    test
1e240 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65 6d 64 65  _clear_tsd_memde
1e250 62 75 67 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20  bug, 0},.     { 
1e260 22 73 71 6c 69 74 65 33 5f 74 73 64 5f 72 65 6c  "sqlite3_tsd_rel
1e270 65 61 73 65 22 2c 20 20 20 20 20 20 20 20 20 20  ease",          
1e280 20 74 65 73 74 5f 74 73 64 5f 72 65 6c 65 61 73   test_tsd_releas
1e290 65 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  e,        0},.  
1e2a0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 74 68     { "sqlite3_th
1e2b0 72 65 61 64 5f 63 6c 65 61 6e 75 70 22 2c 20 20  read_cleanup",  
1e2c0 20 20 20 20 20 20 74 65 73 74 5f 74 68 72 65 61        test_threa
1e2d0 64 5f 63 6c 65 61 6e 75 70 2c 20 20 20 20 20 30  d_cleanup,     0
1e2e0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1e2f0 65 33 5f 70 61 67 65 72 5f 72 65 66 63 6f 75 6e  e3_pager_refcoun
1e300 74 73 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f  ts",       test_
1e310 70 61 67 65 72 5f 72 65 66 63 6f 75 6e 74 73 2c  pager_refcounts,
1e320 20 20 20 20 30 7d 2c 0a 0a 20 20 20 20 20 7b 20      0},..     { 
1e330 22 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78  "sqlite3_load_ex
1e340 74 65 6e 73 69 6f 6e 22 2c 20 20 20 20 20 20 20  tension",       
1e350 20 74 65 73 74 5f 6c 6f 61 64 5f 65 78 74 65 6e   test_load_exten
1e360 73 69 6f 6e 2c 20 20 20 20 20 30 7d 2c 0a 20 20  sion,     0},.  
1e370 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 6e     { "sqlite3_en
1e380 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  able_load_extens
1e390 69 6f 6e 22 2c 20 74 65 73 74 5f 65 6e 61 62 6c  ion", test_enabl
1e3a0 65 5f 6c 6f 61 64 2c 20 20 20 20 20 20 20 20 30  e_load,        0
1e3b0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1e3c0 65 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75  e3_extended_resu
1e3d0 6c 74 5f 63 6f 64 65 73 22 2c 20 74 65 73 74 5f  lt_codes", test_
1e3e0 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f  extended_result_
1e3f0 63 6f 64 65 73 2c 20 30 7d 2c 0a 0a 20 20 20 20  codes, 0},..    
1e400 20 2f 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   /* sqlite3_colu
1e410 6d 6e 5f 2a 28 29 20 41 50 49 20 2a 2f 0a 20 20  mn_*() API */.  
1e420 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
1e430 6c 75 6d 6e 5f 63 6f 75 6e 74 22 2c 20 20 20 20  lumn_count",    
1e440 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d        test_colum
1e450 6e 5f 63 6f 75 6e 74 20 20 2c 30 20 7d 2c 0a 20  n_count  ,0 },. 
1e460 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 64      { "sqlite3_d
1e470 61 74 61 5f 63 6f 75 6e 74 22 2c 20 20 20 20 20  ata_count",     
1e480 20 20 20 20 20 20 20 74 65 73 74 5f 64 61 74 61         test_data
1e490 5f 63 6f 75 6e 74 20 20 20 20 2c 30 20 7d 2c 0a  _count    ,0 },.
1e4a0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1e4b0 63 6f 6c 75 6d 6e 5f 74 79 70 65 22 2c 20 20 20  column_type",   
1e4c0 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6c          test_col
1e4d0 75 6d 6e 5f 74 79 70 65 20 20 20 2c 30 20 7d 2c  umn_type   ,0 },
1e4e0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1e4f0 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 22 2c 20 20  _column_blob",  
1e500 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f           test_co
1e510 6c 75 6d 6e 5f 62 6c 6f 62 20 20 20 2c 30 20 7d  lumn_blob   ,0 }
1e520 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1e530 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 22  3_column_double"
1e540 2c 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63  ,         test_c
1e550 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 2c 30 20  olumn_double ,0 
1e560 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1e570 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 22  e3_column_int64"
1e580 2c 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f  ,          test_
1e590 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20 20 2c 30  column_int64  ,0
1e5a0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1e5b0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 22  te3_column_text"
1e5c0 2c 20 20 20 20 20 20 20 74 65 73 74 5f 73 74 6d  ,       test_stm
1e5d0 74 5f 75 74 66 38 2c 20 20 73 71 6c 69 74 65 33  t_utf8,  sqlite3
1e5e0 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 20 20 20  _column_text    
1e5f0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "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 22 2c 20 20 20 74 65 73 74 5f 73 74  type",   test_st
1e620 6d 74 5f 75 74 66 38 2c 20 20 73 71 6c 69 74 65  mt_utf8,  sqlite
1e630 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
1e640 65 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  e  },.     { "sq
1e650 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
1e660 65 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f 73  e",       test_s
1e670 74 6d 74 5f 75 74 66 38 2c 20 20 73 71 6c 69 74  tmt_utf8,  sqlit
1e680 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 20  e3_column_name  
1e690 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
1e6a0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
1e6b0 74 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f  t",        test_
1e6c0 73 74 6d 74 5f 69 6e 74 2c 20 20 20 73 71 6c 69  stmt_int,   sqli
1e6d0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 20  te3_column_int  
1e6e0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
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 22 2c 20 20 20 20 20 20 74 65 73 74  ytes",      test
1e710 5f 73 74 6d 74 5f 69 6e 74 2c 20 20 20 73 71 6c  _stmt_int,   sql
1e720 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
1e730 73 20 20 20 20 20 7d 2c 0a 23 69 66 64 65 66 20  s     },.#ifdef 
1e740 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
1e750 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 7b 20  LUMN_METADATA.{ 
1e760 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
1e770 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 22 2c 20  database_name", 
1e780 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20  test_stmt_utf8, 
1e790 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
1e7a0 61 74 61 62 61 73 65 5f 6e 61 6d 65 7d 2c 0a 7b  atabase_name},.{
1e7b0 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
1e7c0 5f 74 61 62 6c 65 5f 6e 61 6d 65 22 2c 20 74 65  _table_name", te
1e7d0 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 73 71  st_stmt_utf8, sq
1e7e0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
1e7f0 6c 65 5f 6e 61 6d 65 7d 2c 0a 7b 20 22 73 71 6c  le_name},.{ "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 22 2c 20 74 65 73 74 5f 73  in_name", test_s
1e820 74 6d 74 5f 75 74 66 38 2c 20 73 71 6c 69 74 65  tmt_utf8, sqlite
1e830 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f  3_column_origin_
1e840 6e 61 6d 65 7d 2c 0a 23 65 6e 64 69 66 0a 0a 23  name},.#endif..#
1e850 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1e860 49 54 5f 55 54 46 31 36 0a 20 20 20 20 20 7b 20  IT_UTF16.     { 
1e870 22 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 22 2c 20 20 20 20 74 65 73  bytes16",    tes
1e890 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 20 20 73 71  t_stmt_int,   sq
1e8a0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
1e8b0 65 73 31 36 20 20 20 7d 2c 0a 20 20 20 20 20 7b  es16   },.     {
1e8c0 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
1e8d0 5f 74 65 78 74 31 36 22 2c 20 20 20 20 20 74 65  _text16",     te
1e8e0 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73  st_stmt_utf16, s
1e8f0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
1e900 78 74 31 36 20 20 20 20 7d 2c 0a 20 20 20 20 20  xt16    },.     
1e910 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
1e920 6e 5f 64 65 63 6c 74 79 70 65 31 36 22 2c 20 74  n_decltype16", t
1e930 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20  est_stmt_utf16, 
1e940 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
1e950 65 63 6c 74 79 70 65 31 36 7d 2c 0a 20 20 20 20  ecltype16},.    
1e960 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
1e970 6d 6e 5f 6e 61 6d 65 31 36 22 2c 20 20 20 20 20  mn_name16",     
1e980 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c  test_stmt_utf16,
1e990 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1e9a0 6e 61 6d 65 31 36 20 20 20 20 7d 2c 0a 20 20 20  name16    },.   
1e9b0 20 20 7b 20 22 61 64 64 5f 61 6c 69 67 6e 6d 65    { "add_alignme
1e9c0 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 69 6f  nt_test_collatio
1e9d0 6e 73 22 2c 20 61 64 64 5f 61 6c 69 67 6e 6d 65  ns", add_alignme
1e9e0 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 69 6f  nt_test_collatio
1e9f0 6e 73 2c 20 30 20 20 20 20 20 20 7d 2c 0a 23 69  ns, 0      },.#i
1ea00 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1ea10 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41  LE_COLUMN_METADA
1ea20 54 41 0a 7b 22 73 71 6c 69 74 65 33 5f 63 6f 6c  TA.{"sqlite3_col
1ea30 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
1ea40 65 31 36 22 2c 0a 20 20 74 65 73 74 5f 73 74 6d  e16",.  test_stm
1ea50 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65 33  t_utf16, sqlite3
1ea60 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
1ea70 5f 6e 61 6d 65 31 36 7d 2c 0a 7b 22 73 71 6c 69  _name16},.{"sqli
1ea80 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65  te3_column_table
1ea90 5f 6e 61 6d 65 31 36 22 2c 20 74 65 73 74 5f 73  _name16", test_s
1eaa0 74 6d 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74  tmt_utf16, sqlit
1eab0 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f  e3_column_table_
1eac0 6e 61 6d 65 31 36 7d 2c 0a 7b 22 73 71 6c 69 74  name16},.{"sqlit
1ead0 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
1eae0 5f 6e 61 6d 65 31 36 22 2c 20 74 65 73 74 5f 73  _name16", test_s
1eaf0 74 6d 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74  tmt_utf16, sqlit
1eb00 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
1eb10 5f 6e 61 6d 65 31 36 7d 2c 0a 23 65 6e 64 69 66  _name16},.#endif
1eb20 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22  .#endif.     { "
1eb30 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f 72  sqlite3_global_r
1eb40 65 63 6f 76 65 72 22 2c 20 20 20 20 74 65 73 74  ecover",    test
1eb50 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 2c  _global_recover,
1eb60 20 30 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22   0   },.     { "
1eb70 77 6f 72 6b 69 6e 67 5f 36 34 62 69 74 5f 69 6e  working_64bit_in
1eb80 74 22 2c 20 20 20 20 20 20 20 20 20 77 6f 72 6b  t",         work
1eb90 69 6e 67 5f 36 34 62 69 74 5f 69 6e 74 2c 20 20  ing_64bit_int,  
1eba0 20 30 20 20 20 7d 2c 0a 0a 20 20 20 20 20 2f 2a   0   },..     /*
1ebb0 20 46 75 6e 63 74 69 6f 6e 73 20 66 72 6f 6d 20   Functions from 
1ebc0 6f 73 2e 68 20 2a 2f 0a 23 69 66 6e 64 65 66 20  os.h */.#ifndef 
1ebd0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b  SQLITE_OMIT_DISK
1ebe0 49 4f 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  IO.     { "sqlit
1ebf0 65 33 4f 73 4f 70 65 6e 52 65 61 64 57 72 69 74  e3OsOpenReadWrit
1ec00 65 22 2c 74 65 73 74 5f 73 71 6c 69 74 65 33 4f  e",test_sqlite3O
1ec10 73 4f 70 65 6e 52 65 61 64 57 72 69 74 65 2c 20  sOpenReadWrite, 
1ec20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
1ec30 69 74 65 33 4f 73 43 6c 6f 73 65 22 2c 20 20 20  ite3OsClose",   
1ec40 20 20 20 20 20 74 65 73 74 5f 73 71 6c 69 74 65       test_sqlite
1ec50 33 4f 73 43 6c 6f 73 65 2c 20 30 20 7d 2c 0a 20  3OsClose, 0 },. 
1ec60 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73      { "sqlite3Os
1ec70 4c 6f 63 6b 22 2c 20 20 20 20 20 20 20 20 20 74  Lock",         t
1ec80 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 4c 6f 63  est_sqlite3OsLoc
1ec90 6b 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22  k, 0 },.     { "
1eca0 73 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c  sqlite3OsTempFil
1ecb0 65 4e 61 6d 65 22 2c 20 74 65 73 74 5f 73 71 6c  eName", test_sql
1ecc0 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61  ite3OsTempFileNa
1ecd0 6d 65 2c 20 30 20 7d 2c 0a 20 20 20 0a 20 20 20  me, 0 },.   .   
1ece0 20 20 2f 2a 20 43 75 73 74 6f 6d 20 74 65 73 74    /* Custom test
1ecf0 20 69 6e 74 65 72 66 61 63 65 73 20 2a 2f 0a 20   interfaces */. 
1ed00 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73      { "sqlite3Os
1ed10 55 6e 6c 6f 63 6b 22 2c 20 20 20 20 20 20 20 20  Unlock",        
1ed20 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 55   test_sqlite3OsU
1ed30 6e 6c 6f 63 6b 2c 20 30 20 20 20 20 7d 2c 0a 23  nlock, 0    },.#
1ed40 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
1ed50 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
1ed60 20 20 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74       { "add_test
1ed70 5f 63 6f 6c 6c 61 74 65 22 2c 20 20 20 20 20 20  _collate",      
1ed80 20 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 2c 20    test_collate, 
1ed90 30 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a  0            },.
1eda0 20 20 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74       { "add_test
1edb0 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 22  _collate_needed"
1edc0 2c 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e  , test_collate_n
1edd0 65 65 64 65 64 2c 20 30 20 20 20 20 20 7d 2c 0a  eeded, 0     },.
1ede0 20 20 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74       { "add_test
1edf0 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20 20  _function",     
1ee00 20 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 2c    test_function,
1ee10 20 30 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a   0           },.
1ee20 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
1ee30 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
1ee40 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 6d 61 6c     { "sqlite_mal
1ee50 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 22  loc_outstanding"
1ee60 2c 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  , sqlite_malloc_
1ee70 6f 75 74 73 74 61 6e 64 69 6e 67 2c 20 30 7d 2c  outstanding, 0},
1ee80 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22  .#endif.     { "
1ee90 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 65 72 72  sqlite3_test_err
1eea0 73 74 72 22 2c 20 20 20 20 20 74 65 73 74 5f 65  str",     test_e
1eeb0 72 72 73 74 72 2c 20 30 20 20 20 20 20 20 20 20  rrstr, 0        
1eec0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
1eed0 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70  tcl_variable_typ
1eee0 65 22 2c 20 20 20 20 20 20 20 74 63 6c 5f 76 61  e",       tcl_va
1eef0 72 69 61 62 6c 65 5f 74 79 70 65 2c 20 30 20 20  riable_type, 0  
1ef00 20 20 20 20 20 7d 2c 0a 23 69 66 6e 64 65 66 20       },.#ifndef 
1ef10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
1ef20 45 44 5f 43 41 43 48 45 0a 20 20 20 20 20 7b 20  ED_CACHE.     { 
1ef30 22 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f  "sqlite3_enable_
1ef40 73 68 61 72 65 64 5f 63 61 63 68 65 22 2c 20 74  shared_cache", t
1ef50 65 73 74 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65  est_enable_share
1ef60 64 2c 20 30 20 20 7d 2c 0a 23 65 6e 64 69 66 0a  d, 0  },.#endif.
1ef70 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1ef80 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65  libversion_numbe
1ef90 72 22 2c 20 74 65 73 74 5f 6c 69 62 76 65 72 73  r", test_libvers
1efa0 69 6f 6e 5f 6e 75 6d 62 65 72 2c 20 30 20 20 7d  ion_number, 0  }
1efb0 2c 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ,.#ifdef SQLITE_
1efc0 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45  ENABLE_COLUMN_ME
1efd0 54 41 44 41 54 41 0a 20 20 20 20 20 7b 20 22 73  TADATA.     { "s
1efe0 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c  qlite3_table_col
1eff0 75 6d 6e 5f 6d 65 74 61 64 61 74 61 22 2c 20 74  umn_metadata", t
1f000 65 73 74 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  est_table_column
1f010 5f 6d 65 74 61 64 61 74 61 2c 20 30 20 20 7d 2c  _metadata, 0  },
1f020 0a 23 65 6e 64 69 66 0a 20 20 7d 3b 0a 20 20 73  .#endif.  };.  s
1f030 74 61 74 69 63 20 69 6e 74 20 62 69 74 6d 61 73  tatic int bitmas
1f040 6b 5f 73 69 7a 65 20 3d 20 73 69 7a 65 6f 66 28  k_size = sizeof(
1f050 42 69 74 6d 61 73 6b 29 2a 38 3b 0a 20 20 69 6e  Bitmask)*8;.  in
1f060 74 20 69 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  t i;.  extern in
1f070 74 20 73 71 6c 69 74 65 33 5f 6f 73 5f 74 72 61  t sqlite3_os_tra
1f080 63 65 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  ce;.  extern int
1f090 20 73 71 6c 69 74 65 33 5f 77 68 65 72 65 5f 74   sqlite3_where_t
1f0a0 72 61 63 65 3b 0a 20 20 65 78 74 65 72 6e 20 69  race;.  extern i
1f0b0 6e 74 20 73 71 6c 69 74 65 33 5f 73 79 6e 63 5f  nt sqlite3_sync_
1f0c0 63 6f 75 6e 74 2c 20 73 71 6c 69 74 65 33 5f 66  count, sqlite3_f
1f0d0 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 3b 0a 20  ullsync_count;. 
1f0e0 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
1f0f0 74 65 33 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f 75  te3_opentemp_cou
1f100 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  nt;.  extern int
1f110 20 73 71 6c 69 74 65 33 5f 6d 65 6d 55 73 65 64   sqlite3_memUsed
1f120 3b 0a 20 20 65 78 74 65 72 6e 20 63 68 61 72 20  ;.  extern char 
1f130 2a 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f  *sqlite3_malloc_
1f140 69 64 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  id;.  extern int
1f150 20 73 71 6c 69 74 65 33 5f 6d 65 6d 4d 61 78 3b   sqlite3_memMax;
1f160 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
1f170 6c 69 74 65 33 5f 6c 69 6b 65 5f 63 6f 75 6e 74  lite3_like_count
1f180 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
1f190 71 6c 69 74 65 33 5f 74 73 64 5f 63 6f 75 6e 74  qlite3_tsd_count
1f1a0 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
1f1b0 71 6c 69 74 65 33 5f 78 66 65 72 6f 70 74 5f 63  qlite3_xferopt_c
1f1c0 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69  ount;.  extern i
1f1d0 6e 74 20 73 71 6c 69 74 65 33 5f 70 61 67 65 72  nt sqlite3_pager
1f1e0 5f 72 65 61 64 64 62 5f 63 6f 75 6e 74 3b 0a 20  _readdb_count;. 
1f1f0 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
1f200 74 65 33 5f 70 61 67 65 72 5f 77 72 69 74 65 64  te3_pager_writed
1f210 62 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72  b_count;.  exter
1f220 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 70 61  n int sqlite3_pa
1f230 67 65 72 5f 77 72 69 74 65 6a 5f 63 6f 75 6e 74  ger_writej_count
1f240 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
1f250 71 6c 69 74 65 33 5f 70 61 67 65 72 5f 70 67 66  qlite3_pager_pgf
1f260 72 65 65 5f 63 6f 75 6e 74 3b 0a 23 69 66 20 4f  ree_count;.#if O
1f270 53 5f 55 4e 49 58 20 26 26 20 64 65 66 69 6e 65  S_UNIX && define
1f280 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26  d(SQLITE_TEST) &
1f290 26 20 64 65 66 69 6e 65 64 28 54 48 52 45 41 44  & defined(THREAD
1f2a0 53 41 46 45 29 20 26 26 20 54 48 52 45 41 44 53  SAFE) && THREADS
1f2b0 41 46 45 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  AFE.  extern int
1f2c0 20 74 68 72 65 61 64 73 4f 76 65 72 72 69 64 65   threadsOverride
1f2d0 45 61 63 68 4f 74 68 65 72 73 4c 6f 63 6b 73 3b  EachOthersLocks;
1f2e0 0a 23 65 6e 64 69 66 0a 23 69 66 20 4f 53 5f 57  .#endif.#if OS_W
1f2f0 49 4e 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  IN.  extern int 
1f300 73 71 6c 69 74 65 33 5f 6f 73 5f 74 79 70 65 3b  sqlite3_os_type;
1f310 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
1f320 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 65 78  QLITE_DEBUG.  ex
1f330 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
1f340 5f 76 64 62 65 5f 61 64 64 6f 70 5f 74 72 61 63  _vdbe_addop_trac
1f350 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  e;.#endif.#ifdef
1f360 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 65   SQLITE_TEST.  e
1f370 78 74 65 72 6e 20 63 68 61 72 20 73 71 6c 69 74  xtern char sqlit
1f380 65 33 5f 71 75 65 72 79 5f 70 6c 61 6e 5b 5d 3b  e3_query_plan[];
1f390 0a 20 20 73 74 61 74 69 63 20 63 68 61 72 20 2a  .  static char *
1f3a0 71 75 65 72 79 5f 70 6c 61 6e 20 3d 20 73 71 6c  query_plan = sql
1f3b0 69 74 65 33 5f 71 75 65 72 79 5f 70 6c 61 6e 3b  ite3_query_plan;
1f3c0 0a 23 65 6e 64 69 66 0a 0a 20 20 66 6f 72 28 69  .#endif..  for(i
1f3d0 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 61 43 6d  =0; i<sizeof(aCm
1f3e0 64 29 2f 73 69 7a 65 6f 66 28 61 43 6d 64 5b 30  d)/sizeof(aCmd[0
1f3f0 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63  ]); i++){.    Tc
1f400 6c 5f 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  l_CreateCommand(
1f410 69 6e 74 65 72 70 2c 20 61 43 6d 64 5b 69 5d 2e  interp, aCmd[i].
1f420 7a 4e 61 6d 65 2c 20 61 43 6d 64 5b 69 5d 2e 78  zName, aCmd[i].x
1f430 50 72 6f 63 2c 20 30 2c 20 30 29 3b 0a 20 20 7d  Proc, 0, 0);.  }
1f440 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69  .  for(i=0; i<si
1f450 7a 65 6f 66 28 61 4f 62 6a 43 6d 64 29 2f 73 69  zeof(aObjCmd)/si
1f460 7a 65 6f 66 28 61 4f 62 6a 43 6d 64 5b 30 5d 29  zeof(aObjCmd[0])
1f470 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f  ; i++){.    Tcl_
1f480 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64  CreateObjCommand
1f490 28 69 6e 74 65 72 70 2c 20 61 4f 62 6a 43 6d 64  (interp, aObjCmd
1f4a0 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 0a 20 20 20 20  [i].zName, .    
1f4b0 20 20 20 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 78      aObjCmd[i].x
1f4c0 50 72 6f 63 2c 20 61 4f 62 6a 43 6d 64 5b 69 5d  Proc, aObjCmd[i]
1f4d0 2e 63 6c 69 65 6e 74 44 61 74 61 2c 20 30 29 3b  .clientData, 0);
1f4e0 0a 20 20 7d 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  .  }.  Tcl_LinkV
1f4f0 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1f500 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 22  te_search_count"
1f510 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  , .      (char*)
1f520 26 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f  &sqlite3_search_
1f530 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
1f540 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
1f550 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
1f560 69 74 65 5f 73 6f 72 74 5f 63 6f 75 6e 74 22 2c  ite_sort_count",
1f570 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26   .      (char*)&
1f580 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
1f590 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  nt, TCL_LINK_INT
1f5a0 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
1f5b0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1f5c0 5f 6c 69 6b 65 5f 63 6f 75 6e 74 22 2c 20 0a 20  _like_count", . 
1f5d0 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
1f5e0 69 74 65 33 5f 6c 69 6b 65 5f 63 6f 75 6e 74 2c  ite3_like_count,
1f5f0 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
1f600 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
1f610 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 69 6e  terp, "sqlite_in
1f620 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 22 2c 20  terrupt_count", 
1f630 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1f640 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
1f650 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b  _count, TCL_LINK
1f660 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
1f670 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1f680 6c 69 74 65 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63  lite_open_file_c
1f690 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63  ount", .      (c
1f6a0 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 70  har*)&sqlite3_op
1f6b0 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 2c 20 54  en_file_count, T
1f6c0 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
1f6d0 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1f6e0 72 70 2c 20 22 73 71 6c 69 74 65 5f 63 75 72 72  rp, "sqlite_curr
1f6f0 65 6e 74 5f 74 69 6d 65 22 2c 20 0a 20 20 20 20  ent_time", .    
1f700 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
1f710 33 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65 2c 20  3_current_time, 
1f720 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20  TCL_LINK_INT);. 
1f730 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1f740 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 73 5f  erp, "sqlite_os_
1f750 74 72 61 63 65 22 2c 0a 20 20 20 20 20 20 28 63  trace",.      (c
1f760 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 73  har*)&sqlite3_os
1f770 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b  _trace, TCL_LINK
1f780 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
1f790 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1f7a0 6c 69 74 65 33 5f 74 73 64 5f 63 6f 75 6e 74 22  lite3_tsd_count"
1f7b0 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
1f7c0 73 71 6c 69 74 65 33 5f 74 73 64 5f 63 6f 75 6e  sqlite3_tsd_coun
1f7d0 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
1f7e0 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
1f7f0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33  interp, "sqlite3
1f800 5f 78 66 65 72 6f 70 74 5f 63 6f 75 6e 74 22 2c  _xferopt_count",
1f810 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1f820 71 6c 69 74 65 33 5f 78 66 65 72 6f 70 74 5f 63  qlite3_xferopt_c
1f830 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  ount, TCL_LINK_I
1f840 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
1f850 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1f860 74 65 33 5f 70 61 67 65 72 5f 72 65 61 64 64 62  te3_pager_readdb
1f870 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28  _count",.      (
1f880 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 70  char*)&sqlite3_p
1f890 61 67 65 72 5f 72 65 61 64 64 62 5f 63 6f 75 6e  ager_readdb_coun
1f8a0 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
1f8b0 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
1f8c0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33  interp, "sqlite3
1f8d0 5f 70 61 67 65 72 5f 77 72 69 74 65 64 62 5f 63  _pager_writedb_c
1f8e0 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68  ount",.      (ch
1f8f0 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 70 61 67  ar*)&sqlite3_pag
1f900 65 72 5f 77 72 69 74 65 64 62 5f 63 6f 75 6e 74  er_writedb_count
1f910 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
1f920 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1f930 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33 5f  nterp, "sqlite3_
1f940 70 61 67 65 72 5f 77 72 69 74 65 6a 5f 63 6f 75  pager_writej_cou
1f950 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  nt",.      (char
1f960 2a 29 26 73 71 6c 69 74 65 33 5f 70 61 67 65 72  *)&sqlite3_pager
1f970 5f 77 72 69 74 65 6a 5f 63 6f 75 6e 74 2c 20 54  _writej_count, T
1f980 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
1f990 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1f9a0 72 70 2c 20 22 73 71 6c 69 74 65 33 5f 70 61 67  rp, "sqlite3_pag
1f9b0 65 72 5f 70 67 66 72 65 65 5f 63 6f 75 6e 74 22  er_pgfree_count"
1f9c0 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
1f9d0 73 71 6c 69 74 65 33 5f 70 61 67 65 72 5f 70 67  sqlite3_pager_pg
1f9e0 66 72 65 65 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  free_count, TCL_
1f9f0 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 69 66 6e 64  LINK_INT);.#ifnd
1fa00 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
1fa10 54 46 31 36 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  TF16.  Tcl_LinkV
1fa20 61 72 28 69 6e 74 65 72 70 2c 20 22 75 6e 61 6c  ar(interp, "unal
1fa30 69 67 6e 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75  igned_string_cou
1fa40 6e 74 65 72 22 2c 0a 20 20 20 20 20 20 28 63 68  nter",.      (ch
1fa50 61 72 2a 29 26 75 6e 61 6c 69 67 6e 65 64 5f 73  ar*)&unaligned_s
1fa60 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72 2c 20 54  tring_counter, T
1fa70 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65  CL_LINK_INT);.#e
1fa80 6e 64 69 66 0a 23 69 66 20 4f 53 5f 55 4e 49 58  ndif.#if OS_UNIX
1fa90 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
1faa0 54 45 5f 54 45 53 54 29 20 26 26 20 64 65 66 69  TE_TEST) && defi
1fab0 6e 65 64 28 54 48 52 45 41 44 53 41 46 45 29 20  ned(THREADSAFE) 
1fac0 26 26 20 54 48 52 45 41 44 53 41 46 45 0a 20 20  && THREADSAFE.  
1fad0 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1fae0 72 70 2c 20 22 74 68 72 65 61 64 73 4f 76 65 72  rp, "threadsOver
1faf0 72 69 64 65 45 61 63 68 4f 74 68 65 72 73 4c 6f  rideEachOthersLo
1fb00 63 6b 73 22 2c 0a 20 20 20 20 20 20 28 63 68 61  cks",.      (cha
1fb10 72 2a 29 26 74 68 72 65 61 64 73 4f 76 65 72 72  r*)&threadsOverr
1fb20 69 64 65 45 61 63 68 4f 74 68 65 72 73 4c 6f 63  ideEachOthersLoc
1fb30 6b 73 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  ks, TCL_LINK_INT
1fb40 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  );.#endif.#ifnde
1fb50 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
1fb60 46 31 36 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  F16.  Tcl_LinkVa
1fb70 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
1fb80 65 5f 6c 61 73 74 5f 6e 65 65 64 65 64 5f 63 6f  e_last_needed_co
1fb90 6c 6c 61 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20  llation",.      
1fba0 28 63 68 61 72 2a 29 26 70 7a 4e 65 65 64 65 64  (char*)&pzNeeded
1fbb0 43 6f 6c 6c 61 74 69 6f 6e 2c 20 54 43 4c 5f 4c  Collation, TCL_L
1fbc0 49 4e 4b 5f 53 54 52 49 4e 47 7c 54 43 4c 5f 4c  INK_STRING|TCL_L
1fbd0 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a  INK_READ_ONLY);.
1fbe0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
1fbf0 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
1fc00 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1fc10 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c  rp, "sqlite_mall
1fc20 6f 63 5f 69 64 22 2c 0a 20 20 20 20 20 20 28 63  oc_id",.      (c
1fc30 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d 61  har*)&sqlite3_ma
1fc40 6c 6c 6f 63 5f 69 64 2c 20 54 43 4c 5f 4c 49 4e  lloc_id, TCL_LIN
1fc50 4b 5f 53 54 52 49 4e 47 29 3b 0a 23 65 6e 64 69  K_STRING);.#endi
1fc60 66 0a 23 69 66 20 4f 53 5f 57 49 4e 0a 20 20 54  f.#if OS_WIN.  T
1fc70 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
1fc80 70 2c 20 22 73 71 6c 69 74 65 5f 6f 73 5f 74 79  p, "sqlite_os_ty
1fc90 70 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  pe",.      (char
1fca0 2a 29 26 73 71 6c 69 74 65 33 5f 6f 73 5f 74 79  *)&sqlite3_os_ty
1fcb0 70 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  pe, TCL_LINK_INT
1fcc0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
1fcd0 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 54   SQLITE_TEST.  T
1fce0 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
1fcf0 70 2c 20 22 73 71 6c 69 74 65 5f 71 75 65 72 79  p, "sqlite_query
1fd00 5f 70 6c 61 6e 22 2c 0a 20 20 20 20 20 20 28 63  _plan",.      (c
1fd10 68 61 72 2a 29 26 71 75 65 72 79 5f 70 6c 61 6e  har*)&query_plan
1fd20 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e  , TCL_LINK_STRIN
1fd30 47 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f  G|TCL_LINK_READ_
1fd40 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ONLY);.#endif.#i
1fd50 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1fd60 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  G.  Tcl_LinkVar(
1fd70 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1fd80 61 64 64 6f 70 5f 74 72 61 63 65 22 2c 0a 20 20  addop_trace",.  
1fd90 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
1fda0 74 65 33 5f 76 64 62 65 5f 61 64 64 6f 70 5f 74  te3_vdbe_addop_t
1fdb0 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  race, TCL_LINK_I
1fdc0 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
1fdd0 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1fde0 74 65 5f 77 68 65 72 65 5f 74 72 61 63 65 22 2c  te_where_trace",
1fdf0 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1fe00 71 6c 69 74 65 33 5f 77 68 65 72 65 5f 74 72 61  qlite3_where_tra
1fe10 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  ce, TCL_LINK_INT
1fe20 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
1fe30 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
1fe40 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1fe50 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d  nterp, "sqlite_m
1fe60 65 6d 75 73 65 64 22 2c 0a 20 20 20 20 20 20 28  emused",.      (
1fe70 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d  char*)&sqlite3_m
1fe80 65 6d 55 73 65 64 2c 20 54 43 4c 5f 4c 49 4e 4b  emUsed, TCL_LINK
1fe90 5f 49 4e 54 20 7c 20 54 43 4c 5f 4c 49 4e 4b 5f  _INT | TCL_LINK_
1fea0 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 20 20 54 63  READ_ONLY);.  Tc
1feb0 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
1fec0 2c 20 22 73 71 6c 69 74 65 5f 6d 65 6d 6d 61 78  , "sqlite_memmax
1fed0 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
1fee0 26 73 71 6c 69 74 65 33 5f 6d 65 6d 4d 61 78 2c  &sqlite3_memMax,
1fef0 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 20 7c 20   TCL_LINK_INT | 
1ff00 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e  TCL_LINK_READ_ON
1ff10 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e  LY);.#endif.#ifn
1ff20 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1ff30 44 49 53 4b 49 4f 0a 20 20 54 63 6c 5f 4c 69 6e  DISKIO.  Tcl_Lin
1ff40 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1ff50 6c 69 74 65 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f  lite_opentemp_co
1ff60 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61  unt",.      (cha
1ff70 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 70 65 6e  r*)&sqlite3_open
1ff80 74 65 6d 70 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  temp_count, TCL_
1ff90 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69  LINK_INT);.#endi
1ffa0 66 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  f.  Tcl_LinkVar(
1ffb0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1ffc0 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75  static_bind_valu
1ffd0 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  e",.      (char*
1ffe0 29 26 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f  )&sqlite_static_
1fff0 62 69 6e 64 5f 76 61 6c 75 65 2c 20 54 43 4c 5f  bind_value, TCL_
20000 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a 20 20  LINK_STRING);.  
20010 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
20020 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 74 61 74  rp, "sqlite_stat
20030 69 63 5f 62 69 6e 64 5f 6e 62 79 74 65 22 2c 0a  ic_bind_nbyte",.
20040 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
20050 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64  lite_static_bind
20060 5f 6e 62 79 74 65 2c 20 54 43 4c 5f 4c 49 4e 4b  _nbyte, TCL_LINK
20070 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
20080 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
20090 6c 69 74 65 5f 74 65 6d 70 5f 64 69 72 65 63 74  lite_temp_direct
200a0 6f 72 79 22 2c 0a 20 20 20 20 20 20 28 63 68 61  ory",.      (cha
200b0 72 2a 29 26 73 71 6c 69 74 65 33 5f 74 65 6d 70  r*)&sqlite3_temp
200c0 5f 64 69 72 65 63 74 6f 72 79 2c 20 54 43 4c 5f  _directory, TCL_
200d0 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a 20 20  LINK_STRING);.  
200e0 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
200f0 72 70 2c 20 22 62 69 74 6d 61 73 6b 5f 73 69 7a  rp, "bitmask_siz
20100 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  e",.      (char*
20110 29 26 62 69 74 6d 61 73 6b 5f 73 69 7a 65 2c 20  )&bitmask_size, 
20120 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 7c 54 43 4c  TCL_LINK_INT|TCL
20130 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29  _LINK_READ_ONLY)
20140 3b 0a 23 69 66 20 4f 53 5f 55 4e 49 58 0a 20 20  ;.#if OS_UNIX.  
20150 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
20160 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 79 6e 63  rp, "sqlite_sync
20170 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28  _count",.      (
20180 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 73  char*)&sqlite3_s
20190 79 6e 63 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c  ync_count, TCL_L
201a0 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
201b0 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
201c0 22 73 71 6c 69 74 65 5f 66 75 6c 6c 73 79 6e 63  "sqlite_fullsync
201d0 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28  _count",.      (
201e0 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 66  char*)&sqlite3_f
201f0 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 2c 20 54  ullsync_count, T
20200 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65  CL_LINK_INT);.#e
20210 6e 64 69 66 20 2f 2a 20 4f 53 5f 55 4e 49 58 20  ndif /* OS_UNIX 
20220 2a 2f 0a 20 20 73 65 74 5f 6f 70 74 69 6f 6e 73  */.  set_options
20230 28 69 6e 74 65 72 70 29 3b 0a 0a 20 20 7b 0a 23  (interp);..  {.#
20240 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
20250 55 47 0a 20 20 20 20 65 78 74 65 72 6e 20 69 6e  UG.    extern in
20260 74 20 73 71 6c 69 74 65 33 5f 73 68 61 72 65 64  t sqlite3_shared
20270 5f 63 61 63 68 65 5f 72 65 70 6f 72 74 28 76 6f  _cache_report(vo
20280 69 64 20 2a 2c 20 54 63 6c 5f 49 6e 74 65 72 70  id *, Tcl_Interp
20290 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
202a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202b0 20 20 20 20 20 20 20 20 69 6e 74 2c 20 54 63 6c          int, Tcl
202c0 5f 4f 62 6a 20 2a 43 4f 4e 53 54 5b 5d 29 3b 0a  _Obj *CONST[]);.
202d0 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65 4f 62      Tcl_CreateOb
202e0 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c  jCommand(interp,
202f0 20 22 73 71 6c 69 74 65 5f 73 68 61 72 65 64 5f   "sqlite_shared_
20300 63 61 63 68 65 5f 72 65 70 6f 72 74 22 2c 20 0a  cache_report", .
20310 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
20320 73 68 61 72 65 64 5f 63 61 63 68 65 5f 72 65 70  shared_cache_rep
20330 6f 72 74 2c 20 30 2c 20 30 29 3b 0a 23 65 6e 64  ort, 0, 0);.#end
20340 69 66 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  if.  }.  return 
20350 54 43 4c 5f 4f 4b 3b 0a 7d 0a                    TCL_OK;.}.