/ Hex Artifact Content
Login

Artifact 40f20775903bc76d3be3e7c026dddcbc221c1cb0:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 43 6f 64 65 20 66  ******.** Code f
0180: 6f 72 20 74 65 73 74 69 6e 67 20 61 6c 6c 20 73  or testing all s
0190: 6f 72 74 73 20 6f 66 20 53 51 4c 69 74 65 20 69  orts of SQLite i
01a0: 6e 74 65 72 66 61 63 65 73 2e 20 20 54 68 69 73  nterfaces.  This
01b0: 20 63 6f 64 65 0a 2a 2a 20 69 73 20 6e 6f 74 20   code.** is not 
01c0: 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
01d0: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 20  SQLite library. 
01e0: 20 49 74 20 69 73 20 75 73 65 64 20 66 6f 72 20   It is used for 
01f0: 61 75 74 6f 6d 61 74 65 64 0a 2a 2a 20 74 65 73  automated.** tes
0200: 74 69 6e 67 20 6f 66 20 74 68 65 20 53 51 4c 69  ting of the SQLi
0210: 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a  te library..**.*
0220: 2a 20 24 49 64 3a 20 74 65 73 74 31 2e 63 2c 76  * $Id: test1.c,v
0230: 20 31 2e 32 31 31 20 32 30 30 36 2f 30 36 2f 31   1.211 2006/06/1
0240: 34 20 31 30 3a 33 38 3a 30 33 20 64 61 6e 69 65  4 10:38:03 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 63 6f 6e 73 74 20 63 68 61 72  K;.}..const char
0720: 20 2a 73 71 6c 69 74 65 33 54 65 73 74 45 72 72   *sqlite3TestErr
0730: 6f 72 4e 61 6d 65 28 69 6e 74 20 72 63 29 7b 0a  orName(int rc){.
0740: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
0750: 61 6d 65 20 3d 20 30 3b 0a 20 20 73 77 69 74 63  ame = 0;.  switc
0760: 68 28 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73  h( rc ){.    cas
0770: 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20 20 20 20  e SQLITE_OK:    
0780: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
0790: 4c 49 54 45 5f 4f 4b 22 3b 20 20 20 20 20 20 20  LITE_OK";       
07a0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
07b0: 73 65 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3a  se SQLITE_ERROR:
07c0: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
07d0: 51 4c 49 54 45 5f 45 52 52 4f 52 22 3b 20 20 20  QLITE_ERROR";   
07e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
07f0: 61 73 65 20 53 51 4c 49 54 45 5f 50 45 52 4d 3a  ase SQLITE_PERM:
0800: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0810: 53 51 4c 49 54 45 5f 50 45 52 4d 22 3b 20 20 20  SQLITE_PERM";   
0820: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
0830: 63 61 73 65 20 53 51 4c 49 54 45 5f 41 42 4f 52  case SQLITE_ABOR
0840: 54 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  T:      zName = 
0850: 22 53 51 4c 49 54 45 5f 41 42 4f 52 54 22 3b 20  "SQLITE_ABORT"; 
0860: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
0870: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42 55 53   case SQLITE_BUS
0880: 59 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d  Y:       zName =
0890: 20 22 53 51 4c 49 54 45 5f 42 55 53 59 22 3b 20   "SQLITE_BUSY"; 
08a0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
08b0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4c 4f    case SQLITE_LO
08c0: 43 4b 45 44 3a 20 20 20 20 20 7a 4e 61 6d 65 20  CKED:     zName 
08d0: 3d 20 22 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  = "SQLITE_LOCKED
08e0: 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ";      break;. 
08f0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e     case SQLITE_N
0900: 4f 4d 45 4d 3a 20 20 20 20 20 20 7a 4e 61 6d 65  OMEM:      zName
0910: 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d   = "SQLITE_NOMEM
0920: 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ";       break;.
0930: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
0940: 52 45 41 44 4f 4e 4c 59 3a 20 20 20 7a 4e 61 6d  READONLY:   zNam
0950: 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 45 41 44  e = "SQLITE_READ
0960: 4f 4e 4c 59 22 3b 20 20 20 20 62 72 65 61 6b 3b  ONLY";    break;
0970: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0980: 5f 49 4e 54 45 52 52 55 50 54 3a 20 20 7a 4e 61  _INTERRUPT:  zNa
0990: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4e 54  me = "SQLITE_INT
09a0: 45 52 52 55 50 54 22 3b 20 20 20 62 72 65 61 6b  ERRUPT";   break
09b0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
09c0: 45 5f 49 4f 45 52 52 3a 20 20 20 20 20 20 7a 4e  E_IOERR:      zN
09d0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
09e0: 45 52 52 22 3b 20 20 20 20 20 20 20 62 72 65 61  ERR";       brea
09f0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
0a00: 54 45 5f 43 4f 52 52 55 50 54 3a 20 20 20 20 7a  TE_CORRUPT:    z
0a10: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43  Name = "SQLITE_C
0a20: 4f 52 52 55 50 54 22 3b 20 20 20 20 20 62 72 65  ORRUPT";     bre
0a30: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
0a40: 49 54 45 5f 46 55 4c 4c 3a 20 20 20 20 20 20 20  ITE_FULL:       
0a50: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
0a60: 46 55 4c 4c 22 3b 20 20 20 20 20 20 20 20 62 72  FULL";        br
0a70: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0a80: 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 3a 20 20  LITE_CANTOPEN:  
0a90: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0aa0: 5f 43 41 4e 54 4f 50 45 4e 22 3b 20 20 20 20 62  _CANTOPEN";    b
0ab0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
0ac0: 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20  QLITE_PROTOCOL: 
0ad0: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
0ae0: 45 5f 50 52 4f 54 4f 43 4f 4c 22 3b 20 20 20 20  E_PROTOCOL";    
0af0: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0b00: 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20 20 20  SQLITE_EMPTY:   
0b10: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0b20: 54 45 5f 45 4d 50 54 59 22 3b 20 20 20 20 20 20  TE_EMPTY";      
0b30: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
0b40: 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3a 20   SQLITE_SCHEMA: 
0b50: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
0b60: 49 54 45 5f 53 43 48 45 4d 41 22 3b 20 20 20 20  ITE_SCHEMA";    
0b70: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0b80: 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  e SQLITE_CONSTRA
0b90: 49 4e 54 3a 20 7a 4e 61 6d 65 20 3d 20 22 53 51  INT: zName = "SQ
0ba0: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 22  LITE_CONSTRAINT"
0bb0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61  ;  break;.    ca
0bc0: 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54  se SQLITE_MISMAT
0bd0: 43 48 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53  CH:   zName = "S
0be0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 22 3b  QLITE_MISMATCH";
0bf0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
0c00: 61 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  ase SQLITE_MISUS
0c10: 45 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22  E:     zName = "
0c20: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 22 3b 20  SQLITE_MISUSE"; 
0c30: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
0c40: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4c 46  case SQLITE_NOLF
0c50: 53 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  S:      zName = 
0c60: 22 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 22 3b 20  "SQLITE_NOLFS"; 
0c70: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
0c80: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 41 55 54   case SQLITE_AUT
0c90: 48 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d  H:       zName =
0ca0: 20 22 53 51 4c 49 54 45 5f 41 55 54 48 22 3b 20   "SQLITE_AUTH"; 
0cb0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
0cc0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4f    case SQLITE_FO
0cd0: 52 4d 41 54 3a 20 20 20 20 20 7a 4e 61 6d 65 20  RMAT:     zName 
0ce0: 3d 20 22 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54  = "SQLITE_FORMAT
0cf0: 22 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ";      break;. 
0d00: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52     case SQLITE_R
0d10: 41 4e 47 45 3a 20 20 20 20 20 20 7a 4e 61 6d 65  ANGE:      zName
0d20: 20 3d 20 22 53 51 4c 49 54 45 5f 52 41 4e 47 45   = "SQLITE_RANGE
0d30: 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ";       break;.
0d40: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
0d50: 52 4f 57 3a 20 20 20 20 20 20 20 20 7a 4e 61 6d  ROW:        zNam
0d60: 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 4f 57 22  e = "SQLITE_ROW"
0d70: 3b 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;         break;
0d80: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0d90: 5f 44 4f 4e 45 3a 20 20 20 20 20 20 20 7a 4e 61  _DONE:       zNa
0da0: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 44 4f 4e  me = "SQLITE_DON
0db0: 45 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  E";        break
0dc0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0dd0: 45 5f 4e 4f 54 41 44 42 3a 20 20 20 20 20 7a 4e  E_NOTADB:     zN
0de0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f  ame = "SQLITE_NO
0df0: 54 41 44 42 22 3b 20 20 20 20 20 20 62 72 65 61  TADB";      brea
0e00: 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  k;.    default: 
0e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
0e20: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 55  Name = "SQLITE_U
0e30: 6e 6b 6e 6f 77 6e 22 3b 20 20 20 20 20 62 72 65  nknown";     bre
0e40: 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  ak;.  }.  return
0e50: 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 64 65 66 69 6e   zName;.}.#defin
0e60: 65 20 65 72 72 6f 72 4e 61 6d 65 20 73 71 6c 69  e errorName sqli
0e70: 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65  te3TestErrorName
0e80: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  ../*.** Convert 
0e90: 61 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a  an sqlite3_stmt*
0ea0: 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33   into an sqlite3
0eb0: 2a 2e 20 20 54 68 69 73 20 64 65 70 65 6e 64 73  *.  This depends
0ec0: 20 6f 6e 20 74 68 65 0a 2a 2a 20 66 61 63 74 20   on the.** fact 
0ed0: 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33  that the sqlite3
0ee0: 2a 20 69 73 20 74 68 65 20 66 69 72 73 74 20 66  * is the first f
0ef0: 69 65 6c 64 20 69 6e 20 74 68 65 20 56 64 62 65  ield in the Vdbe
0f00: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 23   structure..*/.#
0f10: 64 65 66 69 6e 65 20 53 74 6d 74 54 6f 44 62 28  define StmtToDb(
0f20: 58 29 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  X)   sqlite3_db_
0f30: 68 61 6e 64 6c 65 28 58 29 0a 0a 2f 2a 0a 2a 2a  handle(X)../*.**
0f40: 20 43 68 65 63 6b 20 61 20 72 65 74 75 72 6e 20   Check a return 
0f50: 76 61 6c 75 65 20 74 6f 20 6d 61 6b 65 20 73 75  value to make su
0f60: 72 65 20 69 74 20 61 67 72 65 65 73 20 77 69 74  re it agrees wit
0f70: 68 20 74 68 65 20 72 65 73 75 6c 74 73 0a 2a 2a  h the results.**
0f80: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 65 72   from sqlite3_er
0f90: 72 63 6f 64 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71  rcode..*/.int sq
0fa0: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
0fb0: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Tcl_Interp *int
0fc0: 65 72 70 2c 20 73 71 6c 69 74 65 33 20 2a 64 62  erp, sqlite3 *db
0fd0: 2c 20 69 6e 74 20 72 63 29 7b 0a 20 20 69 66 28  , int rc){.  if(
0fe0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4d 49 53 55   rc!=SQLITE_MISU
0ff0: 53 45 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45  SE && rc!=SQLITE
1000: 5f 4f 4b 20 26 26 20 73 71 6c 69 74 65 33 5f 65  _OK && sqlite3_e
1010: 72 72 63 6f 64 65 28 64 62 29 21 3d 72 63 20 29  rrcode(db)!=rc )
1020: 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b  {.    char zBuf[
1030: 32 30 30 5d 3b 0a 20 20 20 20 69 6e 74 20 72 32  200];.    int r2
1040: 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f   = sqlite3_errco
1050: 64 65 28 64 62 29 3b 0a 20 20 20 20 73 70 72 69  de(db);.    spri
1060: 6e 74 66 28 7a 42 75 66 2c 20 22 65 72 72 6f 72  ntf(zBuf, "error
1070: 20 63 6f 64 65 20 25 73 20 28 25 64 29 20 64 6f   code %s (%d) do
1080: 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 73 71 6c  es not match sql
1090: 69 74 65 33 5f 65 72 72 63 6f 64 65 20 25 73 20  ite3_errcode %s 
10a0: 28 25 64 29 22 2c 0a 20 20 20 20 20 20 20 65 72  (%d)",.       er
10b0: 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 72 63 2c  rorName(rc), rc,
10c0: 20 65 72 72 6f 72 4e 61 6d 65 28 72 32 29 2c 20   errorName(r2), 
10d0: 72 32 29 3b 0a 20 20 20 20 54 63 6c 5f 52 65 73  r2);.    Tcl_Res
10e0: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  etResult(interp)
10f0: 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ;.    Tcl_Append
1100: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
1110: 42 75 66 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  Buf, 0);.    ret
1120: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  urn 1;.  }.  ret
1130: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
1140: 44 65 63 6f 64 65 20 61 20 70 6f 69 6e 74 65 72  Decode a pointer
1150: 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 20 6f   to an sqlite3 o
1160: 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  bject..*/.static
1170: 20 69 6e 74 20 67 65 74 44 62 50 6f 69 6e 74 65   int getDbPointe
1180: 72 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  r(Tcl_Interp *in
1190: 74 65 72 70 2c 20 63 6f 6e 73 74 20 63 68 61 72  terp, const char
11a0: 20 2a 7a 41 2c 20 73 71 6c 69 74 65 33 20 2a 2a   *zA, sqlite3 **
11b0: 70 70 44 62 29 7b 0a 20 20 2a 70 70 44 62 20 3d  ppDb){.  *ppDb =
11c0: 20 28 73 71 6c 69 74 65 33 2a 29 73 71 6c 69 74   (sqlite3*)sqlit
11d0: 65 33 54 65 78 74 54 6f 50 74 72 28 7a 41 29 3b  e3TextToPtr(zA);
11e0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
11f0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6f 64  ;.}../*.** Decod
1200: 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  e a pointer to a
1210: 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 6f  n sqlite3_stmt o
1220: 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  bject..*/.static
1230: 20 69 6e 74 20 67 65 74 53 74 6d 74 50 6f 69 6e   int getStmtPoin
1240: 74 65 72 28 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ter(.  Tcl_Inter
1250: 70 20 2a 69 6e 74 65 72 70 2c 20 0a 20 20 63 6f  p *interp, .  co
1260: 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 2c 20  nst char *zArg, 
1270: 20 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   .  sqlite3_stmt
1280: 20 2a 2a 70 70 53 74 6d 74 0a 29 7b 0a 20 20 2a   **ppStmt.){.  *
1290: 70 70 53 74 6d 74 20 3d 20 28 73 71 6c 69 74 65  ppStmt = (sqlite
12a0: 33 5f 73 74 6d 74 2a 29 73 71 6c 69 74 65 33 54  3_stmt*)sqlite3T
12b0: 65 78 74 54 6f 50 74 72 28 7a 41 72 67 29 3b 0a  extToPtr(zArg);.
12c0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
12d0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6f 64 65  .}../*.** Decode
12e0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
12f0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 6f 62   sqlite3_stmt ob
1300: 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ject..*/.static 
1310: 69 6e 74 20 67 65 74 46 69 6c 65 50 6f 69 6e 74  int getFilePoint
1320: 65 72 28 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  er(.  Tcl_Interp
1330: 20 2a 69 6e 74 65 72 70 2c 20 0a 20 20 63 6f 6e   *interp, .  con
1340: 73 74 20 63 68 61 72 20 2a 7a 41 72 67 2c 20 20  st char *zArg,  
1350: 0a 20 20 4f 73 46 69 6c 65 20 2a 2a 70 70 46 69  .  OsFile **ppFi
1360: 6c 65 0a 29 7b 0a 20 20 2a 70 70 46 69 6c 65 20  le.){.  *ppFile 
1370: 3d 20 28 4f 73 46 69 6c 65 2a 29 73 71 6c 69 74  = (OsFile*)sqlit
1380: 65 33 54 65 78 74 54 6f 50 74 72 28 7a 41 72 67  e3TextToPtr(zArg
1390: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
13a0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e  OK;.}../*.** Gen
13b0: 65 72 61 74 65 20 61 20 74 65 78 74 20 72 65 70  erate a text rep
13c0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  resentation of a
13d0: 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20 63 61   pointer that ca
13e0: 6e 20 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 0a  n be understood.
13f0: 2a 2a 20 62 79 20 74 68 65 20 67 65 74 44 62 50  ** by the getDbP
1400: 6f 69 6e 74 65 72 20 61 6e 64 20 67 65 74 56 6d  ointer and getVm
1410: 50 6f 69 6e 74 65 72 20 72 6f 75 74 69 6e 65 73  Pointer routines
1420: 20 61 62 6f 76 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   above..**.** Th
1430: 65 20 70 72 6f 62 6c 65 6d 20 69 73 2c 20 6f 6e  e problem is, on
1440: 20 73 6f 6d 65 20 6d 61 63 68 69 6e 65 73 20 28   some machines (
1450: 53 6f 6c 61 72 69 73 29 20 69 66 20 79 6f 75 20  Solaris) if you 
1460: 64 6f 20 61 20 70 72 69 6e 74 66 20 77 69 74 68  do a printf with
1470: 0a 2a 2a 20 22 25 70 22 20 79 6f 75 20 63 61 6e  .** "%p" you can
1480: 6e 6f 74 20 74 75 72 6e 20 61 72 6f 75 6e 64 20  not turn around 
1490: 61 6e 64 20 64 6f 20 61 20 73 63 61 6e 66 20 77  and do a scanf w
14a0: 69 74 68 20 74 68 65 20 73 61 6d 65 20 22 25 70  ith the same "%p
14b0: 22 20 61 6e 64 0a 2a 2a 20 67 65 74 20 79 6f 75  " and.** get you
14c0: 72 20 70 6f 69 6e 74 65 72 20 62 61 63 6b 2e 20  r pointer back. 
14d0: 20 59 6f 75 20 68 61 76 65 20 74 6f 20 70 72 65   You have to pre
14e0: 70 65 6e 64 20 61 20 22 30 78 22 20 62 65 66 6f  pend a "0x" befo
14f0: 72 65 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 77 6f  re it will.** wo
1500: 72 6b 2e 20 20 4f 72 20 61 74 20 6c 65 61 73 74  rk.  Or at least
1510: 20 74 68 61 74 20 69 73 20 77 68 61 74 20 69 73   that is what is
1520: 20 72 65 70 6f 72 74 65 64 20 74 6f 20 6d 65 20   reported to me 
1530: 28 64 72 68 29 2e 20 20 42 75 74 20 74 68 69 73  (drh).  But this
1540: 0a 2a 2a 20 62 65 68 61 76 69 6f 72 20 76 61 72  .** behavior var
1550: 69 65 73 20 66 72 6f 6d 20 6d 61 63 68 69 6e 65  ies from machine
1560: 20 74 6f 20 6d 61 63 68 69 6e 65 2e 20 20 54 68   to machine.  Th
1570: 65 20 73 6f 6c 75 74 69 6f 6e 20 75 73 65 64 20  e solution used 
1580: 68 65 72 20 69 73 0a 2a 2a 20 74 6f 20 74 65 73  her is.** to tes
1590: 74 20 74 68 65 20 73 74 72 69 6e 67 20 72 69 67  t the string rig
15a0: 68 74 20 61 66 74 65 72 20 69 74 20 69 73 20 67  ht after it is g
15b0: 65 6e 65 72 61 74 65 64 20 74 6f 20 73 65 65 20  enerated to see 
15c0: 69 66 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20  if it can be.** 
15d0: 75 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 73 63  understood by sc
15e0: 61 6e 66 2c 20 61 6e 64 20 69 66 20 6e 6f 74 2c  anf, and if not,
15f0: 20 74 72 79 20 70 72 65 70 65 6e 64 69 6e 67 20   try prepending 
1600: 61 6e 20 22 30 78 22 20 74 6f 20 73 65 65 20 69  an "0x" to see i
1610: 66 0a 2a 2a 20 74 68 61 74 20 68 65 6c 70 73 2e  f.** that helps.
1620: 20 20 49 66 20 6e 6f 74 68 69 6e 67 20 77 6f 72    If nothing wor
1630: 6b 73 2c 20 61 20 66 61 74 61 6c 20 65 72 72 6f  ks, a fatal erro
1640: 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 0a  r is generated..
1650: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  */.int sqlite3Te
1660: 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72  stMakePointerStr
1670: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Tcl_Interp *int
1680: 65 72 70 2c 20 63 68 61 72 20 2a 7a 50 74 72 2c  erp, char *zPtr,
1690: 20 76 6f 69 64 20 2a 70 29 7b 0a 20 20 73 71 6c   void *p){.  sql
16a0: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
16b0: 30 2c 20 7a 50 74 72 2c 20 22 25 70 22 2c 20 70  0, zPtr, "%p", p
16c0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
16d0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  OK;.}../*.** The
16e0: 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69 6e   callback routin
16f0: 65 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 65 78  e for sqlite3_ex
1700: 65 63 5f 70 72 69 6e 74 66 28 29 2e 0a 2a 2f 0a  ec_printf()..*/.
1710: 73 74 61 74 69 63 20 69 6e 74 20 65 78 65 63 5f  static int exec_
1720: 70 72 69 6e 74 66 5f 63 62 28 76 6f 69 64 20 2a  printf_cb(void *
1730: 70 41 72 67 2c 20 69 6e 74 20 61 72 67 63 2c 20  pArg, int argc, 
1740: 63 68 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61  char **argv, cha
1750: 72 20 2a 2a 6e 61 6d 65 29 7b 0a 20 20 54 63 6c  r **name){.  Tcl
1760: 5f 44 53 74 72 69 6e 67 20 2a 73 74 72 20 3d 20  _DString *str = 
1770: 28 54 63 6c 5f 44 53 74 72 69 6e 67 2a 29 70 41  (Tcl_DString*)pA
1780: 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20  rg;.  int i;..  
1790: 69 66 28 20 54 63 6c 5f 44 53 74 72 69 6e 67 4c  if( Tcl_DStringL
17a0: 65 6e 67 74 68 28 73 74 72 29 3d 3d 30 20 29 7b  ength(str)==0 ){
17b0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
17c0: 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  argc; i++){.    
17d0: 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 70 70    Tcl_DStringApp
17e0: 65 6e 64 45 6c 65 6d 65 6e 74 28 73 74 72 2c 20  endElement(str, 
17f0: 6e 61 6d 65 5b 69 5d 20 3f 20 6e 61 6d 65 5b 69  name[i] ? name[i
1800: 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20 20  ] : "NULL");.   
1810: 20 7d 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30   }.  }.  for(i=0
1820: 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a  ; i<argc; i++){.
1830: 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 41      Tcl_DStringA
1840: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 73 74 72  ppendElement(str
1850: 2c 20 61 72 67 76 5b 69 5d 20 3f 20 61 72 67 76  , argv[i] ? argv
1860: 5b 69 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20  [i] : "NULL");. 
1870: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d   }.  return 0;.}
1880: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
1890: 73 71 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69  sqlite3_exec_pri
18a0: 6e 74 66 20 20 44 42 20 20 46 4f 52 4d 41 54 20  ntf  DB  FORMAT 
18b0: 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 49 6e   STRING.**.** In
18c0: 76 6f 6b 65 20 74 68 65 20 73 71 6c 69 74 65 33  voke the sqlite3
18d0: 5f 65 78 65 63 5f 70 72 69 6e 74 66 28 29 20 69  _exec_printf() i
18e0: 6e 74 65 72 66 61 63 65 20 75 73 69 6e 67 20 74  nterface using t
18f0: 68 65 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  he open database
1900: 0a 2a 2a 20 44 42 2e 20 20 54 68 65 20 53 51 4c  .** DB.  The SQL
1910: 20 69 73 20 74 68 65 20 73 74 72 69 6e 67 20 46   is the string F
1920: 4f 52 4d 41 54 2e 20 20 54 68 65 20 66 6f 72 6d  ORMAT.  The form
1930: 61 74 20 73 74 72 69 6e 67 20 73 68 6f 75 6c 64  at string should
1940: 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 6f 6e 65 20   contain.** one 
1950: 25 73 20 6f 72 20 25 71 2e 20 20 53 54 52 49 4e  %s or %q.  STRIN
1960: 47 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 69  G is the value i
1970: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 25 73 20  nserted into %s 
1980: 6f 72 20 25 71 2e 0a 2a 2f 0a 73 74 61 74 69 63  or %q..*/.static
1990: 20 69 6e 74 20 74 65 73 74 5f 65 78 65 63 5f 70   int test_exec_p
19a0: 72 69 6e 74 66 28 0a 20 20 76 6f 69 64 20 2a 4e  rintf(.  void *N
19b0: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
19c0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
19d0: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
19e0: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
19f0: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
1a00: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a20: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
1a30: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
1a40: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
1a50: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
1a60: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
1a70: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
1a80: 20 54 63 6c 5f 44 53 74 72 69 6e 67 20 73 74 72   Tcl_DString str
1a90: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68  ;.  int rc;.  ch
1aa0: 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20  ar *zErr = 0;.  
1ab0: 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 63 68  char *zSql;.  ch
1ac0: 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 69  ar zBuf[30];.  i
1ad0: 66 28 20 61 72 67 63 21 3d 34 20 29 7b 0a 20 20  f( argc!=4 ){.  
1ae0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
1af0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
1b00: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
1b10: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
1b20: 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 20 46  , .       " DB F
1b30: 4f 52 4d 41 54 20 53 54 52 49 4e 47 22 2c 20 30  ORMAT STRING", 0
1b40: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
1b50: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
1b60: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
1b70: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
1b80: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
1b90: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
1ba0: 44 53 74 72 69 6e 67 49 6e 69 74 28 26 73 74 72  DStringInit(&str
1bb0: 29 3b 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  );.  zSql = sqli
1bc0: 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76  te3_mprintf(argv
1bd0: 5b 32 5d 2c 20 61 72 67 76 5b 33 5d 29 3b 0a 20  [2], argv[3]);. 
1be0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
1bf0: 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 65 78 65  ec(db, zSql, exe
1c00: 63 5f 70 72 69 6e 74 66 5f 63 62 2c 20 26 73 74  c_printf_cb, &st
1c10: 72 2c 20 26 7a 45 72 72 29 3b 0a 20 20 73 71 6c  r, &zErr);.  sql
1c20: 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b  ite3_free(zSql);
1c30: 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c  .  sprintf(zBuf,
1c40: 20 22 25 64 22 2c 20 72 63 29 3b 0a 20 20 54 63   "%d", rc);.  Tc
1c50: 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  l_AppendElement(
1c60: 69 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20  interp, zBuf);. 
1c70: 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65   Tcl_AppendEleme
1c80: 6e 74 28 69 6e 74 65 72 70 2c 20 72 63 3d 3d 53  nt(interp, rc==S
1c90: 51 4c 49 54 45 5f 4f 4b 20 3f 20 54 63 6c 5f 44  QLITE_OK ? Tcl_D
1ca0: 53 74 72 69 6e 67 56 61 6c 75 65 28 26 73 74 72  StringValue(&str
1cb0: 29 20 3a 20 7a 45 72 72 29 3b 0a 20 20 54 63 6c  ) : zErr);.  Tcl
1cc0: 5f 44 53 74 72 69 6e 67 46 72 65 65 28 26 73 74  _DStringFree(&st
1cd0: 72 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29  r);.  if( zErr )
1ce0: 20 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 69   free(zErr);.  i
1cf0: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
1d00: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
1d10: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
1d20: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75  CL_ERROR;.  retu
1d30: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
1d40: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
1d50: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f 74 65  te3_mprintf_z_te
1d60: 73 74 20 20 53 45 50 41 52 41 54 4f 52 20 20 41  st  SEPARATOR  A
1d70: 52 47 30 20 20 41 52 47 31 20 2e 2e 2e 0a 2a 2a  RG0  ARG1 ....**
1d80: 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 25 7a 20  .** Test the %z 
1d90: 66 6f 72 6d 61 74 20 6f 66 20 73 71 6c 69 74 65  format of sqlite
1da0: 4d 50 72 69 6e 74 66 28 29 2e 20 20 55 73 65 20  MPrintf().  Use 
1db0: 6d 75 6c 74 69 70 6c 65 20 6d 70 72 69 6e 74 66  multiple mprintf
1dc0: 28 29 20 63 61 6c 6c 73 20 74 6f 20 0a 2a 2a 20  () calls to .** 
1dd0: 63 6f 6e 63 61 74 65 6e 61 74 65 20 61 72 67 30  concatenate arg0
1de0: 20 74 68 72 6f 75 67 68 20 61 72 67 6e 20 75 73   through argn us
1df0: 69 6e 67 20 73 65 70 61 72 61 74 6f 72 20 61 73  ing separator as
1e00: 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 2e 0a   the separator..
1e10: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65  ** Return the re
1e20: 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  sult..*/.static 
1e30: 69 6e 74 20 74 65 73 74 5f 6d 70 72 69 6e 74 66  int test_mprintf
1e40: 5f 7a 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  _z(.  void *NotU
1e50: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
1e60: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
1e70: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
1e80: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
1e90: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
1ea0: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
1eb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ec0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
1ed0: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
1ee0: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
1ef0: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
1f00: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63  gument */.){.  c
1f10: 68 61 72 20 2a 7a 52 65 73 75 6c 74 20 3d 20 30  har *zResult = 0
1f20: 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 66 6f  ;.  int i;..  fo
1f30: 72 28 69 3d 32 3b 20 69 3c 61 72 67 63 3b 20 69  r(i=2; i<argc; i
1f40: 2b 2b 29 7b 0a 20 20 20 20 7a 52 65 73 75 6c 74  ++){.    zResult
1f50: 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
1f60: 66 28 22 25 7a 25 73 25 73 22 2c 20 7a 52 65 73  f("%z%s%s", zRes
1f70: 75 6c 74 2c 20 61 72 67 76 5b 31 5d 2c 20 61 72  ult, argv[1], ar
1f80: 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 54 63  gv[i]);.  }.  Tc
1f90: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
1fa0: 6e 74 65 72 70 2c 20 7a 52 65 73 75 6c 74 2c 20  nterp, zResult, 
1fb0: 30 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65  0);.  sqliteFree
1fc0: 28 7a 52 65 73 75 6c 74 29 3b 0a 20 20 72 65 74  (zResult);.  ret
1fd0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
1fe0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
1ff0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 6e 5f 74  ite3_mprintf_n_t
2000: 65 73 74 20 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a  est  STRING.**.*
2010: 2a 20 54 65 73 74 20 74 68 65 20 25 6e 20 66 6f  * Test the %n fo
2020: 72 6d 61 74 20 6f 66 20 73 71 6c 69 74 65 4d 50  rmat of sqliteMP
2030: 72 69 6e 74 66 28 29 2e 20 20 52 65 74 75 72 6e  rintf().  Return
2040: 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   the length of t
2050: 68 65 0a 2a 2a 20 69 6e 70 75 74 20 73 74 72 69  he.** input stri
2060: 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ng..*/.static in
2070: 74 20 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f 6e  t test_mprintf_n
2080: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
2090: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
20a0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
20b0: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
20c0: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
20d0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
20e0: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
20f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
2100: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
2110: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
2120: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2130: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
2140: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61  ment */.){.  cha
2150: 72 20 2a 7a 53 74 72 3b 0a 20 20 69 6e 74 20 6e  r *zStr;.  int n
2160: 20 3d 20 30 3b 0a 20 20 7a 53 74 72 20 3d 20 73   = 0;.  zStr = s
2170: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 22 25  qlite3MPrintf("%
2180: 73 25 6e 22 2c 20 61 72 67 76 5b 31 5d 2c 20 26  s%n", argv[1], &
2190: 6e 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65  n);.  sqliteFree
21a0: 28 7a 53 74 72 29 3b 0a 20 20 54 63 6c 5f 53 65  (zStr);.  Tcl_Se
21b0: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
21c0: 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a  p, Tcl_NewIntObj
21d0: 28 6e 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  (n));.  return T
21e0: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
21f0: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
2200: 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66  get_table_printf
2210: 20 20 44 42 20 20 46 4f 52 4d 41 54 20 20 53 54    DB  FORMAT  ST
2220: 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b  RING.**.** Invok
2230: 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 67 65  e the sqlite3_ge
2240: 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 28 29  t_table_printf()
2250: 20 69 6e 74 65 72 66 61 63 65 20 75 73 69 6e 67   interface using
2260: 20 74 68 65 20 6f 70 65 6e 20 64 61 74 61 62 61   the open databa
2270: 73 65 0a 2a 2a 20 44 42 2e 20 20 54 68 65 20 53  se.** DB.  The S
2280: 51 4c 20 69 73 20 74 68 65 20 73 74 72 69 6e 67  QL is the string
2290: 20 46 4f 52 4d 41 54 2e 20 20 54 68 65 20 66 6f   FORMAT.  The fo
22a0: 72 6d 61 74 20 73 74 72 69 6e 67 20 73 68 6f 75  rmat string shou
22b0: 6c 64 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 6f 6e  ld contain.** on
22c0: 65 20 25 73 20 6f 72 20 25 71 2e 20 20 53 54 52  e %s or %q.  STR
22d0: 49 4e 47 20 69 73 20 74 68 65 20 76 61 6c 75 65  ING is the value
22e0: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 25   inserted into %
22f0: 73 20 6f 72 20 25 71 2e 0a 2a 2f 0a 73 74 61 74  s or %q..*/.stat
2300: 69 63 20 69 6e 74 20 74 65 73 74 5f 67 65 74 5f  ic int test_get_
2310: 74 61 62 6c 65 5f 70 72 69 6e 74 66 28 0a 20 20  table_printf(.  
2320: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
2330: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
2340: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
2350: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
2360: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
2370: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
2380: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
2390: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
23a0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
23b0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
23c0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
23d0: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
23e0: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
23f0: 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53 74 72   *db;.  Tcl_DStr
2400: 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74 20 72  ing str;.  int r
2410: 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20  c;.  char *zErr 
2420: 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 52 6f 77 2c  = 0;.  int nRow,
2430: 20 6e 43 6f 6c 3b 0a 20 20 63 68 61 72 20 2a 2a   nCol;.  char **
2440: 61 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20 69  aResult;.  int i
2450: 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33 30  ;.  char zBuf[30
2460: 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  ];.  char *zSql;
2470: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34 20 29  .  if( argc!=4 )
2480: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
2490: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
24a0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
24b0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
24c0: 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20  v[0], .       " 
24d0: 44 42 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47  DB FORMAT STRING
24e0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
24f0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
2500: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
2510: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
2520: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
2530: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
2540: 54 63 6c 5f 44 53 74 72 69 6e 67 49 6e 69 74 28  Tcl_DStringInit(
2550: 26 73 74 72 29 3b 0a 20 20 7a 53 71 6c 20 3d 20  &str);.  zSql = 
2560: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
2570: 61 72 67 76 5b 32 5d 2c 61 72 67 76 5b 33 5d 29  argv[2],argv[3])
2580: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2590: 5f 67 65 74 5f 74 61 62 6c 65 28 64 62 2c 20 7a  _get_table(db, z
25a0: 53 71 6c 2c 20 26 61 52 65 73 75 6c 74 2c 20 26  Sql, &aResult, &
25b0: 6e 52 6f 77 2c 20 26 6e 43 6f 6c 2c 20 26 7a 45  nRow, &nCol, &zE
25c0: 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66  rr);.  sqlite3_f
25d0: 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 73 70 72  ree(zSql);.  spr
25e0: 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c  intf(zBuf, "%d",
25f0: 20 72 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65   rc);.  Tcl_Appe
2600: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
2610: 2c 20 7a 42 75 66 29 3b 0a 20 20 69 66 28 20 72  , zBuf);.  if( r
2620: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
2630: 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66      sprintf(zBuf
2640: 2c 20 22 25 64 22 2c 20 6e 52 6f 77 29 3b 0a 20  , "%d", nRow);. 
2650: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65     Tcl_AppendEle
2660: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  ment(interp, zBu
2670: 66 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28  f);.    sprintf(
2680: 7a 42 75 66 2c 20 22 25 64 22 2c 20 6e 43 6f 6c  zBuf, "%d", nCol
2690: 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  );.    Tcl_Appen
26a0: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
26b0: 20 7a 42 75 66 29 3b 0a 20 20 20 20 66 6f 72 28   zBuf);.    for(
26c0: 69 3d 30 3b 20 69 3c 28 6e 52 6f 77 2b 31 29 2a  i=0; i<(nRow+1)*
26d0: 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nCol; i++){.    
26e0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d    Tcl_AppendElem
26f0: 65 6e 74 28 69 6e 74 65 72 70 2c 20 61 52 65 73  ent(interp, aRes
2700: 75 6c 74 5b 69 5d 20 3f 20 61 52 65 73 75 6c 74  ult[i] ? aResult
2710: 5b 69 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20  [i] : "NULL");. 
2720: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
2730: 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d    Tcl_AppendElem
2740: 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 45 72 72  ent(interp, zErr
2750: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
2760: 5f 66 72 65 65 5f 74 61 62 6c 65 28 61 52 65 73  _free_table(aRes
2770: 75 6c 74 29 3b 0a 20 20 69 66 28 20 7a 45 72 72  ult);.  if( zErr
2780: 20 29 20 66 72 65 65 28 7a 45 72 72 29 3b 0a 20   ) free(zErr);. 
2790: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
27a0: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
27b0: 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
27c0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65   TCL_ERROR;.  re
27d0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
27e0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
27f0: 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
2800: 72 74 5f 72 6f 77 69 64 20 44 42 0a 2a 2a 0a 2a  rt_rowid DB.**.*
2810: 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 69 6e  * Returns the in
2820: 74 65 67 65 72 20 52 4f 57 49 44 20 6f 66 20 74  teger ROWID of t
2830: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69  he most recent i
2840: 6e 73 65 72 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  nsert..*/.static
2850: 20 69 6e 74 20 74 65 73 74 5f 6c 61 73 74 5f 72   int test_last_r
2860: 6f 77 69 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  owid(.  void *No
2870: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
2880: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
2890: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
28a0: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
28b0: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
28c0: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
28d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
28e0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
28f0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
2900: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
2910: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
2920: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
2930: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
2940: 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 0a  char zBuf[30];..
2950: 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b    if( argc!=2 ){
2960: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
2970: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
2980: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
2990: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
29a0: 5b 30 5d 2c 20 22 20 44 42 5c 22 22 2c 20 30 29  [0], " DB\"", 0)
29b0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
29c0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
29d0: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
29e0: 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
29f0: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
2a00: 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 70 72 69 6e  L_ERROR;.  sprin
2a10: 74 66 28 7a 42 75 66 2c 20 22 25 6c 6c 64 22 2c  tf(zBuf, "%lld",
2a20: 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
2a30: 73 65 72 74 5f 72 6f 77 69 64 28 64 62 29 29 3b  sert_rowid(db));
2a40: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
2a50: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
2a60: 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 53  , 0);.  return S
2a70: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  QLITE_OK;.}../*.
2a80: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
2a90: 65 33 5f 6b 65 79 20 44 42 20 4b 45 59 0a 2a 2a  e3_key DB KEY.**
2aa0: 0a 2a 2a 20 53 65 74 20 74 68 65 20 63 6f 64 65  .** Set the code
2ab0: 63 20 6b 65 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  c key..*/.static
2ac0: 20 69 6e 74 20 74 65 73 74 5f 6b 65 79 28 0a 20   int test_key(. 
2ad0: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
2ae0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
2af0: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
2b00: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
2b10: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
2b20: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
2b30: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
2b40: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2b50: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
2b60: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
2b70: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
2b80: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
2b90: 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  t */.){.  sqlite
2ba0: 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63  3 *db;.  const c
2bb0: 68 61 72 20 2a 7a 4b 65 79 3b 0a 20 20 69 6e 74  har *zKey;.  int
2bc0: 20 6e 4b 65 79 3b 0a 20 20 69 66 28 20 61 72 67   nKey;.  if( arg
2bd0: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
2be0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
2bf0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
2c00: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
2c10: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
2c20: 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22     " FILENAME\""
2c30: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
2c40: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
2c50: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
2c60: 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
2c70: 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
2c80: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a  n TCL_ERROR;.  z
2c90: 4b 65 79 20 3d 20 61 72 67 76 5b 32 5d 3b 0a 20  Key = argv[2];. 
2ca0: 20 6e 4b 65 79 20 3d 20 73 74 72 6c 65 6e 28 7a   nKey = strlen(z
2cb0: 4b 65 79 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  Key);.#ifdef SQL
2cc0: 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20  ITE_HAS_CODEC.  
2cd0: 73 71 6c 69 74 65 33 5f 6b 65 79 28 64 62 2c 20  sqlite3_key(db, 
2ce0: 7a 4b 65 79 2c 20 6e 4b 65 79 29 3b 0a 23 65 6e  zKey, nKey);.#en
2cf0: 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  dif.  return TCL
2d00: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
2d10: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 72 65  age:  sqlite3_re
2d20: 6b 65 79 20 44 42 20 4b 45 59 0a 2a 2a 0a 2a 2a  key DB KEY.**.**
2d30: 20 43 68 61 6e 67 65 20 74 68 65 20 63 6f 64 65   Change the code
2d40: 63 20 6b 65 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  c key..*/.static
2d50: 20 69 6e 74 20 74 65 73 74 5f 72 65 6b 65 79 28   int test_rekey(
2d60: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
2d70: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
2d80: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
2d90: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
2da0: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
2db0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
2dc0: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
2dd0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
2de0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
2df0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
2e00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
2e10: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
2e20: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  ent */.){.  sqli
2e30: 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74  te3 *db;.  const
2e40: 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 20 20 69   char *zKey;.  i
2e50: 6e 74 20 6e 4b 65 79 3b 0a 20 20 69 66 28 20 61  nt nKey;.  if( a
2e60: 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  rgc!=3 ){.    Tc
2e70: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
2e80: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
2e90: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
2ea0: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
2eb0: 20 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c       " FILENAME\
2ec0: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
2ed0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
2ee0: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
2ef0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
2f00: 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
2f10: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
2f20: 20 7a 4b 65 79 20 3d 20 61 72 67 76 5b 32 5d 3b   zKey = argv[2];
2f30: 0a 20 20 6e 4b 65 79 20 3d 20 73 74 72 6c 65 6e  .  nKey = strlen
2f40: 28 7a 4b 65 79 29 3b 0a 23 69 66 64 65 66 20 53  (zKey);.#ifdef S
2f50: 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a  QLITE_HAS_CODEC.
2f60: 20 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 28    sqlite3_rekey(
2f70: 64 62 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 29 3b  db, zKey, nKey);
2f80: 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e  .#endif.  return
2f90: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
2fa0: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
2fb0: 33 5f 63 6c 6f 73 65 20 44 42 0a 2a 2a 0a 2a 2a  3_close DB.**.**
2fc0: 20 43 6c 6f 73 65 73 20 74 68 65 20 64 61 74 61   Closes the data
2fd0: 62 61 73 65 20 6f 70 65 6e 65 64 20 62 79 20 73  base opened by s
2fe0: 71 6c 69 74 65 33 5f 6f 70 65 6e 2e 0a 2a 2f 0a  qlite3_open..*/.
2ff0: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
3000: 65 5f 74 65 73 74 5f 63 6c 6f 73 65 28 0a 20 20  e_test_close(.  
3010: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
3020: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
3030: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
3040: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
3050: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
3060: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
3070: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
3080: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
3090: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
30a0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
30b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
30c0: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
30d0: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
30e0: 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   *db;.  int rc;.
30f0: 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b    if( argc!=2 ){
3100: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
3110: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
3120: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
3130: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
3140: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 49  [0],.       " FI
3150: 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20  LENAME\"", 0);. 
3160: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
3170: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
3180: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
3190: 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62  rp, argv[1], &db
31a0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
31b0: 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c  RROR;.  rc = sql
31c0: 69 74 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b 0a  ite3_close(db);.
31d0: 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
31e0: 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29  interp, (char *)
31f0: 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54  errorName(rc), T
3200: 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 72 65  CL_STATIC);.  re
3210: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
3220: 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61  /*.** Implementa
3230: 74 69 6f 6e 20 6f 66 20 74 68 65 20 78 5f 63 6f  tion of the x_co
3240: 61 6c 65 73 63 65 28 29 20 66 75 6e 63 74 69 6f  alesce() functio
3250: 6e 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  n..** Return the
3260: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   first argument 
3270: 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d 65 6e  non-NULL argumen
3280: 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  t..*/.static voi
3290: 64 20 69 66 6e 75 6c 6c 46 75 6e 63 28 73 71 6c  d ifnullFunc(sql
32a0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f  ite3_context *co
32b0: 6e 74 65 78 74 2c 20 69 6e 74 20 61 72 67 63 2c  ntext, int argc,
32c0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
32d0: 2a 61 72 67 76 29 7b 0a 20 20 69 6e 74 20 69 3b  *argv){.  int i;
32e0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72  .  for(i=0; i<ar
32f0: 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  gc; i++){.    if
3300: 28 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d 73  ( SQLITE_NULL!=s
3310: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
3320: 65 28 61 72 67 76 5b 69 5d 29 20 29 7b 0a 20 20  e(argv[i]) ){.  
3330: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
3340: 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  lt_text(context,
3350: 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f   (char*)sqlite3_
3360: 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b  value_text(argv[
3370: 69 5d 29 2c 0a 20 20 20 20 20 20 20 20 20 20 73  i]),.          s
3380: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
3390: 65 73 28 61 72 67 76 5b 69 5d 29 2c 20 53 51 4c  es(argv[i]), SQL
33a0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
33b0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
33c0: 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   }.  }.}../*.** 
33d0: 41 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f  A structure into
33e0: 20 77 68 69 63 68 20 74 6f 20 61 63 63 75 6d 75   which to accumu
33f0: 6c 61 74 65 20 74 65 78 74 2e 0a 2a 2f 0a 73 74  late text..*/.st
3400: 72 75 63 74 20 64 73 74 72 20 7b 0a 20 20 69 6e  ruct dstr {.  in
3410: 74 20 6e 41 6c 6c 6f 63 3b 20 20 2f 2a 20 53 70  t nAlloc;  /* Sp
3420: 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ace allocated */
3430: 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20  .  int nUsed;   
3440: 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 2a 2f  /* Space used */
3450: 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  .  char *z;     
3460: 2f 2a 20 54 68 65 20 73 70 61 63 65 20 2a 2f 0a  /* The space */.
3470: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 70 70 65 6e 64  };../*.** Append
3480: 20 74 65 78 74 20 74 6f 20 61 20 64 73 74 72 0a   text to a dstr.
3490: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 64  */.static void d
34a0: 73 74 72 41 70 70 65 6e 64 28 73 74 72 75 63 74  strAppend(struct
34b0: 20 64 73 74 72 20 2a 70 2c 20 63 6f 6e 73 74 20   dstr *p, const 
34c0: 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 64 69 76  char *z, int div
34d0: 69 64 65 72 29 7b 0a 20 20 69 6e 74 20 6e 20 3d  ider){.  int n =
34e0: 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 69 66   strlen(z);.  if
34f0: 28 20 70 2d 3e 6e 55 73 65 64 20 2b 20 6e 20 2b  ( p->nUsed + n +
3500: 20 32 20 3e 20 70 2d 3e 6e 41 6c 6c 6f 63 20 29   2 > p->nAlloc )
3510: 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 65 77  {.    char *zNew
3520: 3b 0a 20 20 20 20 70 2d 3e 6e 41 6c 6c 6f 63 20  ;.    p->nAlloc 
3530: 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 2a 32 20 2b 20  = p->nAlloc*2 + 
3540: 6e 20 2b 20 32 30 30 3b 0a 20 20 20 20 7a 4e 65  n + 200;.    zNe
3550: 77 20 3d 20 73 71 6c 69 74 65 52 65 61 6c 6c 6f  w = sqliteReallo
3560: 63 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c 6c 6f  c(p->z, p->nAllo
3570: 63 29 3b 0a 20 20 20 20 69 66 28 20 7a 4e 65 77  c);.    if( zNew
3580: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
3590: 69 74 65 46 72 65 65 28 70 2d 3e 7a 29 3b 0a 20  iteFree(p->z);. 
35a0: 20 20 20 20 20 6d 65 6d 73 65 74 28 70 2c 20 30       memset(p, 0
35b0: 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 20  , sizeof(*p));. 
35c0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20       return;.   
35d0: 20 7d 0a 20 20 20 20 70 2d 3e 7a 20 3d 20 7a 4e   }.    p->z = zN
35e0: 65 77 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 69  ew;.  }.  if( di
35f0: 76 69 64 65 72 20 26 26 20 70 2d 3e 6e 55 73 65  vider && p->nUse
3600: 64 3e 30 20 29 7b 0a 20 20 20 20 70 2d 3e 7a 5b  d>0 ){.    p->z[
3610: 70 2d 3e 6e 55 73 65 64 2b 2b 5d 20 3d 20 64 69  p->nUsed++] = di
3620: 76 69 64 65 72 3b 0a 20 20 7d 0a 20 20 6d 65 6d  vider;.  }.  mem
3630: 63 70 79 28 26 70 2d 3e 7a 5b 70 2d 3e 6e 55 73  cpy(&p->z[p->nUs
3640: 65 64 5d 2c 20 7a 2c 20 6e 2b 31 29 3b 0a 20 20  ed], z, n+1);.  
3650: 70 2d 3e 6e 55 73 65 64 20 2b 3d 20 6e 3b 0a 7d  p->nUsed += n;.}
3660: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 64 20  ../*.** Invoked 
3670: 66 6f 72 20 65 61 63 68 20 63 61 6c 6c 62 61 63  for each callbac
3680: 6b 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 45 78  k from sqlite3Ex
3690: 65 63 46 75 6e 63 0a 2a 2f 0a 73 74 61 74 69 63  ecFunc.*/.static
36a0: 20 69 6e 74 20 65 78 65 63 46 75 6e 63 43 61 6c   int execFuncCal
36b0: 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70 44 61 74  lback(void *pDat
36c0: 61 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61  a, int argc, cha
36d0: 72 20 2a 2a 61 72 67 76 2c 20 63 68 61 72 20 2a  r **argv, char *
36e0: 2a 4e 6f 74 55 73 65 64 29 7b 0a 20 20 73 74 72  *NotUsed){.  str
36f0: 75 63 74 20 64 73 74 72 20 2a 70 20 3d 20 28 73  uct dstr *p = (s
3700: 74 72 75 63 74 20 64 73 74 72 2a 29 70 44 61 74  truct dstr*)pDat
3710: 61 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f  a;.  int i;.  fo
3720: 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69  r(i=0; i<argc; i
3730: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 61 72 67  ++){.    if( arg
3740: 76 5b 69 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20  v[i]==0 ){.     
3750: 20 64 73 74 72 41 70 70 65 6e 64 28 70 2c 20 22   dstrAppend(p, "
3760: 4e 55 4c 4c 22 2c 20 27 20 27 29 3b 0a 20 20 20  NULL", ' ');.   
3770: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 73   }else{.      ds
3780: 74 72 41 70 70 65 6e 64 28 70 2c 20 61 72 67 76  trAppend(p, argv
3790: 5b 69 5d 2c 20 27 20 27 29 3b 0a 20 20 20 20 7d  [i], ' ');.    }
37a0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
37b0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d  .}../*.** Implem
37c0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
37d0: 78 5f 73 71 6c 69 74 65 5f 65 78 65 63 28 29 20  x_sqlite_exec() 
37e0: 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 69 73 20  function.  This 
37f0: 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 0a 2a  function takes.*
3800: 2a 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  * a single argum
3810: 65 6e 74 20 61 6e 64 20 61 74 74 65 6d 70 74 73  ent and attempts
3820: 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 61 74   to execute that
3830: 20 61 72 67 75 6d 65 6e 74 20 61 73 20 53 51 4c   argument as SQL
3840: 20 63 6f 64 65 2e 0a 2a 2a 20 54 68 69 73 20 69   code..** This i
3850: 73 20 69 6c 6c 65 67 61 6c 20 61 6e 64 20 73 68  s illegal and sh
3860: 6f 75 6c 64 20 73 65 74 20 74 68 65 20 53 51 4c  ould set the SQL
3870: 49 54 45 5f 4d 49 53 55 53 45 20 66 6c 61 67 20  ITE_MISUSE flag 
3880: 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  on the database.
3890: 0a 2a 2a 0a 2a 2a 20 32 30 30 34 2d 4a 61 6e 2d  .**.** 2004-Jan-
38a0: 30 37 3a 20 20 57 65 20 68 61 76 65 20 63 68 61  07:  We have cha
38b0: 6e 67 65 64 20 74 68 69 73 20 74 6f 20 6d 61 6b  nged this to mak
38c0: 65 20 69 74 20 6c 65 67 61 6c 20 74 6f 20 63 61  e it legal to ca
38d0: 6c 6c 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  ll sqlite3_exec(
38e0: 29 0a 2a 2a 20 66 72 6f 6d 20 77 69 74 68 69 6e  ).** from within
38f0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c   a function call
3900: 2e 20 20 0a 2a 2a 20 0a 2a 2a 20 54 68 69 73 20  .  .** .** This 
3910: 72 6f 75 74 69 6e 65 20 73 69 6d 75 6c 61 74 65  routine simulate
3920: 73 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20  s the effect of 
3930: 68 61 76 69 6e 67 20 74 77 6f 20 74 68 72 65 61  having two threa
3940: 64 73 20 61 74 74 65 6d 70 74 20 74 6f 0a 2a 2a  ds attempt to.**
3950: 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 64 61   use the same da
3960: 74 61 62 61 73 65 20 61 74 20 74 68 65 20 73 61  tabase at the sa
3970: 6d 65 20 74 69 6d 65 2e 0a 2a 2f 0a 73 74 61 74  me time..*/.stat
3980: 69 63 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  ic void sqlite3E
3990: 78 65 63 46 75 6e 63 28 0a 20 20 73 71 6c 69 74  xecFunc(.  sqlit
39a0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74  e3_context *cont
39b0: 65 78 74 2c 20 0a 20 20 69 6e 74 20 61 72 67 63  ext, .  int argc
39c0: 2c 20 20 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ,  .  sqlite3_va
39d0: 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  lue **argv.){.  
39e0: 73 74 72 75 63 74 20 64 73 74 72 20 78 3b 0a 20  struct dstr x;. 
39f0: 20 6d 65 6d 73 65 74 28 26 78 2c 20 30 2c 20 73   memset(&x, 0, s
3a00: 69 7a 65 6f 66 28 78 29 29 3b 0a 20 20 28 76 6f  izeof(x));.  (vo
3a10: 69 64 29 73 71 6c 69 74 65 33 5f 65 78 65 63 28  id)sqlite3_exec(
3a20: 28 73 71 6c 69 74 65 33 2a 29 73 71 6c 69 74 65  (sqlite3*)sqlite
3a30: 33 5f 75 73 65 72 5f 64 61 74 61 28 63 6f 6e 74  3_user_data(cont
3a40: 65 78 74 29 2c 0a 20 20 20 20 20 20 28 63 68 61  ext),.      (cha
3a50: 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
3a60: 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c 0a  _text(argv[0]),.
3a70: 20 20 20 20 20 20 65 78 65 63 46 75 6e 63 43 61        execFuncCa
3a80: 6c 6c 62 61 63 6b 2c 20 26 78 2c 20 30 29 3b 0a  llback, &x, 0);.
3a90: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
3aa0: 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 78  _text(context, x
3ab0: 2e 7a 2c 20 78 2e 6e 55 73 65 64 2c 20 53 51 4c  .z, x.nUsed, SQL
3ac0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
3ad0: 20 20 73 71 6c 69 74 65 46 72 65 65 28 78 2e 7a    sqliteFree(x.z
3ae0: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  );.}../*.** Usag
3af0: 65 3a 20 20 73 71 6c 69 74 65 5f 74 65 73 74 5f  e:  sqlite_test_
3b00: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20  create_function 
3b10: 44 42 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 74 68  DB.**.** Call th
3b20: 65 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  e sqlite3_create
3b30: 5f 66 75 6e 63 74 69 6f 6e 20 41 50 49 20 6f 6e  _function API on
3b40: 20 74 68 65 20 67 69 76 65 6e 20 64 61 74 61 62   the given datab
3b50: 61 73 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20  ase in order.** 
3b60: 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63  to create a func
3b70: 74 69 6f 6e 20 6e 61 6d 65 64 20 22 78 5f 63 6f  tion named "x_co
3b80: 61 6c 65 73 63 65 22 2e 20 20 54 68 69 73 20 66  alesce".  This f
3b90: 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 74 68 65  unction does the
3ba0: 20 73 61 6d 65 20 74 68 69 6e 67 0a 2a 2a 20 61   same thing.** a
3bb0: 73 20 74 68 65 20 22 63 6f 61 6c 65 73 63 65 22  s the "coalesce"
3bc0: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 69 73   function.  This
3bd0: 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f 20 72   function also r
3be0: 65 67 69 73 74 65 72 73 20 61 6e 20 53 51 4c 20  egisters an SQL 
3bf0: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6e 61 6d 65  function.** name
3c00: 64 20 22 78 5f 73 71 6c 69 74 65 5f 65 78 65 63  d "x_sqlite_exec
3c10: 22 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 73  " that invokes s
3c20: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 20 20  qlite3_exec().  
3c30: 49 6e 76 6f 6b 69 6e 67 20 73 71 6c 69 74 65 33  Invoking sqlite3
3c40: 5f 65 78 65 63 28 29 0a 2a 2a 20 69 6e 20 74 68  _exec().** in th
3c50: 69 73 20 77 61 79 20 69 73 20 69 6c 6c 65 67 61  is way is illega
3c60: 6c 20 72 65 63 75 72 73 69 6f 6e 20 61 6e 64 20  l recursion and 
3c70: 73 68 6f 75 6c 64 20 72 61 69 73 65 20 61 6e 20  should raise an 
3c80: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
3c90: 72 6f 72 2e 0a 2a 2a 20 54 68 65 20 65 66 66 65  ror..** The effe
3ca0: 63 74 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  ct is similar to
3cb0: 20 74 72 79 69 6e 67 20 74 6f 20 75 73 65 20 74   trying to use t
3cc0: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
3cd0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 72 6f 6d   connection from
3ce0: 0a 2a 2a 20 74 77 6f 20 74 68 72 65 61 64 73 20  .** two threads 
3cf0: 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
3d00: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6f 72 69 67  ..**.** The orig
3d10: 69 6e 61 6c 20 6d 6f 74 69 76 61 74 69 6f 6e 20  inal motivation 
3d20: 66 6f 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65  for this routine
3d30: 20 77 61 73 20 74 6f 20 62 65 20 61 62 6c 65 20   was to be able 
3d40: 74 6f 20 63 61 6c 6c 20 74 68 65 0a 2a 2a 20 73  to call the.** s
3d50: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
3d60: 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20  nction function 
3d70: 77 68 69 6c 65 20 61 20 71 75 65 72 79 20 69 73  while a query is
3d80: 20 69 6e 20 70 72 6f 67 72 65 73 73 20 69 6e 20   in progress in 
3d90: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 74 65 73 74  order.** to test
3da0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 49 53 55   the SQLITE_MISU
3db0: 53 45 20 64 65 74 65 63 74 69 6f 6e 20 6c 6f 67  SE detection log
3dc0: 69 63 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ic..*/.static in
3dd0: 74 20 74 65 73 74 5f 63 72 65 61 74 65 5f 66 75  t test_create_fu
3de0: 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a  nction(.  void *
3df0: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
3e00: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
3e10: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
3e20: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
3e30: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
3e40: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
3e50: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
3e60: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
3e70: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
3e80: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
3e90: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
3ea0: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
3eb0: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c  .  int rc;.  sql
3ec0: 69 74 65 33 20 2a 64 62 3b 0a 20 20 65 78 74 65  ite3 *db;.  exte
3ed0: 72 6e 20 76 6f 69 64 20 4d 64 35 5f 52 65 67 69  rn void Md5_Regi
3ee0: 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ster(sqlite3*);.
3ef0: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29  .  if( argc!=2 )
3f00: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
3f10: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
3f20: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
3f30: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
3f40: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 44  v[0],.       " D
3f50: 42 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  B\"", 0);.    re
3f60: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
3f70: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
3f80: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
3f90: 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
3fa0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
3fb0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
3fc0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
3fd0: 64 62 2c 20 22 78 5f 63 6f 61 6c 65 73 63 65 22  db, "x_coalesce"
3fe0: 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59  , -1, SQLITE_ANY
3ff0: 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 69 66  , 0, .        if
4000: 6e 75 6c 6c 46 75 6e 63 2c 20 30 2c 20 30 29 3b  nullFunc, 0, 0);
4010: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
4020: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a  _OMIT_UTF16.  /*
4030: 20 55 73 65 20 74 68 65 20 73 71 6c 69 74 65 33   Use the sqlite3
4040: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
4050: 31 36 28 29 20 41 50 49 20 68 65 72 65 2e 20 4d  16() API here. M
4060: 61 69 6e 6c 79 20 66 6f 72 20 66 75 6e 2c 20 62  ainly for fun, b
4070: 75 74 20 61 6c 73 6f 20 0a 20 20 2a 2a 20 62 65  ut also .  ** be
4080: 63 61 75 73 65 20 69 74 20 69 73 20 6e 6f 74 20  cause it is not 
4090: 74 65 73 74 65 64 20 61 6e 79 77 68 65 72 65 20  tested anywhere 
40a0: 65 6c 73 65 2e 20 2a 2f 0a 20 20 69 66 28 20 72  else. */.  if( r
40b0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
40c0: 20 20 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75      sqlite3_valu
40d0: 65 20 2a 70 56 61 6c 3b 0a 23 69 66 64 65 66 20  e *pVal;.#ifdef 
40e0: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
40f0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
4100: 69 4d 61 6c 6c 6f 63 46 61 69 6c 3e 30 20 29 7b  iMallocFail>0 ){
4110: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
4120: 4d 61 6c 6c 6f 63 46 61 69 6c 2b 2b 3b 0a 20 20  MallocFail++;.  
4130: 20 20 7d 0a 23 65 6e 64 69 66 20 0a 20 20 20 20    }.#endif .    
4140: 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61  pVal = sqlite3Va
4150: 6c 75 65 4e 65 77 28 29 3b 0a 20 20 20 20 73 71  lueNew();.    sq
4160: 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72  lite3ValueSetStr
4170: 28 70 56 61 6c 2c 20 2d 31 2c 20 22 78 5f 73 71  (pVal, -1, "x_sq
4180: 6c 69 74 65 5f 65 78 65 63 22 2c 20 53 51 4c 49  lite_exec", SQLI
4190: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
41a0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 63 20  STATIC);.    rc 
41b0: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
41c0: 5f 66 75 6e 63 74 69 6f 6e 31 36 28 64 62 2c 20  _function16(db, 
41d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
41e0: 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28  qlite3ValueText(
41f0: 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46  pVal, SQLITE_UTF
4200: 31 36 4e 41 54 49 56 45 29 2c 0a 20 20 20 20 20  16NATIVE),.     
4210: 20 20 20 20 20 20 20 20 20 31 2c 20 53 51 4c 49           1, SQLI
4220: 54 45 5f 55 54 46 31 36 2c 20 64 62 2c 20 73 71  TE_UTF16, db, sq
4230: 6c 69 74 65 33 45 78 65 63 46 75 6e 63 2c 20 30  lite3ExecFunc, 0
4240: 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
4250: 33 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29  3ValueFree(pVal)
4260: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
4270: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
4280: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
4290: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
42a0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
42b0: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
42c0: 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72  p, (char *)error
42d0: 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20  Name(rc), 0);.  
42e0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
42f0: 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73  ../*.** Routines
4300: 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
4310: 65 20 78 5f 63 6f 75 6e 74 28 29 20 61 67 67 72  e x_count() aggr
4320: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  egate function..
4330: 2a 2a 0a 2a 2a 20 78 5f 63 6f 75 6e 74 28 29 20  **.** x_count() 
4340: 63 6f 75 6e 74 73 20 74 68 65 20 6e 75 6d 62 65  counts the numbe
4350: 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 20 61 72  r of non-null ar
4360: 67 75 6d 65 6e 74 73 2e 20 20 42 75 74 20 74 68  guments.  But th
4370: 65 72 65 20 61 72 65 0a 2a 2a 20 73 6f 6d 65 20  ere are.** some 
4380: 74 77 69 73 74 73 20 66 6f 72 20 74 65 73 74 69  twists for testi
4390: 6e 67 20 70 75 72 70 6f 73 65 73 2e 0a 2a 2a 0a  ng purposes..**.
43a0: 2a 2a 20 49 66 20 74 68 65 20 61 72 67 75 6d 65  ** If the argume
43b0: 6e 74 20 74 6f 20 78 5f 63 6f 75 6e 74 28 29 20  nt to x_count() 
43c0: 69 73 20 34 30 20 74 68 65 6e 20 61 20 55 54 46  is 40 then a UTF
43d0: 2d 38 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  -8 error is repo
43e0: 72 74 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 73  rted.** on the s
43f0: 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 20 20 49  tep function.  I
4400: 66 20 78 5f 63 6f 75 6e 74 28 34 31 29 20 69 73  f x_count(41) is
4410: 20 73 65 65 6e 2c 20 74 68 65 6e 20 61 20 55 54   seen, then a UT
4420: 46 2d 31 36 20 65 72 72 6f 72 0a 2a 2a 20 69 73  F-16 error.** is
4430: 20 72 65 70 6f 72 74 65 64 20 6f 6e 20 74 68 65   reported on the
4440: 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 20   step function. 
4450: 20 49 66 20 74 68 65 20 74 6f 74 61 6c 20 63 6f   If the total co
4460: 75 6e 74 20 69 73 20 34 32 2c 20 74 68 65 6e 0a  unt is 42, then.
4470: 2a 2a 20 61 20 55 54 46 2d 38 20 65 72 72 6f 72  ** a UTF-8 error
4480: 20 69 73 20 72 65 70 6f 72 74 65 64 20 6f 6e 20   is reported on 
4490: 74 68 65 20 66 69 6e 61 6c 69 7a 65 20 66 75 6e  the finalize fun
44a0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65  ction..*/.typede
44b0: 66 20 73 74 72 75 63 74 20 43 6f 75 6e 74 43 74  f struct CountCt
44c0: 78 20 43 6f 75 6e 74 43 74 78 3b 0a 73 74 72 75  x CountCtx;.stru
44d0: 63 74 20 43 6f 75 6e 74 43 74 78 20 7b 0a 20 20  ct CountCtx {.  
44e0: 69 6e 74 20 6e 3b 0a 7d 3b 0a 73 74 61 74 69 63  int n;.};.static
44f0: 20 76 6f 69 64 20 63 6f 75 6e 74 53 74 65 70 28   void countStep(
4500: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
4510: 2a 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 61 72  *context, int ar
4520: 67 63 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  gc, sqlite3_valu
4530: 65 20 2a 2a 61 72 67 76 29 7b 0a 20 20 43 6f 75  e **argv){.  Cou
4540: 6e 74 43 74 78 20 2a 70 3b 0a 20 20 70 20 3d 20  ntCtx *p;.  p = 
4550: 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74  sqlite3_aggregat
4560: 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78  e_context(contex
4570: 74 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a  t, sizeof(*p));.
4580: 20 20 69 66 28 20 28 61 72 67 63 3d 3d 30 20 7c    if( (argc==0 |
4590: 7c 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d 73  | SQLITE_NULL!=s
45a0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
45b0: 65 28 61 72 67 76 5b 30 5d 29 20 29 20 26 26 20  e(argv[0]) ) && 
45c0: 70 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 2b 2b 3b  p ){.    p->n++;
45d0: 0a 20 20 7d 0a 20 20 69 66 28 20 61 72 67 63 3e  .  }.  if( argc>
45e0: 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 76 20 3d  0 ){.    int v =
45f0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69   sqlite3_value_i
4600: 6e 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20  nt(argv[0]);.   
4610: 20 69 66 28 20 76 3d 3d 34 30 20 29 7b 0a 20 20   if( v==40 ){.  
4620: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
4630: 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74  lt_error(context
4640: 2c 20 22 76 61 6c 75 65 20 6f 66 20 34 30 20 68  , "value of 40 h
4650: 61 6e 64 65 64 20 74 6f 20 78 5f 63 6f 75 6e 74  anded to x_count
4660: 22 2c 20 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20  ", -1);.#ifndef 
4670: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
4680: 36 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  6.    }else if( 
4690: 76 3d 3d 34 31 20 29 7b 0a 20 20 20 20 20 20 63  v==41 ){.      c
46a0: 6f 6e 73 74 20 63 68 61 72 20 7a 55 74 66 31 36  onst char zUtf16
46b0: 45 72 72 4d 73 67 5b 5d 20 3d 20 7b 20 30 2c 20  ErrMsg[] = { 0, 
46c0: 30 78 36 31 2c 20 30 2c 20 30 78 36 32 2c 20 30  0x61, 0, 0x62, 0
46d0: 2c 20 30 78 36 33 2c 20 30 2c 20 30 2c 20 30 7d  , 0x63, 0, 0, 0}
46e0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
46f0: 72 65 73 75 6c 74 5f 65 72 72 6f 72 31 36 28 63  result_error16(c
4700: 6f 6e 74 65 78 74 2c 20 26 7a 55 74 66 31 36 45  ontext, &zUtf16E
4710: 72 72 4d 73 67 5b 31 2d 53 51 4c 49 54 45 5f 42  rrMsg[1-SQLITE_B
4720: 49 47 45 4e 44 49 41 4e 5d 2c 20 2d 31 29 3b 0a  IGENDIAN], -1);.
4730: 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20 7d  #endif.    }.  }
4740: 0a 7d 20 20 20 0a 73 74 61 74 69 63 20 76 6f 69  .}   .static voi
4750: 64 20 63 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 28  d countFinalize(
4760: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
4770: 2a 63 6f 6e 74 65 78 74 29 7b 0a 20 20 43 6f 75  *context){.  Cou
4780: 6e 74 43 74 78 20 2a 70 3b 0a 20 20 70 20 3d 20  ntCtx *p;.  p = 
4790: 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74  sqlite3_aggregat
47a0: 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78  e_context(contex
47b0: 74 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a  t, sizeof(*p));.
47c0: 20 20 69 66 28 20 70 20 29 7b 0a 20 20 20 20 69    if( p ){.    i
47d0: 66 28 20 70 2d 3e 6e 3d 3d 34 32 20 29 7b 0a 20  f( p->n==42 ){. 
47e0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
47f0: 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78  ult_error(contex
4800: 74 2c 20 22 78 5f 63 6f 75 6e 74 20 74 6f 74 61  t, "x_count tota
4810: 6c 73 20 74 6f 20 34 32 22 2c 20 2d 31 29 3b 0a  ls to 42", -1);.
4820: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4830: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
4840: 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 70 20 3f  int(context, p ?
4850: 20 70 2d 3e 6e 20 3a 20 30 29 3b 0a 20 20 20 20   p->n : 0);.    
4860: 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  }.  }.}../*.** U
4870: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 74 65  sage:  sqlite_te
4880: 73 74 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67  st_create_aggreg
4890: 61 74 65 20 44 42 0a 2a 2a 0a 2a 2a 20 43 61 6c  ate DB.**.** Cal
48a0: 6c 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72  l the sqlite3_cr
48b0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 41 50  eate_function AP
48c0: 49 20 6f 6e 20 74 68 65 20 67 69 76 65 6e 20 64  I on the given d
48d0: 61 74 61 62 61 73 65 20 69 6e 20 6f 72 64 65 72  atabase in order
48e0: 0a 2a 2a 20 74 6f 20 63 72 65 61 74 65 20 61 20  .** to create a 
48f0: 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22  function named "
4900: 78 5f 63 6f 75 6e 74 22 2e 20 20 54 68 69 73 20  x_count".  This 
4910: 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 74 68  function does th
4920: 65 20 73 61 6d 65 20 74 68 69 6e 67 0a 2a 2a 20  e same thing.** 
4930: 61 73 20 74 68 65 20 22 6d 64 35 73 75 6d 22 20  as the "md5sum" 
4940: 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
4950: 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f 74  The original mot
4960: 69 76 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73  ivation for this
4970: 20 72 6f 75 74 69 6e 65 20 77 61 73 20 74 6f 20   routine was to 
4980: 62 65 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c 20  be able to call 
4990: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63  the.** sqlite3_c
49a0: 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 20  reate_aggregate 
49b0: 66 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20 61  function while a
49c0: 20 71 75 65 72 79 20 69 73 20 69 6e 20 70 72 6f   query is in pro
49d0: 67 72 65 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a  gress in order.*
49e0: 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20 53 51  * to test the SQ
49f0: 4c 49 54 45 5f 4d 49 53 55 53 45 20 64 65 74 65  LITE_MISUSE dete
4a00: 63 74 69 6f 6e 20 6c 6f 67 69 63 2e 20 20 53 65  ction logic.  Se
4a10: 65 20 6d 69 73 75 73 65 2e 74 65 73 74 2e 0a 2a  e misuse.test..*
4a20: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
4a30: 65 20 77 61 73 20 6c 61 74 65 72 20 65 78 74 65  e was later exte
4a40: 6e 64 65 64 20 74 6f 20 74 65 73 74 20 74 68 65  nded to test the
4a50: 20 75 73 65 20 6f 66 20 73 71 6c 69 74 65 33 5f   use of sqlite3_
4a60: 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 29 0a 2a  result_error().*
4a70: 2a 20 77 69 74 68 69 6e 20 61 67 67 72 65 67 61  * within aggrega
4a80: 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f  te functions..*/
4a90: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
4aa0: 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74  _create_aggregat
4ab0: 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  e(.  void *NotUs
4ac0: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
4ad0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
4ae0: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
4af0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
4b00: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
4b10: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
4b20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
4b30: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
4b40: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
4b50: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
4b60: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
4b70: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
4b80: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74  lite3 *db;.  int
4b90: 20 72 63 3b 0a 20 20 69 66 28 20 61 72 67 63 21   rc;.  if( argc!
4ba0: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
4bb0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
4bc0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
4bd0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
4be0: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
4bf0: 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c 20   " FILENAME\"", 
4c00: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
4c10: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
4c20: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
4c30: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
4c40: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
4c50: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
4c60: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
4c70: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78  _function(db, "x
4c80: 5f 63 6f 75 6e 74 22 2c 20 30 2c 20 53 51 4c 49  _count", 0, SQLI
4c90: 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 2c 0a 20  TE_UTF8, 0, 0,. 
4ca0: 20 20 20 20 20 63 6f 75 6e 74 53 74 65 70 2c 63       countStep,c
4cb0: 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 29 3b 0a 20  ountFinalize);. 
4cc0: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
4cd0: 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  OK ){.    sqlite
4ce0: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
4cf0: 6e 28 64 62 2c 20 22 78 5f 63 6f 75 6e 74 22 2c  n(db, "x_count",
4d00: 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   1, SQLITE_UTF8,
4d10: 20 30 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 63   0, 0,.        c
4d20: 6f 75 6e 74 53 74 65 70 2c 63 6f 75 6e 74 46 69  ountStep,countFi
4d30: 6e 61 6c 69 7a 65 29 3b 0a 20 20 7d 0a 20 20 69  nalize);.  }.  i
4d40: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
4d50: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
4d60: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
4d70: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75  CL_ERROR;.  retu
4d80: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 0a  rn TCL_OK;.}....
4d90: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
4da0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
4db0: 74 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52  t FORMAT INTEGER
4dc0: 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52   INTEGER INTEGER
4dd0: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
4de0: 6e 74 66 20 77 69 74 68 20 74 68 72 65 65 20 69  ntf with three i
4df0: 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73  nteger arguments
4e00: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
4e10: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69  qlite3_mprintf_i
4e20: 6e 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  nt(.  void *NotU
4e30: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
4e40: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
4e50: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
4e60: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
4e70: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
4e80: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
4e90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
4ea0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
4eb0: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
4ec0: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
4ed0: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
4ee0: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69  gument */.){.  i
4ef0: 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 63 68  nt a[3], i;.  ch
4f00: 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67  ar *z;.  if( arg
4f10: 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=5 ){.    Tcl_
4f20: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
4f30: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
4f40: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
4f50: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
4f60: 20 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20     " FORMAT INT 
4f70: 49 4e 54 20 49 4e 54 5c 22 22 2c 20 30 29 3b 0a  INT INT\"", 0);.
4f80: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
4f90: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28  RROR;.  }.  for(
4fa0: 69 3d 32 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a  i=2; i<5; i++){.
4fb0: 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49      if( Tcl_GetI
4fc0: 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  nt(interp, argv[
4fd0: 69 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72  i], &a[i-2]) ) r
4fe0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
4ff0: 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74  .  }.  z = sqlit
5000: 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b  e3_mprintf(argv[
5010: 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20  1], a[0], a[1], 
5020: 61 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70  a[2]);.  Tcl_App
5030: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
5040: 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  , z, 0);.  sqlit
5050: 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65  e3_free(z);.  re
5060: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
5070: 2f 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72 65  /*.** If zNum re
5080: 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65  presents an inte
5090: 67 65 72 20 74 68 61 74 20 77 69 6c 6c 20 66 69  ger that will fi
50a0: 74 20 69 6e 20 36 34 2d 62 69 74 73 2c 20 74 68  t in 64-bits, th
50b0: 65 6e 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c 75  en set.** *pValu
50c0: 65 20 74 6f 20 74 68 61 74 20 69 6e 74 65 67 65  e to that intege
50d0: 72 20 61 6e 64 20 72 65 74 75 72 6e 20 74 72 75  r and return tru
50e0: 65 2e 20 20 4f 74 68 65 72 77 69 73 65 20 72 65  e.  Otherwise re
50f0: 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f 0a 73  turn false..*/.s
5100: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
5110: 33 47 65 74 49 6e 74 36 34 28 63 6f 6e 73 74 20  3GetInt64(const 
5120: 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 36 34 20  char *zNum, i64 
5130: 2a 70 56 61 6c 75 65 29 7b 0a 20 20 69 66 28 20  *pValue){.  if( 
5140: 73 71 6c 69 74 65 33 46 69 74 73 49 6e 36 34 42  sqlite3FitsIn64B
5150: 69 74 73 28 7a 4e 75 6d 29 20 29 7b 0a 20 20 20  its(zNum) ){.   
5160: 20 73 71 6c 69 74 65 33 61 74 6f 69 36 34 28 7a   sqlite3atoi64(z
5170: 4e 75 6d 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20  Num, pValue);.  
5180: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a    return 1;.  }.
5190: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
51a0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
51b0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74  ite3_mprintf_int
51c0: 36 34 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45  64 FORMAT INTEGE
51d0: 52 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45  R INTEGER INTEGE
51e0: 52 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72  R.**.** Call mpr
51f0: 69 6e 74 66 20 77 69 74 68 20 74 68 72 65 65 20  intf with three 
5200: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 61  64-bit integer a
5210: 72 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61 74  rguments.*/.stat
5220: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d  ic int sqlite3_m
5230: 70 72 69 6e 74 66 5f 69 6e 74 36 34 28 0a 20 20  printf_int64(.  
5240: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
5250: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
5260: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
5270: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
5280: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
5290: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
52a0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
52b0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
52c0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
52d0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
52e0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
52f0: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
5300: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a   */.){.  int i;.
5310: 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 61    sqlite_int64 a
5320: 5b 33 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  [3];.  char *z;.
5330: 20 20 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b    if( argc!=5 ){
5340: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
5350: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
5360: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
5370: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
5380: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f  [0],.       " FO
5390: 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 49 4e 54  RMAT INT INT INT
53a0: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
53b0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
53c0: 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c   }.  for(i=2; i<
53d0: 35 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  5; i++){.    if(
53e0: 20 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74 36   !sqlite3GetInt6
53f0: 34 28 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d  4(argv[i], &a[i-
5400: 32 5d 29 20 29 7b 0a 20 20 20 20 20 20 54 63 6c  2]) ){.      Tcl
5410: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
5420: 74 65 72 70 2c 20 22 61 72 67 75 6d 65 6e 74 20  terp, "argument 
5430: 69 73 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 36  is not a valid 6
5440: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 22 2c 20  4-bit integer", 
5450: 30 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  0);.      return
5460: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20   TCL_ERROR;.    
5470: 7d 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69  }.  }.  z = sqli
5480: 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76  te3_mprintf(argv
5490: 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c  [1], a[0], a[1],
54a0: 20 61 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70   a[2]);.  Tcl_Ap
54b0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
54c0: 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69  p, z, 0);.  sqli
54d0: 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72  te3_free(z);.  r
54e0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
54f0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
5500: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73  qlite3_mprintf_s
5510: 74 72 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45  tr FORMAT INTEGE
5520: 52 20 49 4e 54 45 47 45 52 20 53 54 52 49 4e 47  R INTEGER STRING
5530: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
5540: 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e 74  ntf with two int
5550: 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20 61  eger arguments a
5560: 6e 64 20 6f 6e 65 20 73 74 72 69 6e 67 20 61 72  nd one string ar
5570: 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63  gument.*/.static
5580: 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72   int sqlite3_mpr
5590: 69 6e 74 66 5f 73 74 72 28 0a 20 20 76 6f 69 64  intf_str(.  void
55a0: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
55b0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
55c0: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
55d0: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
55e0: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
55f0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
5600: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
5610: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
5620: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
5630: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
5640: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
5650: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
5660: 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69  ){.  int a[3], i
5670: 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  ;.  char *z;.  i
5680: 66 28 20 61 72 67 63 3c 34 20 7c 7c 20 61 72 67  f( argc<4 || arg
5690: 63 3e 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  c>5 ){.    Tcl_A
56a0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
56b0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
56c0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
56d0: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
56e0: 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49    " FORMAT INT I
56f0: 4e 54 20 3f 53 54 52 49 4e 47 3f 5c 22 22 2c 20  NT ?STRING?\"", 
5700: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
5710: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
5720: 66 6f 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b  for(i=2; i<4; i+
5730: 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f  +){.    if( Tcl_
5740: 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61  GetInt(interp, a
5750: 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29  rgv[i], &a[i-2])
5760: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
5770: 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73  ROR;.  }.  z = s
5780: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61  qlite3_mprintf(a
5790: 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b  rgv[1], a[0], a[
57a0: 31 5d 2c 20 61 72 67 63 3e 34 20 3f 20 61 72 67  1], argc>4 ? arg
57b0: 76 5b 34 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 20 20  v[4] : NULL);.  
57c0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
57d0: 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a  (interp, z, 0);.
57e0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
57f0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
5800: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
5810: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72  ge:  sqlite3_mpr
5820: 69 6e 74 66 5f 64 6f 75 62 6c 65 20 46 4f 52 4d  intf_double FORM
5830: 41 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47  AT INTEGER INTEG
5840: 45 52 20 44 4f 55 42 4c 45 0a 2a 2a 0a 2a 2a 20  ER DOUBLE.**.** 
5850: 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74  Call mprintf wit
5860: 68 20 74 77 6f 20 69 6e 74 65 67 65 72 20 61 72  h two integer ar
5870: 67 75 6d 65 6e 74 73 20 61 6e 64 20 6f 6e 65 20  guments and one 
5880: 64 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 0a  double argument.
5890: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
58a0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f  lite3_mprintf_do
58b0: 75 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  uble(.  void *No
58c0: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
58d0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
58e0: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
58f0: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
5900: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
5910: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
5920: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
5930: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
5940: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
5950: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
5960: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
5970: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
5980: 20 69 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20   int a[3], i;.  
5990: 64 6f 75 62 6c 65 20 72 3b 0a 20 20 63 68 61 72  double r;.  char
59a0: 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 21   *z;.  if( argc!
59b0: 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =5 ){.    Tcl_Ap
59c0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
59d0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
59e0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
59f0: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
5a00: 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e   " FORMAT INT IN
5a10: 54 20 44 4f 55 42 4c 45 5c 22 22 2c 20 30 29 3b  T DOUBLE\"", 0);
5a20: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
5a30: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72  ERROR;.  }.  for
5a40: 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b  (i=2; i<4; i++){
5a50: 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74  .    if( Tcl_Get
5a60: 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76  Int(interp, argv
5a70: 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20  [i], &a[i-2]) ) 
5a80: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
5a90: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f  ;.  }.  if( Tcl_
5aa0: 47 65 74 44 6f 75 62 6c 65 28 69 6e 74 65 72 70  GetDouble(interp
5ab0: 2c 20 61 72 67 76 5b 34 5d 2c 20 26 72 29 20 29  , argv[4], &r) )
5ac0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
5ad0: 52 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  R;.  z = sqlite3
5ae0: 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d  _mprintf(argv[1]
5af0: 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 72 29  , a[0], a[1], r)
5b00: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  ;.  Tcl_AppendRe
5b10: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20  sult(interp, z, 
5b20: 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  0);.  sqlite3_fr
5b30: 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20  ee(z);.  return 
5b40: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
5b50: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
5b60: 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65 64 20  _mprintf_scaled 
5b70: 46 4f 52 4d 41 54 20 44 4f 55 42 4c 45 20 44 4f  FORMAT DOUBLE DO
5b80: 55 42 4c 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20  UBLE.**.** Call 
5b90: 6d 70 72 69 6e 74 66 20 77 69 74 68 20 61 20 73  mprintf with a s
5ba0: 69 6e 67 6c 65 20 64 6f 75 62 6c 65 20 61 72 67  ingle double arg
5bb0: 75 6d 65 6e 74 20 77 68 69 63 68 20 69 73 20 74  ument which is t
5bc0: 68 65 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68  he product of th
5bd0: 65 0a 2a 2a 20 74 77 6f 20 61 72 67 75 6d 65 6e  e.** two argumen
5be0: 74 73 20 67 69 76 65 6e 20 61 62 6f 76 65 2e 20  ts given above. 
5bf0: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
5c00: 20 67 65 6e 65 72 61 74 65 20 6f 76 65 72 66 6c   generate overfl
5c10: 6f 77 20 61 6e 64 20 75 6e 64 65 72 66 6c 6f 77  ow and underflow
5c20: 0a 2a 2a 20 64 6f 75 62 6c 65 73 20 74 6f 20 74  .** doubles to t
5c30: 65 73 74 20 74 68 61 74 20 74 68 65 79 20 61 72  est that they ar
5c40: 65 20 63 6f 6e 76 65 72 74 65 64 20 70 72 6f 70  e converted prop
5c50: 65 72 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  erly..*/.static 
5c60: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  int sqlite3_mpri
5c70: 6e 74 66 5f 73 63 61 6c 65 64 28 0a 20 20 76 6f  ntf_scaled(.  vo
5c80: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
5c90: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
5ca0: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
5cb0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
5cc0: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
5cd0: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
5ce0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
5cf0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
5d00: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
5d10: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
5d20: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
5d30: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
5d40: 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  /.){.  int i;.  
5d50: 64 6f 75 62 6c 65 20 72 5b 32 5d 3b 0a 20 20 63  double r[2];.  c
5d60: 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72  har *z;.  if( ar
5d70: 67 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=4 ){.    Tcl
5d80: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
5d90: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
5da0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
5db0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
5dc0: 20 20 20 20 22 20 46 4f 52 4d 41 54 20 44 4f 55      " FORMAT DOU
5dd0: 42 4c 45 20 44 4f 55 42 4c 45 5c 22 22 2c 20 30  BLE DOUBLE\"", 0
5de0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
5df0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66  L_ERROR;.  }.  f
5e00: 6f 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b  or(i=2; i<4; i++
5e10: 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47  ){.    if( Tcl_G
5e20: 65 74 44 6f 75 62 6c 65 28 69 6e 74 65 72 70 2c  etDouble(interp,
5e30: 20 61 72 67 76 5b 69 5d 2c 20 26 72 5b 69 2d 32   argv[i], &r[i-2
5e40: 5d 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  ]) ) return TCL_
5e50: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d  ERROR;.  }.  z =
5e60: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
5e70: 28 61 72 67 76 5b 31 5d 2c 20 72 5b 30 5d 2a 72  (argv[1], r[0]*r
5e80: 5b 31 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  [1]);.  Tcl_Appe
5e90: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
5ea0: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
5eb0: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
5ec0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
5ed0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
5ee0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72  ite3_mprintf_str
5ef0: 6f 6e 6c 79 20 46 4f 52 4d 41 54 20 53 54 52 49  only FORMAT STRI
5f00: 4e 47 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70  NG.**.** Call mp
5f10: 72 69 6e 74 66 20 77 69 74 68 20 61 20 73 69 6e  rintf with a sin
5f20: 67 6c 65 20 64 6f 75 62 6c 65 20 61 72 67 75 6d  gle double argum
5f30: 65 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  ent which is the
5f40: 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 0a   product of the.
5f50: 2a 2a 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73  ** two arguments
5f60: 20 67 69 76 65 6e 20 61 62 6f 76 65 2e 20 20 54   given above.  T
5f70: 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 67  his is used to g
5f80: 65 6e 65 72 61 74 65 20 6f 76 65 72 66 6c 6f 77  enerate overflow
5f90: 20 61 6e 64 20 75 6e 64 65 72 66 6c 6f 77 0a 2a   and underflow.*
5fa0: 2a 20 64 6f 75 62 6c 65 73 20 74 6f 20 74 65 73  * doubles to tes
5fb0: 74 20 74 68 61 74 20 74 68 65 79 20 61 72 65 20  t that they are 
5fc0: 63 6f 6e 76 65 72 74 65 64 20 70 72 6f 70 65 72  converted proper
5fd0: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ly..*/.static in
5fe0: 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  t sqlite3_mprint
5ff0: 66 5f 73 74 72 6f 6e 6c 79 28 0a 20 20 76 6f 69  f_stronly(.  voi
6000: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
6010: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
6020: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
6030: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
6040: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
6050: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
6060: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
6070: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
6080: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
6090: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
60a0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
60b0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
60c0: 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20  .){.  char *z;. 
60d0: 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a   if( argc!=3 ){.
60e0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
60f0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
6100: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
6110: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
6120: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52  0],.       " FOR
6130: 4d 41 54 20 53 54 52 49 4e 47 5c 22 22 2c 20 30  MAT STRING\"", 0
6140: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
6150: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a  L_ERROR;.  }.  z
6160: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
6170: 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 72 67 76  tf(argv[1], argv
6180: 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  [2]);.  Tcl_Appe
6190: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
61a0: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
61b0: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
61c0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
61d0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
61e0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78  ite3_mprintf_hex
61f0: 64 6f 75 62 6c 65 20 46 4f 52 4d 41 54 20 48 45  double FORMAT HE
6200: 58 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72  X.**.** Call mpr
6210: 69 6e 74 66 20 77 69 74 68 20 61 20 73 69 6e 67  intf with a sing
6220: 6c 65 20 64 6f 75 62 6c 65 20 61 72 67 75 6d 65  le double argume
6230: 6e 74 20 77 68 69 63 68 20 69 73 20 64 65 72 69  nt which is deri
6240: 76 65 64 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20  ved from the.** 
6250: 68 65 78 61 64 65 63 69 6d 61 6c 20 65 6e 63 6f  hexadecimal enco
6260: 64 69 6e 67 20 6f 66 20 61 6e 20 49 45 45 45 20  ding of an IEEE 
6270: 64 6f 75 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69  double..*/.stati
6280: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70  c int sqlite3_mp
6290: 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65 28  rintf_hexdouble(
62a0: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
62b0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
62c0: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
62d0: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
62e0: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
62f0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
6300: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
6310: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
6320: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
6330: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
6340: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
6350: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
6360: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72  ent */.){.  char
6370: 20 2a 7a 3b 0a 20 20 64 6f 75 62 6c 65 20 72 3b   *z;.  double r;
6380: 0a 20 20 75 6e 73 69 67 6e 65 64 20 20 78 31 2c  .  unsigned  x1,
6390: 20 78 32 3b 0a 20 20 6c 6f 6e 67 20 6c 6f 6e 67   x2;.  long long
63a0: 20 75 6e 73 69 67 6e 65 64 20 64 3b 0a 20 20 69   unsigned d;.  i
63b0: 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  f( argc!=3 ){.  
63c0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
63d0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
63e0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
63f0: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
6400: 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41  ,.       " FORMA
6410: 54 20 53 54 52 49 4e 47 5c 22 22 2c 20 30 29 3b  T STRING\"", 0);
6420: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
6430: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
6440: 20 73 73 63 61 6e 66 28 61 72 67 76 5b 32 5d 2c   sscanf(argv[2],
6450: 20 22 25 30 38 78 25 30 38 78 22 2c 20 26 78 32   "%08x%08x", &x2
6460: 2c 20 26 78 31 29 21 3d 32 20 29 7b 0a 20 20 20  , &x1)!=2 ){.   
6470: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
6480: 74 28 69 6e 74 65 72 70 2c 20 22 32 6e 64 20 61  t(interp, "2nd a
6490: 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64 20 62  rgument should b
64a0: 65 20 31 36 2d 63 68 61 72 61 63 74 65 72 73 20  e 16-characters 
64b0: 6f 66 20 68 65 78 22 2c 20 30 29 3b 0a 20 20 20  of hex", 0);.   
64c0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
64d0: 52 3b 0a 20 20 7d 0a 20 20 64 20 3d 20 78 32 3b  R;.  }.  d = x2;
64e0: 0a 20 20 64 20 3d 20 28 64 3c 3c 33 32 29 20 2b  .  d = (d<<32) +
64f0: 20 78 31 3b 0a 20 20 6d 65 6d 63 70 79 28 26 72   x1;.  memcpy(&r
6500: 2c 20 26 64 2c 20 73 69 7a 65 6f 66 28 72 29 29  , &d, sizeof(r))
6510: 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f  ;.  z = sqlite3_
6520: 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c  mprintf(argv[1],
6530: 20 72 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e   r);.  Tcl_Appen
6540: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
6550: 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  z, 0);.  sqlite3
6560: 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75  _free(z);.  retu
6570: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
6580: 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
6590: 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 20 4e 20  e_malloc_fail N 
65a0: 20 3f 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41   ?REPEAT-INTERVA
65b0: 4c 3f 0a 2a 2a 0a 2a 2a 20 52 69 67 20 73 71 6c  L?.**.** Rig sql
65c0: 69 74 65 4d 61 6c 6c 6f 63 28 29 20 74 6f 20 66  iteMalloc() to f
65d0: 61 69 6c 20 6f 6e 20 74 68 65 20 4e 2d 74 68 20  ail on the N-th 
65e0: 63 61 6c 6c 20 61 6e 64 20 65 76 65 72 79 20 52  call and every R
65f0: 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20 63  EPEAT-INTERVAL c
6600: 61 6c 6c 0a 2a 2a 20 61 66 74 65 72 20 74 68 61  all.** after tha
6610: 74 2e 20 20 49 66 20 52 45 50 45 41 54 2d 49 4e  t.  If REPEAT-IN
6620: 54 45 52 56 41 4c 20 69 73 20 30 20 6f 72 20 69  TERVAL is 0 or i
6630: 73 20 6f 6d 69 74 74 65 64 2c 20 74 68 65 6e 20  s omitted, then 
6640: 6f 6e 6c 79 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  only a single.**
6650: 20 6d 61 6c 6c 6f 63 20 77 69 6c 6c 20 66 61 69   malloc will fai
6660: 6c 2e 20 20 49 66 20 52 45 50 45 41 54 2d 49 4e  l.  If REPEAT-IN
6670: 54 45 52 56 41 4c 20 69 73 20 31 20 74 68 65 6e  TERVAL is 1 then
6680: 20 61 6c 6c 20 6d 61 6c 6c 6f 63 73 20 61 66 74   all mallocs aft
6690: 65 72 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20  er the.** first 
66a0: 66 61 69 6c 75 72 65 20 77 69 6c 6c 20 63 6f 6e  failure will con
66b0: 74 69 6e 75 65 20 74 6f 20 66 61 69 6c 20 6f 6e  tinue to fail on
66c0: 20 65 76 65 72 79 20 63 61 6c 6c 2e 20 20 49 66   every call.  If
66d0: 20 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c   REPEAT-INTERVAL
66e0: 20 69 73 0a 2a 2a 20 32 20 74 68 65 6e 20 65 76   is.** 2 then ev
66f0: 65 72 79 20 6f 74 68 65 72 20 6d 61 6c 6c 6f 63  ery other malloc
6700: 20 77 69 6c 6c 20 66 61 69 6c 2e 20 20 41 6e 64   will fail.  And
6710: 20 73 6f 20 66 6f 72 74 68 2e 0a 2a 2a 0a 2a 2a   so forth..**.**
6720: 20 54 75 72 6e 20 6f 66 66 20 74 68 69 73 20 6d   Turn off this m
6730: 65 63 68 61 6e 69 73 6d 20 61 6e 64 20 72 65 73  echanism and res
6740: 65 74 20 74 68 65 20 73 71 6c 69 74 65 33 54 68  et the sqlite3Th
6750: 72 65 61 64 44 61 74 61 28 29 2d 3e 6d 61 6c 6c  readData()->mall
6760: 6f 63 46 61 69 6c 65 64 20 0a 2a 2a 20 76 61 72  ocFailed .** var
6770: 69 61 62 6c 65 20 69 66 20 4e 3d 3d 30 2e 0a 2a  iable if N==0..*
6780: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
6790: 4d 45 4d 44 45 42 55 47 0a 73 74 61 74 69 63 20  MEMDEBUG.static 
67a0: 69 6e 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f  int sqlite_mallo
67b0: 63 5f 66 61 69 6c 28 0a 20 20 76 6f 69 64 20 2a  c_fail(.  void *
67c0: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
67d0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
67e0: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
67f0: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
6800: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
6810: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
6820: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
6830: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
6840: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
6850: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
6860: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
6870: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
6880: 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20  .  int n;.  int 
6890: 72 65 70 3b 0a 20 20 69 66 28 20 61 72 67 63 21  rep;.  if( argc!
68a0: 3d 32 20 26 26 20 61 72 67 63 21 3d 33 20 29 7b  =2 && argc!=3 ){
68b0: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
68c0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
68d0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
68e0: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
68f0: 5b 30 5d 2c 20 22 20 4e 5c 22 22 2c 20 30 29 3b  [0], " N\"", 0);
6900: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
6910: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
6920: 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65   Tcl_GetInt(inte
6930: 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 6e 29  rp, argv[1], &n)
6940: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
6950: 52 4f 52 3b 0a 20 20 69 66 28 20 61 72 67 63 3d  ROR;.  if( argc=
6960: 3d 33 20 29 7b 0a 20 20 20 20 69 66 28 20 54 63  =3 ){.    if( Tc
6970: 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c  l_GetInt(interp,
6980: 20 61 72 67 76 5b 32 5d 2c 20 26 72 65 70 29 20   argv[2], &rep) 
6990: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
69a0: 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  OR;.  }else{.   
69b0: 20 72 65 70 20 3d 20 30 3b 0a 20 20 7d 0a 20 20   rep = 0;.  }.  
69c0: 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46  sqlite3_iMallocF
69d0: 61 69 6c 20 3d 20 6e 3b 0a 20 20 73 71 6c 69 74  ail = n;.  sqlit
69e0: 65 33 5f 69 4d 61 6c 6c 6f 63 52 65 73 65 74 20  e3_iMallocReset 
69f0: 3d 20 72 65 70 3b 0a 20 20 72 65 74 75 72 6e 20  = rep;.  return 
6a00: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  TCL_OK;.}.#endif
6a10: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
6a20: 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61  qlite_malloc_sta
6a30: 74 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  t.**.** Return t
6a40: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 72 69  he number of pri
6a50: 6f 72 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69  or calls to sqli
6a60: 74 65 4d 61 6c 6c 6f 63 28 29 20 61 6e 64 20 73  teMalloc() and s
6a70: 71 6c 69 74 65 46 72 65 65 28 29 2e 0a 2a 2f 0a  qliteFree()..*/.
6a80: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
6a90: 4d 44 45 42 55 47 0a 73 74 61 74 69 63 20 69 6e  MDEBUG.static in
6aa0: 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  t sqlite_malloc_
6ab0: 73 74 61 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  stat(.  void *No
6ac0: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
6ad0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
6ae0: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
6af0: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
6b00: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
6b10: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
6b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6b30: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
6b40: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
6b50: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
6b60: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
6b70: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
6b80: 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b   char zBuf[200];
6b90: 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c  .  sprintf(zBuf,
6ba0: 20 22 25 64 20 25 64 20 25 64 22 2c 20 73 71 6c   "%d %d %d", sql
6bb0: 69 74 65 33 5f 6e 4d 61 6c 6c 6f 63 2c 73 71 6c  ite3_nMalloc,sql
6bc0: 69 74 65 33 5f 6e 46 72 65 65 2c 73 71 6c 69 74  ite3_nFree,sqlit
6bd0: 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 29 3b  e3_iMallocFail);
6be0: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
6bf0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
6c00: 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
6c10: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
6c20: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 6d  This function im
6c30: 70 6c 65 6d 65 6e 74 73 20 61 20 54 63 6c 20 63  plements a Tcl c
6c40: 6f 6d 6d 61 6e 64 20 74 68 61 74 20 6d 61 79 20  ommand that may 
6c50: 62 65 20 69 6e 76 6f 6b 65 64 20 75 73 69 6e 67  be invoked using
6c60: 20 61 6e 79 20 6f 66 0a 2a 2a 20 74 68 65 20 66   any of.** the f
6c70: 6f 75 72 20 66 6f 72 6d 73 20 65 6e 75 6d 65 72  our forms enumer
6c80: 61 74 65 64 20 62 65 6c 6f 77 2e 0a 2a 2a 0a 2a  ated below..**.*
6c90: 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  * sqlite_malloc_
6ca0: 6f 75 74 73 74 61 6e 64 69 6e 67 0a 2a 2a 20 20  outstanding.**  
6cb0: 20 20 20 52 65 74 75 72 6e 20 61 20 73 75 6d 6d     Return a summ
6cc0: 61 72 79 20 6f 66 20 61 6c 6c 20 75 6e 66 72 65  ary of all unfre
6cd0: 65 64 20 62 6c 6f 63 6b 73 20 6f 66 20 6d 65 6d  ed blocks of mem
6ce0: 6f 72 79 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ory allocated by
6cf0: 20 74 68 65 0a 2a 2a 20 20 20 20 20 63 75 72 72   the.**     curr
6d00: 65 6e 74 20 74 68 72 65 61 64 2e 20 53 65 65 20  ent thread. See 
6d10: 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66  comments above f
6d20: 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 4f  unction sqlite3O
6d30: 75 74 73 74 61 6e 64 69 6e 67 4d 61 6c 6c 6f 63  utstandingMalloc
6d40: 73 28 29 20 0a 2a 2a 20 20 20 20 20 69 6e 20 75  s() .**     in u
6d50: 74 69 6c 2e 63 20 66 6f 72 20 61 20 64 65 73 63  til.c for a desc
6d60: 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 72  ription of the r
6d70: 65 74 75 72 6e 65 64 20 76 61 6c 75 65 2e 0a 2a  eturned value..*
6d80: 2a 0a 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c  *.** sqlite_mall
6d90: 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d  oc_outstanding -
6da0: 62 79 74 65 73 0a 2a 2a 20 20 20 20 20 52 65 74  bytes.**     Ret
6db0: 75 72 6e 20 74 68 65 20 74 6f 74 61 6c 20 61 6d  urn the total am
6dc0: 6f 75 6e 74 20 6f 66 20 75 6e 66 72 65 65 64 20  ount of unfreed 
6dd0: 6d 65 6d 6f 72 79 20 28 69 6e 20 62 79 74 65 73  memory (in bytes
6de0: 29 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a  ) allocated by .
6df0: 2a 2a 20 20 20 20 20 74 68 69 73 20 74 68 72 65  **     this thre
6e00: 61 64 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ad..**.** sqlite
6e10: 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64  _malloc_outstand
6e20: 69 6e 67 20 2d 6d 61 78 62 79 74 65 73 0a 2a 2a  ing -maxbytes.**
6e30: 20 20 20 20 20 52 65 74 75 72 6e 20 74 68 65 20       Return the 
6e40: 6d 61 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f  maximum amount o
6e50: 66 20 64 79 6e 61 6d 69 63 20 6d 65 6d 6f 72 79  f dynamic memory
6e60: 20 69 6e 20 75 73 65 20 61 74 20 6f 6e 65 20 74   in use at one t
6e70: 69 6d 65 20 0a 2a 2a 20 20 20 20 20 62 79 20 74  ime .**     by t
6e80: 68 69 73 20 74 68 72 65 61 64 2e 0a 2a 2a 0a 2a  his thread..**.*
6e90: 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  * sqlite_malloc_
6ea0: 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d 63 6c 65  outstanding -cle
6eb0: 61 72 6d 61 78 62 79 74 65 73 0a 2a 2a 20 20 20  armaxbytes.**   
6ec0: 20 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20    Set the value 
6ed0: 72 65 74 75 72 6e 65 64 20 62 79 20 5b 73 71 6c  returned by [sql
6ee0: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74  ite_malloc_outst
6ef0: 61 6e 64 69 6e 67 20 2d 6d 61 78 62 79 74 65 73  anding -maxbytes
6f00: 5d 0a 2a 2a 20 20 20 20 20 74 6f 20 74 68 65 20  ].**     to the 
6f10: 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66  current value of
6f20: 20 5b 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f   [sqlite_malloc_
6f30: 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d 62 79 74  outstanding -byt
6f40: 65 73 5d 2e 20 0a 2a 2f 0a 73 74 61 74 69 63 20  es]. .*/.static 
6f50: 69 6e 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f  int sqlite_mallo
6f60: 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 28 0a 20  c_outstanding(. 
6f70: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
6f80: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
6f90: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
6fa0: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
6fb0: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
6fc0: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
6fd0: 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  d */.  int objc,
6fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6ff0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
7000: 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62  ents */.  Tcl_Ob
7010: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20  j *CONST objv[] 
7020: 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
7030: 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 65 78  ments */.){.  ex
7040: 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
7050: 4f 75 74 73 74 61 6e 64 69 6e 67 4d 61 6c 6c 6f  OutstandingMallo
7060: 63 73 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  cs(Tcl_Interp *i
7070: 6e 74 65 72 70 29 3b 0a 0a 23 69 66 20 64 65 66  nterp);..#if def
7080: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
7090: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
70a0: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 20 26  LITE_MEMDEBUG) &
70b0: 26 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  & SQLITE_MEMDEBU
70c0: 47 3e 31 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d  G>1.  if( objc==
70d0: 32 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  2 ){.    const c
70e0: 68 61 72 20 2a 7a 41 72 67 20 3d 20 54 63 6c 5f  har *zArg = Tcl_
70f0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
7100: 5d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ]);.#ifdef SQLIT
7110: 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f  E_ENABLE_MEMORY_
7120: 4d 41 4e 41 47 45 4d 45 4e 54 0a 20 20 20 20 54  MANAGEMENT.    T
7130: 68 72 65 61 64 44 61 74 61 20 63 6f 6e 73 74 20  hreadData const 
7140: 2a 70 54 64 20 3d 20 73 71 6c 69 74 65 33 54 68  *pTd = sqlite3Th
7150: 72 65 61 64 44 61 74 61 52 65 61 64 4f 6e 6c 79  readDataReadOnly
7160: 28 29 3b 0a 20 20 20 20 69 66 28 20 30 3d 3d 73  ();.    if( 0==s
7170: 74 72 63 6d 70 28 7a 41 72 67 2c 20 22 2d 62 79  trcmp(zArg, "-by
7180: 74 65 73 22 29 20 29 7b 0a 20 20 20 20 20 20 54  tes") ){.      T
7190: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
71a0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49  interp, Tcl_NewI
71b0: 6e 74 4f 62 6a 28 70 54 64 2d 3e 6e 41 6c 6c 6f  ntObj(pTd->nAllo
71c0: 63 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  c));.    }else i
71d0: 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 7a 41 72  f( 0==strcmp(zAr
71e0: 67 2c 20 22 2d 63 6c 65 61 72 6d 61 78 62 79 74  g, "-clearmaxbyt
71f0: 65 73 22 29 20 29 7b 0a 20 20 20 20 20 20 73 71  es") ){.      sq
7200: 6c 69 74 65 33 5f 6e 4d 61 78 41 6c 6c 6f 63 20  lite3_nMaxAlloc 
7210: 3d 20 70 54 64 2d 3e 6e 41 6c 6c 6f 63 3b 0a 20  = pTd->nAlloc;. 
7220: 20 20 20 7d 65 6c 73 65 20 0a 23 65 6e 64 69 66     }else .#endif
7230: 0a 20 20 20 20 69 66 28 20 30 3d 3d 73 74 72 63  .    if( 0==strc
7240: 6d 70 28 7a 41 72 67 2c 20 22 2d 6d 61 78 62 79  mp(zArg, "-maxby
7250: 74 65 73 22 29 20 29 7b 0a 20 20 20 20 20 20 54  tes") ){.      T
7260: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
7270: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 57  interp, Tcl_NewW
7280: 69 64 65 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65  ideIntObj(sqlite
7290: 33 5f 6e 4d 61 78 41 6c 6c 6f 63 29 29 3b 0a 20  3_nMaxAlloc));. 
72a0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
72b0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
72c0: 28 69 6e 74 65 72 70 2c 20 22 62 61 64 20 6f 70  (interp, "bad op
72d0: 74 69 6f 6e 20 5c 22 22 2c 20 7a 41 72 67 2c 20  tion \"", zArg, 
72e0: 0a 20 20 20 20 20 20 20 20 22 5c 22 3a 20 6d 75  .        "\": mu
72f0: 73 74 20 62 65 20 2d 62 79 74 65 73 2c 20 2d 6d  st be -bytes, -m
7300: 61 78 62 79 74 65 73 20 6f 72 20 2d 63 6c 65 61  axbytes or -clea
7310: 72 6d 61 78 62 79 74 65 73 22 2c 20 30 0a 20 20  rmaxbytes", 0.  
7320: 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72 65 74      );.      ret
7330: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
7340: 20 20 20 7d 0a 0a 20 20 20 20 72 65 74 75 72 6e     }..    return
7350: 20 54 43 4c 5f 4f 4b 3b 0a 20 20 7d 0a 0a 20 20   TCL_OK;.  }..  
7360: 69 66 28 20 6f 62 6a 63 21 3d 31 20 29 7b 0a 20  if( objc!=1 ){. 
7370: 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
7380: 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
7390: 62 6a 76 2c 20 22 3f 2d 62 79 74 65 73 3f 22 29  bjv, "?-bytes?")
73a0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
73b0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72  _ERROR;.  }..  r
73c0: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 4f 75 74  eturn sqlite3Out
73d0: 73 74 61 6e 64 69 6e 67 4d 61 6c 6c 6f 63 73 28  standingMallocs(
73e0: 69 6e 74 65 72 70 29 3b 0a 23 65 6c 73 65 0a 20  interp);.#else. 
73f0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
7400: 23 65 6e 64 69 66 0a 7d 0a 23 65 6e 64 69 66 0a  #endif.}.#endif.
7410: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
7420: 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61  lite3_enable_sha
7430: 72 65 64 5f 63 61 63 68 65 20 20 20 20 20 20 42  red_cache      B
7440: 4f 4f 4c 45 41 4e 0a 2a 2a 0a 2a 2f 0a 23 69 66  OOLEAN.**.*/.#if
7450: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
7460: 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
7470: 48 45 29 0a 73 74 61 74 69 63 20 69 6e 74 20 74  HE).static int t
7480: 65 73 74 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65  est_enable_share
7490: 64 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20  d(.  ClientData 
74a0: 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50  clientData, /* P
74b0: 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ointer to sqlite
74c0: 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e  3_enable_XXX fun
74d0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49  ction */.  Tcl_I
74e0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
74f0: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
7500: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
7510: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
7520: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63  nd */.  int objc
7530: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
7540: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
7550: 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f  ments */.  Tcl_O
7560: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
7570: 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67    /* Command arg
7580: 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69  uments */.){.  i
7590: 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 65 6e 61  nt rc;.  int ena
75a0: 62 6c 65 3b 0a 20 20 69 6e 74 20 72 65 74 20 3d  ble;.  int ret =
75b0: 20 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21   0;..  if( objc!
75c0: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =2 ){.    Tcl_Wr
75d0: 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
75e0: 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 42 4f 4f  p, 1, objv, "BOO
75f0: 4c 45 41 4e 22 29 3b 0a 20 20 20 20 72 65 74 75  LEAN");.    retu
7600: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
7610: 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 42  }.  if( Tcl_GetB
7620: 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e  ooleanFromObj(in
7630: 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26  terp, objv[1], &
7640: 65 6e 61 62 6c 65 29 20 29 7b 0a 20 20 20 20 72  enable) ){.    r
7650: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7660: 0a 20 20 7d 0a 20 20 72 65 74 20 3d 20 73 71 6c  .  }.  ret = sql
7670: 69 74 65 33 54 68 72 65 61 64 44 61 74 61 52 65  ite3ThreadDataRe
7680: 61 64 4f 6e 6c 79 28 29 2d 3e 75 73 65 53 68 61  adOnly()->useSha
7690: 72 65 64 44 61 74 61 3b 0a 20 20 72 63 20 3d 20  redData;.  rc = 
76a0: 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73  sqlite3_enable_s
76b0: 68 61 72 65 64 5f 63 61 63 68 65 28 65 6e 61 62  hared_cache(enab
76c0: 6c 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  le);.  if( rc!=S
76d0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
76e0: 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
76f0: 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 73 71  terp, (char *)sq
7700: 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 2c  lite3ErrStr(rc),
7710: 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20   TCL_STATIC);.  
7720: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
7730: 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65  OR;.  }.  Tcl_Se
7740: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
7750: 70 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65 61  p, Tcl_NewBoolea
7760: 6e 4f 62 6a 28 72 65 74 29 29 3b 0a 20 20 72 65  nObj(ret));.  re
7770: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23  turn TCL_OK;.}.#
7780: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  endif../*.** Usa
7790: 67 65 3a 20 73 71 6c 69 74 65 33 5f 6c 69 62 76  ge: sqlite3_libv
77a0: 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 0a 2a 2a  ersion_number.**
77b0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
77c0: 65 73 74 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e  est_libversion_n
77d0: 75 6d 62 65 72 28 0a 20 20 43 6c 69 65 6e 74 44  umber(.  ClientD
77e0: 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20  ata clientData, 
77f0: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 71  /* Pointer to sq
7800: 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58  lite3_enable_XXX
7810: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54   function */.  T
7820: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
7830: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
7840: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
7850: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
7860: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
7870: 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20  objc,           
7880: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
7890: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54  arguments */.  T
78a0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
78b0: 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64  jv[]  /* Command
78c0: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b   arguments */.){
78d0: 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
78e0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
78f0: 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65  NewIntObj(sqlite
7900: 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d  3_libversion_num
7910: 62 65 72 28 29 29 29 3b 0a 20 20 72 65 74 75 72  ber()));.  retur
7920: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
7930: 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
7940: 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d  3_table_column_m
7950: 65 74 61 64 61 74 61 20 44 42 20 64 62 6e 61 6d  etadata DB dbnam
7960: 65 20 74 62 6c 6e 61 6d 65 20 63 6f 6c 6e 61 6d  e tblname colnam
7970: 65 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  e.**.*/.#ifdef S
7980: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
7990: 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 73 74 61  UMN_METADATA.sta
79a0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 74 61 62  tic int test_tab
79b0: 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
79c0: 74 61 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61  ta(.  ClientData
79d0: 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20   clientData, /* 
79e0: 50 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74  Pointer to sqlit
79f0: 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75  e3_enable_XXX fu
7a00: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f  nction */.  Tcl_
7a10: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
7a20: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
7a30: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
7a40: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
7a50: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a  and */.  int obj
7a60: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
7a70: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
7a80: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f  uments */.  Tcl_
7a90: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
7aa0: 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72  ]  /* Command ar
7ab0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20  guments */.){.  
7ac0: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63  sqlite3 *db;.  c
7ad0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a  onst char *zDb;.
7ae0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
7af0: 62 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  bl;.  const char
7b00: 20 2a 7a 43 6f 6c 3b 0a 20 20 69 6e 74 20 72 63   *zCol;.  int rc
7b10: 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 52 65  ;.  Tcl_Obj *pRe
7b20: 74 3b 0a 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  t;..  const char
7b30: 20 2a 7a 44 61 74 61 74 79 70 65 3b 0a 20 20 63   *zDatatype;.  c
7b40: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  onst char *zColl
7b50: 73 65 71 3b 0a 20 20 69 6e 74 20 6e 6f 74 6e 75  seq;.  int notnu
7b60: 6c 6c 3b 0a 20 20 69 6e 74 20 70 72 69 6d 61 72  ll;.  int primar
7b70: 79 6b 65 79 3b 0a 20 20 69 6e 74 20 61 75 74 6f  ykey;.  int auto
7b80: 69 6e 63 72 65 6d 65 6e 74 3b 0a 0a 20 20 69 66  increment;..  if
7b90: 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20  ( objc!=5 ){.   
7ba0: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
7bb0: 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
7bc0: 76 2c 20 22 44 42 20 64 62 6e 61 6d 65 20 74 62  v, "DB dbname tb
7bd0: 6c 6e 61 6d 65 20 63 6f 6c 6e 61 6d 65 22 29 3b  lname colname");
7be0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
7bf0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
7c00: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
7c10: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
7c20: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
7c30: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
7c40: 45 52 52 4f 52 3b 0a 20 20 7a 44 62 20 3d 20 54  ERROR;.  zDb = T
7c50: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
7c60: 76 5b 32 5d 29 3b 0a 20 20 7a 54 62 6c 20 3d 20  v[2]);.  zTbl = 
7c70: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
7c80: 6a 76 5b 33 5d 29 3b 0a 20 20 7a 43 6f 6c 20 3d  jv[3]);.  zCol =
7c90: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
7ca0: 62 6a 76 5b 34 5d 29 3b 0a 0a 20 20 69 66 28 20  bjv[4]);..  if( 
7cb0: 73 74 72 6c 65 6e 28 7a 44 62 29 3d 3d 30 20 29  strlen(zDb)==0 )
7cc0: 20 7a 44 62 20 3d 20 30 3b 0a 0a 20 20 72 63 20   zDb = 0;..  rc 
7cd0: 3d 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f  = sqlite3_table_
7ce0: 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28  column_metadata(
7cf0: 64 62 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 7a  db, zDb, zTbl, z
7d00: 43 6f 6c 2c 20 0a 20 20 20 20 20 20 26 7a 44 61  Col, .      &zDa
7d10: 74 61 74 79 70 65 2c 20 26 7a 43 6f 6c 6c 73 65  tatype, &zCollse
7d20: 71 2c 20 26 6e 6f 74 6e 75 6c 6c 2c 20 26 70 72  q, &notnull, &pr
7d30: 69 6d 61 72 79 6b 65 79 2c 20 26 61 75 74 6f 69  imarykey, &autoi
7d40: 6e 63 72 65 6d 65 6e 74 29 3b 0a 0a 20 20 69 66  ncrement);..  if
7d50: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
7d60: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
7d70: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
7d80: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64  sqlite3_errmsg(d
7d90: 62 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  b), 0);.    retu
7da0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
7db0: 7d 0a 0a 20 20 70 52 65 74 20 3d 20 54 63 6c 5f  }..  pRet = Tcl_
7dc0: 4e 65 77 4f 62 6a 28 29 3b 0a 20 20 54 63 6c 5f  NewObj();.  Tcl_
7dd0: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
7de0: 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63  ment(0, pRet, Tc
7df0: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a  l_NewStringObj(z
7e00: 44 61 74 61 74 79 70 65 2c 20 2d 31 29 29 3b 0a  Datatype, -1));.
7e10: 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70    Tcl_ListObjApp
7e20: 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52  endElement(0, pR
7e30: 65 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  et, Tcl_NewStrin
7e40: 67 4f 62 6a 28 7a 43 6f 6c 6c 73 65 71 2c 20 2d  gObj(zCollseq, -
7e50: 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  1));.  Tcl_ListO
7e60: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
7e70: 30 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77  0, pRet, Tcl_New
7e80: 49 6e 74 4f 62 6a 28 6e 6f 74 6e 75 6c 6c 29 29  IntObj(notnull))
7e90: 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
7ea0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20  ppendElement(0, 
7eb0: 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  pRet, Tcl_NewInt
7ec0: 4f 62 6a 28 70 72 69 6d 61 72 79 6b 65 79 29 29  Obj(primarykey))
7ed0: 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
7ee0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20  ppendElement(0, 
7ef0: 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  pRet, Tcl_NewInt
7f00: 4f 62 6a 28 61 75 74 6f 69 6e 63 72 65 6d 65 6e  Obj(autoincremen
7f10: 74 29 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62  t));.  Tcl_SetOb
7f20: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
7f30: 70 52 65 74 29 3b 0a 0a 20 20 72 65 74 75 72 6e  pRet);..  return
7f40: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69   TCL_OK;.}.#endi
7f50: 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  f../*.** Usage: 
7f60: 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
7f70: 65 6e 73 69 6f 6e 20 44 42 2d 48 41 4e 44 4c 45  ension DB-HANDLE
7f80: 20 46 49 4c 45 20 3f 50 52 4f 43 3f 0a 2a 2f 0a   FILE ?PROC?.*/.
7f90: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
7fa0: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0a  load_extension(.
7fb0: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69    ClientData cli
7fc0: 65 6e 74 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20  entData, /* Not 
7fd0: 75 73 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  used */.  Tcl_In
7fe0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
7ff0: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
8000: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
8010: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
8020: 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  d */.  int objc,
8030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8040: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
8050: 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62  ents */.  Tcl_Ob
8060: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20  j *CONST objv[] 
8070: 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
8080: 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63  ments */.){.  Tc
8090: 6c 5f 43 6d 64 49 6e 66 6f 20 63 6d 64 49 6e 66  l_CmdInfo cmdInf
80a0: 6f 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  o;.  sqlite3 *db
80b0: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68  ;.  int rc;.  ch
80c0: 61 72 20 2a 7a 44 62 3b 0a 20 20 63 68 61 72 20  ar *zDb;.  char 
80d0: 2a 7a 46 69 6c 65 3b 0a 20 20 63 68 61 72 20 2a  *zFile;.  char *
80e0: 7a 50 72 6f 63 20 3d 20 30 3b 0a 20 20 63 68 61  zProc = 0;.  cha
80f0: 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 0a 20 20  r *zErr = 0;..  
8100: 69 66 28 20 6f 62 6a 63 21 3d 34 20 26 26 20 6f  if( objc!=4 && o
8110: 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
8120: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
8130: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
8140: 22 44 42 2d 48 41 4e 44 4c 45 20 46 49 4c 45 20  "DB-HANDLE FILE 
8150: 3f 50 52 4f 43 3f 22 29 3b 0a 20 20 20 20 72 65  ?PROC?");.    re
8160: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
8170: 20 20 7d 0a 20 20 7a 44 62 20 3d 20 54 63 6c 5f    }.  zDb = Tcl_
8180: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
8190: 5d 29 3b 0a 20 20 7a 46 69 6c 65 20 3d 20 54 63  ]);.  zFile = Tc
81a0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
81b0: 5b 32 5d 29 3b 0a 20 20 69 66 28 20 6f 62 6a 63  [2]);.  if( objc
81c0: 3d 3d 34 20 29 7b 0a 20 20 20 20 7a 50 72 6f 63  ==4 ){.    zProc
81d0: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
81e0: 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 7d 0a 0a  (objv[3]);.  }..
81f0: 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65    /* Extract the
8200: 20 43 20 64 61 74 61 62 61 73 65 20 68 61 6e 64   C database hand
8210: 6c 65 20 66 72 6f 6d 20 74 68 65 20 54 63 6c 20  le from the Tcl 
8220: 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65 20 2a 2f 0a  command name */.
8230: 20 20 69 66 28 20 21 54 63 6c 5f 47 65 74 43 6f    if( !Tcl_GetCo
8240: 6d 6d 61 6e 64 49 6e 66 6f 28 69 6e 74 65 72 70  mmandInfo(interp
8250: 2c 20 7a 44 62 2c 20 26 63 6d 64 49 6e 66 6f 29  , zDb, &cmdInfo)
8260: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
8270: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
8280: 20 22 63 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f   "command not fo
8290: 75 6e 64 3a 20 22 2c 20 7a 44 62 2c 20 28 63 68  und: ", zDb, (ch
82a0: 61 72 2a 29 30 29 3b 0a 20 20 20 20 72 65 74 75  ar*)0);.    retu
82b0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
82c0: 7d 0a 20 20 64 62 20 3d 20 28 28 73 74 72 75 63  }.  db = ((struc
82d0: 74 20 53 71 6c 69 74 65 44 62 2a 29 63 6d 64 49  t SqliteDb*)cmdI
82e0: 6e 66 6f 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74  nfo.objClientDat
82f0: 61 29 2d 3e 64 62 3b 0a 20 20 61 73 73 65 72 74  a)->db;.  assert
8300: 28 64 62 29 3b 0a 0a 20 20 2f 2a 20 43 61 6c 6c  (db);..  /* Call
8310: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
8320: 43 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 61  C function. If a
8330: 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  n error occurs, 
8340: 73 65 74 20 72 63 20 74 6f 20 0a 20 20 2a 2a 20  set rc to .  ** 
8350: 54 43 4c 5f 45 52 52 4f 52 20 61 6e 64 20 6c 6f  TCL_ERROR and lo
8360: 61 64 20 61 6e 79 20 65 72 72 6f 72 20 73 74 72  ad any error str
8370: 69 6e 67 20 69 6e 74 6f 20 74 68 65 20 69 6e 74  ing into the int
8380: 65 72 70 72 65 74 65 72 2e 20 49 66 20 6e 6f 20  erpreter. If no 
8390: 0a 20 20 2a 2a 20 65 72 72 6f 72 20 6f 63 63 75  .  ** error occu
83a0: 72 73 2c 20 73 65 74 20 72 63 20 74 6f 20 54 43  rs, set rc to TC
83b0: 4c 5f 4f 4b 2e 0a 20 20 2a 2f 0a 20 20 72 63 20  L_OK..  */.  rc 
83c0: 3d 20 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65  = sqlite3_load_e
83d0: 78 74 65 6e 73 69 6f 6e 28 64 62 2c 20 7a 46 69  xtension(db, zFi
83e0: 6c 65 2c 20 7a 50 72 6f 63 2c 20 26 7a 45 72 72  le, zProc, &zErr
83f0: 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
8400: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63  ITE_OK ){.    Tc
8410: 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
8420: 72 70 2c 20 7a 45 72 72 20 3f 20 7a 45 72 72 20  rp, zErr ? zErr 
8430: 3a 20 22 22 2c 20 54 43 4c 5f 56 4f 4c 41 54 49  : "", TCL_VOLATI
8440: 4c 45 29 3b 0a 20 20 20 20 72 63 20 3d 20 54 43  LE);.    rc = TC
8450: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65  L_ERROR;.  }else
8460: 7b 0a 20 20 20 20 72 63 20 3d 20 54 43 4c 5f 4f  {.    rc = TCL_O
8470: 4b 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  K;.  }.  sqlite3
8480: 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 0a 20 20  _free(zErr);..  
8490: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a  return rc;.}../*
84a0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
84b0: 74 65 5f 61 62 6f 72 74 0a 2a 2a 0a 2a 2a 20 53  te_abort.**.** S
84c0: 68 75 74 64 6f 77 6e 20 74 68 65 20 70 72 6f 63  hutdown the proc
84d0: 65 73 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  ess immediately.
84e0: 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20 61 20    This is not a 
84f0: 63 6c 65 61 6e 20 73 68 75 74 64 6f 77 6e 2e 0a  clean shutdown..
8500: 2a 2a 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ** This command 
8510: 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20  is used to test 
8520: 74 68 65 20 72 65 63 6f 76 65 72 61 62 69 6c 69  the recoverabili
8530: 74 79 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ty of a database
8540: 20 69 6e 0a 2a 2a 20 74 68 65 20 65 76 65 6e 74   in.** the event
8550: 20 6f 66 20 61 20 70 72 6f 67 72 61 6d 20 63 72   of a program cr
8560: 61 73 68 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ash..*/.static i
8570: 6e 74 20 73 71 6c 69 74 65 5f 61 62 6f 72 74 28  nt sqlite_abort(
8580: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
8590: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
85a0: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
85b0: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
85c0: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
85d0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
85e0: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
85f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
8600: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
8610: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
8620: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
8630: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
8640: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 61 73 73 65  ent */.){.  asse
8650: 72 74 28 20 69 6e 74 65 72 70 3d 3d 30 20 29 3b  rt( interp==0 );
8660: 20 20 20 2f 2a 20 54 68 69 73 20 77 69 6c 6c 20     /* This will 
8670: 61 6c 77 61 79 73 20 66 61 69 6c 20 2a 2f 0a 20  always fail */. 
8680: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
8690: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  }../*.** The fol
86a0: 6c 6f 77 69 6e 67 20 72 6f 75 74 69 6e 65 20 69  lowing routine i
86b0: 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64  s a user-defined
86c0: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77 68   SQL function wh
86d0: 6f 73 65 20 70 75 72 70 6f 73 65 0a 2a 2a 20 69  ose purpose.** i
86e0: 73 20 74 6f 20 74 65 73 74 20 74 68 65 20 73 71  s to test the sq
86f0: 6c 69 74 65 5f 73 65 74 5f 72 65 73 75 6c 74 28  lite_set_result(
8700: 29 20 41 50 49 2e 0a 2a 2f 0a 73 74 61 74 69 63  ) API..*/.static
8710: 20 76 6f 69 64 20 74 65 73 74 46 75 6e 63 28 73   void testFunc(s
8720: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
8730: 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 61 72 67  context, int arg
8740: 63 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  c, sqlite3_value
8750: 20 2a 2a 61 72 67 76 29 7b 0a 20 20 77 68 69 6c   **argv){.  whil
8760: 65 28 20 61 72 67 63 3e 3d 32 20 29 7b 0a 20 20  e( argc>=2 ){.  
8770: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
8780: 72 67 30 20 3d 20 28 63 68 61 72 2a 29 73 71 6c  rg0 = (char*)sql
8790: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
87a0: 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20 69 66  argv[0]);.    if
87b0: 28 20 7a 41 72 67 30 20 29 7b 0a 20 20 20 20 20  ( zArg0 ){.     
87c0: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
87d0: 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 20 22 69  trICmp(zArg0, "i
87e0: 6e 74 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20  nt") ){.        
87f0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
8800: 6e 74 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69  nt(context, sqli
8810: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72  te3_value_int(ar
8820: 67 76 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d  gv[1]));.      }
8830: 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33  else if( sqlite3
8840: 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 69  StrICmp(zArg0,"i
8850: 6e 74 36 34 22 29 3d 3d 30 20 29 7b 0a 20 20 20  nt64")==0 ){.   
8860: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
8870: 75 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78  ult_int64(contex
8880: 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
8890: 5f 69 6e 74 36 34 28 61 72 67 76 5b 31 5d 29 29  _int64(argv[1]))
88a0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
88b0: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
88c0: 28 7a 41 72 67 30 2c 22 73 74 72 69 6e 67 22 29  (zArg0,"string")
88d0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
88e0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
88f0: 78 74 28 63 6f 6e 74 65 78 74 2c 20 28 63 68 61  xt(context, (cha
8900: 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
8910: 5f 74 65 78 74 28 61 72 67 76 5b 31 5d 29 2c 20  _text(argv[1]), 
8920: 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  -1,.            
8930: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
8940: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  );.      }else i
8950: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
8960: 70 28 7a 41 72 67 30 2c 22 64 6f 75 62 6c 65 22  p(zArg0,"double"
8970: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
8980: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64  sqlite3_result_d
8990: 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 73  ouble(context, s
89a0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
89b0: 62 6c 65 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20  ble(argv[1]));. 
89c0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
89d0: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41  qlite3StrICmp(zA
89e0: 72 67 30 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29  rg0,"null")==0 )
89f0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
8a00: 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f  3_result_null(co
8a10: 6e 74 65 78 74 29 3b 0a 20 20 20 20 20 20 7d 65  ntext);.      }e
8a20: 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
8a30: 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 76 61  trICmp(zArg0,"va
8a40: 6c 75 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  lue")==0 ){.    
8a50: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
8a60: 6c 74 5f 76 61 6c 75 65 28 63 6f 6e 74 65 78 74  lt_value(context
8a70: 2c 20 61 72 67 76 5b 73 71 6c 69 74 65 33 5f 76  , argv[sqlite3_v
8a80: 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b 31 5d  alue_int(argv[1]
8a90: 29 5d 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  )]);.      }else
8aa0: 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 65  {.        goto e
8ab0: 72 72 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 20 20  rror_out;.      
8ac0: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
8ad0: 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75     goto error_ou
8ae0: 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 72 67  t;.    }.    arg
8af0: 63 20 2d 3d 20 32 3b 0a 20 20 20 20 61 72 67 76  c -= 2;.    argv
8b00: 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20 20 72 65 74   += 2;.  }.  ret
8b10: 75 72 6e 3b 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a  urn;..error_out:
8b20: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
8b30: 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c  t_error(context,
8b40: 22 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20  "first argument 
8b50: 73 68 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66  should be one of
8b60: 3a 20 22 0a 20 20 20 20 20 20 22 69 6e 74 20 69  : ".      "int i
8b70: 6e 74 36 34 20 73 74 72 69 6e 67 20 64 6f 75 62  nt64 string doub
8b80: 6c 65 20 6e 75 6c 6c 20 76 61 6c 75 65 22 2c 20  le null value", 
8b90: 2d 31 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  -1);.}../*.** Us
8ba0: 61 67 65 3a 20 20 20 73 71 6c 69 74 65 5f 72 65  age:   sqlite_re
8bb0: 67 69 73 74 65 72 5f 74 65 73 74 5f 66 75 6e 63  gister_test_func
8bc0: 74 69 6f 6e 20 20 44 42 20 20 4e 41 4d 45 0a 2a  tion  DB  NAME.*
8bd0: 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 74 68  *.** Register th
8be0: 65 20 74 65 73 74 20 53 51 4c 20 66 75 6e 63 74  e test SQL funct
8bf0: 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ion on the datab
8c00: 61 73 65 20 44 42 20 75 6e 64 65 72 20 74 68 65  ase DB under the
8c10: 20 6e 61 6d 65 20 4e 41 4d 45 2e 0a 2a 2f 0a 73   name NAME..*/.s
8c20: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 72  tatic int test_r
8c30: 65 67 69 73 74 65 72 5f 66 75 6e 63 28 0a 20 20  egister_func(.  
8c40: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
8c50: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
8c60: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
8c70: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
8c80: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
8c90: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
8ca0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
8cb0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
8cc0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
8cd0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
8ce0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
8cf0: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
8d00: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
8d10: 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   *db;.  int rc;.
8d20: 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b    if( argc!=3 ){
8d30: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
8d40: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
8d50: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
8d60: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
8d70: 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44  [0], .       " D
8d80: 42 20 46 55 4e 43 54 49 4f 4e 2d 4e 41 4d 45 22  B FUNCTION-NAME"
8d90: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
8da0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
8db0: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
8dc0: 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
8dd0: 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
8de0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
8df0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
8e00: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
8e10: 61 72 67 76 5b 32 5d 2c 20 2d 31 2c 20 53 51 4c  argv[2], -1, SQL
8e20: 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 0a 20 20  ITE_UTF8, 0, .  
8e30: 20 20 20 20 74 65 73 74 46 75 6e 63 2c 20 30 2c      testFunc, 0,
8e40: 20 30 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 30   0);.  if( rc!=0
8e50: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
8e60: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
8e70: 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
8e80: 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  c), 0);.    retu
8e90: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
8ea0: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  }.  if( sqlite3T
8eb0: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
8ec0: 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74  p, db, rc) ) ret
8ed0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
8ee0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
8ef0: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
8f00: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
8f10: 65 20 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 46  e  STMT .**.** F
8f20: 69 6e 61 6c 69 7a 65 20 61 20 73 74 61 74 65 6d  inalize a statem
8f30: 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73  ent handle..*/.s
8f40: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 66  tatic int test_f
8f50: 69 6e 61 6c 69 7a 65 28 0a 20 20 76 6f 69 64 20  inalize(.  void 
8f60: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
8f70: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
8f80: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
8f90: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
8fa0: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
8fb0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
8fc0: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71  ;.  int rc;.  sq
8fd0: 6c 69 74 65 33 20 2a 64 62 3b 0a 0a 20 20 69 66  lite3 *db;..  if
8fe0: 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
8ff0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
9000: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
9010: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
9020: 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
9030: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
9040: 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
9050: 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b  , " <STMT>", 0);
9060: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
9070: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
9080: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
9090: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
90a0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
90b0: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
90c0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
90d0: 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20  if( pStmt ){.   
90e0: 20 64 62 20 3d 20 53 74 6d 74 54 6f 44 62 28 70   db = StmtToDb(p
90f0: 53 74 6d 74 29 3b 0a 20 20 7d 0a 20 20 72 63 20  Stmt);.  }.  rc 
9100: 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  = sqlite3_finali
9110: 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 54 63 6c  ze(pStmt);.  Tcl
9120: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
9130: 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72  p, (char *)error
9140: 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
9150: 41 54 49 43 29 3b 0a 20 20 69 66 28 20 64 62 20  ATIC);.  if( db 
9160: 26 26 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  && sqlite3TestEr
9170: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
9180: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
9190: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75  CL_ERROR;.  retu
91a0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
91b0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
91c0: 74 65 33 5f 72 65 73 65 74 20 20 53 54 4d 54 20  te3_reset  STMT 
91d0: 0a 2a 2a 0a 2a 2a 20 52 65 73 65 74 20 61 20 73  .**.** Reset a s
91e0: 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e  tatement handle.
91f0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
9200: 65 73 74 5f 72 65 73 65 74 28 0a 20 20 76 6f 69  est_reset(.  voi
9210: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
9220: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
9230: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
9240: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
9250: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
9260: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
9270: 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  mt;.  int rc;.. 
9280: 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
9290: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
92a0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
92b0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
92c0: 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
92d0: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
92e0: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
92f0: 20 30 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20   0), " <STMT>", 
9300: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
9310: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
9320: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
9330: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
9340: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
9350: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
9360: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
9370: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
9380: 72 65 73 65 74 28 70 53 74 6d 74 29 3b 0a 20 20  reset(pStmt);.  
9390: 69 66 28 20 70 53 74 6d 74 20 26 26 20 73 71 6c  if( pStmt && sql
93a0: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
93b0: 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
93c0: 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 7b 0a  (pStmt), rc) ){.
93d0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
93e0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  RROR;.  }.  Tcl_
93f0: 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
9400: 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e  , (char *)errorN
9410: 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  ame(rc), TCL_STA
9420: 54 49 43 29 3b 0a 2f 2a 0a 20 20 69 66 28 20 72  TIC);./*.  if( r
9430: 63 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  c ){.    return 
9440: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 2a  TCL_ERROR;.  }.*
9450: 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  /.  return TCL_O
9460: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
9470: 65 3a 20 20 73 71 6c 69 74 65 33 5f 65 78 70 69  e:  sqlite3_expi
9480: 72 65 64 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20  red STMT .**.** 
9490: 52 65 74 75 72 6e 20 54 52 55 45 20 69 66 20 61  Return TRUE if a
94a0: 20 72 65 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f   recompilation o
94b0: 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
94c0: 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 2e 0a  is recommended..
94d0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
94e0: 73 74 5f 65 78 70 69 72 65 64 28 0a 20 20 76 6f  st_expired(.  vo
94f0: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
9500: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
9510: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
9520: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
9530: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
9540: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
9550: 74 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21  tmt;.  if( objc!
9560: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
9570: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
9580: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
9590: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
95a0: 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  .        Tcl_Get
95b0: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
95c0: 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54  jv[0], 0), " <ST
95d0: 4d 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  MT>", 0);.    re
95e0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
95f0: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d    }.  if( getStm
9600: 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
9610: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
9620: 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
9630: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
9640: 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62  ROR;.  Tcl_SetOb
9650: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
9660: 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65 61 6e 4f 62  Tcl_NewBooleanOb
9670: 6a 28 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65  j(sqlite3_expire
9680: 64 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65  d(pStmt)));.  re
9690: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
96a0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
96b0: 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62  lite3_transfer_b
96c0: 69 6e 64 69 6e 67 73 20 46 52 4f 4d 53 54 4d 54  indings FROMSTMT
96d0: 20 54 4f 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 54 72   TOSTMT.**.** Tr
96e0: 61 6e 73 66 65 72 20 61 6c 6c 20 62 69 6e 64 69  ansfer all bindi
96f0: 6e 67 73 20 66 72 6f 6d 20 46 52 4f 4d 53 54 4d  ngs from FROMSTM
9700: 54 20 6f 76 65 72 20 74 6f 20 54 4f 53 54 4d 54  T over to TOSTMT
9710: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
9720: 65 73 74 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e  est_transfer_bin
9730: 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  d(.  void * clie
9740: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
9750: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
9760: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
9770: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
9780: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
9790: 74 6d 74 20 2a 70 53 74 6d 74 31 2c 20 2a 70 53  tmt *pStmt1, *pS
97a0: 74 6d 74 32 3b 0a 20 20 69 66 28 20 6f 62 6a 63  tmt2;.  if( objc
97b0: 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
97c0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
97d0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
97e0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
97f0: 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
9800: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
9810: 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 46 52  bjv[0], 0), " FR
9820: 4f 4d 2d 53 54 4d 54 20 54 4f 2d 53 54 4d 54 22  OM-STMT TO-STMT"
9830: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
9840: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
9850: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
9860: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
9870: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
9880: 31 5d 29 2c 20 26 70 53 74 6d 74 31 29 29 20 72  1]), &pStmt1)) r
9890: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
98a0: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
98b0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
98c0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
98d0: 5b 32 5d 29 2c 20 26 70 53 74 6d 74 32 29 29 20  [2]), &pStmt2)) 
98e0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
98f0: 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
9900: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a 20 20  sult(interp, .  
9910: 20 20 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a     Tcl_NewIntObj
9920: 28 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65  (sqlite3_transfe
9930: 72 5f 62 69 6e 64 69 6e 67 73 28 70 53 74 6d 74  r_bindings(pStmt
9940: 31 2c 70 53 74 6d 74 32 29 29 29 3b 0a 20 20 72  1,pStmt2)));.  r
9950: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
9960: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
9970: 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 20 44  qlite3_changes D
9980: 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  B.**.** Return t
9990: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61  he number of cha
99a0: 6e 67 65 73 20 6d 61 64 65 20 74 6f 20 74 68 65  nges made to the
99b0: 20 64 61 74 61 62 61 73 65 20 62 79 20 74 68 65   database by the
99c0: 20 6c 61 73 74 20 53 51 4c 0a 2a 2a 20 65 78 65   last SQL.** exe
99d0: 63 75 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69  cution..*/.stati
99e0: 63 20 69 6e 74 20 74 65 73 74 5f 63 68 61 6e 67  c int test_chang
99f0: 65 73 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  es(.  void * cli
9a00: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
9a10: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
9a20: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
9a30: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
9a40: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  [].){.  sqlite3 
9a50: 2a 64 62 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21  *db;.  if( objc!
9a60: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
9a70: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
9a80: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
9a90: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
9aa0: 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
9ab0: 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
9ac0: 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72  " DB", 0);.    r
9ad0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
9ae0: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
9af0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
9b00: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
9b10: 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
9b20: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
9b30: 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
9b40: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
9b50: 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65  NewIntObj(sqlite
9b60: 33 5f 63 68 61 6e 67 65 73 28 64 62 29 29 29 3b  3_changes(db)));
9b70: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
9b80: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
9b90: 69 73 20 74 68 65 20 22 73 74 61 74 69 63 5f 62  is the "static_b
9ba0: 69 6e 64 5f 76 61 6c 75 65 22 20 74 68 61 74 20  ind_value" that 
9bb0: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 62 6f  variables are bo
9bc0: 75 6e 64 20 74 6f 20 77 68 65 6e 0a 2a 2a 20 74  und to when.** t
9bd0: 68 65 20 46 4c 41 47 20 6f 70 74 69 6f 6e 20 6f  he FLAG option o
9be0: 66 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 20 69  f sqlite3_bind i
9bf0: 73 20 22 73 74 61 74 69 63 22 0a 2a 2f 0a 73 74  s "static".*/.st
9c00: 61 74 69 63 20 63 68 61 72 20 2a 73 71 6c 69 74  atic char *sqlit
9c10: 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61  e_static_bind_va
9c20: 6c 75 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20  lue = 0;../*.** 
9c30: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
9c40: 62 69 6e 64 20 20 56 4d 20 20 49 44 58 20 20 56  bind  VM  IDX  V
9c50: 41 4c 55 45 20 20 46 4c 41 47 53 0a 2a 2a 0a 2a  ALUE  FLAGS.**.*
9c60: 2a 20 53 65 74 73 20 74 68 65 20 76 61 6c 75 65  * Sets the value
9c70: 20 6f 66 20 74 68 65 20 49 44 58 2d 74 68 20 6f   of the IDX-th o
9c80: 63 63 75 72 61 6e 63 65 20 6f 66 20 22 3f 22 20  ccurance of "?" 
9c90: 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  in the original 
9ca0: 53 51 4c 0a 2a 2a 20 73 74 72 69 6e 67 2e 20 20  SQL.** string.  
9cb0: 56 41 4c 55 45 20 69 73 20 74 68 65 20 6e 65 77  VALUE is the new
9cc0: 20 76 61 6c 75 65 2e 20 20 49 66 20 46 4c 41 47   value.  If FLAG
9cd0: 53 3d 3d 22 6e 75 6c 6c 22 20 74 68 65 6e 20 56  S=="null" then V
9ce0: 41 4c 55 45 20 69 73 0a 2a 2a 20 69 67 6e 6f 72  ALUE is.** ignor
9cf0: 65 64 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ed and the value
9d00: 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
9d10: 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 73 74 61    If FLAGS=="sta
9d20: 74 69 63 22 20 74 68 65 6e 0a 2a 2a 20 74 68 65  tic" then.** the
9d30: 20 76 61 6c 75 65 20 69 73 20 73 65 74 20 74 6f   value is set to
9d40: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20   the value of a 
9d50: 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65 20  static variable 
9d60: 6e 61 6d 65 64 0a 2a 2a 20 22 73 71 6c 69 74 65  named.** "sqlite
9d70: 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c  _static_bind_val
9d80: 75 65 22 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d  ue".  If FLAGS==
9d90: 22 6e 6f 72 6d 61 6c 22 20 74 68 65 6e 20 61 20  "normal" then a 
9da0: 63 6f 70 79 0a 2a 2a 20 6f 66 20 74 68 65 20 56  copy.** of the V
9db0: 41 4c 55 45 20 69 73 20 6d 61 64 65 2e 20 20 49  ALUE is made.  I
9dc0: 66 20 46 4c 41 47 53 3d 3d 22 62 6c 6f 62 31 30  f FLAGS=="blob10
9dd0: 22 20 74 68 65 6e 20 61 20 56 41 4c 55 45 20 69  " then a VALUE i
9de0: 73 20 69 67 6e 6f 72 65 64 0a 2a 2a 20 61 6e 20  s ignored.** an 
9df0: 61 20 31 30 2d 62 79 74 65 20 62 6c 6f 62 20 22  a 10-byte blob "
9e00: 61 62 63 5c 30 30 30 78 79 7a 5c 30 30 30 70 71  abc\000xyz\000pq
9e10: 22 20 69 73 20 69 6e 73 65 72 74 65 64 2e 0a 2a  " is inserted..*
9e20: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
9e30: 74 5f 62 69 6e 64 28 0a 20 20 76 6f 69 64 20 2a  t_bind(.  void *
9e40: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
9e50: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
9e60: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
9e70: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
9e80: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
9e90: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
9ea0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
9eb0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
9ec0: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
9ed0: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
9ee0: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
9ef0: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
9f00: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
9f10: 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63  *pStmt;.  int rc
9f20: 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69  ;.  int idx;.  i
9f30: 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20 20  f( argc!=5 ){.  
9f40: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
9f50: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
9f60: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
9f70: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
9f80: 2c 20 0a 20 20 20 20 20 20 20 22 20 56 4d 20 49  , .       " VM I
9f90: 44 58 20 56 41 4c 55 45 20 28 6e 75 6c 6c 7c 73  DX VALUE (null|s
9fa0: 74 61 74 69 63 7c 6e 6f 72 6d 61 6c 29 5c 22 22  tatic|normal)\""
9fb0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
9fc0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
9fd0: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
9fe0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
9ff0: 76 5b 31 5d 2c 20 26 70 53 74 6d 74 29 20 29 20  v[1], &pStmt) ) 
a000: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
a010: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
a020: 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  nt(interp, argv[
a030: 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74 75  2], &idx) ) retu
a040: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
a050: 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b  if( strcmp(argv[
a060: 34 5d 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b  4],"null")==0 ){
a070: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
a080: 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d  3_bind_null(pStm
a090: 74 2c 20 69 64 78 29 3b 0a 20 20 7d 65 6c 73 65  t, idx);.  }else
a0a0: 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76   if( strcmp(argv
a0b0: 5b 34 5d 2c 22 73 74 61 74 69 63 22 29 3d 3d 30  [4],"static")==0
a0c0: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
a0d0: 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70  ite3_bind_text(p
a0e0: 53 74 6d 74 2c 20 69 64 78 2c 20 73 71 6c 69 74  Stmt, idx, sqlit
a0f0: 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61  e_static_bind_va
a100: 6c 75 65 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 7d  lue, -1, 0);.  }
a110: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
a120: 61 72 67 76 5b 34 5d 2c 22 6e 6f 72 6d 61 6c 22  argv[4],"normal"
a130: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  )==0 ){.    rc =
a140: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
a150: 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 61  xt(pStmt, idx, a
a160: 72 67 76 5b 33 5d 2c 20 2d 31 2c 20 53 51 4c 49  rgv[3], -1, SQLI
a170: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
a180: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
a190: 70 28 61 72 67 76 5b 34 5d 2c 22 62 6c 6f 62 31  p(argv[4],"blob1
a1a0: 30 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  0")==0 ){.    rc
a1b0: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
a1c0: 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c  text(pStmt, idx,
a1d0: 20 22 61 62 63 5c 30 30 30 78 79 7a 5c 30 30 30   "abc\000xyz\000
a1e0: 70 71 22 2c 20 31 30 2c 20 53 51 4c 49 54 45 5f  pq", 10, SQLITE_
a1f0: 53 54 41 54 49 43 29 3b 0a 20 20 7d 65 6c 73 65  STATIC);.  }else
a200: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
a210: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
a220: 34 74 68 20 61 72 67 75 6d 65 6e 74 20 73 68 6f  4th argument sho
a230: 75 6c 64 20 62 65 20 22 0a 20 20 20 20 20 20 20  uld be ".       
a240: 20 22 5c 22 6e 75 6c 6c 5c 22 20 6f 72 20 5c 22   "\"null\" or \"
a250: 73 74 61 74 69 63 5c 22 20 6f 72 20 5c 22 6e 6f  static\" or \"no
a260: 72 6d 61 6c 5c 22 22 2c 20 30 29 3b 0a 20 20 20  rmal\"", 0);.   
a270: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
a280: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  R;.  }.  if( sql
a290: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
a2a0: 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
a2b0: 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
a2c0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
a2d0: 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
a2e0: 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a   char zBuf[50];.
a2f0: 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66      sprintf(zBuf
a300: 2c 20 22 28 25 64 29 20 22 2c 20 72 63 29 3b 0a  , "(%d) ", rc);.
a310: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
a320: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
a330: 66 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  f, sqlite3ErrStr
a340: 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65  (rc), 0);.    re
a350: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
a360: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c    }.  return TCL
a370: 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  _OK;.}..#ifndef 
a380: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
a390: 36 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61  6./*.** Usage: a
a3a0: 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20  dd_test_collate 
a3b0: 3c 64 62 20 70 74 72 3e 20 3c 75 74 66 38 3e 20  <db ptr> <utf8> 
a3c0: 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66 31 36  <utf16le> <utf16
a3d0: 62 65 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  be>.**.** This f
a3e0: 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20  unction is used 
a3f0: 74 6f 20 74 65 73 74 20 74 68 61 74 20 53 51 4c  to test that SQL
a400: 69 74 65 20 73 65 6c 65 63 74 73 20 74 68 65 20  ite selects the 
a410: 63 6f 72 72 65 63 74 20 63 6f 6c 6c 61 74 69 6f  correct collatio
a420: 6e 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 63 61  n.** sequence ca
a430: 6c 6c 62 61 63 6b 20 77 68 65 6e 20 6d 75 6c 74  llback when mult
a440: 69 70 6c 65 20 76 65 72 73 69 6f 6e 73 20 28 66  iple versions (f
a450: 6f 72 20 64 69 66 66 65 72 65 6e 74 20 74 65 78  or different tex
a460: 74 20 65 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a 20  t encodings).** 
a470: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a  are available..*
a480: 2a 0a 2a 2a 20 43 61 6c 6c 69 6e 67 20 74 68 69  *.** Calling thi
a490: 73 20 72 6f 75 74 69 6e 65 20 72 65 67 69 73 74  s routine regist
a4a0: 65 72 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  ers the collatio
a4b0: 6e 20 73 65 71 75 65 6e 63 65 20 22 74 65 73 74  n sequence "test
a4c0: 5f 63 6f 6c 6c 61 74 65 22 0a 2a 2a 20 77 69 74  _collate".** wit
a4d0: 68 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  h database handl
a4e0: 65 20 3c 64 62 3e 2e 20 54 68 65 20 73 65 63 6f  e <db>. The seco
a4f0: 6e 64 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74  nd argument must
a500: 20 62 65 20 61 20 6c 69 73 74 20 6f 66 20 74 68   be a list of th
a510: 72 65 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 76  ree.** boolean v
a520: 61 6c 75 65 73 2e 20 49 66 20 74 68 65 20 66 69  alues. If the fi
a530: 72 73 74 20 69 73 20 74 72 75 65 2c 20 74 68 65  rst is true, the
a540: 6e 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  n a version of t
a550: 65 73 74 5f 63 6f 6c 6c 61 74 65 20 69 73 0a 2a  est_collate is.*
a560: 2a 20 72 65 67 69 73 74 65 72 65 64 20 66 6f 72  * registered for
a570: 20 55 54 46 2d 38 2c 20 69 66 20 74 68 65 20 73   UTF-8, if the s
a580: 65 63 6f 6e 64 20 69 73 20 74 72 75 65 2c 20 61  econd is true, a
a590: 20 76 65 72 73 69 6f 6e 20 69 73 20 72 65 67 69   version is regi
a5a0: 73 74 65 72 65 64 20 66 6f 72 0a 2a 2a 20 55 54  stered for.** UT
a5b0: 46 2d 31 36 6c 65 2c 20 69 66 20 74 68 65 20 74  F-16le, if the t
a5c0: 68 69 72 64 20 69 73 20 74 72 75 65 2c 20 61 20  hird is true, a 
a5d0: 55 54 46 2d 31 36 62 65 20 76 65 72 73 69 6f 6e  UTF-16be version
a5e0: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a   is available..*
a5f0: 2a 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  * Previous versi
a600: 6f 6e 73 20 6f 66 20 74 65 73 74 5f 63 6f 6c 6c  ons of test_coll
a610: 61 74 65 20 61 72 65 20 64 65 6c 65 74 65 64 2e  ate are deleted.
a620: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 6c 61  .**.** The colla
a630: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 74 65  tion sequence te
a640: 73 74 5f 63 6f 6c 6c 61 74 65 20 69 73 20 69 6d  st_collate is im
a650: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c  plemented by cal
a660: 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c  ling the.** foll
a670: 6f 77 69 6e 67 20 54 43 4c 20 73 63 72 69 70 74  owing TCL script
a680: 3a 0a 2a 2a 0a 2a 2a 20 20 20 22 74 65 73 74 5f  :.**.**   "test_
a690: 63 6f 6c 6c 61 74 65 20 3c 65 6e 63 3e 20 3c 6c  collate <enc> <l
a6a0: 68 73 3e 20 3c 72 68 73 3e 22 0a 2a 2a 0a 2a 2a  hs> <rhs>".**.**
a6b0: 20 54 68 65 20 3c 6c 68 73 3e 20 61 6e 64 20 3c   The <lhs> and <
a6c0: 72 68 73 3e 20 61 72 65 20 74 68 65 20 74 77 6f  rhs> are the two
a6d0: 20 76 61 6c 75 65 73 20 62 65 69 6e 67 20 63 6f   values being co
a6e0: 6d 70 61 72 65 64 2c 20 65 6e 63 6f 64 65 64 20  mpared, encoded 
a6f0: 69 6e 20 55 54 46 2d 38 2e 0a 2a 2a 20 54 68 65  in UTF-8..** The
a700: 20 3c 65 6e 63 3e 20 70 61 72 61 6d 65 74 65 72   <enc> parameter
a710: 20 69 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67   is the encoding
a720: 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f   of the collatio
a730: 6e 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 0a  n function that.
a740: 2a 2a 20 53 51 4c 69 74 65 20 73 65 6c 65 63 74  ** SQLite select
a750: 65 64 20 74 6f 20 63 61 6c 6c 2e 20 54 68 65 20  ed to call. The 
a760: 54 43 4c 20 74 65 73 74 20 73 63 72 69 70 74 20  TCL test script 
a770: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0a 2a  implements the.*
a780: 2a 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22  * "test_collate"
a790: 20 70 72 6f 63 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74   proc..**.** Not
a7a0: 65 20 74 68 61 74 20 74 68 69 73 20 77 69 6c 6c  e that this will
a7b0: 20 6f 6e 6c 79 20 77 6f 72 6b 20 77 69 74 68 20   only work with 
a7c0: 6f 6e 65 20 69 6e 74 65 70 72 65 74 65 72 20 61  one intepreter a
a7d0: 74 20 61 20 74 69 6d 65 2c 20 61 73 20 74 68 65  t a time, as the
a7e0: 0a 2a 2a 20 69 6e 74 65 72 70 20 70 6f 69 6e 74  .** interp point
a7f0: 65 72 20 74 6f 20 75 73 65 20 77 68 65 6e 20 65  er to use when e
a800: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 54 43  valuating the TC
a810: 4c 20 73 63 72 69 70 74 20 69 73 20 73 74 6f 72  L script is stor
a820: 65 64 20 69 6e 0a 2a 2a 20 70 54 65 73 74 43 6f  ed in.** pTestCo
a830: 6c 6c 61 74 65 49 6e 74 65 72 70 2e 0a 2a 2f 0a  llateInterp..*/.
a840: 73 74 61 74 69 63 20 54 63 6c 5f 49 6e 74 65 72  static Tcl_Inter
a850: 70 2a 20 70 54 65 73 74 43 6f 6c 6c 61 74 65 49  p* pTestCollateI
a860: 6e 74 65 72 70 3b 0a 73 74 61 74 69 63 20 69 6e  nterp;.static in
a870: 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66  t test_collate_f
a880: 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 70 43 74  unc(.  void *pCt
a890: 78 2c 20 0a 20 20 69 6e 74 20 6e 41 2c 20 63 6f  x, .  int nA, co
a8a0: 6e 73 74 20 76 6f 69 64 20 2a 7a 41 2c 0a 20 20  nst void *zA,.  
a8b0: 69 6e 74 20 6e 42 2c 20 63 6f 6e 73 74 20 76 6f  int nB, const vo
a8c0: 69 64 20 2a 7a 42 0a 29 7b 0a 20 20 54 63 6c 5f  id *zB.){.  Tcl_
a8d0: 49 6e 74 65 72 70 20 2a 69 20 3d 20 70 54 65 73  Interp *i = pTes
a8e0: 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 3b 0a  tCollateInterp;.
a8f0: 20 20 69 6e 74 20 65 6e 63 69 6e 20 3d 20 28 69    int encin = (i
a900: 6e 74 29 70 43 74 78 3b 0a 20 20 69 6e 74 20 72  nt)pCtx;.  int r
a910: 65 73 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20  es;.  int n;..  
a920: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
a930: 56 61 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  Val;.  Tcl_Obj *
a940: 70 58 3b 0a 0a 20 20 70 58 20 3d 20 54 63 6c 5f  pX;..  pX = Tcl_
a950: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65  NewStringObj("te
a960: 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 2d 31 29  st_collate", -1)
a970: 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43  ;.  Tcl_IncrRefC
a980: 6f 75 6e 74 28 70 58 29 3b 0a 0a 20 20 73 77 69  ount(pX);..  swi
a990: 74 63 68 28 20 65 6e 63 69 6e 20 29 7b 0a 20 20  tch( encin ){.  
a9a0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 55 54    case SQLITE_UT
a9b0: 46 38 3a 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69  F8:.      Tcl_Li
a9c0: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
a9d0: 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53  nt(i,pX,Tcl_NewS
a9e0: 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 38 22  tringObj("UTF-8"
a9f0: 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20 62 72 65  ,-1));.      bre
aa00: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
aa10: 49 54 45 5f 55 54 46 31 36 4c 45 3a 0a 20 20 20  ITE_UTF16LE:.   
aa20: 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70     Tcl_ListObjAp
aa30: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58  pendElement(i,pX
aa40: 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62  ,Tcl_NewStringOb
aa50: 6a 28 22 55 54 46 2d 31 36 4c 45 22 2c 2d 31 29  j("UTF-16LE",-1)
aa60: 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
aa70: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
aa80: 55 54 46 31 36 42 45 3a 0a 20 20 20 20 20 20 54  UTF16BE:.      T
aa90: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
aaa0: 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c  Element(i,pX,Tcl
aab0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55  _NewStringObj("U
aac0: 54 46 2d 31 36 42 45 22 2c 2d 31 29 29 3b 0a 20  TF-16BE",-1));. 
aad0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
aae0: 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 61  default:.      a
aaf0: 73 73 65 72 74 28 30 29 3b 0a 20 20 7d 0a 0a 20  ssert(0);.  }.. 
ab00: 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56   pVal = sqlite3V
ab10: 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c  alueNew();.  sql
ab20: 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
ab30: 70 56 61 6c 2c 20 6e 41 2c 20 7a 41 2c 20 65 6e  pVal, nA, zA, en
ab40: 63 69 6e 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  cin, SQLITE_STAT
ab50: 49 43 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74  IC);.  n = sqlit
ab60: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70  e3_value_bytes(p
ab70: 56 61 6c 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74  Val);.  Tcl_List
ab80: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
ab90: 28 69 2c 70 58 2c 0a 20 20 20 20 20 20 54 63 6c  (i,pX,.      Tcl
aba0: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28 63  _NewStringObj((c
abb0: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
abc0: 75 65 5f 74 65 78 74 28 70 56 61 6c 29 2c 6e 29  ue_text(pVal),n)
abd0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75  );.  sqlite3Valu
abe0: 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 6e 42  eSetStr(pVal, nB
abf0: 2c 20 7a 42 2c 20 65 6e 63 69 6e 2c 20 53 51 4c  , zB, encin, SQL
ac00: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 6e  ITE_STATIC);.  n
ac10: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
ac20: 5f 62 79 74 65 73 28 70 56 61 6c 29 3b 0a 20 20  _bytes(pVal);.  
ac30: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
ac40: 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 0a 20  dElement(i,pX,. 
ac50: 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69       Tcl_NewStri
ac60: 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73 71 6c  ngObj((char*)sql
ac70: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
ac80: 70 56 61 6c 29 2c 6e 29 29 3b 0a 20 20 73 71 6c  pVal),n));.  sql
ac90: 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70 56  ite3ValueFree(pV
aca0: 61 6c 29 3b 0a 0a 20 20 54 63 6c 5f 45 76 61 6c  al);..  Tcl_Eval
acb0: 4f 62 6a 45 78 28 69 2c 20 70 58 2c 20 30 29 3b  ObjEx(i, pX, 0);
acc0: 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f  .  Tcl_DecrRefCo
acd0: 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f 47  unt(pX);.  Tcl_G
ace0: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 2c 20  etIntFromObj(i, 
acf0: 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_GetObjResult
ad00: 28 69 29 2c 20 26 72 65 73 29 3b 0a 20 20 72 65  (i), &res);.  re
ad10: 74 75 72 6e 20 72 65 73 3b 0a 7d 0a 73 74 61 74  turn res;.}.stat
ad20: 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c  ic int test_coll
ad30: 61 74 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ate(.  void * cl
ad40: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
ad50: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
ad60: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
ad70: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
ad80: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
ad90: 20 2a 64 62 3b 0a 20 20 69 6e 74 20 76 61 6c 3b   *db;.  int val;
ada0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
adb0: 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 20 72 63   *pVal;.  int rc
adc0: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35  ;..  if( objc!=5
add0: 20 29 20 67 6f 74 6f 20 62 61 64 5f 61 72 67 73   ) goto bad_args
ade0: 3b 0a 20 20 70 54 65 73 74 43 6f 6c 6c 61 74 65  ;.  pTestCollate
adf0: 49 6e 74 65 72 70 20 3d 20 69 6e 74 65 72 70 3b  Interp = interp;
ae00: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
ae10: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
ae20: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
ae30: 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  ]), &db) ) retur
ae40: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
ae50: 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f  if( TCL_OK!=Tcl_
ae60: 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62  GetBooleanFromOb
ae70: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
ae80: 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75 72  ], &val) ) retur
ae90: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
aea0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
aeb0: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  te_collation(db,
aec0: 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c   "test_collate",
aed0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 0a 20   SQLITE_UTF8, . 
aee0: 20 20 20 20 20 20 20 20 20 28 76 6f 69 64 20 2a           (void *
aef0: 29 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 76 61  )SQLITE_UTF8, va
af00: 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66  l?test_collate_f
af10: 75 6e 63 3a 30 29 3b 0a 20 20 69 66 28 20 72 63  unc:0);.  if( rc
af20: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
af30: 20 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54     if( TCL_OK!=T
af40: 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f  cl_GetBooleanFro
af50: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
af60: 76 5b 33 5d 2c 20 26 76 61 6c 29 20 29 20 72 65  v[3], &val) ) re
af70: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
af80: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
af90: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
afa0: 6e 28 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c  n(db, "test_coll
afb0: 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  ate", SQLITE_UTF
afc0: 31 36 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  16LE, .         
afd0: 20 20 20 28 76 6f 69 64 20 2a 29 53 51 4c 49 54     (void *)SQLIT
afe0: 45 5f 55 54 46 31 36 4c 45 2c 20 76 61 6c 3f 74  E_UTF16LE, val?t
aff0: 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63  est_collate_func
b000: 3a 30 29 3b 0a 20 20 20 20 69 66 28 20 54 43 4c  :0);.    if( TCL
b010: 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c  _OK!=Tcl_GetBool
b020: 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  eanFromObj(inter
b030: 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 76 61 6c  p, objv[4], &val
b040: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
b050: 52 52 4f 52 3b 0a 0a 23 69 66 64 65 66 20 53 51  RROR;..#ifdef SQ
b060: 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
b070: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 4d    if( sqlite3_iM
b080: 61 6c 6c 6f 63 46 61 69 6c 3e 30 20 29 7b 0a 20  allocFail>0 ){. 
b090: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 4d 61       sqlite3_iMa
b0a0: 6c 6c 6f 63 46 61 69 6c 2b 2b 3b 0a 20 20 20 20  llocFail++;.    
b0b0: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 56 61  }.#endif.    pVa
b0c0: 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  l = sqlite3Value
b0d0: 4e 65 77 28 29 3b 0a 20 20 20 20 73 71 6c 69 74  New();.    sqlit
b0e0: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
b0f0: 61 6c 2c 20 2d 31 2c 20 22 74 65 73 74 5f 63 6f  al, -1, "test_co
b100: 6c 6c 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 55  llate", SQLITE_U
b110: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
b120: 49 43 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  IC);.    rc = sq
b130: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
b140: 6c 61 74 69 6f 6e 31 36 28 64 62 2c 20 0a 20 20  lation16(db, .  
b150: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b160: 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53  alueText(pVal, S
b170: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
b180: 45 29 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  E), SQLITE_UTF16
b190: 42 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 28  BE, .          (
b1a0: 76 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f 55 54  void *)SQLITE_UT
b1b0: 46 31 36 42 45 2c 20 76 61 6c 3f 74 65 73 74 5f  F16BE, val?test_
b1c0: 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b  collate_func:0);
b1d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75  .    sqlite3Valu
b1e0: 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20 7d  eFree(pVal);.  }
b1f0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
b200: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
b210: 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
b220: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
b230: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
b240: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f  E_OK ){.    Tcl_
b250: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
b260: 65 72 70 2c 20 73 71 6c 69 74 65 33 54 65 73 74  erp, sqlite3Test
b270: 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30  ErrorName(rc), 0
b280: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
b290: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
b2a0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 62  eturn TCL_OK;..b
b2b0: 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 41  ad_args:.  Tcl_A
b2c0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
b2d0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
b2e0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
b2f0: 2c 0a 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  ,.      Tcl_GetS
b300: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
b310: 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44 42 3e  v[0], 0), " <DB>
b320: 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c 65   <utf8> <utf16le
b330: 3e 20 3c 75 74 66 31 36 62 65 3e 22 2c 20 30 29  > <utf16be>", 0)
b340: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ;.  return TCL_E
b350: 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57  RROR;.}../*.** W
b360: 68 65 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  hen the collatio
b370: 6e 20 6e 65 65 64 65 64 20 63 61 6c 6c 62 61 63  n needed callbac
b380: 6b 20 69 73 20 69 6e 76 6f 6b 65 64 2c 20 72 65  k is invoked, re
b390: 63 6f 72 64 20 74 68 65 20 6e 61 6d 65 20 6f 66  cord the name of
b3a0: 20 0a 2a 2a 20 74 68 65 20 72 65 71 75 65 73 74   .** the request
b3b0: 65 64 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  ed collating fun
b3c0: 63 74 69 6f 6e 20 68 65 72 65 2e 20 20 54 68 65  ction here.  The
b3d0: 20 72 65 63 6f 72 64 65 64 20 6e 61 6d 65 20 69   recorded name i
b3e0: 73 20 6c 69 6e 6b 65 64 0a 2a 2a 20 74 6f 20 61  s linked.** to a
b3f0: 20 54 43 4c 20 76 61 72 69 61 62 6c 65 20 61 6e   TCL variable an
b400: 64 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73  d used to make s
b410: 75 72 65 20 74 68 61 74 20 74 68 65 20 72 65 71  ure that the req
b420: 75 65 73 74 65 64 20 63 6f 6c 6c 61 74 69 6f 6e  uested collation
b430: 0a 2a 2a 20 6e 61 6d 65 20 69 73 20 63 6f 72 72  .** name is corr
b440: 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63  ect..*/.static c
b450: 68 61 72 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61  har zNeededColla
b460: 74 69 6f 6e 5b 32 30 30 5d 3b 0a 73 74 61 74 69  tion[200];.stati
b470: 63 20 63 68 61 72 20 2a 70 7a 4e 65 65 64 65 64  c char *pzNeeded
b480: 43 6f 6c 6c 61 74 69 6f 6e 20 3d 20 7a 4e 65 65  Collation = zNee
b490: 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 3b 0a 0a 0a  dedCollation;...
b4a0: 2f 2a 0a 2a 2a 20 43 61 6c 6c 65 64 20 77 68 65  /*.** Called whe
b4b0: 6e 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  n a collating se
b4c0: 71 75 65 6e 63 65 20 69 73 20 6e 65 65 64 65 64  quence is needed
b4d0: 2e 20 20 52 65 67 69 73 74 65 72 65 64 20 75 73  .  Registered us
b4e0: 69 6e 67 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63  ing.** sqlite3_c
b4f0: 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31  ollation_needed1
b500: 36 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  6()..*/.static v
b510: 6f 69 64 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65  oid test_collate
b520: 5f 6e 65 65 64 65 64 5f 63 62 28 0a 20 20 76 6f  _needed_cb(.  vo
b530: 69 64 20 2a 70 43 74 78 2c 20 0a 20 20 73 71 6c  id *pCtx, .  sql
b540: 69 74 65 33 20 2a 64 62 2c 0a 20 20 69 6e 74 20  ite3 *db,.  int 
b550: 65 54 65 78 74 52 65 70 2c 0a 20 20 63 6f 6e 73  eTextRep,.  cons
b560: 74 20 76 6f 69 64 20 2a 70 4e 61 6d 65 0a 29 7b  t void *pName.){
b570: 0a 20 20 69 6e 74 20 65 6e 63 20 3d 20 45 4e 43  .  int enc = ENC
b580: 28 64 62 29 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  (db);.  int i;. 
b590: 20 63 68 61 72 20 2a 7a 3b 0a 20 20 66 6f 72 28   char *z;.  for(
b5a0: 7a 20 3d 20 28 63 68 61 72 2a 29 70 4e 61 6d 65  z = (char*)pName
b5b0: 2c 20 69 3d 30 3b 20 2a 7a 20 7c 7c 20 7a 5b 31  , i=0; *z || z[1
b5c0: 5d 3b 20 7a 2b 2b 29 7b 0a 20 20 20 20 69 66 28  ]; z++){.    if(
b5d0: 20 2a 7a 20 29 20 7a 4e 65 65 64 65 64 43 6f 6c   *z ) zNeededCol
b5e0: 6c 61 74 69 6f 6e 5b 69 2b 2b 5d 20 3d 20 2a 7a  lation[i++] = *z
b5f0: 3b 0a 20 20 7d 0a 20 20 7a 4e 65 65 64 65 64 43  ;.  }.  zNeededC
b600: 6f 6c 6c 61 74 69 6f 6e 5b 69 5d 20 3d 20 30 3b  ollation[i] = 0;
b610: 0a 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  .  sqlite3_creat
b620: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 20  e_collation(.   
b630: 20 20 20 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c     db, "test_col
b640: 6c 61 74 65 22 2c 20 45 4e 43 28 64 62 29 2c 20  late", ENC(db), 
b650: 28 76 6f 69 64 20 2a 29 65 6e 63 2c 20 74 65 73  (void *)enc, tes
b660: 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 29 3b  t_collate_func);
b670: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
b680: 20 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74   add_test_collat
b690: 65 5f 6e 65 65 64 65 64 20 44 42 0a 2a 2f 0a 73  e_needed DB.*/.s
b6a0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
b6b0: 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 28 0a 20  ollate_needed(. 
b6c0: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
b6d0: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
b6e0: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
b6f0: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
b700: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
b710: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
b720: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
b730: 20 6f 62 6a 63 21 3d 32 20 29 20 67 6f 74 6f 20   objc!=2 ) goto 
b740: 62 61 64 5f 61 72 67 73 3b 0a 20 20 69 66 28 20  bad_args;.  if( 
b750: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
b760: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
b770: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
b780: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
b790: 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c  RROR;.  rc = sql
b7a0: 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e  ite3_collation_n
b7b0: 65 65 64 65 64 31 36 28 64 62 2c 20 30 2c 20 74  eeded16(db, 0, t
b7c0: 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64  est_collate_need
b7d0: 65 64 5f 63 62 29 3b 0a 20 20 7a 4e 65 65 64 65  ed_cb);.  zNeede
b7e0: 64 43 6f 6c 6c 61 74 69 6f 6e 5b 30 5d 20 3d 20  dCollation[0] = 
b7f0: 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  0;.  if( sqlite3
b800: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
b810: 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65  rp, db, rc) ) re
b820: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
b830: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
b840: 0a 0a 62 61 64 5f 61 72 67 73 3a 0a 20 20 54 63  ..bad_args:.  Tc
b850: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
b860: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
b870: 22 44 42 22 29 3b 0a 20 20 72 65 74 75 72 6e 20  "DB");.  return 
b880: 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a  TCL_ERROR;.}../*
b890: 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20 20 20 61 64  .** tclcmd:   ad
b8a0: 64 5f 61 6c 69 67 6e 6d 65 6e 74 5f 74 65 73 74  d_alignment_test
b8b0: 5f 63 6f 6c 6c 61 74 69 6f 6e 73 20 20 44 42 0a  _collations  DB.
b8c0: 2a 2a 0a 2a 2a 20 41 64 64 20 74 77 6f 20 6e 65  **.** Add two ne
b8d0: 77 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  w collating sequ
b8e0: 65 6e 63 65 73 20 74 6f 20 74 68 65 20 64 61 74  ences to the dat
b8f0: 61 62 61 73 65 20 44 42 0a 2a 2a 0a 2a 2a 20 20  abase DB.**.**  
b900: 20 20 20 75 74 66 31 36 5f 61 6c 69 67 6e 65 64     utf16_aligned
b910: 0a 2a 2a 20 20 20 20 20 75 74 66 31 36 5f 75 6e  .**     utf16_un
b920: 61 6c 69 67 6e 65 64 0a 2a 2a 0a 2a 2a 20 42 6f  aligned.**.** Bo
b930: 74 68 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  th collating seq
b940: 75 65 6e 63 65 73 20 75 73 65 20 74 68 65 20 73  uences use the s
b950: 61 6d 65 20 73 6f 72 74 20 6f 72 64 65 72 20 61  ame sort order a
b960: 73 20 42 49 4e 41 52 59 2e 0a 2a 2a 20 54 68 65  s BINARY..** The
b970: 20 6f 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65   only difference
b980: 20 69 73 20 74 68 61 74 20 74 68 65 20 75 74 66   is that the utf
b990: 31 36 5f 61 6c 69 67 6e 65 64 20 63 6f 6c 6c 61  16_aligned colla
b9a0: 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ting.** sequence
b9b0: 20 69 73 20 64 65 63 6c 61 72 65 64 20 77 69 74   is declared wit
b9c0: 68 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46  h the SQLITE_UTF
b9d0: 31 36 5f 41 4c 49 47 4e 45 44 20 66 6c 61 67 2e  16_ALIGNED flag.
b9e0: 0a 2a 2a 20 42 6f 74 68 20 63 6f 6c 6c 61 74 69  .** Both collati
b9f0: 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 63  ng functions inc
ba00: 72 65 6d 65 6e 74 20 74 68 65 20 75 6e 61 6c 69  rement the unali
ba10: 67 6e 65 64 20 75 74 66 31 36 20 63 6f 75 6e 74  gned utf16 count
ba20: 65 72 0a 2a 2a 20 77 68 65 6e 65 76 65 72 20 74  er.** whenever t
ba30: 68 65 79 20 73 65 65 20 61 20 73 74 72 69 6e 67  hey see a string
ba40: 20 74 68 61 74 20 62 65 67 69 6e 73 20 6f 6e 20   that begins on 
ba50: 61 6e 20 6f 64 64 20 62 79 74 65 20 62 6f 75 6e  an odd byte boun
ba60: 64 61 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  dary..*/.static 
ba70: 69 6e 74 20 75 6e 61 6c 69 67 6e 65 64 5f 73 74  int unaligned_st
ba80: 72 69 6e 67 5f 63 6f 75 6e 74 65 72 20 3d 20 30  ring_counter = 0
ba90: 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 61 6c 69  ;.static int ali
baa0: 67 6e 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63 28 0a  gnmentCollFunc(.
bab0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
bac0: 0a 20 20 69 6e 74 20 6e 4b 65 79 31 2c 20 63 6f  .  int nKey1, co
bad0: 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65 79 31 2c  nst void *pKey1,
bae0: 0a 20 20 69 6e 74 20 6e 4b 65 79 32 2c 20 63 6f  .  int nKey2, co
baf0: 6e 73 74 20 76 6f 69 64 20 2a 70 4b 65 79 32 0a  nst void *pKey2.
bb00: 29 7b 0a 20 20 69 6e 74 20 72 63 2c 20 6e 3b 0a  ){.  int rc, n;.
bb10: 20 20 6e 20 3d 20 6e 4b 65 79 31 3c 6e 4b 65 79    n = nKey1<nKey
bb20: 32 20 3f 20 6e 4b 65 79 31 20 3a 20 6e 4b 65 79  2 ? nKey1 : nKey
bb30: 32 3b 0a 20 20 69 66 28 20 6e 4b 65 79 31 3e 30  2;.  if( nKey1>0
bb40: 20 26 26 20 31 3d 3d 28 31 26 28 69 6e 74 29 70   && 1==(1&(int)p
bb50: 4b 65 79 31 29 20 29 20 75 6e 61 6c 69 67 6e 65  Key1) ) unaligne
bb60: 64 5f 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72  d_string_counter
bb70: 2b 2b 3b 0a 20 20 69 66 28 20 6e 4b 65 79 32 3e  ++;.  if( nKey2>
bb80: 30 20 26 26 20 31 3d 3d 28 31 26 28 69 6e 74 29  0 && 1==(1&(int)
bb90: 70 4b 65 79 32 29 20 29 20 75 6e 61 6c 69 67 6e  pKey2) ) unalign
bba0: 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65  ed_string_counte
bbb0: 72 2b 2b 3b 0a 20 20 72 63 20 3d 20 6d 65 6d 63  r++;.  rc = memc
bbc0: 6d 70 28 70 4b 65 79 31 2c 20 70 4b 65 79 32 2c  mp(pKey1, pKey2,
bbd0: 20 6e 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30   n);.  if( rc==0
bbe0: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 6e 4b 65   ){.    rc = nKe
bbf0: 79 31 20 2d 20 6e 4b 65 79 32 3b 0a 20 20 7d 0a  y1 - nKey2;.  }.
bc00: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 73    return rc;.}.s
bc10: 74 61 74 69 63 20 69 6e 74 20 61 64 64 5f 61 6c  tatic int add_al
bc20: 69 67 6e 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c  ignment_test_col
bc30: 6c 61 74 69 6f 6e 73 28 0a 20 20 76 6f 69 64 20  lations(.  void 
bc40: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
bc50: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
bc60: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
bc70: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
bc80: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
bc90: 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
bca0: 6f 62 6a 63 3e 3d 32 20 29 7b 0a 20 20 20 20 69  objc>=2 ){.    i
bcb0: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
bcc0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
bcd0: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
bce0: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
bcf0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c  L_ERROR;.    sql
bd00: 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
bd10: 61 74 69 6f 6e 28 64 62 2c 20 22 75 74 66 31 36  ation(db, "utf16
bd20: 5f 75 6e 61 6c 69 67 6e 65 64 22 2c 0a 20 20 20  _unaligned",.   
bd30: 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 31       SQLITE_UTF1
bd40: 36 2c 20 0a 20 20 20 20 20 20 20 20 30 2c 20 61  6, .        0, a
bd50: 6c 69 67 6e 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63  lignmentCollFunc
bd60: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63  );.    sqlite3_c
bd70: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
bd80: 64 62 2c 20 22 75 74 66 31 36 5f 61 6c 69 67 6e  db, "utf16_align
bd90: 65 64 22 2c 0a 20 20 20 20 20 20 20 20 53 51 4c  ed",.        SQL
bda0: 49 54 45 5f 55 54 46 31 36 20 7c 20 53 51 4c 49  ITE_UTF16 | SQLI
bdb0: 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45 44  TE_UTF16_ALIGNED
bdc0: 2c 20 0a 20 20 20 20 20 20 20 20 30 2c 20 61 6c  , .        0, al
bdd0: 69 67 6e 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63 29  ignmentCollFunc)
bde0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53  ;.  }.  return S
bdf0: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64  QLITE_OK;.}.#end
be00: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
be10: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
be20: 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  ) */../*.** Usag
be30: 65 3a 20 61 64 64 5f 74 65 73 74 5f 66 75 6e 63  e: add_test_func
be40: 74 69 6f 6e 20 3c 64 62 20 70 74 72 3e 20 3c 75  tion <db ptr> <u
be50: 74 66 38 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c  tf8> <utf16le> <
be60: 75 74 66 31 36 62 65 3e 0a 2a 2a 0a 2a 2a 20 54  utf16be>.**.** T
be70: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
be80: 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 61  used to test tha
be90: 74 20 53 51 4c 69 74 65 20 73 65 6c 65 63 74 73  t SQLite selects
bea0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 75 73 65   the correct use
beb0: 72 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 63 61  r.** function ca
bec0: 6c 6c 62 61 63 6b 20 77 68 65 6e 20 6d 75 6c 74  llback when mult
bed0: 69 70 6c 65 20 76 65 72 73 69 6f 6e 73 20 28 66  iple versions (f
bee0: 6f 72 20 64 69 66 66 65 72 65 6e 74 20 74 65 78  or different tex
bef0: 74 20 65 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a 20  t encodings).** 
bf00: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a  are available..*
bf10: 2a 0a 2a 2a 20 43 61 6c 6c 69 6e 67 20 74 68 69  *.** Calling thi
bf20: 73 20 72 6f 75 74 69 6e 65 20 72 65 67 69 73 74  s routine regist
bf30: 65 72 73 20 75 70 20 74 6f 20 74 68 72 65 65 20  ers up to three 
bf40: 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20  versions of the 
bf50: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a  user function.**
bf60: 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22   "test_function"
bf70: 20 77 69 74 68 20 64 61 74 61 62 61 73 65 20 68   with database h
bf80: 61 6e 64 6c 65 20 3c 64 62 3e 2e 20 20 49 66 20  andle <db>.  If 
bf90: 74 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d  the second argum
bfa0: 65 6e 74 20 69 73 0a 2a 2a 20 74 72 75 65 2c 20  ent is.** true, 
bfb0: 74 68 65 6e 20 61 20 76 65 72 73 69 6f 6e 20 6f  then a version o
bfc0: 66 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20  f test_function 
bfd0: 69 73 20 72 65 67 69 73 74 65 72 65 64 20 66 6f  is registered fo
bfe0: 72 20 55 54 46 2d 38 2c 20 69 66 20 74 68 65 0a  r UTF-8, if the.
bff0: 2a 2a 20 74 68 69 72 64 20 69 73 20 74 72 75 65  ** third is true
c000: 2c 20 61 20 76 65 72 73 69 6f 6e 20 69 73 20 72  , a version is r
c010: 65 67 69 73 74 65 72 65 64 20 66 6f 72 20 55 54  egistered for UT
c020: 46 2d 31 36 6c 65 2c 20 69 66 20 74 68 65 20 66  F-16le, if the f
c030: 6f 75 72 74 68 20 69 73 0a 2a 2a 20 74 72 75 65  ourth is.** true
c040: 2c 20 61 20 55 54 46 2d 31 36 62 65 20 76 65 72  , a UTF-16be ver
c050: 73 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  sion is availabl
c060: 65 2e 20 20 50 72 65 76 69 6f 75 73 20 76 65 72  e.  Previous ver
c070: 73 69 6f 6e 73 20 6f 66 0a 2a 2a 20 74 65 73 74  sions of.** test
c080: 5f 66 75 6e 63 74 69 6f 6e 20 61 72 65 20 64 65  _function are de
c090: 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  leted..**.** The
c0a0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 69   user function i
c0b0: 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
c0c0: 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 6f 6c   calling the fol
c0d0: 6c 6f 77 69 6e 67 20 54 43 4c 20 73 63 72 69 70  lowing TCL scrip
c0e0: 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 22 74 65 73 74  t:.**.**   "test
c0f0: 5f 66 75 6e 63 74 69 6f 6e 20 3c 65 6e 63 3e 20  _function <enc> 
c100: 3c 61 72 67 3e 22 0a 2a 2a 0a 2a 2a 20 57 68 65  <arg>".**.** Whe
c110: 72 65 20 3c 65 6e 63 3e 20 69 73 20 6f 6e 65 20  re <enc> is one 
c120: 6f 66 20 55 54 46 2d 38 2c 20 55 54 46 2d 31 36  of UTF-8, UTF-16
c130: 4c 45 20 6f 72 20 55 54 46 31 36 42 45 2c 20 61  LE or UTF16BE, a
c140: 6e 64 20 3c 61 72 67 3e 20 69 73 20 74 68 65 0a  nd <arg> is the.
c150: 2a 2a 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65  ** single argume
c160: 6e 74 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  nt passed to the
c170: 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20 54   SQL function. T
c180: 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
c190: 64 20 62 79 0a 2a 2a 20 74 68 65 20 54 43 4c 20  d by.** the TCL 
c1a0: 73 63 72 69 70 74 20 69 73 20 75 73 65 64 20 61  script is used a
c1b0: 73 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c  s the return val
c1c0: 75 65 20 6f 66 20 74 68 65 20 53 51 4c 20 66 75  ue of the SQL fu
c1d0: 6e 63 74 69 6f 6e 2e 20 49 74 0a 2a 2a 20 69 73  nction. It.** is
c1e0: 20 70 61 73 73 65 64 20 74 6f 20 53 51 4c 69 74   passed to SQLit
c1f0: 65 20 75 73 69 6e 67 20 55 54 46 2d 31 36 42 45  e using UTF-16BE
c200: 20 66 6f 72 20 61 20 55 54 46 2d 38 20 74 65 73   for a UTF-8 tes
c210: 74 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20 55 54  t_function(), UT
c220: 46 2d 38 0a 2a 2a 20 66 6f 72 20 61 20 55 54 46  F-8.** for a UTF
c230: 2d 31 36 4c 45 20 74 65 73 74 5f 66 75 6e 63 74  -16LE test_funct
c240: 69 6f 6e 28 29 2c 20 61 6e 64 20 55 54 46 2d 31  ion(), and UTF-1
c250: 36 4c 45 20 66 6f 72 20 61 6e 20 69 6d 70 6c 65  6LE for an imple
c260: 6d 65 6e 74 61 74 69 6f 6e 20 74 68 61 74 0a 2a  mentation that.*
c270: 2a 20 70 72 65 66 65 72 73 20 55 54 46 2d 31 36  * prefers UTF-16
c280: 42 45 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  BE..*/.#ifndef S
c290: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
c2a0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 65 73  .static void tes
c2b0: 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 38 28  t_function_utf8(
c2c0: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
c2d0: 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74  xt *pCtx, .  int
c2e0: 20 6e 41 72 67 2c 0a 20 20 73 71 6c 69 74 65 33   nArg,.  sqlite3
c2f0: 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b  _value **argv.){
c300: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
c310: 6e 74 65 72 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a  nterp;.  Tcl_Obj
c320: 20 2a 70 58 3b 0a 20 20 73 71 6c 69 74 65 33 5f   *pX;.  sqlite3_
c330: 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69  value *pVal;.  i
c340: 6e 74 65 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74  nterp = (Tcl_Int
c350: 65 72 70 20 2a 29 73 71 6c 69 74 65 33 5f 75 73  erp *)sqlite3_us
c360: 65 72 5f 64 61 74 61 28 70 43 74 78 29 3b 0a 20  er_data(pCtx);. 
c370: 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72   pX = Tcl_NewStr
c380: 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f 66 75 6e  ingObj("test_fun
c390: 63 74 69 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20 54  ction", -1);.  T
c3a0: 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28  cl_IncrRefCount(
c3b0: 70 58 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  pX);.  Tcl_ListO
c3c0: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
c3d0: 69 6e 74 65 72 70 2c 20 70 58 2c 20 54 63 6c 5f  interp, pX, Tcl_
c3e0: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54  NewStringObj("UT
c3f0: 46 2d 38 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63  F-8", -1));.  Tc
c400: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
c410: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70  lement(interp, p
c420: 58 2c 20 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65  X, .      Tcl_Ne
c430: 77 53 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72  wStringObj((char
c440: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
c450: 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d  text(argv[0]), -
c460: 31 29 29 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f  1));.  Tcl_EvalO
c470: 62 6a 45 78 28 69 6e 74 65 72 70 2c 20 70 58 2c  bjEx(interp, pX,
c480: 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52   0);.  Tcl_DecrR
c490: 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 73  efCount(pX);.  s
c4a0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
c4b0: 78 74 28 70 43 74 78 2c 20 54 63 6c 5f 47 65 74  xt(pCtx, Tcl_Get
c4c0: 53 74 72 69 6e 67 52 65 73 75 6c 74 28 69 6e 74  StringResult(int
c4d0: 65 72 70 29 2c 20 2d 31 2c 20 53 51 4c 49 54 45  erp), -1, SQLITE
c4e0: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 70  _TRANSIENT);.  p
c4f0: 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c  Val = sqlite3Val
c500: 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74  ueNew();.  sqlit
c510: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
c520: 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53  al, -1, Tcl_GetS
c530: 74 72 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65  tringResult(inte
c540: 72 70 29 2c 20 0a 20 20 20 20 20 20 53 51 4c 49  rp), .      SQLI
c550: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
c560: 53 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74  STATIC);.  sqlit
c570: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36  e3_result_text16
c580: 62 65 28 70 43 74 78 2c 20 73 71 6c 69 74 65 33  be(pCtx, sqlite3
c590: 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 62 65 28  _value_text16be(
c5a0: 70 56 61 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c  pVal),.      -1,
c5b0: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
c5c0: 54 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c  T);.  sqlite3Val
c5d0: 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a  ueFree(pVal);.}.
c5e0: 73 74 61 74 69 63 20 76 6f 69 64 20 74 65 73 74  static void test
c5f0: 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 6c  _function_utf16l
c600: 65 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  e(.  sqlite3_con
c610: 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 69  text *pCtx, .  i
c620: 6e 74 20 6e 41 72 67 2c 0a 20 20 73 71 6c 69 74  nt nArg,.  sqlit
c630: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a  e3_value **argv.
c640: 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  ){.  Tcl_Interp 
c650: 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63 6c 5f 4f  *interp;.  Tcl_O
c660: 62 6a 20 2a 70 58 3b 0a 20 20 73 71 6c 69 74 65  bj *pX;.  sqlite
c670: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20  3_value *pVal;. 
c680: 20 69 6e 74 65 72 70 20 3d 20 28 54 63 6c 5f 49   interp = (Tcl_I
c690: 6e 74 65 72 70 20 2a 29 73 71 6c 69 74 65 33 5f  nterp *)sqlite3_
c6a0: 75 73 65 72 5f 64 61 74 61 28 70 43 74 78 29 3b  user_data(pCtx);
c6b0: 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53  .  pX = Tcl_NewS
c6c0: 74 72 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f 66  tringObj("test_f
c6d0: 75 6e 63 74 69 6f 6e 22 2c 20 2d 31 29 3b 0a 20  unction", -1);. 
c6e0: 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e   Tcl_IncrRefCoun
c6f0: 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f 4c 69 73  t(pX);.  Tcl_Lis
c700: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
c710: 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 54 63  t(interp, pX, Tc
c720: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
c730: 55 54 46 2d 31 36 4c 45 22 2c 20 2d 31 29 29 3b  UTF-16LE", -1));
c740: 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  .  Tcl_ListObjAp
c750: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
c760: 72 70 2c 20 70 58 2c 20 0a 20 20 20 20 20 20 54  rp, pX, .      T
c770: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
c780: 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76  (char*)sqlite3_v
c790: 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30  alue_text(argv[0
c7a0: 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f  ]), -1));.  Tcl_
c7b0: 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74 65 72 70  EvalObjEx(interp
c7c0: 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54 63 6c 5f  , pX, 0);.  Tcl_
c7d0: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29  DecrRefCount(pX)
c7e0: 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74  ;.  pVal = sqlit
c7f0: 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20  e3ValueNew();.  
c800: 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
c810: 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 54 63 6c  tr(pVal, -1, Tcl
c820: 5f 47 65 74 53 74 72 69 6e 67 52 65 73 75 6c 74  _GetStringResult
c830: 28 69 6e 74 65 72 70 29 2c 20 0a 20 20 20 20 20  (interp), .     
c840: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
c850: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
c860: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
c870: 65 78 74 28 70 43 74 78 2c 28 63 68 61 72 2a 29  ext(pCtx,(char*)
c880: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
c890: 78 74 28 70 56 61 6c 29 2c 2d 31 2c 53 51 4c 49  xt(pVal),-1,SQLI
c8a0: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
c8b0: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
c8c0: 65 28 70 56 61 6c 29 3b 0a 7d 0a 73 74 61 74 69  e(pVal);.}.stati
c8d0: 63 20 76 6f 69 64 20 74 65 73 74 5f 66 75 6e 63  c void test_func
c8e0: 74 69 6f 6e 5f 75 74 66 31 36 62 65 28 0a 20 20  tion_utf16be(.  
c8f0: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
c900: 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41  *pCtx, .  int nA
c910: 72 67 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg,.  sqlite3_va
c920: 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  lue **argv.){.  
c930: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
c940: 72 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  rp;.  Tcl_Obj *p
c950: 58 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  X;.  sqlite3_val
c960: 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65  ue *pVal;.  inte
c970: 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70  rp = (Tcl_Interp
c980: 20 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f   *)sqlite3_user_
c990: 64 61 74 61 28 70 43 74 78 29 3b 0a 20 20 70 58  data(pCtx);.  pX
c9a0: 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67   = Tcl_NewString
c9b0: 4f 62 6a 28 22 74 65 73 74 5f 66 75 6e 63 74 69  Obj("test_functi
c9c0: 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f  on", -1);.  Tcl_
c9d0: 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29  IncrRefCount(pX)
c9e0: 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
c9f0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
ca00: 65 72 70 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77  erp, pX, Tcl_New
ca10: 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31  StringObj("UTF-1
ca20: 36 42 45 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63  6BE", -1));.  Tc
ca30: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
ca40: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70  lement(interp, p
ca50: 58 2c 20 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65  X, .      Tcl_Ne
ca60: 77 53 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72  wStringObj((char
ca70: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
ca80: 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d  text(argv[0]), -
ca90: 31 29 29 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f  1));.  Tcl_EvalO
caa0: 62 6a 45 78 28 69 6e 74 65 72 70 2c 20 70 58 2c  bjEx(interp, pX,
cab0: 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52   0);.  Tcl_DecrR
cac0: 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 70  efCount(pX);.  p
cad0: 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c  Val = sqlite3Val
cae0: 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74  ueNew();.  sqlit
caf0: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
cb00: 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53  al, -1, Tcl_GetS
cb10: 74 72 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65  tringResult(inte
cb20: 72 70 29 2c 20 0a 20 20 20 20 20 20 53 51 4c 49  rp), .      SQLI
cb30: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
cb40: 53 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74  STATIC);.  sqlit
cb50: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36  e3_result_text16
cb60: 6c 65 28 70 43 74 78 2c 20 73 71 6c 69 74 65 33  le(pCtx, sqlite3
cb70: 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 6c 65 28  _value_text16le(
cb80: 70 56 61 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c  pVal),.      -1,
cb90: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
cba0: 54 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c  T);.  sqlite3Val
cbb0: 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a  ueFree(pVal);.}.
cbc0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
cbd0: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 73  _OMIT_UTF16 */.s
cbe0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 66  tatic int test_f
cbf0: 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20  unction(.  void 
cc00: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
cc10: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
cc20: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
cc30: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
cc40: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
cc50: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
cc60: 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33 20 2a  TF16.  sqlite3 *
cc70: 64 62 3b 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 0a  db;.  int val;..
cc80: 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 20    if( objc!=5 ) 
cc90: 67 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20  goto bad_args;. 
cca0: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
ccb0: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
ccc0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
ccd0: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
cce0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66  TCL_ERROR;..  if
ccf0: 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65  ( TCL_OK!=Tcl_Ge
cd00: 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28  tBooleanFromObj(
cd10: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
cd20: 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20   &val) ) return 
cd30: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
cd40: 20 76 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69   val ){.    sqli
cd50: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
cd60: 69 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 66 75  ion(db, "test_fu
cd70: 6e 63 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49  nction", 1, SQLI
cd80: 54 45 5f 55 54 46 38 2c 20 0a 20 20 20 20 20 20  TE_UTF8, .      
cd90: 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66    interp, test_f
cda0: 75 6e 63 74 69 6f 6e 5f 75 74 66 38 2c 20 30 2c  unction_utf8, 0,
cdb0: 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54   0);.  }.  if( T
cdc0: 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
cdd0: 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
cde0: 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76  erp, objv[3], &v
cdf0: 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
ce00: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61  _ERROR;.  if( va
ce10: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
ce20: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
ce30: 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74  (db, "test_funct
ce40: 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f  ion", 1, SQLITE_
ce50: 55 54 46 31 36 4c 45 2c 20 0a 20 20 20 20 20 20  UTF16LE, .      
ce60: 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66    interp, test_f
ce70: 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 6c 65 2c  unction_utf16le,
ce80: 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66   0, 0);.  }.  if
ce90: 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65  ( TCL_OK!=Tcl_Ge
cea0: 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28  tBooleanFromObj(
ceb0: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c  interp, objv[4],
cec0: 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20   &val) ) return 
ced0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
cee0: 20 76 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69   val ){.    sqli
cef0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
cf00: 69 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 66 75  ion(db, "test_fu
cf10: 6e 63 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49  nction", 1, SQLI
cf20: 54 45 5f 55 54 46 31 36 42 45 2c 20 0a 20 20 20  TE_UTF16BE, .   
cf30: 20 20 20 20 20 69 6e 74 65 72 70 2c 20 74 65 73       interp, tes
cf40: 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36  t_function_utf16
cf50: 62 65 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a  be, 0, 0);.  }..
cf60: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
cf70: 0a 62 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c  .bad_args:.  Tcl
cf80: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
cf90: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
cfa0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
cfb0: 22 22 2c 0a 20 20 20 20 20 20 54 63 6c 5f 47 65  "",.      Tcl_Ge
cfc0: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
cfd0: 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44  bjv[0], 0), " <D
cfe0: 42 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36  B> <utf8> <utf16
cff0: 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e 22 2c 20  le> <utf16be>", 
d000: 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  0);.#endif /* SQ
d010: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
d020: 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
d030: 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ERROR;.}../*.** 
d040: 55 73 61 67 65 3a 20 20 20 20 20 20 20 20 20 74  Usage:         t
d050: 65 73 74 5f 65 72 72 73 74 72 20 3c 65 72 72 20  est_errstr <err 
d060: 63 6f 64 65 3e 0a 2a 2a 0a 2a 2a 20 54 65 73 74  code>.**.** Test
d070: 20 74 68 61 74 20 74 68 65 20 65 6e 67 6c 69 73   that the englis
d080: 68 20 6c 61 6e 67 75 61 67 65 20 73 74 72 69 6e  h language strin
d090: 67 20 65 71 75 69 76 61 6c 65 6e 74 73 20 66 6f  g equivalents fo
d0a0: 72 20 73 71 6c 69 74 65 20 65 72 72 6f 72 20 63  r sqlite error c
d0b0: 6f 64 65 73 0a 2a 2a 20 61 72 65 20 73 61 6e 65  odes.** are sane
d0c0: 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20  . The parameter 
d0d0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  is an integer re
d0e0: 70 72 65 73 65 6e 74 69 6e 67 20 61 6e 20 73 71  presenting an sq
d0f0: 6c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65 2e  lite error code.
d100: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
d110: 73 20 61 20 6c 69 73 74 20 6f 66 20 74 77 6f 20  s a list of two 
d120: 65 6c 65 6d 65 6e 74 73 2c 20 74 68 65 20 73 74  elements, the st
d130: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
d140: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 65 72  ion of the.** er
d150: 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 74 68 65  ror code and the
d160: 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67   english languag
d170: 65 20 65 78 70 6c 61 6e 61 74 69 6f 6e 2e 0a 2a  e explanation..*
d180: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
d190: 74 5f 65 72 72 73 74 72 28 0a 20 20 76 6f 69 64  t_errstr(.  void
d1a0: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
d1b0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
d1c0: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
d1d0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
d1e0: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 68  T objv[].){.  ch
d1f0: 61 72 20 2a 7a 43 6f 64 65 3b 0a 20 20 69 6e 74  ar *zCode;.  int
d200: 20 69 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d   i;.  if( objc!=
d210: 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  1 ){.    Tcl_Wro
d220: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
d230: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3c 65 72 72  , 1, objv, "<err
d240: 6f 72 20 63 6f 64 65 3e 22 29 3b 0a 20 20 7d 0a  or code>");.  }.
d250: 0a 20 20 7a 43 6f 64 65 20 3d 20 54 63 6c 5f 47  .  zCode = Tcl_G
d260: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
d270: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
d280: 32 30 30 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  200; i++){.    i
d290: 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 65 72 72  f( 0==strcmp(err
d2a0: 6f 72 4e 61 6d 65 28 69 29 2c 20 7a 43 6f 64 65  orName(i), zCode
d2b0: 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20  ) ) break;.  }. 
d2c0: 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
d2d0: 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 73  nterp, (char *)s
d2e0: 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 29 2c  qlite3ErrStr(i),
d2f0: 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
d300: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
d310: 73 61 67 65 3a 20 20 20 20 62 72 65 61 6b 70 6f  sage:    breakpo
d320: 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72  int.**.** This r
d330: 6f 75 74 69 6e 65 20 65 78 69 73 74 73 20 66 6f  outine exists fo
d340: 72 20 6f 6e 65 20 70 75 72 70 6f 73 65 20 2d 20  r one purpose - 
d350: 74 6f 20 70 72 6f 76 69 64 65 20 61 20 70 6c 61  to provide a pla
d360: 63 65 20 74 6f 20 70 75 74 20 61 0a 2a 2a 20 62  ce to put a.** b
d370: 72 65 61 6b 70 6f 69 6e 74 20 77 69 74 68 20 47  reakpoint with G
d380: 44 42 20 74 68 61 74 20 63 61 6e 20 62 65 20 74  DB that can be t
d390: 72 69 67 67 65 72 65 64 20 75 73 69 6e 67 20 54  riggered using T
d3a0: 43 4c 20 63 6f 64 65 2e 20 20 54 68 65 20 75 73  CL code.  The us
d3b0: 65 0a 2a 2a 20 66 6f 72 20 74 68 69 73 20 69 73  e.** for this is
d3c0: 20 77 68 65 6e 20 61 20 70 61 72 74 69 63 75 6c   when a particul
d3d0: 61 72 20 74 65 73 74 20 66 61 69 6c 73 20 6f 6e  ar test fails on
d3e0: 20 28 73 61 79 29 20 74 68 65 20 31 34 38 35 74   (say) the 1485t
d3f0: 68 20 69 74 65 72 61 74 69 6f 6e 2e 0a 2a 2a 20  h iteration..** 
d400: 49 6e 20 74 68 65 20 54 43 4c 20 74 65 73 74 20  In the TCL test 
d410: 73 63 72 69 70 74 2c 20 77 65 20 63 61 6e 20 61  script, we can a
d420: 64 64 20 63 6f 64 65 20 6c 69 6b 65 20 74 68 69  dd code like thi
d430: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 69 66 20  s:.**.**     if 
d440: 7b 24 69 3d 3d 31 34 38 35 7d 20 62 72 65 61 6b  {$i==1485} break
d450: 70 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 65 6e  point.**.** Then
d460: 20 72 75 6e 20 74 65 73 74 66 69 78 74 75 72 65   run testfixture
d470: 20 69 6e 20 74 68 65 20 64 65 62 75 67 67 65 72   in the debugger
d480: 20 61 6e 64 20 77 61 69 74 20 66 6f 72 20 74 68   and wait for th
d490: 65 20 62 72 65 61 6b 70 6f 69 6e 74 20 74 6f 0a  e breakpoint to.
d4a0: 2a 2a 20 66 69 72 65 2e 20 20 54 68 65 6e 20 61  ** fire.  Then a
d4b0: 64 64 69 74 69 6f 6e 61 6c 20 62 72 65 61 6b 70  dditional breakp
d4c0: 6f 69 6e 74 73 20 63 61 6e 20 62 65 20 73 65 74  oints can be set
d4d0: 20 74 6f 20 74 72 61 63 65 20 64 6f 77 6e 20 74   to trace down t
d4e0: 68 65 20 62 75 67 2e 0a 2a 2f 0a 73 74 61 74 69  he bug..*/.stati
d4f0: 63 20 69 6e 74 20 74 65 73 74 5f 62 72 65 61 6b  c int test_break
d500: 70 6f 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a 4e  point(.  void *N
d510: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
d520: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
d530: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
d540: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
d550: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
d560: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d580: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
d590: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
d5a0: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
d5b0: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
d5c0: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
d5d0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
d5e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
d5f0: 6f 74 68 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f 2a 0a  othing */.}../*.
d600: 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
d610: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 20 53 54  te3_bind_int  ST
d620: 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a  MT N VALUE.**.**
d630: 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65   Test the sqlite
d640: 33 5f 62 69 6e 64 5f 69 6e 74 20 69 6e 74 65 72  3_bind_int inter
d650: 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61  face.  STMT is a
d660: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
d670: 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65  ent..** N is the
d680: 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64   index of a wild
d690: 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70  card in the prep
d6a0: 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20  ared statement. 
d6b0: 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a   This command.**
d6c0: 20 62 69 6e 64 73 20 61 20 33 32 2d 62 69 74 20   binds a 32-bit 
d6d0: 69 6e 74 65 67 65 72 20 56 41 4c 55 45 20 74 6f  integer VALUE to
d6e0: 20 74 68 61 74 20 77 69 6c 64 63 61 72 64 2e 0a   that wildcard..
d6f0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
d700: 73 74 5f 62 69 6e 64 5f 69 6e 74 28 0a 20 20 76  st_bind_int(.  v
d710: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
d720: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
d730: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
d740: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
d750: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
d760: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
d770: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b  Stmt;.  int idx;
d780: 0a 20 20 69 6e 74 20 76 61 6c 75 65 3b 0a 20 20  .  int value;.  
d790: 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
d7a0: 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63  bjc!=4 ){.    Tc
d7b0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
d7c0: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
d7d0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
d7e0: 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c  \"",.        Tcl
d7f0: 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
d800: 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
d810: 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20   STMT N VALUE", 
d820: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
d830: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
d840: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
d850: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
d860: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
d870: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
d880: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
d890: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
d8a0: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
d8b0: 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29  objv[2], &idx) )
d8c0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
d8d0: 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
d8e0: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
d8f0: 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c  p, objv[3], &val
d900: 75 65 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ue) ) return TCL
d910: 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
d920: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
d930: 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c  (pStmt, idx, val
d940: 75 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  ue);.  if( sqlit
d950: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
d960: 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70  terp, StmtToDb(p
d970: 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74  Stmt), rc) ) ret
d980: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
d990: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
d9a0: 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  OK ){.    return
d9b0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
d9c0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
d9d0: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  ;.}.../*.** Usag
d9e0: 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  e:   sqlite3_bin
d9f0: 64 5f 69 6e 74 36 34 20 20 53 54 4d 54 20 4e 20  d_int64  STMT N 
da00: 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74  VALUE.**.** Test
da10: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e   the sqlite3_bin
da20: 64 5f 69 6e 74 36 34 20 69 6e 74 65 72 66 61 63  d_int64 interfac
da30: 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72  e.  STMT is a pr
da40: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
da50: 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e  ..** N is the in
da60: 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72  dex of a wildcar
da70: 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  d in the prepare
da80: 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  d statement.  Th
da90: 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69  is command.** bi
daa0: 6e 64 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74  nds a 64-bit int
dab0: 65 67 65 72 20 56 41 4c 55 45 20 74 6f 20 74 68  eger VALUE to th
dac0: 61 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a  at wildcard..*/.
dad0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
dae0: 62 69 6e 64 5f 69 6e 74 36 34 28 0a 20 20 76 6f  bind_int64(.  vo
daf0: 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
db00: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
db10: 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
db20: 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
db30: 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
db40: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
db50: 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  tmt;.  int idx;.
db60: 20 20 69 36 34 20 76 61 6c 75 65 3b 0a 20 20 69    i64 value;.  i
db70: 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
db80: 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=4 ){.    Tcl
db90: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
dba0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
dbb0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
dbc0: 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  "",.        Tcl_
dbd0: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
dbe0: 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20  (objv[0], 0), " 
dbf0: 53 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20 30  STMT N VALUE", 0
dc00: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
dc10: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
dc20: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
dc30: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
dc40: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
dc50: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
dc60: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
dc70: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
dc80: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
dc90: 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20  bjv[2], &idx) ) 
dca0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
dcb0: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 57  ;.  if( Tcl_GetW
dcc0: 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  ideIntFromObj(in
dcd0: 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26  terp, objv[3], &
dce0: 76 61 6c 75 65 29 20 29 20 72 65 74 75 72 6e 20  value) ) return 
dcf0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63  TCL_ERROR;..  rc
dd00: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
dd10: 69 6e 74 36 34 28 70 53 74 6d 74 2c 20 69 64 78  int64(pStmt, idx
dd20: 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69 66 28 20  , value);.  if( 
dd30: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
dd40: 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54  de(interp, StmtT
dd50: 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20  oDb(pStmt), rc) 
dd60: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
dd70: 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  OR;.  if( rc!=SQ
dd80: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
dd90: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
dda0: 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54  .  }..  return T
ddb0: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  CL_OK;.}.../*.**
ddc0: 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65   Usage:   sqlite
ddd0: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 20 20 53  3_bind_double  S
dde0: 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a  TMT N VALUE.**.*
ddf0: 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74  * Test the sqlit
de00: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 20 69  e3_bind_double i
de10: 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20  nterface.  STMT 
de20: 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74  is a prepared st
de30: 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73  atement..** N is
de40: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
de50: 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20  wildcard in the 
de60: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
de70: 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e  nt.  This comman
de80: 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 36 34 2d  d.** binds a 64-
de90: 62 69 74 20 69 6e 74 65 67 65 72 20 56 41 4c 55  bit integer VALU
dea0: 45 20 74 6f 20 74 68 61 74 20 77 69 6c 64 63 61  E to that wildca
deb0: 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  rd..*/.static in
dec0: 74 20 74 65 73 74 5f 62 69 6e 64 5f 64 6f 75 62  t test_bind_doub
ded0: 6c 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  le(.  void * cli
dee0: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
def0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
df00: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
df10: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
df20: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
df30: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
df40: 6e 74 20 69 64 78 3b 0a 20 20 64 6f 75 62 6c 65  nt idx;.  double
df50: 20 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63   value;.  int rc
df60: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34  ;..  if( objc!=4
df70: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
df80: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
df90: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
dfa0: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
dfb0: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
dfc0: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
dfd0: 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20  [0], 0), " STMT 
dfe0: 4e 20 56 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20  N VALUE", 0);.  
dff0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
e000: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
e010: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
e020: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
e030: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
e040: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
e050: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
e060: 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
e070: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
e080: 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72  ], &idx) ) retur
e090: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
e0a0: 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65  f( Tcl_GetDouble
e0b0: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
e0c0: 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29  objv[3], &value)
e0d0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
e0e0: 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
e0f0: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
e100: 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c  (pStmt, idx, val
e110: 75 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  ue);.  if( sqlit
e120: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
e130: 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70  terp, StmtToDb(p
e140: 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74  Stmt), rc) ) ret
e150: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
e160: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
e170: 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  OK ){.    return
e180: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
e190: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
e1a0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
e1b0: 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
e1c0: 5f 6e 75 6c 6c 20 20 53 54 4d 54 20 4e 0a 2a 2a  _null  STMT N.**
e1d0: 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c  .** Test the sql
e1e0: 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 69  ite3_bind_null i
e1f0: 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20  nterface.  STMT 
e200: 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74  is a prepared st
e210: 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73  atement..** N is
e220: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
e230: 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20  wildcard in the 
e240: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
e250: 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e  nt.  This comman
e260: 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 4e 55 4c  d.** binds a NUL
e270: 4c 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72  L to the wildcar
e280: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
e290: 20 74 65 73 74 5f 62 69 6e 64 5f 6e 75 6c 6c 28   test_bind_null(
e2a0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
e2b0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
e2c0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
e2d0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
e2e0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
e2f0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
e300: 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
e310: 69 64 78 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  idx;.  int rc;..
e320: 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b    if( objc!=3 ){
e330: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
e340: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
e350: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
e360: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
e370: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
e380: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
e390: 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 22 2c  , 0), " STMT N",
e3a0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
e3b0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
e3c0: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
e3d0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
e3e0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
e3f0: 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
e400: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
e410: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
e420: 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
e430: 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20   objv[2], &idx) 
e440: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
e450: 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  OR;..  rc = sqli
e460: 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53  te3_bind_null(pS
e470: 74 6d 74 2c 20 69 64 78 29 3b 0a 20 20 69 66 28  tmt, idx);.  if(
e480: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
e490: 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74  ode(interp, Stmt
e4a0: 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29  ToDb(pStmt), rc)
e4b0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
e4c0: 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  ROR;.  if( rc!=S
e4d0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
e4e0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
e4f0: 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20  ;.  }..  return 
e500: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
e510: 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65   Usage:   sqlite
e520: 33 5f 62 69 6e 64 5f 74 65 78 74 20 20 53 54 4d  3_bind_text  STM
e530: 54 20 4e 20 53 54 52 49 4e 47 20 42 59 54 45 53  T N STRING BYTES
e540: 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20  .**.** Test the 
e550: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
e560: 74 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54  t interface.  ST
e570: 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64  MT is a prepared
e580: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e   statement..** N
e590: 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
e5a0: 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74   a wildcard in t
e5b0: 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
e5c0: 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d  ement.  This com
e5d0: 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20  mand.** binds a 
e5e0: 55 54 46 2d 38 20 73 74 72 69 6e 67 20 53 54 52  UTF-8 string STR
e5f0: 49 4e 47 20 74 6f 20 74 68 65 20 77 69 6c 64 63  ING to the wildc
e600: 61 72 64 2e 20 20 54 68 65 20 73 74 72 69 6e 67  ard.  The string
e610: 20 69 73 20 42 59 54 45 53 20 62 79 74 65 73 0a   is BYTES bytes.
e620: 2a 2a 20 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74  ** long..*/.stat
e630: 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64  ic int test_bind
e640: 5f 74 65 78 74 28 0a 20 20 76 6f 69 64 20 2a 20  _text(.  void * 
e650: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
e660: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
e670: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
e680: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
e690: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
e6a0: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
e6b0: 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74    int idx;.  int
e6c0: 20 62 79 74 65 73 3b 0a 20 20 63 68 61 72 20 2a   bytes;.  char *
e6d0: 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b  value;.  int rc;
e6e0: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20  ..  if( objc!=5 
e6f0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
e700: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
e710: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
e720: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
e730: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
e740: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
e750: 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e  0], 0), " STMT N
e760: 20 56 41 4c 55 45 20 42 59 54 45 53 22 2c 20 30   VALUE BYTES", 0
e770: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
e780: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
e790: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
e7a0: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
e7b0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
e7c0: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
e7d0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
e7e0: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
e7f0: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
e800: 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20  bjv[2], &idx) ) 
e810: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
e820: 3b 0a 20 20 76 61 6c 75 65 20 3d 20 54 63 6c 5f  ;.  value = Tcl_
e830: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33  GetString(objv[3
e840: 5d 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  ]);.  if( Tcl_Ge
e850: 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
e860: 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 62 79  rp, objv[4], &by
e870: 74 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43  tes) ) return TC
e880: 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d  L_ERROR;..  rc =
e890: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
e8a0: 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76  xt(pStmt, idx, v
e8b0: 61 6c 75 65 2c 20 62 79 74 65 73 2c 20 53 51 4c  alue, bytes, SQL
e8c0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
e8d0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
e8e0: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
e8f0: 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29   StmtToDb(pStmt)
e900: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
e910: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
e920: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
e930: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
e940: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71  esult(interp, sq
e950: 6c 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61  lite3TestErrorNa
e960: 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20  me(rc), 0);.    
e970: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
e980: 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20  ;.  }..  return 
e990: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
e9a0: 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65   Usage:   sqlite
e9b0: 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 3f 2d  3_bind_text16 ?-
e9c0: 73 74 61 74 69 63 3f 20 53 54 4d 54 20 4e 20 53  static? STMT N S
e9d0: 54 52 49 4e 47 20 42 59 54 45 53 0a 2a 2a 0a 2a  TRING BYTES.**.*
e9e0: 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74  * Test the sqlit
e9f0: 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 69  e3_bind_text16 i
ea00: 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20  nterface.  STMT 
ea10: 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74  is a prepared st
ea20: 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73  atement..** N is
ea30: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
ea40: 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20  wildcard in the 
ea50: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
ea60: 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e  nt.  This comman
ea70: 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55 54 46  d.** binds a UTF
ea80: 2d 31 36 20 73 74 72 69 6e 67 20 53 54 52 49 4e  -16 string STRIN
ea90: 47 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72  G to the wildcar
eaa0: 64 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20 69  d.  The string i
eab0: 73 20 42 59 54 45 53 20 62 79 74 65 73 0a 2a 2a  s BYTES bytes.**
eac0: 20 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63   long..*/.static
ead0: 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 74   int test_bind_t
eae0: 65 78 74 31 36 28 0a 20 20 76 6f 69 64 20 2a 20  ext16(.  void * 
eaf0: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
eb00: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
eb10: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
eb20: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
eb30: 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66  bjv[].){.#ifndef
eb40: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
eb50: 31 36 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  16.  sqlite3_stm
eb60: 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
eb70: 69 64 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73  idx;.  int bytes
eb80: 3b 0a 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b  ;.  char *value;
eb90: 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 76 6f  .  int rc;..  vo
eba0: 69 64 20 28 2a 78 44 65 6c 29 28 29 20 3d 20 28  id (*xDel)() = (
ebb0: 6f 62 6a 63 3d 3d 36 3f 53 51 4c 49 54 45 5f 53  objc==6?SQLITE_S
ebc0: 54 41 54 49 43 3a 53 51 4c 49 54 45 5f 54 52 41  TATIC:SQLITE_TRA
ebd0: 4e 53 49 45 4e 54 29 3b 0a 20 20 54 63 6c 5f 4f  NSIENT);.  Tcl_O
ebe0: 62 6a 20 2a 6f 53 74 6d 74 20 20 20 20 3d 20 6f  bj *oStmt    = o
ebf0: 62 6a 76 5b 6f 62 6a 63 2d 34 5d 3b 0a 20 20 54  bjv[objc-4];.  T
ec00: 63 6c 5f 4f 62 6a 20 2a 6f 4e 20 20 20 20 20 20  cl_Obj *oN      
ec10: 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 33 5d 3b   = objv[objc-3];
ec20: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 53 74 72  .  Tcl_Obj *oStr
ec30: 69 6e 67 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63  ing  = objv[objc
ec40: 2d 32 5d 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  -2];.  Tcl_Obj *
ec50: 6f 42 79 74 65 73 20 20 20 3d 20 6f 62 6a 76 5b  oBytes   = objv[
ec60: 6f 62 6a 63 2d 31 5d 3b 0a 0a 20 20 69 66 28 20  objc-1];..  if( 
ec70: 6f 62 6a 63 21 3d 35 20 26 26 20 6f 62 6a 63 21  objc!=5 && objc!
ec80: 3d 36 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  =6){.    Tcl_App
ec90: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
eca0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
ecb0: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
ecc0: 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53          Tcl_GetS
ecd0: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
ece0: 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54  v[0], 0), " STMT
ecf0: 20 4e 20 56 41 4c 55 45 20 42 59 54 45 53 22 2c   N VALUE BYTES",
ed00: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
ed10: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
ed20: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
ed30: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
ed40: 5f 47 65 74 53 74 72 69 6e 67 28 6f 53 74 6d 74  _GetString(oStmt
ed50: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
ed60: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
ed70: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
ed80: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
ed90: 4e 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72  N, &idx) ) retur
eda0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76  n TCL_ERROR;.  v
edb0: 61 6c 75 65 20 3d 20 28 63 68 61 72 2a 29 54 63  alue = (char*)Tc
edc0: 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79 46 72  l_GetByteArrayFr
edd0: 6f 6d 4f 62 6a 28 6f 53 74 72 69 6e 67 2c 20 30  omObj(oString, 0
ede0: 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  );.  if( Tcl_Get
edf0: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
ee00: 70 2c 20 6f 42 79 74 65 73 2c 20 26 62 79 74 65  p, oBytes, &byte
ee10: 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  s) ) return TCL_
ee20: 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73  ERROR;..  rc = s
ee30: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
ee40: 31 36 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 28  16(pStmt, idx, (
ee50: 76 6f 69 64 20 2a 29 76 61 6c 75 65 2c 20 62 79  void *)value, by
ee60: 74 65 73 2c 20 78 44 65 6c 29 3b 0a 20 20 69 66  tes, xDel);.  if
ee70: 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
ee80: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d  Code(interp, Stm
ee90: 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63  tToDb(pStmt), rc
eea0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
eeb0: 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d  RROR;.  if( rc!=
eec0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
eed0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
eee0: 52 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66 20 2f  R;.  }..#endif /
eef0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
ef00: 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20  F16 */.  return 
ef10: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
ef20: 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65   Usage:   sqlite
ef30: 33 5f 62 69 6e 64 5f 62 6c 6f 62 20 20 53 54 4d  3_bind_blob  STM
ef40: 54 20 4e 20 44 41 54 41 20 42 59 54 45 53 0a 2a  T N DATA BYTES.*
ef50: 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71  *.** Test the sq
ef60: 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 20  lite3_bind_blob 
ef70: 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54  interface.  STMT
ef80: 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73   is a prepared s
ef90: 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69  tatement..** N i
efa0: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
efb0: 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65   wildcard in the
efc0: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
efd0: 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61  ent.  This comma
efe0: 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 42 4c  nd.** binds a BL
eff0: 4f 42 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61  OB to the wildca
f000: 72 64 2e 20 20 54 68 65 20 42 4c 4f 42 20 69 73  rd.  The BLOB is
f010: 20 42 59 54 45 53 20 62 79 74 65 73 20 69 6e 20   BYTES bytes in 
f020: 73 69 7a 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  size..*/.static 
f030: 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 62 6c  int test_bind_bl
f040: 6f 62 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  ob(.  void * cli
f050: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
f060: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
f070: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
f080: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
f090: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
f0a0: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
f0b0: 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 62 79  nt idx;.  int by
f0c0: 74 65 73 3b 0a 20 20 63 68 61 72 20 2a 76 61 6c  tes;.  char *val
f0d0: 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  ue;.  int rc;.. 
f0e0: 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a   if( objc!=5 ){.
f0f0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
f100: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
f110: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
f120: 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
f130: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
f140: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
f150: 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 44 41   0), " STMT N DA
f160: 54 41 20 42 59 54 45 53 22 2c 20 30 29 3b 0a 20  TA BYTES", 0);. 
f170: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
f180: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
f190: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
f1a0: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
f1b0: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
f1c0: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
f1d0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
f1e0: 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
f1f0: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
f200: 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74 75  2], &idx) ) retu
f210: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
f220: 76 61 6c 75 65 20 3d 20 54 63 6c 5f 47 65 74 53  value = Tcl_GetS
f230: 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a  tring(objv[3]);.
f240: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
f250: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
f260: 6f 62 6a 76 5b 34 5d 2c 20 26 62 79 74 65 73 29  objv[4], &bytes)
f270: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
f280: 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
f290: 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 70  ite3_bind_blob(p
f2a0: 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65  Stmt, idx, value
f2b0: 2c 20 62 79 74 65 73 2c 20 53 51 4c 49 54 45 5f  , bytes, SQLITE_
f2c0: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 69 66  TRANSIENT);.  if
f2d0: 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
f2e0: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d  Code(interp, Stm
f2f0: 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63  tToDb(pStmt), rc
f300: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
f310: 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d  RROR;.  if( rc!=
f320: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
f330: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f340: 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  R;.  }..  return
f350: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
f360: 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
f370: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
f380: 72 5f 63 6f 75 6e 74 20 20 53 54 4d 54 0a 2a 2a  r_count  STMT.**
f390: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
f3a0: 75 6d 62 65 72 20 6f 66 20 77 69 6c 64 63 61 72  umber of wildcar
f3b0: 64 73 20 69 6e 20 74 68 65 20 67 69 76 65 6e 20  ds in the given 
f3c0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  statement..*/.st
f3d0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69  atic int test_bi
f3e0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75  nd_parameter_cou
f3f0: 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  nt(.  void * cli
f400: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
f410: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
f420: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
f430: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
f440: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
f450: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20  stmt *pStmt;..  
f460: 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
f470: 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
f480: 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
f490: 62 6a 76 2c 20 22 53 54 4d 54 22 29 3b 0a 20 20  bjv, "STMT");.  
f4a0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
f4b0: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
f4c0: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
f4d0: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
f4e0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
f4f0: 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
f500: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53  L_ERROR;.  Tcl_S
f510: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
f520: 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
f530: 6a 28 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  j(sqlite3_bind_p
f540: 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 70  arameter_count(p
f550: 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72  Stmt)));.  retur
f560: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
f570: 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
f580: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
f590: 65 72 5f 6e 61 6d 65 20 20 53 54 4d 54 20 20 4e  er_name  STMT  N
f5a0: 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
f5b0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 4e 74  e name of the Nt
f5c0: 68 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65  h wildcard.  The
f5d0: 20 66 69 72 73 74 20 77 69 6c 64 63 61 72 64 20   first wildcard 
f5e0: 69 73 20 31 2e 0a 2a 2a 20 41 6e 20 65 6d 70 74  is 1..** An empt
f5f0: 79 20 73 74 72 69 6e 67 20 69 73 20 72 65 74 75  y string is retu
f600: 72 6e 65 64 20 69 66 20 4e 20 69 73 20 6f 75 74  rned if N is out
f610: 20 6f 66 20 72 61 6e 67 65 20 6f 72 20 69 66 20   of range or if 
f620: 74 68 65 20 77 69 6c 64 63 61 72 64 0a 2a 2a 20  the wildcard.** 
f630: 69 73 20 6e 61 6d 65 6c 65 73 73 2e 0a 2a 2f 0a  is nameless..*/.
f640: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
f650: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
f660: 61 6d 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ame(.  void * cl
f670: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
f680: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
f690: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
f6a0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
f6b0: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
f6c0: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
f6d0: 69 6e 74 20 69 3b 0a 0a 20 20 69 66 28 20 6f 62  int i;..  if( ob
f6e0: 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
f6f0: 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
f700: 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
f710: 53 54 4d 54 20 4e 22 29 3b 0a 20 20 20 20 72 65  STMT N");.    re
f720: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
f730: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d    }.  if( getStm
f740: 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
f750: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
f760: 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
f770: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
f780: 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
f790: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
f7a0: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69  erp, objv[2], &i
f7b0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
f7c0: 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  RROR;.  Tcl_SetO
f7d0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
f7e0: 20 0a 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74   .     Tcl_NewSt
f7f0: 72 69 6e 67 4f 62 6a 28 73 71 6c 69 74 65 33 5f  ringObj(sqlite3_
f800: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e  bind_parameter_n
f810: 61 6d 65 28 70 53 74 6d 74 2c 69 29 2c 2d 31 29  ame(pStmt,i),-1)
f820: 0a 20 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  .  );.  return T
f830: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
f840: 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
f850: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
f860: 69 6e 64 65 78 20 20 53 54 4d 54 20 20 4e 41 4d  index  STMT  NAM
f870: 45 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  E.**.** Return t
f880: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
f890: 77 69 6c 64 63 61 72 64 20 63 61 6c 6c 65 64 20  wildcard called 
f8a0: 4e 41 4d 45 2e 20 20 52 65 74 75 72 6e 20 30 20  NAME.  Return 0 
f8b0: 69 66 20 74 68 65 72 65 20 69 73 0a 2a 2a 20 6e  if there is.** n
f8c0: 6f 20 73 75 63 68 20 77 69 6c 64 63 61 72 64 2e  o such wildcard.
f8d0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
f8e0: 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  est_bind_paramet
f8f0: 65 72 5f 69 6e 64 65 78 28 0a 20 20 76 6f 69 64  er_index(.  void
f900: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
f910: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
f920: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
f930: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
f940: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
f950: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
f960: 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  t;..  if( objc!=
f970: 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  3 ){.    Tcl_Wro
f980: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
f990: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54  , 1, objv, "STMT
f9a0: 20 4e 41 4d 45 22 29 3b 0a 20 20 20 20 72 65 74   NAME");.    ret
f9b0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
f9c0: 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74   }.  if( getStmt
f9d0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
f9e0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
f9f0: 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
fa00: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
fa10: 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  OR;.  Tcl_SetObj
fa20: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a  Result(interp, .
fa30: 20 20 20 20 20 54 63 6c 5f 4e 65 77 49 6e 74 4f       Tcl_NewIntO
fa40: 62 6a 28 0a 20 20 20 20 20 20 20 73 71 6c 69 74  bj(.       sqlit
fa50: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
fa60: 72 5f 69 6e 64 65 78 28 70 53 74 6d 74 2c 54 63  r_index(pStmt,Tc
fa70: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
fa80: 5b 32 5d 29 29 0a 20 20 20 20 20 29 0a 20 20 29  [2])).     ).  )
fa90: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
faa0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
fab0: 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 65  e:   sqlite3_cle
fac0: 61 72 5f 62 69 6e 64 69 6e 67 73 20 53 54 4d 54  ar_bindings STMT
fad0: 0a 2a 2a 0a 2a 2f 0a 23 69 66 20 30 0a 73 74 61  .**.*/.#if 0.sta
fae0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6c 65  tic int test_cle
faf0: 61 72 5f 62 69 6e 64 69 6e 67 73 28 0a 20 20 76  ar_bindings(.  v
fb00: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
fb10: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
fb20: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
fb30: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
fb40: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
fb50: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
fb60: 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  Stmt;..  if( obj
fb70: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
fb80: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
fb90: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53  erp, 1, objv, "S
fba0: 54 4d 54 22 29 3b 0a 20 20 20 20 72 65 74 75 72  TMT");.    retur
fbb0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
fbc0: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
fbd0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
fbe0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
fbf0: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
fc00: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
fc10: 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
fc20: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
fc30: 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74  _NewIntObj(sqlit
fc40: 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67  e3_clear_binding
fc50: 73 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65  s(pStmt)));.  re
fc60: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23  turn TCL_OK;.}.#
fc70: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  endif../*.** Usa
fc80: 67 65 3a 20 73 71 6c 69 74 65 33 5f 65 72 72 63  ge: sqlite3_errc
fc90: 6f 64 65 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74  ode DB.**.** Ret
fca0: 75 72 6e 20 74 68 65 20 73 74 72 69 6e 67 20 72  urn the string r
fcb0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
fcc0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
fcd0: 20 73 71 6c 69 74 65 33 5f 2a 20 41 50 49 0a 2a   sqlite3_* API.*
fce0: 2a 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 65 2e  * error code. e.
fcf0: 67 2e 20 22 53 51 4c 49 54 45 5f 45 52 52 4f 52  g. "SQLITE_ERROR
fd00: 22 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  "..*/.static int
fd10: 20 74 65 73 74 5f 65 72 72 63 6f 64 65 28 0a 20   test_errcode(. 
fd20: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
fd30: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
fd40: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
fd50: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
fd60: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
fd70: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
fd80: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
fd90: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
fda0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
fdb0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
fdc0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
fdd0: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
fde0: 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44  ng(objv[0]), " D
fdf0: 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  B", 0);.    retu
fe00: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
fe10: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
fe20: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
fe30: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
fe40: 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
fe50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
fe60: 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
fe70: 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72  terp, (char *)er
fe80: 72 6f 72 4e 61 6d 65 28 73 71 6c 69 74 65 33 5f  rorName(sqlite3_
fe90: 65 72 72 63 6f 64 65 28 64 62 29 29 2c 20 30 29  errcode(db)), 0)
fea0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
feb0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
fec0: 65 3a 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67  e:   test_errmsg
fed0: 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e   DB.**.** Return
fee0: 73 20 74 68 65 20 55 54 46 2d 38 20 72 65 70 72  s the UTF-8 repr
fef0: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
ff00: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
ff10: 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 0a 2a  string for the.*
ff20: 2a 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71  * most recent sq
ff30: 6c 69 74 65 33 5f 2a 20 41 50 49 20 63 61 6c 6c  lite3_* API call
ff40: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
ff50: 74 65 73 74 5f 65 72 72 6d 73 67 28 0a 20 20 76  test_errmsg(.  v
ff60: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
ff70: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
ff80: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
ff90: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
ffa0: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
ffb0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
ffc0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72  const char *zErr
ffd0: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
ffe0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
fff0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
10000 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
10010 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
10020 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
10030 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
10040 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   DB", 0);.    re
10050 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10060 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
10070 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
10080 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
10090 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
100a0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
100b0 0a 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65  .  zErr = sqlite
100c0 33 5f 65 72 72 6d 73 67 28 64 62 29 3b 0a 20 20  3_errmsg(db);.  
100d0 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
100e0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
100f0 53 74 72 69 6e 67 4f 62 6a 28 7a 45 72 72 2c 20  StringObj(zErr, 
10100 2d 31 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  -1));.  return T
10110 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
10120 55 73 61 67 65 3a 20 20 20 74 65 73 74 5f 65 72  Usage:   test_er
10130 72 6d 73 67 31 36 20 44 42 0a 2a 2a 0a 2a 2a 20  rmsg16 DB.**.** 
10140 52 65 74 75 72 6e 73 20 74 68 65 20 55 54 46 2d  Returns the UTF-
10150 31 36 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  16 representatio
10160 6e 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 6d  n of the error m
10170 65 73 73 61 67 65 20 73 74 72 69 6e 67 20 66 6f  essage string fo
10180 72 20 74 68 65 0a 2a 2a 20 6d 6f 73 74 20 72 65  r the.** most re
10190 63 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20 41  cent sqlite3_* A
101a0 50 49 20 63 61 6c 6c 2e 20 54 68 69 73 20 69 73  PI call. This is
101b0 20 61 20 62 79 74 65 20 61 72 72 61 79 20 6f 62   a byte array ob
101c0 6a 65 63 74 20 61 74 20 74 68 65 20 54 43 4c 20  ject at the TCL 
101d0 0a 2a 2a 20 6c 65 76 65 6c 2c 20 61 6e 64 20 69  .** level, and i
101e0 74 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20 30  t includes the 0
101f0 78 30 30 20 30 78 30 30 20 74 65 72 6d 69 6e 61  x00 0x00 termina
10200 74 6f 72 20 62 79 74 65 73 20 61 74 20 74 68 65  tor bytes at the
10210 20 65 6e 64 20 6f 66 20 74 68 65 0a 2a 2a 20 55   end of the.** U
10220 54 46 2d 31 36 20 73 74 72 69 6e 67 2e 0a 2a 2f  TF-16 string..*/
10230 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
10240 5f 65 72 72 6d 73 67 31 36 28 0a 20 20 76 6f 69  _errmsg16(.  voi
10250 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
10260 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
10270 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
10280 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
10290 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66  ST objv[].){.#if
102a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
102b0 5f 55 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33  _UTF16.  sqlite3
102c0 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 76 6f   *db;.  const vo
102d0 69 64 20 2a 7a 45 72 72 3b 0a 20 20 69 6e 74 20  id *zErr;.  int 
102e0 62 79 74 65 73 20 3d 20 30 3b 0a 0a 20 20 69 66  bytes = 0;..  if
102f0 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
10300 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
10310 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
10320 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
10330 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
10340 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
10350 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30  jv[0]), " DB", 0
10360 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
10370 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
10380 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
10390 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
103a0 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
103b0 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
103c0 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a 45 72 72  L_ERROR;..  zErr
103d0 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73   = sqlite3_errms
103e0 67 31 36 28 64 62 29 3b 0a 20 20 69 66 28 20 7a  g16(db);.  if( z
103f0 45 72 72 20 29 7b 0a 20 20 20 20 62 79 74 65 73  Err ){.    bytes
10400 20 3d 20 73 71 6c 69 74 65 33 75 74 66 31 36 42   = sqlite3utf16B
10410 79 74 65 4c 65 6e 28 7a 45 72 72 2c 20 2d 31 29  yteLen(zErr, -1)
10420 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74 4f  ;.  }.  Tcl_SetO
10430 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
10440 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61   Tcl_NewByteArra
10450 79 4f 62 6a 28 7a 45 72 72 2c 20 62 79 74 65 73  yObj(zErr, bytes
10460 29 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ));.#endif /* SQ
10470 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
10480 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
10490 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
104a0 67 65 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ge: sqlite3_prep
104b0 61 72 65 20 44 42 20 73 71 6c 20 62 79 74 65 73  are DB sql bytes
104c0 20 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43   tailvar.**.** C
104d0 6f 6d 70 69 6c 65 20 75 70 20 74 6f 20 3c 62 79  ompile up to <by
104e0 74 65 73 3e 20 62 79 74 65 73 20 6f 66 20 74 68  tes> bytes of th
104f0 65 20 73 75 70 70 6c 69 65 64 20 53 51 4c 20 73  e supplied SQL s
10500 74 72 69 6e 67 20 3c 73 71 6c 3e 20 75 73 69 6e  tring <sql> usin
10510 67 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 68 61  g.** database ha
10520 6e 64 6c 65 20 3c 44 42 3e 2e 20 54 68 65 20 70  ndle <DB>. The p
10530 61 72 61 6d 65 74 65 72 20 3c 74 61 69 6c 76 61  arameter <tailva
10540 6c 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  l> is the name o
10550 66 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61  f a global.** va
10560 72 69 61 62 6c 65 20 74 68 61 74 20 69 73 20 73  riable that is s
10570 65 74 20 74 6f 20 74 68 65 20 75 6e 75 73 65 64  et to the unused
10580 20 70 6f 72 74 69 6f 6e 20 6f 66 20 3c 73 71 6c   portion of <sql
10590 3e 20 28 69 66 20 61 6e 79 29 2e 20 41 0a 2a 2a  > (if any). A.**
105a0 20 53 54 4d 54 20 68 61 6e 64 6c 65 20 69 73 20   STMT handle is 
105b0 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61  returned..*/.sta
105c0 74 69 63 20 69 6e 74 20 74 65 73 74 5f 70 72 65  tic int test_pre
105d0 70 61 72 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  pare(.  void * c
105e0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
105f0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
10600 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
10610 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
10620 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
10630 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63  3 *db;.  const c
10640 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e 74  har *zSql;.  int
10650 20 62 79 74 65 73 3b 0a 20 20 63 6f 6e 73 74 20   bytes;.  const 
10660 63 68 61 72 20 2a 7a 54 61 69 6c 20 3d 20 30 3b  char *zTail = 0;
10670 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
10680 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68  *pStmt = 0;.  ch
10690 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20 69  ar zBuf[50];.  i
106a0 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
106b0 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=5 ){.    Tcl
106c0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
106d0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
106e0 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
106f0 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
10700 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
10710 5d 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79 74  ]), " DB sql byt
10720 65 73 20 74 61 69 6c 76 61 72 22 2c 20 30 29 3b  es tailvar", 0);
10730 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
10740 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
10750 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
10760 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
10770 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
10780 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
10790 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d 20  ERROR;.  zSql = 
107a0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
107b0 6a 76 5b 32 5d 29 3b 0a 20 20 69 66 28 20 54 63  jv[2]);.  if( Tc
107c0 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
107d0 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c  interp, objv[3],
107e0 20 26 62 79 74 65 73 29 20 29 20 72 65 74 75 72   &bytes) ) retur
107f0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
10800 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65  rc = sqlite3_pre
10810 70 61 72 65 28 64 62 2c 20 7a 53 71 6c 2c 20 62  pare(db, zSql, b
10820 79 74 65 73 2c 20 26 70 53 74 6d 74 2c 20 26 7a  ytes, &pStmt, &z
10830 54 61 69 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c  Tail);.  if( sql
10840 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
10850 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20  interp, db, rc) 
10860 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
10870 4f 52 3b 0a 20 20 69 66 28 20 7a 54 61 69 6c 20  OR;.  if( zTail 
10880 29 7b 0a 20 20 20 20 69 66 28 20 62 79 74 65 73  ){.    if( bytes
10890 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 79 74  >=0 ){.      byt
108a0 65 73 20 3d 20 62 79 74 65 73 20 2d 20 28 7a 54  es = bytes - (zT
108b0 61 69 6c 2d 7a 53 71 6c 29 3b 0a 20 20 20 20 7d  ail-zSql);.    }
108c0 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56  .    Tcl_ObjSetV
108d0 61 72 32 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  ar2(interp, objv
108e0 5b 34 5d 2c 20 30 2c 20 54 63 6c 5f 4e 65 77 53  [4], 0, Tcl_NewS
108f0 74 72 69 6e 67 4f 62 6a 28 7a 54 61 69 6c 2c 20  tringObj(zTail, 
10900 62 79 74 65 73 29 2c 20 30 29 3b 0a 20 20 7d 0a  bytes), 0);.  }.
10910 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
10920 5f 4f 4b 20 29 7b 0a 20 20 20 20 61 73 73 65 72  _OK ){.    asser
10930 74 28 20 70 53 74 6d 74 3d 3d 30 20 29 3b 0a 20  t( pStmt==0 );. 
10940 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c     sprintf(zBuf,
10950 20 22 28 25 64 29 20 22 2c 20 72 63 29 3b 0a 20   "(%d) ", rc);. 
10960 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
10970 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
10980 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
10990 28 64 62 29 2c 20 30 29 3b 0a 20 20 20 20 72 65  (db), 0);.    re
109a0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
109b0 20 20 7d 0a 0a 20 20 69 66 28 20 70 53 74 6d 74    }..  if( pStmt
109c0 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   ){.    if( sqli
109d0 74 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74  te3TestMakePoint
109e0 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42  erStr(interp, zB
109f0 75 66 2c 20 70 53 74 6d 74 29 20 29 20 72 65 74  uf, pStmt) ) ret
10a00 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
10a10 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
10a20 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
10a30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  , 0);.  }.  retu
10a40 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
10a50 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
10a60 65 33 5f 70 72 65 70 61 72 65 20 44 42 20 73 71  e3_prepare DB sq
10a70 6c 20 62 79 74 65 73 20 74 61 69 6c 76 61 72 0a  l bytes tailvar.
10a80 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 75 70  **.** Compile up
10a90 20 74 6f 20 3c 62 79 74 65 73 3e 20 62 79 74 65   to <bytes> byte
10aa0 73 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65  s of the supplie
10ab0 64 20 53 51 4c 20 73 74 72 69 6e 67 20 3c 73 71  d SQL string <sq
10ac0 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20 64 61 74 61  l> using.** data
10ad0 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 44 42 3e  base handle <DB>
10ae0 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20  . The parameter 
10af0 3c 74 61 69 6c 76 61 6c 3e 20 69 73 20 74 68 65  <tailval> is the
10b00 20 6e 61 6d 65 20 6f 66 20 61 20 67 6c 6f 62 61   name of a globa
10b10 6c 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 74 68  l.** variable th
10b20 61 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  at is set to the
10b30 20 75 6e 75 73 65 64 20 70 6f 72 74 69 6f 6e 20   unused portion 
10b40 6f 66 20 3c 73 71 6c 3e 20 28 69 66 20 61 6e 79  of <sql> (if any
10b50 29 2e 20 41 0a 2a 2a 20 53 54 4d 54 20 68 61 6e  ). A.** STMT han
10b60 64 6c 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e  dle is returned.
10b70 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
10b80 65 73 74 5f 70 72 65 70 61 72 65 31 36 28 0a 20  est_prepare16(. 
10b90 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
10ba0 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
10bb0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
10bc0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
10bd0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
10be0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
10bf0 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c  OMIT_UTF16.  sql
10c00 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73  ite3 *db;.  cons
10c10 74 20 76 6f 69 64 20 2a 7a 53 71 6c 3b 0a 20 20  t void *zSql;.  
10c20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 54 61 69  const void *zTai
10c30 6c 20 3d 20 30 3b 0a 20 20 54 63 6c 5f 4f 62 6a  l = 0;.  Tcl_Obj
10c40 20 2a 70 54 61 69 6c 20 3d 20 30 3b 0a 20 20 73   *pTail = 0;.  s
10c50 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
10c60 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a  mt = 0;.  char z
10c70 42 75 66 5b 35 30 5d 3b 20 0a 20 20 69 6e 74 20  Buf[50]; .  int 
10c80 72 63 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b  rc;.  int bytes;
10c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ca0 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 73  /* The integer s
10cb0 70 65 63 69 66 69 65 64 20 61 73 20 61 72 67 20  pecified as arg 
10cc0 33 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 6c 65  3 */.  int objle
10cd0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
10ce0 20 2f 2a 20 54 68 65 20 62 79 74 65 2d 61 72 72   /* The byte-arr
10cf0 61 79 20 6c 65 6e 67 74 68 20 6f 66 20 61 72 67  ay length of arg
10d00 20 32 20 2a 2f 0a 0a 20 20 69 66 28 20 6f 62 6a   2 */..  if( obj
10d10 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=5 ){.    Tcl_
10d20 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
10d30 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
10d40 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
10d50 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
10d60 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
10d70 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79 74 65  ), " DB sql byte
10d80 73 20 74 61 69 6c 76 61 72 22 2c 20 30 29 3b 0a  s tailvar", 0);.
10d90 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
10da0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
10db0 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
10dc0 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
10dd0 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
10de0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
10df0 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d 20 54  RROR;.  zSql = T
10e00 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79 46  cl_GetByteArrayF
10e10 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20  romObj(objv[2], 
10e20 26 6f 62 6a 6c 65 6e 29 3b 0a 20 20 69 66 28 20  &objlen);.  if( 
10e30 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
10e40 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33  j(interp, objv[3
10e50 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74  ], &bytes) ) ret
10e60 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
10e70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
10e80 72 65 70 61 72 65 31 36 28 64 62 2c 20 7a 53 71  repare16(db, zSq
10e90 6c 2c 20 62 79 74 65 73 2c 20 26 70 53 74 6d 74  l, bytes, &pStmt
10ea0 2c 20 26 7a 54 61 69 6c 29 3b 0a 20 20 69 66 28  , &zTail);.  if(
10eb0 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
10ec0 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
10ed0 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
10ee0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63  _ERROR;.  if( rc
10ef0 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
10f00 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
10f10 20 69 66 28 20 7a 54 61 69 6c 20 29 7b 0a 20 20   if( zTail ){.  
10f20 20 20 6f 62 6a 6c 65 6e 20 3d 20 6f 62 6a 6c 65    objlen = objle
10f30 6e 20 2d 20 28 28 75 38 20 2a 29 7a 54 61 69 6c  n - ((u8 *)zTail
10f40 2d 28 75 38 20 2a 29 7a 53 71 6c 29 3b 0a 20 20  -(u8 *)zSql);.  
10f50 7d 65 6c 73 65 7b 0a 20 20 20 20 6f 62 6a 6c 65  }else{.    objle
10f60 6e 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 54 61  n = 0;.  }.  pTa
10f70 69 6c 20 3d 20 54 63 6c 5f 4e 65 77 42 79 74 65  il = Tcl_NewByte
10f80 41 72 72 61 79 4f 62 6a 28 28 75 38 20 2a 29 7a  ArrayObj((u8 *)z
10f90 54 61 69 6c 2c 20 6f 62 6a 6c 65 6e 29 3b 0a 20  Tail, objlen);. 
10fa0 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e   Tcl_IncrRefCoun
10fb0 74 28 70 54 61 69 6c 29 3b 0a 20 20 54 63 6c 5f  t(pTail);.  Tcl_
10fc0 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72  ObjSetVar2(inter
10fd0 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30 2c 20 70  p, objv[4], 0, p
10fe0 54 61 69 6c 2c 20 30 29 3b 0a 20 20 54 63 6c 5f  Tail, 0);.  Tcl_
10ff0 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 54 61  DecrRefCount(pTa
11000 69 6c 29 3b 0a 0a 20 20 69 66 28 20 70 53 74 6d  il);..  if( pStm
11010 74 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c  t ){.    if( sql
11020 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e  ite3TestMakePoin
11030 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a  terStr(interp, z
11040 42 75 66 2c 20 70 53 74 6d 74 29 20 29 20 72 65  Buf, pStmt) ) re
11050 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
11060 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64    }.  Tcl_Append
11070 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
11080 42 75 66 2c 20 30 29 3b 0a 23 65 6e 64 69 66 20  Buf, 0);.#endif 
11090 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
110a0 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e  TF16 */.  return
110b0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
110c0 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
110d0 5f 6f 70 65 6e 20 66 69 6c 65 6e 61 6d 65 20 3f  _open filename ?
110e0 6f 70 74 69 6f 6e 73 2d 6c 69 73 74 3f 0a 2a 2f  options-list?.*/
110f0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
11100 5f 6f 70 65 6e 28 0a 20 20 76 6f 69 64 20 2a 20  _open(.  void * 
11110 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
11120 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
11130 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
11140 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
11150 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 6f 6e 73 74  bjv[].){.  const
11160 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
11170 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  ;.  sqlite3 *db;
11180 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61  .  int rc;.  cha
11190 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a 0a 20 20  r zBuf[100];..  
111a0 69 66 28 20 6f 62 6a 63 21 3d 33 20 26 26 20 6f  if( objc!=3 && o
111b0 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
111c0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
111d0 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
111e0 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
111f0 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
11200 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
11210 30 5d 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65 20  0]), " filename 
11220 6f 70 74 69 6f 6e 73 2d 6c 69 73 74 22 2c 20 30  options-list", 0
11230 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
11240 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
11250 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 54 63 6c 5f  zFilename = Tcl_
11260 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
11270 5d 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ]);.  rc = sqlit
11280 65 33 5f 6f 70 65 6e 28 7a 46 69 6c 65 6e 61 6d  e3_open(zFilenam
11290 65 2c 20 26 64 62 29 3b 0a 20 20 0a 20 20 69 66  e, &db);.  .  if
112a0 28 20 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b  ( sqlite3TestMak
112b0 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65  ePointerStr(inte
112c0 72 70 2c 20 7a 42 75 66 2c 20 64 62 29 20 29 20  rp, zBuf, db) ) 
112d0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
112e0 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  ;.  Tcl_AppendRe
112f0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
11300 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  f, 0);.  return 
11310 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
11320 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
11330 6f 70 65 6e 31 36 20 66 69 6c 65 6e 61 6d 65 20  open16 filename 
11340 6f 70 74 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74 69  options.*/.stati
11350 63 20 69 6e 74 20 74 65 73 74 5f 6f 70 65 6e 31  c int test_open1
11360 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  6(.  void * clie
11370 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
11380 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
11390 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
113a0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
113b0 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ].){.#ifndef SQL
113c0 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
113d0 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 69   const void *zFi
113e0 6c 65 6e 61 6d 65 3b 0a 20 20 73 71 6c 69 74 65  lename;.  sqlite
113f0 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
11400 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30  .  char zBuf[100
11410 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  ];..  if( objc!=
11420 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
11430 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
11440 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
11450 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
11460 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
11470 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
11480 22 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f  " filename optio
11490 6e 73 2d 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20  ns-list", 0);.  
114a0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
114b0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65  OR;.  }..  zFile
114c0 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74 42 79  name = Tcl_GetBy
114d0 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f  teArrayFromObj(o
114e0 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a 20 20 72 63  bjv[1], 0);.  rc
114f0 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31   = sqlite3_open1
11500 36 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 64 62  6(zFilename, &db
11510 29 3b 0a 20 20 0a 20 20 69 66 28 20 73 71 6c 69  );.  .  if( sqli
11520 74 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74  te3TestMakePoint
11530 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42  erStr(interp, zB
11540 75 66 2c 20 64 62 29 20 29 20 72 65 74 75 72 6e  uf, db) ) return
11550 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63   TCL_ERROR;.  Tc
11560 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
11570 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b  nterp, zBuf, 0);
11580 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
11590 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
115a0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
115b0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
115c0 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74   sqlite3_complet
115d0 65 31 36 20 3c 55 54 46 2d 31 36 20 73 74 72 69  e16 <UTF-16 stri
115e0 6e 67 3e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  ng>.**.** Return
115f0 20 31 20 69 66 20 74 68 65 20 73 75 70 70 6c 69   1 if the suppli
11600 65 64 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  ed argument is a
11610 20 63 6f 6d 70 6c 65 74 65 20 53 51 4c 20 73 74   complete SQL st
11620 61 74 65 6d 65 6e 74 2c 20 6f 72 20 7a 65 72 6f  atement, or zero
11630 0a 2a 2a 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a  .** otherwise..*
11640 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
11650 74 5f 63 6f 6d 70 6c 65 74 65 31 36 28 0a 20 20  t_complete16(.  
11660 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
11670 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
11680 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
11690 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
116a0 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
116b0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
116c0 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54  ITE_OMIT_COMPLET
116d0 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  E) && !defined(S
116e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
116f0 29 0a 20 20 63 68 61 72 20 2a 7a 42 75 66 3b 0a  ).  char *zBuf;.
11700 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
11710 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
11720 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
11730 2c 20 6f 62 6a 76 2c 20 22 3c 75 74 66 2d 31 36  , objv, "<utf-16
11740 20 73 71 6c 3e 22 29 3b 0a 20 20 20 20 72 65 74   sql>");.    ret
11750 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
11760 20 7d 0a 0a 20 20 7a 42 75 66 20 3d 20 28 63 68   }..  zBuf = (ch
11770 61 72 2a 29 54 63 6c 5f 47 65 74 42 79 74 65 41  ar*)Tcl_GetByteA
11780 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  rrayFromObj(objv
11790 5b 31 5d 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 53  [1], 0);.  Tcl_S
117a0 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
117b0 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
117c0 6a 28 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65  j(sqlite3_comple
117d0 74 65 31 36 28 7a 42 75 66 29 29 29 3b 0a 23 65  te16(zBuf)));.#e
117e0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
117f0 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 20 26 26 20  MIT_COMPLETE && 
11800 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
11810 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43  6 */.  return TC
11820 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
11830 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 73 74  sage: sqlite3_st
11840 65 70 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 41 64  ep STMT.**.** Ad
11850 76 61 6e 63 65 20 74 68 65 20 73 74 61 74 65 6d  vance the statem
11860 65 6e 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ent to the next 
11870 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  row..*/.static i
11880 6e 74 20 74 65 73 74 5f 73 74 65 70 28 0a 20 20  nt test_step(.  
11890 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
118a0 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
118b0 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
118c0 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
118d0 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
118e0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
118f0 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b  pStmt;.  int rc;
11900 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
11910 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
11920 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
11930 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
11940 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
11950 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
11960 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
11970 53 54 4d 54 22 2c 20 30 29 3b 0a 20 20 20 20 72  STMT", 0);.    r
11980 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
11990 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
119a0 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
119b0 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
119c0 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
119d0 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
119e0 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71  ERROR;.  rc = sq
119f0 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74  lite3_step(pStmt
11a00 29 3b 0a 0a 20 20 2f 2a 20 69 66 28 20 72 63 21  );..  /* if( rc!
11a10 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 26 26 20  =SQLITE_DONE && 
11a20 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  rc!=SQLITE_ROW )
11a30 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11a40 52 3b 20 2a 2f 0a 20 20 54 63 6c 5f 53 65 74 52  R; */.  Tcl_SetR
11a50 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
11a60 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28  har *)errorName(
11a70 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  rc), 0);.  retur
11a80 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
11a90 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
11aa0 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 53  3_column_count S
11ab0 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  TMT .**.** Retur
11ac0 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
11ad0 63 6f 6c 75 6d 6e 73 20 72 65 74 75 72 6e 65 64  columns returned
11ae0 20 62 79 20 74 68 65 20 73 71 6c 20 73 74 61 74   by the sql stat
11af0 65 6d 65 6e 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73  ement STMT..*/.s
11b00 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
11b10 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 0a 20 20 76  olumn_count(.  v
11b20 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
11b30 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
11b40 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
11b50 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
11b60 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
11b70 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
11b80 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  Stmt;..  if( obj
11b90 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
11ba0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
11bb0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
11bc0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
11bd0 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
11be0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
11bf0 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
11c00 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
11c10 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
11c20 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
11c30 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
11c40 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
11c50 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
11c60 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11c70 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  R;..  Tcl_SetObj
11c80 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
11c90 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
11ca0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
11cb0 74 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65  t(pStmt)));.  re
11cc0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
11cd0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
11ce0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  ite3_column_type
11cf0 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a   STMT column.**.
11d00 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 74 79  ** Return the ty
11d10 70 65 20 6f 66 20 74 68 65 20 64 61 74 61 20 69  pe of the data i
11d20 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e  n column 'column
11d30 27 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  ' of the current
11d40 20 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   row..*/.static 
11d50 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f  int test_column_
11d60 74 79 70 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  type(.  void * c
11d70 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
11d80 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
11d90 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
11da0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
11db0 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
11dc0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
11dd0 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 6e 74 20   int col;.  int 
11de0 74 70 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  tp;..  if( objc!
11df0 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
11e00 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
11e10 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
11e20 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
11e30 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
11e40 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
11e50 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
11e60 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
11e70 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
11e80 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
11e90 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
11ea0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
11eb0 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
11ec0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
11ed0 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
11ee0 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
11ef0 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
11f00 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
11f10 4f 52 3b 0a 0a 20 20 74 70 20 3d 20 73 71 6c 69  OR;..  tp = sqli
11f20 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28  te3_column_type(
11f30 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 73  pStmt, col);.  s
11f40 77 69 74 63 68 28 20 74 70 20 29 7b 0a 20 20 20  witch( tp ){.   
11f50 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54   case SQLITE_INT
11f60 45 47 45 52 3a 20 0a 20 20 20 20 20 20 54 63 6c  EGER: .      Tcl
11f70 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
11f80 70 2c 20 22 49 4e 54 45 47 45 52 22 2c 20 54 43  p, "INTEGER", TC
11f90 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20  L_STATIC); .    
11fa0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
11fb0 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3a 0a 20  e SQLITE_NULL:. 
11fc0 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75       Tcl_SetResu
11fd0 6c 74 28 69 6e 74 65 72 70 2c 20 22 4e 55 4c 4c  lt(interp, "NULL
11fe0 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20  ", TCL_STATIC); 
11ff0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
12000 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4c    case SQLITE_FL
12010 4f 41 54 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53  OAT:.      Tcl_S
12020 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
12030 20 22 46 4c 4f 41 54 22 2c 20 54 43 4c 5f 53 54   "FLOAT", TCL_ST
12040 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72  ATIC); .      br
12050 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
12060 4c 49 54 45 5f 54 45 58 54 3a 0a 20 20 20 20 20  LITE_TEXT:.     
12070 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
12080 6e 74 65 72 70 2c 20 22 54 45 58 54 22 2c 20 54  nterp, "TEXT", T
12090 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20  CL_STATIC); .   
120a0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
120b0 73 65 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3a 0a  se SQLITE_BLOB:.
120c0 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73        Tcl_SetRes
120d0 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 42 4c 4f  ult(interp, "BLO
120e0 42 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  B", TCL_STATIC);
120f0 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20   .      break;. 
12100 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
12110 20 20 61 73 73 65 72 74 28 30 29 3b 0a 20 20 7d    assert(0);.  }
12120 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ..  return TCL_O
12130 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
12140 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
12150 6e 5f 69 6e 74 36 34 20 53 54 4d 54 20 63 6f 6c  n_int64 STMT col
12160 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  umn.**.** Return
12170 20 74 68 65 20 64 61 74 61 20 69 6e 20 63 6f 6c   the data in col
12180 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20  umn 'column' of 
12190 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
121a0 63 61 73 74 20 61 73 20 61 6e 0a 2a 2a 20 77 69  cast as an.** wi
121b0 64 65 20 28 36 34 2d 62 69 74 29 20 69 6e 74 65  de (64-bit) inte
121c0 67 65 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ger..*/.static i
121d0 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69  nt test_column_i
121e0 6e 74 36 34 28 0a 20 20 76 6f 69 64 20 2a 20 63  nt64(.  void * c
121f0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
12200 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
12210 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
12220 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
12230 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
12240 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
12250 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 36 34 20   int col;.  i64 
12260 69 56 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  iVal;..  if( obj
12270 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
12280 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
12290 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
122a0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
122b0 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
122c0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
122d0 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
122e0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
122f0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
12300 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
12310 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
12320 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
12330 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
12340 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
12350 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
12360 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
12370 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
12380 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
12390 52 52 4f 52 3b 0a 0a 20 20 69 56 61 6c 20 3d 20  RROR;..  iVal = 
123a0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
123b0 6e 74 36 34 28 70 53 74 6d 74 2c 20 63 6f 6c 29  nt64(pStmt, col)
123c0 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
123d0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
123e0 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 69  _NewWideIntObj(i
123f0 56 61 6c 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  Val));.  return 
12400 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
12410 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
12420 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 53 54 4d 54  column_blob STMT
12430 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69   column.*/.stati
12440 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d  c int test_colum
12450 6e 5f 62 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a  n_blob(.  void *
12460 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
12470 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
12480 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
12490 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
124a0 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
124b0 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
124c0 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 0a 20 20 69  .  int col;..  i
124d0 6e 74 20 6c 65 6e 3b 0a 20 20 63 6f 6e 73 74 20  nt len;.  const 
124e0 76 6f 69 64 20 2a 70 42 6c 6f 62 3b 0a 0a 20 20  void *pBlob;..  
124f0 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
12500 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
12510 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
12520 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
12530 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
12540 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
12550 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
12560 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
12570 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
12580 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
12590 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
125a0 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
125b0 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
125c0 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
125d0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
125e0 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
125f0 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
12600 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72  ], &col) ) retur
12610 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
12620 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f  pBlob = sqlite3_
12630 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d  column_blob(pStm
12640 74 2c 20 63 6f 6c 29 3b 0a 20 20 6c 65 6e 20 3d  t, col);.  len =
12650 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
12660 62 79 74 65 73 28 70 53 74 6d 74 2c 20 63 6f 6c  bytes(pStmt, col
12670 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  );.  Tcl_SetObjR
12680 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
12690 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62  l_NewByteArrayOb
126a0 6a 28 70 42 6c 6f 62 2c 20 6c 65 6e 29 29 3b 0a  j(pBlob, len));.
126b0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
126c0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
126d0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
126e0 64 6f 75 62 6c 65 20 53 54 4d 54 20 63 6f 6c 75  double STMT colu
126f0 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  mn.**.** Return 
12700 74 68 65 20 64 61 74 61 20 69 6e 20 63 6f 6c 75  the data in colu
12710 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74  mn 'column' of t
12720 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 63  he current row c
12730 61 73 74 20 61 73 20 61 20 64 6f 75 62 6c 65 2e  ast as a double.
12740 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
12750 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  est_column_doubl
12760 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
12770 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
12780 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
12790 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
127a0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
127b0 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
127c0 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
127d0 74 20 63 6f 6c 3b 0a 20 20 64 6f 75 62 6c 65 20  t col;.  double 
127e0 72 56 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  rVal;..  if( obj
127f0 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
12800 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
12810 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
12820 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
12830 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
12840 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
12850 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
12860 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
12870 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
12880 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
12890 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
128a0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
128b0 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
128c0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
128d0 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
128e0 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
128f0 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
12900 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
12910 52 52 4f 52 3b 0a 0a 20 20 72 56 61 6c 20 3d 20  RROR;..  rVal = 
12920 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
12930 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20 63 6f 6c  ouble(pStmt, col
12940 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  );.  Tcl_SetObjR
12950 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
12960 6c 5f 4e 65 77 44 6f 75 62 6c 65 4f 62 6a 28 72  l_NewDoubleObj(r
12970 56 61 6c 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  Val));.  return 
12980 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
12990 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
129a0 64 61 74 61 5f 63 6f 75 6e 74 20 53 54 4d 54 20  data_count STMT 
129b0 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
129c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
129d0 6d 6e 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  mns returned by 
129e0 74 68 65 20 73 71 6c 20 73 74 61 74 65 6d 65 6e  the sql statemen
129f0 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69  t STMT..*/.stati
12a00 63 20 69 6e 74 20 74 65 73 74 5f 64 61 74 61 5f  c int test_data_
12a10 63 6f 75 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20  count(.  void * 
12a20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
12a30 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
12a40 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
12a50 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
12a60 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
12a70 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
12a80 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
12a90 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
12aa0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
12ab0 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
12ac0 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
12ad0 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
12ae0 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53  ng(objv[0]), " S
12af0 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b  TMT column", 0);
12b00 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
12b10 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
12b20 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
12b30 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
12b40 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
12b50 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
12b60 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
12b70 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
12b80 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
12b90 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 64  IntObj(sqlite3_d
12ba0 61 74 61 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  ata_count(pStmt)
12bb0 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
12bc0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
12bd0 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
12be0 75 6d 6e 5f 74 65 78 74 20 53 54 4d 54 20 63 6f  umn_text STMT co
12bf0 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65  lumn.**.** Usage
12c00 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
12c10 5f 64 65 63 6c 74 79 70 65 20 53 54 4d 54 20 63  _decltype STMT c
12c20 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67  olumn.**.** Usag
12c30 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
12c40 6e 5f 6e 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75  n_name STMT colu
12c50 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  mn.*/.static int
12c60 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 28   test_stmt_utf8(
12c70 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
12c80 44 61 74 61 2c 20 20 20 20 20 20 20 20 2f 2a 20  Data,        /* 
12c90 50 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c 69 74  Pointer to SQLit
12ca0 65 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 74  e API function t
12cb0 6f 20 62 65 20 69 6e 76 6f 6b 65 20 2a 2f 0a 20  o be invoke */. 
12cc0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
12cd0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
12ce0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
12cf0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
12d00 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
12d10 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20  t;.  int col;.  
12d20 63 6f 6e 73 74 20 63 68 61 72 20 2a 28 2a 78 46  const char *(*xF
12d30 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d  unc)(sqlite3_stm
12d40 74 2a 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e  t*, int) = clien
12d50 74 44 61 74 61 3b 0a 20 20 63 6f 6e 73 74 20 63  tData;.  const c
12d60 68 61 72 20 2a 7a 52 65 74 3b 0a 0a 20 20 69 66  har *zRet;..  if
12d70 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
12d80 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
12d90 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
12da0 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
12db0 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
12dc0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
12dd0 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
12de0 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
12df0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
12e00 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
12e10 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
12e20 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
12e30 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
12e40 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
12e50 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
12e60 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
12e70 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
12e80 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20   &col) ) return 
12e90 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 52 65  TCL_ERROR;.  zRe
12ea0 74 20 3d 20 78 46 75 6e 63 28 70 53 74 6d 74 2c  t = xFunc(pStmt,
12eb0 20 63 6f 6c 29 3b 0a 20 20 69 66 28 20 7a 52 65   col);.  if( zRe
12ec0 74 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  t ){.    Tcl_Set
12ed0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
12ee0 63 68 61 72 20 2a 29 7a 52 65 74 2c 20 30 29 3b  char *)zRet, 0);
12ef0 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
12f00 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  L_OK;.}..static 
12f10 69 6e 74 20 74 65 73 74 5f 67 6c 6f 62 61 6c 5f  int test_global_
12f20 72 65 63 6f 76 65 72 28 0a 20 20 76 6f 69 64 20  recover(.  void 
12f30 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
12f40 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
12f50 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
12f60 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
12f70 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
12f80 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47  ef SQLITE_OMIT_G
12f90 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a 20 20 69  LOBALRECOVER.  i
12fa0 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 6f 62 6a  nt rc;.  if( obj
12fb0 63 21 3d 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=1 ){.    Tcl_
12fc0 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
12fd0 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 22  erp, 1, objv, ""
12fe0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
12ff0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
13000 63 20 3d 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62  c = sqlite3_glob
13010 61 6c 5f 72 65 63 6f 76 65 72 28 29 3b 0a 20 20  al_recover();.  
13020 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
13030 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72  terp, (char *)er
13040 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
13050 5f 53 54 41 54 49 43 29 3b 0a 23 65 6e 64 69 66  _STATIC);.#endif
13060 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
13070 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
13080 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
13090 5f 74 65 78 74 20 53 54 4d 54 20 63 6f 6c 75 6d  _text STMT colum
130a0 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  n.**.** Usage: s
130b0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
130c0 63 6c 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75  cltype STMT colu
130d0 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  mn.**.** Usage: 
130e0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
130f0 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ame STMT column.
13100 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
13110 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 28 0a 20  st_stmt_utf16(. 
13120 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
13130 74 61 2c 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ta,     /* Point
13140 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41 50 49  er to SQLite API
13150 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
13160 69 6e 76 6f 6b 65 64 20 2a 2f 0a 20 20 54 63 6c  invoked */.  Tcl
13170 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
13180 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
13190 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
131a0 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
131b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
131c0 36 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  6.  sqlite3_stmt
131d0 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63   *pStmt;.  int c
131e0 6f 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  ol;.  Tcl_Obj *p
131f0 52 65 74 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  Ret;.  const voi
13200 64 20 2a 7a 4e 61 6d 65 31 36 3b 0a 20 20 63 6f  d *zName16;.  co
13210 6e 73 74 20 76 6f 69 64 20 2a 28 2a 78 46 75 6e  nst void *(*xFun
13220 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a  c)(sqlite3_stmt*
13230 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44  , int) = clientD
13240 61 74 61 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  ata;..  if( objc
13250 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
13260 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
13270 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
13280 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
13290 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
132a0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
132b0 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22  , " STMT column"
132c0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
132d0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
132e0 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
132f0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
13300 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
13310 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
13320 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13330 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
13340 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
13350 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29  , objv[2], &col)
13360 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
13370 52 4f 52 3b 0a 0a 20 20 7a 4e 61 6d 65 31 36 20  ROR;..  zName16 
13380 3d 20 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63  = xFunc(pStmt, c
13390 6f 6c 29 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65  ol);.  if( zName
133a0 31 36 20 29 7b 0a 20 20 20 20 70 52 65 74 20 3d  16 ){.    pRet =
133b0 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61   Tcl_NewByteArra
133c0 79 4f 62 6a 28 7a 4e 61 6d 65 31 36 2c 20 73 71  yObj(zName16, sq
133d0 6c 69 74 65 33 75 74 66 31 36 42 79 74 65 4c 65  lite3utf16ByteLe
133e0 6e 28 7a 4e 61 6d 65 31 36 2c 20 2d 31 29 2b 32  n(zName16, -1)+2
133f0 29 3b 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62  );.    Tcl_SetOb
13400 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
13410 70 52 65 74 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  pRet);.  }.#endi
13420 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
13430 5f 55 54 46 31 36 20 2a 2f 0a 0a 20 20 72 65 74  _UTF16 */..  ret
13440 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
13450 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
13460 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 53  te3_column_int S
13470 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a  TMT column.**.**
13480 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
13490 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 20 53 54 4d  column_bytes STM
134a0 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55  T column.**.** U
134b0 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
134c0 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20 53 54 4d  lumn_bytes16 STM
134d0 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2f 0a 73  T column.**.*/.s
134e0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
134f0 74 6d 74 5f 69 6e 74 28 0a 20 20 76 6f 69 64 20  tmt_int(.  void 
13500 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20  * clientData,   
13510 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53   /* Pointer to S
13520 51 4c 69 74 65 20 41 50 49 20 66 75 6e 63 74 69  QLite API functi
13530 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  on to be invoked
13540 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
13550 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
13560 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
13570 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
13580 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
13590 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f  *pStmt;.  int co
135a0 6c 3b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63  l;.  int (*xFunc
135b0 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c  )(sqlite3_stmt*,
135c0 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61   int) = clientDa
135d0 74 61 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  ta;..  if( objc!
135e0 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
135f0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
13600 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
13610 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
13620 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
13630 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
13640 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
13650 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
13660 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
13670 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
13680 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
13690 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
136a0 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
136b0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
136c0 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
136d0 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
136e0 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
136f0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
13700 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62  OR;..  Tcl_SetOb
13710 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
13720 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 78 46  Tcl_NewIntObj(xF
13730 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c 29 29  unc(pStmt, col))
13740 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
13750 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  OK;.}..#ifndef S
13760 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49  QLITE_OMIT_DISKI
13770 4f 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  O./*.** Usage:  
13780 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61  sqlite3OsOpenRea
13790 64 57 72 69 74 65 20 3c 66 69 6c 65 6e 61 6d 65  dWrite <filename
137a0 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  >.*/.static int 
137b0 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 4f 70  test_sqlite3OsOp
137c0 65 6e 52 65 61 64 57 72 69 74 65 28 0a 20 20 76  enReadWrite(.  v
137d0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
137e0 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
137f0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
13800 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
13810 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
13820 20 4f 73 46 69 6c 65 20 2a 70 46 69 6c 65 3b 0a   OsFile *pFile;.
13830 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
13840 64 75 6d 6d 79 3b 0a 20 20 63 68 61 72 20 7a 42  dummy;.  char zB
13850 75 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20  uf[100];..  if( 
13860 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
13870 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
13880 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
13890 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
138a0 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
138b0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
138c0 5b 30 5d 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65  [0]), " filename
138d0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
138e0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
138f0 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
13900 4f 73 4f 70 65 6e 52 65 61 64 57 72 69 74 65 28  OsOpenReadWrite(
13910 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
13920 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65 2c 20  jv[1]), &pFile, 
13930 26 64 75 6d 6d 79 29 3b 0a 20 20 69 66 28 20 72  &dummy);.  if( r
13940 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
13950 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c      Tcl_SetResul
13960 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
13970 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
13980 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20   TCL_STATIC);.  
13990 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
139a0 4f 52 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  OR;.  }.  sqlite
139b0 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72  3TestMakePointer
139c0 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  Str(interp, zBuf
139d0 2c 20 70 46 69 6c 65 29 3b 0a 20 20 54 63 6c 5f  , pFile);.  Tcl_
139e0 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
139f0 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65  , zBuf, 0);.  re
13a00 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
13a10 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
13a20 20 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65 20   sqlite3OsClose 
13a30 3c 66 69 6c 65 20 68 61 6e 64 6c 65 3e 0a 2a 2f  <file handle>.*/
13a40 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
13a50 5f 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65 28  _sqlite3OsClose(
13a60 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
13a70 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
13a80 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
13a90 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
13aa0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
13ab0 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a 70 46 69  ){.  OsFile *pFi
13ac0 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  le;.  int rc;.. 
13ad0 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
13ae0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
13af0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
13b00 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
13b10 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
13b20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
13b30 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c  (objv[0]), " fil
13b40 65 68 61 6e 64 6c 65 22 2c 20 30 29 3b 0a 20 20  ehandle", 0);.  
13b50 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
13b60 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
13b70 65 74 46 69 6c 65 50 6f 69 6e 74 65 72 28 69 6e  etFilePointer(in
13b80 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
13b90 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
13ba0 46 69 6c 65 29 20 29 7b 0a 20 20 20 20 72 65 74  File) ){.    ret
13bb0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
13bc0 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
13bd0 33 4f 73 43 6c 6f 73 65 28 26 70 46 69 6c 65 29  3OsClose(&pFile)
13be0 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
13bf0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c  TE_OK ){.    Tcl
13c00 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
13c10 70 2c 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72  p, (char *)error
13c20 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54  Name(rc), TCL_ST
13c30 41 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72  ATIC);.    retur
13c40 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
13c50 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
13c60 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
13c70 3a 20 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b  :  sqlite3OsLock
13c80 20 3c 66 69 6c 65 20 68 61 6e 64 6c 65 3e 20 3c   <file handle> <
13c90 6c 6f 63 6b 74 79 70 65 3e 0a 2a 2f 0a 73 74 61  locktype>.*/.sta
13ca0 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 71 6c  tic int test_sql
13cb0 69 74 65 33 4f 73 4c 6f 63 6b 28 0a 20 20 76 6f  ite3OsLock(.  vo
13cc0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
13cd0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
13ce0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
13cf0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
13d00 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
13d10 4f 73 46 69 6c 65 20 2a 20 70 46 69 6c 65 3b 0a  OsFile * pFile;.
13d20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
13d30 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20   objc!=3 ){.    
13d40 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
13d50 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
13d60 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
13d70 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 20  e \"", .        
13d80 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
13d90 6a 76 5b 30 5d 29 2c 20 0a 20 20 20 20 20 20 20  jv[0]), .       
13da0 20 22 20 66 69 6c 65 68 61 6e 64 6c 65 20 28 53   " filehandle (S
13db0 48 41 52 45 44 7c 52 45 53 45 52 56 45 44 7c 50  HARED|RESERVED|P
13dc0 45 4e 44 49 4e 47 7c 45 58 43 4c 55 53 49 56 45  ENDING|EXCLUSIVE
13dd0 29 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  )", 0);.    retu
13de0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
13df0 7d 0a 0a 20 20 69 66 28 20 67 65 74 46 69 6c 65  }..  if( getFile
13e00 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
13e10 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
13e20 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65 29 20  jv[1]), &pFile) 
13e30 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
13e40 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
13e50 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 22 53  if( 0==strcmp("S
13e60 48 41 52 45 44 22 2c 20 54 63 6c 5f 47 65 74 53  HARED", Tcl_GetS
13e70 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20  tring(objv[2])) 
13e80 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
13e90 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c  te3OsLock(pFile,
13ea0 20 53 48 41 52 45 44 5f 4c 4f 43 4b 29 3b 0a 20   SHARED_LOCK);. 
13eb0 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 30 3d   }.  else if( 0=
13ec0 3d 73 74 72 63 6d 70 28 22 52 45 53 45 52 56 45  =strcmp("RESERVE
13ed0 44 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  D", Tcl_GetStrin
13ee0 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20  g(objv[2])) ){. 
13ef0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
13f00 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 52 45 53  sLock(pFile, RES
13f10 45 52 56 45 44 5f 4c 4f 43 4b 29 3b 0a 20 20 7d  ERVED_LOCK);.  }
13f20 0a 20 20 65 6c 73 65 20 69 66 28 20 30 3d 3d 73  .  else if( 0==s
13f30 74 72 63 6d 70 28 22 50 45 4e 44 49 4e 47 22 2c  trcmp("PENDING",
13f40 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
13f50 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20 20  bjv[2])) ){.    
13f60 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c 6f  rc = sqlite3OsLo
13f70 63 6b 28 70 46 69 6c 65 2c 20 50 45 4e 44 49 4e  ck(pFile, PENDIN
13f80 47 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20 65  G_LOCK);.  }.  e
13f90 6c 73 65 20 69 66 28 20 30 3d 3d 73 74 72 63 6d  lse if( 0==strcm
13fa0 70 28 22 45 58 43 4c 55 53 49 56 45 22 2c 20 54  p("EXCLUSIVE", T
13fb0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
13fc0 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20 20 72 63  v[2])) ){.    rc
13fd0 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b   = sqlite3OsLock
13fe0 28 70 46 69 6c 65 2c 20 45 58 43 4c 55 53 49 56  (pFile, EXCLUSIV
13ff0 45 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 65 6c 73 65  E_LOCK);.  }else
14000 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
14010 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
14020 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
14030 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
14040 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
14050 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 0a 20  ing(objv[0]), . 
14060 20 20 20 20 20 20 20 22 20 66 69 6c 65 68 61 6e         " filehan
14070 64 6c 65 20 28 53 48 41 52 45 44 7c 52 45 53 45  dle (SHARED|RESE
14080 52 56 45 44 7c 50 45 4e 44 49 4e 47 7c 45 58 43  RVED|PENDING|EXC
14090 4c 55 53 49 56 45 29 22 2c 20 30 29 3b 0a 20 20  LUSIVE)", 0);.  
140a0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
140b0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 72  OR;.  }..  if( r
140c0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
140d0 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c      Tcl_SetResul
140e0 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
140f0 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
14100 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20   TCL_STATIC);.  
14110 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
14120 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  OR;.  }.  return
14130 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
14140 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
14150 33 4f 73 55 6e 6c 6f 63 6b 20 3c 66 69 6c 65 20  3OsUnlock <file 
14160 68 61 6e 64 6c 65 3e 0a 2a 2f 0a 73 74 61 74 69  handle>.*/.stati
14170 63 20 69 6e 74 20 74 65 73 74 5f 73 71 6c 69 74  c int test_sqlit
14180 65 33 4f 73 55 6e 6c 6f 63 6b 28 0a 20 20 76 6f  e3OsUnlock(.  vo
14190 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
141a0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
141b0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
141c0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
141d0 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
141e0 4f 73 46 69 6c 65 20 2a 20 70 46 69 6c 65 3b 0a  OsFile * pFile;.
141f0 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
14200 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20   objc!=2 ){.    
14210 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
14220 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
14230 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
14240 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
14250 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
14260 76 5b 30 5d 29 2c 20 22 20 66 69 6c 65 68 61 6e  v[0]), " filehan
14270 64 6c 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  dle", 0);.    re
14280 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
14290 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 46 69    }..  if( getFi
142a0 6c 65 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  lePointer(interp
142b0 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
142c0 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65  objv[1]), &pFile
142d0 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
142e0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
142f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 55   rc = sqlite3OsU
14300 6e 6c 6f 63 6b 28 70 46 69 6c 65 2c 20 4e 4f 5f  nlock(pFile, NO_
14310 4c 4f 43 4b 29 3b 0a 20 20 69 66 28 20 72 63 21  LOCK);.  if( rc!
14320 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
14330 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
14340 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29  interp, (char *)
14350 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54  errorName(rc), T
14360 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  CL_STATIC);.    
14370 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
14380 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54  ;.  }.  return T
14390 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
143a0 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f  Usage:  sqlite3O
143b0 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 0a 2a 2f  sTempFileName.*/
143c0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
143d0 5f 73 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69  _sqlite3OsTempFi
143e0 6c 65 4e 61 6d 65 28 0a 20 20 76 6f 69 64 20 2a  leName(.  void *
143f0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
14400 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
14410 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
14420 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
14430 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 68 61 72  objv[].){.  char
14440 20 7a 46 69 6c 65 5b 53 51 4c 49 54 45 5f 54 45   zFile[SQLITE_TE
14450 4d 50 4e 41 4d 45 5f 53 49 5a 45 5d 3b 0a 20 20  MPNAME_SIZE];.  
14460 69 6e 74 20 72 63 3b 0a 0a 20 20 72 63 20 3d 20  int rc;..  rc = 
14470 73 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c  sqlite3OsTempFil
14480 65 4e 61 6d 65 28 7a 46 69 6c 65 29 3b 0a 20 20  eName(zFile);.  
14490 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
144a0 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  K ){.    Tcl_Set
144b0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
144c0 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65  char *)errorName
144d0 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43  (rc), TCL_STATIC
144e0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
144f0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54  L_ERROR;.  }.  T
14500 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
14510 69 6e 74 65 72 70 2c 20 7a 46 69 6c 65 2c 20 30  interp, zFile, 0
14520 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
14530 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  OK;.}.#endif../*
14540 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
14550 74 65 5f 73 65 74 5f 6d 61 67 69 63 20 20 44 42  te_set_magic  DB
14560 20 20 4d 41 47 49 43 2d 4e 55 4d 42 45 52 0a 2a    MAGIC-NUMBER.*
14570 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 62 2d  *.** Set the db-
14580 3e 6d 61 67 69 63 20 76 61 6c 75 65 2e 20 20 54  >magic value.  T
14590 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 74  his is used to t
145a0 65 73 74 20 65 72 72 6f 72 20 72 65 63 6f 76 65  est error recove
145b0 72 79 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73 74 61  ry logic..*/.sta
145c0 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 5f 73  tic int sqlite_s
145d0 65 74 5f 6d 61 67 69 63 28 0a 20 20 76 6f 69 64  et_magic(.  void
145e0 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
145f0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
14600 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c  erp,.  int argc,
14610 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29  .  char **argv.)
14620 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
14630 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
14640 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
14650 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
14660 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
14670 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
14680 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 20 20 22  v[0],.         "
14690 20 44 42 20 4d 41 47 49 43 22 2c 20 30 29 3b 0a   DB MAGIC", 0);.
146a0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
146b0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
146c0 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
146d0 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
146e0 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
146f0 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 73 74 72  ERROR;.  if( str
14700 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53 51  cmp(argv[2], "SQ
14710 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 22  LITE_MAGIC_OPEN"
14720 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e  )==0 ){.    db->
14730 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
14740 41 47 49 43 5f 4f 50 45 4e 3b 0a 20 20 7d 65 6c  AGIC_OPEN;.  }el
14750 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72  se if( strcmp(ar
14760 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d  gv[2], "SQLITE_M
14770 41 47 49 43 5f 43 4c 4f 53 45 44 22 29 3d 3d 30  AGIC_CLOSED")==0
14780 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69   ){.    db->magi
14790 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
147a0 5f 43 4c 4f 53 45 44 3b 0a 20 20 7d 65 6c 73 65  _CLOSED;.  }else
147b0 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76   if( strcmp(argv
147c0 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41 47  [2], "SQLITE_MAG
147d0 49 43 5f 42 55 53 59 22 29 3d 3d 30 20 29 7b 0a  IC_BUSY")==0 ){.
147e0 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20      db->magic = 
147f0 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
14800 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73  Y;.  }else if( s
14810 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22  trcmp(argv[2], "
14820 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
14830 4f 52 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64  OR")==0 ){.    d
14840 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
14850 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a 20  E_MAGIC_ERROR;. 
14860 20 7d 65 6c 73 65 20 69 66 28 20 54 63 6c 5f 47   }else if( Tcl_G
14870 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72  etInt(interp, ar
14880 67 76 5b 32 5d 2c 20 26 64 62 2d 3e 6d 61 67 69  gv[2], &db->magi
14890 63 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  c) ){.    return
148a0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
148b0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
148c0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
148d0 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
148e0 75 70 74 20 20 44 42 20 0a 2a 2a 0a 2a 2a 20 54  upt  DB .**.** T
148f0 72 69 67 67 65 72 20 61 6e 20 69 6e 74 65 72 72  rigger an interr
14900 75 70 74 20 6f 6e 20 44 42 0a 2a 2f 0a 73 74 61  upt on DB.*/.sta
14910 74 69 63 20 69 6e 74 20 74 65 73 74 5f 69 6e 74  tic int test_int
14920 65 72 72 75 70 74 28 0a 20 20 76 6f 69 64 20 2a  errupt(.  void *
14930 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
14940 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
14950 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20  p,.  int argc,. 
14960 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a   char **argv.){.
14970 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
14980 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a   if( argc!=2 ){.
14990 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
149a0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
149b0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
149c0 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
149d0 30 5d 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20  0], " DB", 0);. 
149e0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
149f0 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
14a00 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
14a10 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62  rp, argv[1], &db
14a20 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
14a30 52 52 4f 52 3b 0a 20 20 73 71 6c 69 74 65 33 5f  RROR;.  sqlite3_
14a40 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
14a50 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
14a60 7d 0a 0a 73 74 61 74 69 63 20 75 38 20 2a 73 71  }..static u8 *sq
14a70 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65  lite3_stack_base
14a80 6c 69 6e 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a  line = 0;../*.**
14a90 20 46 69 6c 6c 20 74 68 65 20 73 74 61 63 6b 20   Fill the stack 
14aa0 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20 62 69 74  with a known bit
14ab0 70 61 74 74 65 72 6e 2e 0a 2a 2f 0a 73 74 61 74  pattern..*/.stat
14ac0 69 63 20 76 6f 69 64 20 70 72 65 70 53 74 61 63  ic void prepStac
14ad0 6b 28 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 69  k(void){.  int i
14ae0 3b 0a 20 20 75 33 32 20 62 69 67 42 75 66 5b 36  ;.  u32 bigBuf[6
14af0 35 35 33 36 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  5536];.  for(i=0
14b00 3b 20 69 3c 73 69 7a 65 6f 66 28 62 69 67 42 75  ; i<sizeof(bigBu
14b10 66 29 3b 20 69 2b 2b 29 20 62 69 67 42 75 66 5b  f); i++) bigBuf[
14b20 69 5d 20 3d 20 30 78 64 65 61 64 62 65 65 66 3b  i] = 0xdeadbeef;
14b30 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 61 63 6b  .  sqlite3_stack
14b40 5f 62 61 73 65 6c 69 6e 65 20 3d 20 28 75 38 2a  _baseline = (u8*
14b50 29 26 62 69 67 42 75 66 5b 36 35 35 33 36 5d 3b  )&bigBuf[65536];
14b60 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 74 20 74 68  .}../*.** Get th
14b70 65 20 63 75 72 72 65 6e 74 20 73 74 61 63 6b 20  e current stack 
14b80 64 65 70 74 68 2e 20 20 55 73 65 64 20 66 6f 72  depth.  Used for
14b90 20 64 65 62 75 67 67 69 6e 67 20 6f 6e 6c 79 2e   debugging only.
14ba0 0a 2a 2f 0a 75 36 34 20 73 71 6c 69 74 65 33 53  .*/.u64 sqlite3S
14bb0 74 61 63 6b 44 65 70 74 68 28 76 6f 69 64 29 7b  tackDepth(void){
14bc0 0a 20 20 75 38 20 78 3b 0a 20 20 72 65 74 75 72  .  u8 x;.  retur
14bd0 6e 20 28 75 36 34 29 28 73 71 6c 69 74 65 33 5f  n (u64)(sqlite3_
14be0 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65 20 2d  stack_baseline -
14bf0 20 26 78 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55   &x);.}../*.** U
14c00 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 73  sage:  sqlite3_s
14c10 74 61 63 6b 5f 75 73 65 64 20 44 42 20 53 51 4c  tack_used DB SQL
14c20 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 6d 65  .**.** Try to me
14c30 61 73 75 72 65 20 74 68 65 20 61 6d 6f 75 6e 74  asure the amount
14c40 20 6f 66 20 73 74 61 63 6b 20 73 70 61 63 65 20   of stack space 
14c50 75 73 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74  used by a call t
14c60 6f 20 73 71 6c 69 74 65 33 5f 65 78 65 63 0a 2a  o sqlite3_exec.*
14c70 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
14c80 74 5f 73 74 61 63 6b 5f 75 73 65 64 28 0a 20 20  t_stack_used(.  
14c90 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
14ca0 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
14cb0 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61  *interp,.  int a
14cc0 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72  rgc,.  char **ar
14cd0 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  gv.){.  sqlite3 
14ce0 2a 64 62 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  *db;.  int i;.  
14cf0 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20  if( argc!=3 ){. 
14d00 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
14d10 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
14d20 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
14d30 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
14d40 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44 42  ], .        " DB
14d50 20 53 51 4c 22 2c 20 30 29 3b 0a 20 20 20 20 72   SQL", 0);.    r
14d60 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
14d70 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
14d80 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
14d90 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
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 70 72 65 70 53 74 61 63 6b 28 29 3b  ;.  prepStack();
14dc0 0a 20 20 28 76 6f 69 64 29 73 71 6c 69 74 65 33  .  (void)sqlite3
14dd0 5f 65 78 65 63 28 64 62 2c 20 61 72 67 76 5b 32  _exec(db, argv[2
14de0 5d 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 66  ], 0, 0, 0);.  f
14df0 6f 72 28 69 3d 36 35 35 33 35 3b 20 69 3e 3d 30  or(i=65535; i>=0
14e00 20 26 26 20 28 28 75 33 32 2a 29 73 71 6c 69 74   && ((u32*)sqlit
14e10 65 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e  e3_stack_baselin
14e20 65 29 5b 2d 69 5d 3d 3d 30 78 64 65 61 64 62 65  e)[-i]==0xdeadbe
14e30 65 66 3b 20 69 2d 2d 29 7b 7d 0a 20 20 54 63 6c  ef; i--){}.  Tcl
14e40 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
14e50 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
14e60 4f 62 6a 28 69 2a 34 29 29 3b 0a 20 20 72 65 74  Obj(i*4));.  ret
14e70 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
14e80 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
14e90 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e 63 74 69  te_delete_functi
14ea0 6f 6e 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e  on DB function-n
14eb0 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  ame.**.** Delete
14ec0 20 74 68 65 20 75 73 65 72 20 66 75 6e 63 74 69   the user functi
14ed0 6f 6e 20 27 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d  on 'function-nam
14ee0 65 27 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65  e' from database
14ef0 20 68 61 6e 64 6c 65 20 44 42 2e 20 49 74 0a 2a   handle DB. It.*
14f00 2a 20 69 73 20 61 73 73 75 6d 65 64 20 74 68 61  * is assumed tha
14f10 74 20 74 68 65 20 75 73 65 72 20 66 75 6e 63 74  t the user funct
14f20 69 6f 6e 20 77 61 73 20 63 72 65 61 74 65 64 20  ion was created 
14f30 61 73 20 55 54 46 38 2c 20 61 6e 79 20 6e 75 6d  as UTF8, any num
14f40 62 65 72 20 6f 66 0a 2a 2a 20 61 72 67 75 6d 65  ber of.** argume
14f50 6e 74 73 20 28 74 68 65 20 77 61 79 20 74 68 65  nts (the way the
14f60 20 54 43 4c 20 69 6e 74 65 72 66 61 63 65 20 64   TCL interface d
14f70 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a 73 74 61 74  oes it)..*/.stat
14f80 69 63 20 69 6e 74 20 64 65 6c 65 74 65 5f 66 75  ic int delete_fu
14f90 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a  nction(.  void *
14fa0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
14fb0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
14fc0 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20  p,.  int argc,. 
14fd0 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a   char **argv.){.
14fe0 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69    int rc;.  sqli
14ff0 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61  te3 *db;.  if( a
15000 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  rgc!=3 ){.    Tc
15010 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
15020 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
15030 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
15040 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20  \"", argv[0], . 
15050 20 20 20 20 20 20 20 22 20 44 42 20 66 75 6e 63         " DB func
15060 74 69 6f 6e 2d 6e 61 6d 65 22 2c 20 30 29 3b 0a  tion-name", 0);.
15070 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
15080 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
15090 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
150a0 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
150b0 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
150c0 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71  ERROR;.  rc = sq
150d0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
150e0 63 74 69 6f 6e 28 64 62 2c 20 61 72 67 76 5b 32  ction(db, argv[2
150f0 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  ], -1, SQLITE_UT
15100 46 38 2c 20 30 2c 20 30 2c 20 30 2c 20 30 29 3b  F8, 0, 0, 0, 0);
15110 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
15120 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
15130 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  )errorName(rc), 
15140 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 72  TCL_STATIC);.  r
15150 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
15160 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
15170 6c 69 74 65 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c  lite_delete_coll
15180 61 74 69 6f 6e 20 44 42 20 63 6f 6c 6c 61 74 69  ation DB collati
15190 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65  on-name.**.** De
151a0 6c 65 74 65 20 74 68 65 20 63 6f 6c 6c 61 74 69  lete the collati
151b0 6f 6e 20 73 65 71 75 65 6e 63 65 20 27 63 6f 6c  on sequence 'col
151c0 6c 61 74 69 6f 6e 2d 6e 61 6d 65 27 20 66 72 6f  lation-name' fro
151d0 6d 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  m database handl
151e0 65 20 0a 2a 2a 20 44 42 2e 20 49 74 20 69 73 20  e .** DB. It is 
151f0 61 73 73 75 6d 65 64 20 74 68 61 74 20 74 68 65  assumed that the
15200 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
15210 6e 63 65 20 77 61 73 20 63 72 65 61 74 65 64 20  nce was created 
15220 61 73 20 55 54 46 38 20 28 74 68 65 20 0a 2a 2a  as UTF8 (the .**
15230 20 77 61 79 20 74 68 65 20 54 43 4c 20 69 6e 74   way the TCL int
15240 65 72 66 61 63 65 20 64 6f 65 73 20 69 74 29 2e  erface does it).
15250 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 64  .*/.static int d
15260 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  elete_collation(
15270 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
15280 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
15290 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
152a0 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
152b0 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20 72  *argv.){.  int r
152c0 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  c;.  sqlite3 *db
152d0 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20  ;.  if( argc!=3 
152e0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
152f0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
15300 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
15310 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
15320 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20  gv[0], .        
15330 22 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e 61  " DB function-na
15340 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  me", 0);.    ret
15350 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
15360 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
15370 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
15380 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
15390 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
153a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
153b0 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
153c0 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 53 51 4c  db, argv[2], SQL
153d0 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 29 3b  ITE_UTF8, 0, 0);
153e0 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
153f0 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
15400 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  )errorName(rc), 
15410 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 72  TCL_STATIC);.  r
15420 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
15430 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
15440 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
15450 6d 6d 69 74 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65  mmit DB.**.** Re
15460 74 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65  turn true if the
15470 20 64 61 74 61 62 61 73 65 20 44 42 20 69 73 20   database DB is 
15480 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 75 74  currently in aut
15490 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 0a 2a  o-commit mode..*
154a0 2a 20 52 65 74 75 72 6e 20 66 61 6c 73 65 20 69  * Return false i
154b0 66 20 6e 6f 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  f not..*/.static
154c0 20 69 6e 74 20 67 65 74 5f 61 75 74 6f 63 6f 6d   int get_autocom
154d0 6d 69 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  mit(.  void * cl
154e0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
154f0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
15500 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68    int argc,.  ch
15510 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 63  ar **argv.){.  c
15520 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20  har zBuf[30];.  
15530 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
15540 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20  f( argc!=2 ){.  
15550 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
15560 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
15570 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
15580 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
15590 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44 42 22  , .        " DB"
155a0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
155b0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
155c0 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
155d0 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
155e0 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
155f0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73  n TCL_ERROR;.  s
15600 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64  printf(zBuf, "%d
15610 22 2c 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61  ", sqlite3_get_a
15620 75 74 6f 63 6f 6d 6d 69 74 28 64 62 29 29 3b 0a  utocommit(db));.
15630 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
15640 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
15650 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
15660 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
15670 73 61 67 65 3a 20 20 74 63 6c 5f 76 61 72 69 61  sage:  tcl_varia
15680 62 6c 65 5f 74 79 70 65 20 56 41 52 49 41 42 4c  ble_type VARIABL
15690 45 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 74 75  ENAME.**.** Retu
156a0 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  rn the name of t
156b0 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
156c0 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 74  esentation for t
156d0 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74  he.** value of t
156e0 68 65 20 67 69 76 65 6e 20 76 61 72 69 61 62 6c  he given variabl
156f0 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
15700 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79   tcl_variable_ty
15710 70 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  pe(.  void * cli
15720 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
15730 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
15740 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
15750 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
15760 5b 5d 0a 29 7b 0a 20 20 54 63 6c 5f 4f 62 6a 20  [].){.  Tcl_Obj 
15770 2a 70 56 61 72 3b 0a 20 20 69 66 28 20 6f 62 6a  *pVar;.  if( obj
15780 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
15790 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
157a0 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 56  erp, 1, objv, "V
157b0 41 52 49 41 42 4c 45 22 29 3b 0a 20 20 20 20 72  ARIABLE");.    r
157c0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
157d0 0a 20 20 7d 0a 20 20 70 56 61 72 20 3d 20 54 63  .  }.  pVar = Tc
157e0 6c 5f 47 65 74 56 61 72 32 45 78 28 69 6e 74 65  l_GetVar2Ex(inte
157f0 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
15800 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 30 2c 20 54  g(objv[1]), 0, T
15810 43 4c 5f 4c 45 41 56 45 5f 45 52 52 5f 4d 53 47  CL_LEAVE_ERR_MSG
15820 29 3b 0a 20 20 69 66 28 20 70 56 61 72 3d 3d 30  );.  if( pVar==0
15830 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
15840 52 4f 52 3b 0a 20 20 69 66 28 20 70 56 61 72 2d  ROR;.  if( pVar-
15850 3e 74 79 70 65 50 74 72 20 29 7b 0a 20 20 20 20  >typePtr ){.    
15860 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
15870 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
15880 53 74 72 69 6e 67 4f 62 6a 28 70 56 61 72 2d 3e  StringObj(pVar->
15890 74 79 70 65 50 74 72 2d 3e 6e 61 6d 65 2c 20 2d  typePtr->name, -
158a0 31 29 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  1));.  }.  retur
158b0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
158c0 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
158d0 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72  e3_release_memor
158e0 79 20 3f 4e 3f 0a 2a 2a 0a 2a 2a 20 41 74 74 65  y ?N?.**.** Atte
158f0 6d 70 74 20 74 6f 20 72 65 6c 65 61 73 65 20 6d  mpt to release m
15900 65 6d 6f 72 79 20 63 75 72 72 65 6e 74 6c 79 20  emory currently 
15910 68 65 6c 64 20 62 75 74 20 6e 6f 74 20 61 63 74  held but not act
15920 75 61 6c 6c 79 20 72 65 71 75 69 72 65 64 2e 0a  ually required..
15930 2a 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 4e  ** The integer N
15940 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
15950 66 20 62 79 74 65 73 20 77 65 20 61 72 65 20 74  f bytes we are t
15960 72 79 69 6e 67 20 74 6f 20 72 65 6c 65 61 73 65  rying to release
15970 2e 20 20 54 68 65 20 0a 2a 2a 20 72 65 74 75 72  .  The .** retur
15980 6e 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 61  n value is the a
15990 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 20  mount of memory 
159a0 61 63 74 75 61 6c 6c 79 20 72 65 6c 65 61 73 65  actually release
159b0 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
159c0 20 74 65 73 74 5f 72 65 6c 65 61 73 65 5f 6d 65   test_release_me
159d0 6d 6f 72 79 28 0a 20 20 76 6f 69 64 20 2a 20 63  mory(.  void * c
159e0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
159f0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
15a00 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
15a10 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
15a20 6a 76 5b 5d 0a 29 7b 0a 23 69 66 20 64 65 66 69  jv[].){.#if defi
15a30 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
15a40 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d  E_MEMORY_MANAGEM
15a50 45 4e 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  ENT) && !defined
15a60 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53  (SQLITE_OMIT_DIS
15a70 4b 49 4f 29 0a 20 20 69 6e 74 20 4e 3b 0a 20 20  KIO).  int N;.  
15a80 69 6e 74 20 61 6d 74 3b 0a 20 20 69 66 28 20 6f  int amt;.  if( o
15a90 62 6a 63 21 3d 31 20 26 26 20 6f 62 6a 63 21 3d  bjc!=1 && objc!=
15aa0 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  2 ){.    Tcl_Wro
15ab0 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
15ac0 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 4e 3f 22  , 1, objv, "?N?"
15ad0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
15ae0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
15af0 66 28 20 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20 20  f( objc==2 ){.  
15b00 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
15b10 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
15b20 6f 62 6a 76 5b 31 5d 2c 20 26 4e 29 20 29 20 72  objv[1], &N) ) r
15b30 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
15b40 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4e 20  .  }else{.    N 
15b50 3d 20 2d 31 3b 0a 20 20 7d 0a 20 20 61 6d 74 20  = -1;.  }.  amt 
15b60 3d 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  = sqlite3_releas
15b70 65 5f 6d 65 6d 6f 72 79 28 4e 29 3b 0a 20 20 54  e_memory(N);.  T
15b80 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
15b90 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49  interp, Tcl_NewI
15ba0 6e 74 4f 62 6a 28 61 6d 74 29 29 3b 0a 23 65 6e  ntObj(amt));.#en
15bb0 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  dif.  return TCL
15bc0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
15bd0 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 73 6f  age:  sqlite3_so
15be0 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3f 4e  ft_heap_limit ?N
15bf0 3f 0a 2a 2a 0a 2a 2a 20 51 75 65 72 79 20 6f 72  ?.**.** Query or
15c00 20 73 65 74 20 74 68 65 20 73 6f 66 74 20 68 65   set the soft he
15c10 61 70 20 6c 69 6d 69 74 20 66 6f 72 20 74 68 65  ap limit for the
15c20 20 63 75 72 72 65 6e 74 20 74 68 72 65 61 64 2e   current thread.
15c30 20 20 54 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 69    The.** limit i
15c40 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69  s only changed i
15c50 66 20 74 68 65 20 4e 20 69 73 20 70 72 65 73 65  f the N is prese
15c60 6e 74 2e 20 20 54 68 65 20 70 72 65 76 69 6f 75  nt.  The previou
15c70 73 20 6c 69 6d 69 74 0a 2a 2a 20 69 73 20 72 65  s limit.** is re
15c80 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  turned..*/.stati
15c90 63 20 69 6e 74 20 74 65 73 74 5f 73 6f 66 74 5f  c int test_soft_
15ca0 68 65 61 70 5f 6c 69 6d 69 74 28 0a 20 20 76 6f  heap_limit(.  vo
15cb0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
15cc0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
15cd0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
15ce0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
15cf0 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69  NST objv[].){.#i
15d00 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
15d10 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d  _ENABLE_MEMORY_M
15d20 41 4e 41 47 45 4d 45 4e 54 29 20 26 26 20 21 64  ANAGEMENT) && !d
15d30 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
15d40 49 54 5f 44 49 53 4b 49 4f 29 0a 20 20 69 6e 74  IT_DISKIO).  int
15d50 20 61 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63   amt;.  if( objc
15d60 21 3d 31 20 26 26 20 6f 62 6a 63 21 3d 32 20 29  !=1 && objc!=2 )
15d70 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
15d80 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
15d90 2c 20 6f 62 6a 76 2c 20 22 3f 4e 3f 22 29 3b 0a  , objv, "?N?");.
15da0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
15db0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 61 6d 74 20  RROR;.  }.  amt 
15dc0 3d 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 44  = sqlite3ThreadD
15dd0 61 74 61 52 65 61 64 4f 6e 6c 79 28 29 2d 3e 6e  ataReadOnly()->n
15de0 53 6f 66 74 48 65 61 70 4c 69 6d 69 74 3b 0a 20  SoftHeapLimit;. 
15df0 20 69 66 28 20 6f 62 6a 63 3d 3d 32 20 29 7b 0a   if( objc==2 ){.
15e00 20 20 20 20 69 6e 74 20 4e 3b 0a 20 20 20 20 69      int N;.    i
15e10 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
15e20 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
15e30 76 5b 31 5d 2c 20 26 4e 29 20 29 20 72 65 74 75  v[1], &N) ) retu
15e40 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
15e50 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68    sqlite3_soft_h
15e60 65 61 70 5f 6c 69 6d 69 74 28 4e 29 3b 0a 20 20  eap_limit(N);.  
15e70 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  }.  Tcl_SetObjRe
15e80 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
15e90 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 6d 74 29 29  _NewIntObj(amt))
15ea0 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
15eb0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
15ec0 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
15ed0 74 65 33 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65  te3_clear_tsd_me
15ee0 6d 64 65 62 75 67 0a 2a 2a 0a 2a 2a 20 43 6c 65  mdebug.**.** Cle
15ef0 61 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 4d 45  ar all of the ME
15f00 4d 44 45 42 55 47 20 69 6e 66 6f 72 6d 61 74 69  MDEBUG informati
15f10 6f 6e 20 6f 75 74 20 6f 66 20 74 68 72 65 61 64  on out of thread
15f20 2d 73 70 65 63 69 66 69 63 20 64 61 74 61 2e 0a  -specific data..
15f30 2a 2a 20 54 68 69 73 20 77 69 6c 6c 20 61 6c 6c  ** This will all
15f40 6f 77 20 69 74 20 74 6f 20 62 65 20 64 65 61 6c  ow it to be deal
15f50 6c 6f 63 61 74 65 64 2e 0a 2a 2f 0a 73 74 61 74  located..*/.stat
15f60 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6c 65 61  ic int test_clea
15f70 72 5f 74 73 64 5f 6d 65 6d 64 65 62 75 67 28 0a  r_tsd_memdebug(.
15f80 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
15f90 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
15fa0 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
15fb0 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
15fc0 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
15fd0 7b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  {.  return TCL_O
15fe0 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
15ff0 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 74 73 64  e:   sqlite3_tsd
16000 5f 72 65 6c 65 61 73 65 0a 2a 2a 0a 2a 2a 20 43  _release.**.** C
16010 61 6c 6c 20 73 71 6c 69 74 65 33 52 65 6c 65 61  all sqlite3Relea
16020 73 65 54 68 72 65 61 64 44 61 74 61 2e 0a 2a 2f  seThreadData..*/
16030 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
16040 5f 74 73 64 5f 72 65 6c 65 61 73 65 28 0a 20 20  _tsd_release(.  
16050 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
16060 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
16070 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
16080 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
16090 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
160a0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
160b0 54 45 5f 4d 45 4d 44 45 42 55 47 29 0a 20 20 73  TE_MEMDEBUG).  s
160c0 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 68 72  qlite3ReleaseThr
160d0 65 61 64 44 61 74 61 28 29 3b 0a 23 65 6e 64 69  eadData();.#endi
160e0 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  f.  return TCL_O
160f0 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
16100 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 74 68 72  e:   sqlite3_thr
16110 65 61 64 5f 63 6c 65 61 6e 75 70 0a 2a 2a 0a 2a  ead_cleanup.**.*
16120 2a 20 43 61 6c 6c 20 74 68 65 20 73 71 6c 69 74  * Call the sqlit
16130 65 33 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75  e3_thread_cleanu
16140 70 20 41 50 49 2e 0a 2a 2f 0a 73 74 61 74 69 63  p API..*/.static
16150 20 69 6e 74 20 74 65 73 74 5f 74 68 72 65 61 64   int test_thread
16160 5f 63 6c 65 61 6e 75 70 28 0a 20 20 76 6f 69 64  _cleanup(.  void
16170 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
16180 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
16190 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
161a0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
161b0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
161c0 6c 69 74 65 33 5f 74 68 72 65 61 64 5f 63 6c 65  lite3_thread_cle
161d0 61 6e 75 70 28 29 3b 0a 20 20 72 65 74 75 72 6e  anup();.  return
161e0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a   TCL_OK;.}.../*.
161f0 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  ** This routine 
16200 73 65 74 73 20 65 6e 74 72 69 65 73 20 69 6e 20  sets entries in 
16210 74 68 65 20 67 6c 6f 62 61 6c 20 3a 3a 73 71 6c  the global ::sql
16220 69 74 65 5f 6f 70 74 69 6f 6e 73 28 29 20 61 72  ite_options() ar
16230 72 61 79 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  ray variable.** 
16240 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
16250 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f   compile-time co
16260 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 66 20 74  nfiguration of t
16270 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 65  he database.  Te
16280 73 74 0a 2a 2a 20 70 72 6f 63 65 64 75 72 65 73  st.** procedures
16290 20 75 73 65 20 74 68 69 73 20 74 6f 20 64 65 74   use this to det
162a0 65 72 6d 69 6e 65 20 77 68 65 6e 20 74 65 73 74  ermine when test
162b0 73 20 73 68 6f 75 6c 64 20 62 65 20 6f 6d 69 74  s should be omit
162c0 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ted..*/.static v
162d0 6f 69 64 20 73 65 74 5f 6f 70 74 69 6f 6e 73 28  oid set_options(
162e0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
162f0 72 70 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  rp){.#ifdef SQLI
16300 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 20  TE_32BIT_ROWID. 
16310 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
16320 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
16330 69 6f 6e 73 22 2c 20 22 72 6f 77 69 64 33 32 22  ions", "rowid32"
16340 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
16350 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
16360 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
16370 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
16380 69 6f 6e 73 22 2c 20 22 72 6f 77 69 64 33 32 22  ions", "rowid32"
16390 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
163a0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
163b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
163c0 41 53 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49  ASE_SENSITIVE_LI
163d0 4b 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  KE.  Tcl_SetVar2
163e0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
163f0 5f 6f 70 74 69 6f 6e 73 22 2c 22 63 61 73 65 73  _options","cases
16400 65 6e 73 69 74 69 76 65 6c 69 6b 65 22 2c 22 31  ensitivelike","1
16410 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  ",TCL_GLOBAL_ONL
16420 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
16430 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
16440 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
16450 2c 22 63 61 73 65 73 65 6e 73 69 74 69 76 65 6c  ,"casesensitivel
16460 69 6b 65 22 2c 22 30 22 2c 54 43 4c 5f 47 4c 4f  ike","0",TCL_GLO
16470 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
16480 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
16490 5f 44 49 53 41 42 4c 45 5f 44 49 52 53 59 4e 43  _DISABLE_DIRSYNC
164a0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
164b0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
164c0 70 74 69 6f 6e 73 22 2c 20 22 64 69 72 73 79 6e  ptions", "dirsyn
164d0 63 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  c", "0", TCL_GLO
164e0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
164f0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
16500 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
16510 70 74 69 6f 6e 73 22 2c 20 22 64 69 72 73 79 6e  ptions", "dirsyn
16520 63 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  c", "1", TCL_GLO
16530 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
16540 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
16550 5f 44 49 53 41 42 4c 45 5f 4c 46 53 0a 20 20 54  _DISABLE_LFS.  T
16560 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
16570 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
16580 6e 73 22 2c 20 22 6c 66 73 22 2c 20 22 30 22 2c  ns", "lfs", "0",
16590 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
165a0 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
165b0 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
165c0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
165d0 20 22 6c 66 73 22 2c 20 22 31 22 2c 20 54 43 4c   "lfs", "1", TCL
165e0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
165f0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
16600 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
16610 41 42 4c 45 0a 20 20 54 63 6c 5f 53 65 74 56 61  ABLE.  Tcl_SetVa
16620 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16630 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 61 6c  te_options", "al
16640 74 65 72 74 61 62 6c 65 22 2c 20 22 30 22 2c 20  tertable", "0", 
16650 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
16660 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
16670 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16680 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16690 22 61 6c 74 65 72 74 61 62 6c 65 22 2c 20 22 31  "altertable", "1
166a0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
166b0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
166c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
166d0 41 4e 41 4c 59 5a 45 0a 20 20 54 63 6c 5f 53 65  ANALYZE.  Tcl_Se
166e0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
166f0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16700 22 61 6e 61 6c 79 7a 65 22 2c 20 22 30 22 2c 20  "analyze", "0", 
16710 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
16720 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
16730 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16740 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16750 22 61 6e 61 6c 79 7a 65 22 2c 20 22 31 22 2c 20  "analyze", "1", 
16760 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
16770 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
16780 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
16790 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 54 63 6c  HORIZATION.  Tcl
167a0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
167b0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
167c0 22 2c 20 22 61 75 74 68 22 2c 20 22 30 22 2c 20  ", "auth", "0", 
167d0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
167e0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
167f0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16800 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16810 22 61 75 74 68 22 2c 20 22 31 22 2c 20 54 43 4c  "auth", "1", TCL
16820 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
16830 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
16840 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
16850 43 52 45 4d 45 4e 54 0a 20 20 54 63 6c 5f 53 65  CREMENT.  Tcl_Se
16860 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16870 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16880 22 61 75 74 6f 69 6e 63 22 2c 20 22 30 22 2c 20  "autoinc", "0", 
16890 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
168a0 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  ;.#else.  Tcl_Se
168b0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
168c0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
168d0 22 61 75 74 6f 69 6e 63 22 2c 20 22 31 22 2c 20  "autoinc", "1", 
168e0 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
168f0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
16900 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
16910 4f 56 41 43 55 55 4d 0a 20 20 54 63 6c 5f 53 65  OVACUUM.  Tcl_Se
16920 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16930 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16940 22 61 75 74 6f 76 61 63 75 75 6d 22 2c 20 22 30  "autovacuum", "0
16950 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
16960 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
16970 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
16980 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
16990 22 2c 20 22 61 75 74 6f 76 61 63 75 75 6d 22 2c  ", "autovacuum",
169a0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
169b0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 20 2f  _ONLY);.#endif /
169c0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  * SQLITE_OMIT_AU
169d0 54 4f 56 41 43 55 55 4d 20 2a 2f 0a 23 69 66 20  TOVACUUM */.#if 
169e0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
169f0 44 45 46 41 55 4c 54 5f 41 55 54 4f 56 41 43 55  DEFAULT_AUTOVACU
16a00 55 4d 29 20 7c 7c 20 53 51 4c 49 54 45 5f 44 45  UM) || SQLITE_DE
16a10 46 41 55 4c 54 5f 41 55 54 4f 56 41 43 55 55 4d  FAULT_AUTOVACUUM
16a20 3d 3d 30 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  ==0.  Tcl_SetVar
16a30 32 28 69 6e 74 65 72 70 2c 22 73 71 6c 69 74 65  2(interp,"sqlite
16a40 5f 6f 70 74 69 6f 6e 73 22 2c 22 64 65 66 61 75  _options","defau
16a50 6c 74 5f 61 75 74 6f 76 61 63 75 75 6d 22 2c 22  lt_autovacuum","
16a60 30 22 2c 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  0",TCL_GLOBAL_ON
16a70 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
16a80 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
16a90 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
16aa0 2c 22 64 65 66 61 75 6c 74 5f 61 75 74 6f 76 61  ,"default_autova
16ab0 63 75 75 6d 22 2c 22 31 22 2c 54 43 4c 5f 47 4c  cuum","1",TCL_GL
16ac0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
16ad0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
16ae0 45 5f 4f 4d 49 54 5f 42 45 54 57 45 45 4e 5f 4f  E_OMIT_BETWEEN_O
16af0 50 54 49 4d 49 5a 41 54 49 4f 4e 0a 20 20 54 63  PTIMIZATION.  Tc
16b00 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
16b10 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
16b20 73 22 2c 20 22 62 65 74 77 65 65 6e 5f 6f 70 74  s", "between_opt
16b30 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
16b40 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
16b50 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
16b60 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
16b70 74 69 6f 6e 73 22 2c 20 22 62 65 74 77 65 65 6e  tions", "between
16b80 5f 6f 70 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f  _opt", "1", TCL_
16b90 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
16ba0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
16bb0 49 54 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49  ITE_OMIT_BLOB_LI
16bc0 54 45 52 41 4c 0a 20 20 54 63 6c 5f 53 65 74 56  TERAL.  Tcl_SetV
16bd0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
16be0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 62  ite_options", "b
16bf0 6c 6f 62 6c 69 74 22 2c 20 22 30 22 2c 20 54 43  loblit", "0", TC
16c00 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
16c10 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
16c20 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
16c30 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 62  ite_options", "b
16c40 6c 6f 62 6c 69 74 22 2c 20 22 31 22 2c 20 54 43  loblit", "1", TC
16c50 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
16c60 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
16c70 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a  QLITE_OMIT_CAST.
16c80 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
16c90 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
16ca0 74 69 6f 6e 73 22 2c 20 22 63 61 73 74 22 2c 20  tions", "cast", 
16cb0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
16cc0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
16cd0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
16ce0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
16cf0 6e 73 22 2c 20 22 63 61 73 74 22 2c 20 22 31 22  ns", "cast", "1"
16d00 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
16d10 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
16d20 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
16d30 48 45 43 4b 0a 20 20 54 63 6c 5f 53 65 74 56 61  HECK.  Tcl_SetVa
16d40 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16d50 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 68  te_options", "ch
16d60 65 63 6b 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  eck", "0", TCL_G
16d70 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
16d80 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
16d90 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
16da0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 68 65 63  _options", "chec
16db0 6b 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  k", "1", TCL_GLO
16dc0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
16dd0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
16de0 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d  _ENABLE_COLUMN_M
16df0 45 54 41 44 41 54 41 0a 20 20 54 63 6c 5f 53 65  ETADATA.  Tcl_Se
16e00 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
16e10 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
16e20 22 63 6f 6c 75 6d 6e 6d 65 74 61 64 61 74 61 22  "columnmetadata"
16e30 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
16e40 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
16e50 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
16e60 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
16e70 69 6f 6e 73 22 2c 20 22 63 6f 6c 75 6d 6e 6d 65  ions", "columnme
16e80 74 61 64 61 74 61 22 2c 20 22 30 22 2c 20 54 43  tadata", "0", TC
16e90 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
16ea0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
16eb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c  QLITE_OMIT_COMPL
16ec0 45 54 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  ETE.  Tcl_SetVar
16ed0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
16ee0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6d  e_options", "com
16ef0 70 6c 65 74 65 22 2c 20 22 30 22 2c 20 54 43 4c  plete", "0", TCL
16f00 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
16f10 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
16f20 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
16f30 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f  te_options", "co
16f40 6d 70 6c 65 74 65 22 2c 20 22 31 22 2c 20 54 43  mplete", "1", TC
16f50 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
16f60 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
16f70 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4f  QLITE_OMIT_COMPO
16f80 55 4e 44 5f 53 45 4c 45 43 54 0a 20 20 54 63 6c  UND_SELECT.  Tcl
16f90 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
16fa0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
16fb0 22 2c 20 22 63 6f 6d 70 6f 75 6e 64 22 2c 20 22  ", "compound", "
16fc0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
16fd0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
16fe0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
16ff0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
17000 73 22 2c 20 22 63 6f 6d 70 6f 75 6e 64 22 2c 20  s", "compound", 
17010 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
17020 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
17030 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
17040 54 5f 43 4f 4e 46 4c 49 43 54 5f 43 4c 41 55 53  T_CONFLICT_CLAUS
17050 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  E.  Tcl_SetVar2(
17060 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17070 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6e 66 6c  options", "confl
17080 69 63 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ict", "0", TCL_G
17090 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
170a0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
170b0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
170c0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6e 66  _options", "conf
170d0 6c 69 63 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f  lict", "1", TCL_
170e0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
170f0 6e 64 69 66 0a 0a 23 69 66 20 4f 53 5f 55 4e 49  ndif..#if OS_UNI
17100 58 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  X.  Tcl_SetVar2(
17110 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17120 6f 70 74 69 6f 6e 73 22 2c 20 22 63 72 61 73 68  options", "crash
17130 74 65 73 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f  test", "1", TCL_
17140 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
17150 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
17160 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
17170 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 72 61  e_options", "cra
17180 73 68 74 65 73 74 22 2c 20 22 30 22 2c 20 54 43  shtest", "0", TC
17190 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
171a0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
171b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54  QLITE_OMIT_DATET
171c0 49 4d 45 5f 46 55 4e 43 53 0a 20 20 54 63 6c 5f  IME_FUNCS.  Tcl_
171d0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
171e0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
171f0 2c 20 22 64 61 74 65 74 69 6d 65 22 2c 20 22 30  , "datetime", "0
17200 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
17210 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
17220 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
17230 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
17240 22 2c 20 22 64 61 74 65 74 69 6d 65 22 2c 20 22  ", "datetime", "
17250 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
17260 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
17270 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
17280 5f 44 49 53 4b 49 4f 0a 20 20 54 63 6c 5f 53 65  _DISKIO.  Tcl_Se
17290 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
172a0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
172b0 22 64 69 73 6b 69 6f 22 2c 20 22 30 22 2c 20 54  "diskio", "0", T
172c0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
172d0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
172e0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
172f0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
17300 64 69 73 6b 69 6f 22 2c 20 22 31 22 2c 20 54 43  diskio", "1", TC
17310 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
17320 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
17330 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
17340 49 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  IN.  Tcl_SetVar2
17350 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
17360 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 65 78 70 6c  _options", "expl
17370 61 69 6e 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ain", "0", TCL_G
17380 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
17390 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
173a0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
173b0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 65 78 70 6c  _options", "expl
173c0 61 69 6e 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  ain", "1", TCL_G
173d0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
173e0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
173f0 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
17400 5f 50 4f 49 4e 54 0a 20 20 54 63 6c 5f 53 65 74  _POINT.  Tcl_Set
17410 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
17420 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
17430 66 6c 6f 61 74 69 6e 67 70 6f 69 6e 74 22 2c 20  floatingpoint", 
17440 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
17450 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
17460 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
17470 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
17480 6e 73 22 2c 20 22 66 6c 6f 61 74 69 6e 67 70 6f  ns", "floatingpo
17490 69 6e 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  int", "1", TCL_G
174a0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
174b0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
174c0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
174d0 4b 45 59 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  KEY.  Tcl_SetVar
174e0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
174f0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66 6f 72  e_options", "for
17500 65 69 67 6e 6b 65 79 22 2c 20 22 30 22 2c 20 54  eignkey", "0", T
17510 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
17520 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
17530 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
17540 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
17550 66 6f 72 65 69 67 6e 6b 65 79 22 2c 20 22 31 22  foreignkey", "1"
17560 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
17570 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
17580 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47  ef SQLITE_OMIT_G
17590 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a 20 20 54  LOBALRECOVER.  T
175a0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
175b0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
175c0 6e 73 22 2c 20 22 67 6c 6f 62 61 6c 72 65 63 6f  ns", "globalreco
175d0 76 65 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ver", "0", TCL_G
175e0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
175f0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
17600 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
17610 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 67 6c 6f 62  _options", "glob
17620 61 6c 72 65 63 6f 76 65 72 22 2c 20 22 31 22 2c  alrecover", "1",
17630 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
17640 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
17650 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
17660 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20  TEGRITY_CHECK.  
17670 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
17680 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
17690 6f 6e 73 22 2c 20 22 69 6e 74 65 67 72 69 74 79  ons", "integrity
176a0 63 6b 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ck", "0", TCL_GL
176b0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
176c0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
176d0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
176e0 6f 70 74 69 6f 6e 73 22 2c 20 22 69 6e 74 65 67  options", "integ
176f0 72 69 74 79 63 6b 22 2c 20 22 31 22 2c 20 54 43  rityck", "1", TC
17700 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
17710 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
17720 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 49 4b 45 5f  QLITE_OMIT_LIKE_
17730 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 0a 20 20 54  OPTIMIZATION.  T
17740 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
17750 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
17760 6e 73 22 2c 20 22 6c 69 6b 65 5f 6f 70 74 22 2c  ns", "like_opt",
17770 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
17780 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
17790 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
177a0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
177b0 6f 6e 73 22 2c 20 22 6c 69 6b 65 5f 6f 70 74 22  ons", "like_opt"
177c0 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
177d0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
177e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
177f0 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 0a 20 20 54  MIT_MEMORYDB.  T
17800 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
17810 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
17820 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 64 62 22 2c  ns", "memorydb",
17830 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
17840 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
17850 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
17860 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
17870 6f 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 64 62 22  ons", "memorydb"
17880 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
17890 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
178a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
178b0 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
178c0 41 47 45 4d 45 4e 54 0a 20 20 54 63 6c 5f 53 65  AGEMENT.  Tcl_Se
178d0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
178e0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
178f0 22 6d 65 6d 6f 72 79 6d 61 6e 61 67 65 22 2c 20  "memorymanage", 
17900 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
17910 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
17920 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
17930 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
17940 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 6d 61 6e 61  ns", "memorymana
17950 67 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ge", "0", TCL_GL
17960 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
17970 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
17980 45 5f 4f 4d 49 54 5f 4f 52 5f 4f 50 54 49 4d 49  E_OMIT_OR_OPTIMI
17990 5a 41 54 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74  ZATION.  Tcl_Set
179a0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
179b0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
179c0 6f 72 5f 6f 70 74 22 2c 20 22 30 22 2c 20 54 43  or_opt", "0", TC
179d0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
179e0 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
179f0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
17a00 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6f  ite_options", "o
17a10 72 5f 6f 70 74 22 2c 20 22 31 22 2c 20 54 43 4c  r_opt", "1", TCL
17a20 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
17a30 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
17a40 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
17a50 50 52 41 47 4d 41 53 0a 20 20 54 63 6c 5f 53 65  PRAGMAS.  Tcl_Se
17a60 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
17a70 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
17a80 22 70 61 67 65 72 5f 70 72 61 67 6d 61 73 22 2c  "pager_pragmas",
17a90 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
17aa0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
17ab0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
17ac0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
17ad0 6f 6e 73 22 2c 20 22 70 61 67 65 72 5f 70 72 61  ons", "pager_pra
17ae0 67 6d 61 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f  gmas", "1", TCL_
17af0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
17b00 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
17b10 49 54 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52 0a  ITE_OMIT_PARSER.
17b20 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
17b30 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
17b40 74 69 6f 6e 73 22 2c 20 22 70 61 72 73 65 72 22  tions", "parser"
17b50 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
17b60 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
17b70 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
17b80 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
17b90 69 6f 6e 73 22 2c 20 22 70 61 72 73 65 72 22 2c  ions", "parser",
17ba0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
17bb0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
17bc0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
17bd0 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 29 20  TE_OMIT_PRAGMA) 
17be0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
17bf0 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47  E_OMIT_FLAG_PRAG
17c00 4d 41 53 29 0a 20 20 54 63 6c 5f 53 65 74 56 61  MAS).  Tcl_SetVa
17c10 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
17c20 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72  te_options", "pr
17c30 61 67 6d 61 22 2c 20 22 30 22 2c 20 54 43 4c 5f  agma", "0", TCL_
17c40 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 20 20  GLOBAL_ONLY);.  
17c50 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
17c60 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
17c70 6f 6e 73 22 2c 20 22 69 6e 74 65 67 72 69 74 79  ons", "integrity
17c80 63 6b 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  ck", "0", TCL_GL
17c90 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
17ca0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
17cb0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17cc0 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72 61 67 6d  options", "pragm
17cd0 61 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  a", "1", TCL_GLO
17ce0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
17cf0 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
17d00 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
17d10 41 4c 4c 42 41 43 4b 0a 20 20 54 63 6c 5f 53 65  ALLBACK.  Tcl_Se
17d20 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
17d30 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
17d40 22 70 72 6f 67 72 65 73 73 22 2c 20 22 30 22 2c  "progress", "0",
17d50 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
17d60 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
17d70 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
17d80 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
17d90 20 22 70 72 6f 67 72 65 73 73 22 2c 20 22 31 22   "progress", "1"
17da0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
17db0 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
17dc0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
17dd0 5f 52 45 44 45 46 5f 49 4f 0a 20 20 54 63 6c 5f  _REDEF_IO.  Tcl_
17de0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
17df0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
17e00 2c 20 22 72 65 64 65 66 69 6f 22 2c 20 22 31 22  , "redefio", "1"
17e10 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
17e20 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
17e30 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
17e40 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
17e50 2c 20 22 72 65 64 65 66 69 6f 22 2c 20 22 30 22  , "redefio", "0"
17e60 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
17e70 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
17e80 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 52  ef SQLITE_OMIT_R
17e90 45 49 4e 44 45 58 0a 20 20 54 63 6c 5f 53 65 74  EINDEX.  Tcl_Set
17ea0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
17eb0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
17ec0 72 65 69 6e 64 65 78 22 2c 20 22 30 22 2c 20 54  reindex", "0", T
17ed0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
17ee0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
17ef0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
17f00 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
17f10 72 65 69 6e 64 65 78 22 2c 20 22 31 22 2c 20 54  reindex", "1", T
17f20 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
17f30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
17f40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
17f50 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 54 63 6c  MA_PRAGMAS.  Tcl
17f60 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
17f70 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
17f80 22 2c 20 22 73 63 68 65 6d 61 5f 70 72 61 67 6d  ", "schema_pragm
17f90 61 73 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  as", "0", TCL_GL
17fa0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
17fb0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
17fc0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
17fd0 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63 68 65 6d  options", "schem
17fe0 61 5f 70 72 61 67 6d 61 73 22 2c 20 22 31 22 2c  a_pragmas", "1",
17ff0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
18000 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
18010 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  f SQLITE_OMIT_SC
18020 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41  HEMA_VERSION_PRA
18030 47 4d 41 53 0a 20 20 54 63 6c 5f 53 65 74 56 61  GMAS.  Tcl_SetVa
18040 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
18050 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63  te_options", "sc
18060 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 2c 20 22  hema_version", "
18070 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
18080 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
18090 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
180a0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
180b0 73 22 2c 20 22 73 63 68 65 6d 61 5f 76 65 72 73  s", "schema_vers
180c0 69 6f 6e 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47  ion", "1", TCL_G
180d0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  LOBAL_ONLY);.#en
180e0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
180f0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
18100 41 43 48 45 0a 20 20 54 63 6c 5f 53 65 74 56 61  ACHE.  Tcl_SetVa
18110 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
18120 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 73 68  te_options", "sh
18130 61 72 65 64 5f 63 61 63 68 65 22 2c 20 22 30 22  ared_cache", "0"
18140 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
18150 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
18160 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
18170 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
18180 2c 20 22 73 68 61 72 65 64 5f 63 61 63 68 65 22  , "shared_cache"
18190 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
181a0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
181b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
181c0 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 20 20 54  MIT_SUBQUERY.  T
181d0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
181e0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
181f0 6e 73 22 2c 20 22 73 75 62 71 75 65 72 79 22 2c  ns", "subquery",
18200 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
18210 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
18220 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
18230 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
18240 6f 6e 73 22 2c 20 22 73 75 62 71 75 65 72 79 22  ons", "subquery"
18250 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
18260 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
18270 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
18280 4d 49 54 5f 54 43 4c 5f 56 41 52 49 41 42 4c 45  MIT_TCL_VARIABLE
18290 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
182a0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
182b0 70 74 69 6f 6e 73 22 2c 20 22 74 63 6c 76 61 72  ptions", "tclvar
182c0 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
182d0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
182e0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
182f0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
18300 74 69 6f 6e 73 22 2c 20 22 74 63 6c 76 61 72 22  tions", "tclvar"
18310 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
18320 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
18330 0a 23 69 66 20 64 65 66 69 6e 65 64 28 54 48 52  .#if defined(THR
18340 45 41 44 53 41 46 45 29 20 26 26 20 54 48 52 45  EADSAFE) && THRE
18350 41 44 53 41 46 45 0a 20 20 54 63 6c 5f 53 65 74  ADSAFE.  Tcl_Set
18360 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
18370 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
18380 74 68 72 65 61 64 73 61 66 65 22 2c 20 22 31 22  threadsafe", "1"
18390 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
183a0 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
183b0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
183c0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
183d0 2c 20 22 74 68 72 65 61 64 73 61 66 65 22 2c 20  , "threadsafe", 
183e0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
183f0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  ONLY);.#endif..#
18400 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
18410 54 5f 54 52 41 43 45 0a 20 20 54 63 6c 5f 53 65  T_TRACE.  Tcl_Se
18420 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
18430 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
18440 22 74 72 61 63 65 22 2c 20 22 30 22 2c 20 54 43  "trace", "0", TC
18450 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
18460 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
18470 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
18480 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74  ite_options", "t
18490 72 61 63 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f  race", "1", TCL_
184a0 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
184b0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
184c0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
184d0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
184e0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
184f0 70 74 69 6f 6e 73 22 2c 20 22 74 72 69 67 67 65  ptions", "trigge
18500 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  r", "0", TCL_GLO
18510 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
18520 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
18530 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
18540 70 74 69 6f 6e 73 22 2c 20 22 74 72 69 67 67 65  ptions", "trigge
18550 72 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  r", "1", TCL_GLO
18560 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
18570 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
18580 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 20 20 54  _OMIT_TEMPDB.  T
18590 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
185a0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
185b0 6e 73 22 2c 20 22 74 65 6d 70 64 62 22 2c 20 22  ns", "tempdb", "
185c0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
185d0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
185e0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
185f0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
18600 73 22 2c 20 22 74 65 6d 70 64 62 22 2c 20 22 31  s", "tempdb", "1
18610 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
18620 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
18630 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
18640 55 54 46 31 36 0a 20 20 54 63 6c 5f 53 65 74 56  UTF16.  Tcl_SetV
18650 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
18660 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 75  ite_options", "u
18670 74 66 31 36 22 2c 20 22 30 22 2c 20 54 43 4c 5f  tf16", "0", TCL_
18680 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
18690 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
186a0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
186b0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 75 74 66  e_options", "utf
186c0 31 36 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  16", "1", TCL_GL
186d0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
186e0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
186f0 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 0a 20 20  E_OMIT_VACUUM.  
18700 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
18710 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
18720 6f 6e 73 22 2c 20 22 76 61 63 75 75 6d 22 2c 20  ons", "vacuum", 
18730 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
18740 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
18750 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
18760 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
18770 6e 73 22 2c 20 22 76 61 63 75 75 6d 22 2c 20 22  ns", "vacuum", "
18780 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
18790 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
187a0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
187b0 5f 56 49 45 57 0a 20 20 54 63 6c 5f 53 65 74 56  _VIEW.  Tcl_SetV
187c0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
187d0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76  ite_options", "v
187e0 69 65 77 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  iew", "0", TCL_G
187f0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
18800 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
18810 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
18820 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76 69 65 77  _options", "view
18830 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
18840 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
18850 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
18860 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
18870 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  E.  Tcl_SetVar2(
18880 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
18890 6f 70 74 69 6f 6e 73 22 2c 20 22 76 74 61 62 22  options", "vtab"
188a0 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
188b0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
188c0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
188d0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
188e0 69 6f 6e 73 22 2c 20 22 76 74 61 62 22 2c 20 22  ions", "vtab", "
188f0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
18900 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a  NLY);.#endif.}..
18910 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 63  /*.** Register c
18920 6f 6d 6d 61 6e 64 73 20 77 69 74 68 20 74 68 65  ommands with the
18930 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
18940 2e 0a 2a 2f 0a 69 6e 74 20 53 71 6c 69 74 65 74  ..*/.int Sqlitet
18950 65 73 74 31 5f 49 6e 69 74 28 54 63 6c 5f 49 6e  est1_Init(Tcl_In
18960 74 65 72 70 20 2a 69 6e 74 65 72 70 29 7b 0a 20  terp *interp){. 
18970 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
18980 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
18990 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
189a0 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
189b0 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e  _count;.  extern
189c0 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65   int sqlite3_ope
189d0 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 3b 0a 20 20  n_file_count;.  
189e0 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
189f0 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 3b 0a 20  e3_sort_count;. 
18a00 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
18a10 74 65 33 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65  te3_current_time
18a20 3b 0a 20 20 73 74 61 74 69 63 20 73 74 72 75 63  ;.  static struc
18a30 74 20 7b 0a 20 20 20 20 20 63 68 61 72 20 2a 7a  t {.     char *z
18a40 4e 61 6d 65 3b 0a 20 20 20 20 20 54 63 6c 5f 43  Name;.     Tcl_C
18a50 6d 64 50 72 6f 63 20 2a 78 50 72 6f 63 3b 0a 20  mdProc *xProc;. 
18a60 20 7d 20 61 43 6d 64 5b 5d 20 3d 20 7b 0a 20 20   } aCmd[] = {.  
18a70 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70     { "sqlite3_mp
18a80 72 69 6e 74 66 5f 69 6e 74 22 2c 20 20 20 20 20  rintf_int",     
18a90 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
18aa0 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72 69  oc*)sqlite3_mpri
18ab0 6e 74 66 5f 69 6e 74 20 20 20 20 7d 2c 0a 20 20  ntf_int    },.  
18ac0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70     { "sqlite3_mp
18ad0 72 69 6e 74 66 5f 69 6e 74 36 34 22 2c 20 20 20  rintf_int64",   
18ae0 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
18af0 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72 69  oc*)sqlite3_mpri
18b00 6e 74 66 5f 69 6e 74 36 34 20 20 7d 2c 0a 20 20  ntf_int64  },.  
18b10 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70     { "sqlite3_mp
18b20 72 69 6e 74 66 5f 73 74 72 22 2c 20 20 20 20 20  rintf_str",     
18b30 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
18b40 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72 69  oc*)sqlite3_mpri
18b50 6e 74 66 5f 73 74 72 20 20 20 20 7d 2c 0a 20 20  ntf_str    },.  
18b60 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70     { "sqlite3_mp
18b70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 22 2c 20  rintf_stronly", 
18b80 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
18b90 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72 69  oc*)sqlite3_mpri
18ba0 6e 74 66 5f 73 74 72 6f 6e 6c 79 7d 2c 0a 20 20  ntf_stronly},.  
18bb0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70     { "sqlite3_mp
18bc0 72 69 6e 74 66 5f 64 6f 75 62 6c 65 22 2c 20 20  rintf_double",  
18bd0 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
18be0 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72 69  oc*)sqlite3_mpri
18bf0 6e 74 66 5f 64 6f 75 62 6c 65 20 7d 2c 0a 20 20  ntf_double },.  
18c00 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70     { "sqlite3_mp
18c10 72 69 6e 74 66 5f 73 63 61 6c 65 64 22 2c 20 20  rintf_scaled",  
18c20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
18c30 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72 69  oc*)sqlite3_mpri
18c40 6e 74 66 5f 73 63 61 6c 65 64 20 7d 2c 0a 20 20  ntf_scaled },.  
18c50 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70     { "sqlite3_mp
18c60 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65 22  rintf_hexdouble"
18c70 2c 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63  ,   (Tcl_CmdProc
18c80 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  *)sqlite3_mprint
18c90 66 5f 68 65 78 64 6f 75 62 6c 65 7d 2c 0a 20 20  f_hexdouble},.  
18ca0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70     { "sqlite3_mp
18cb0 72 69 6e 74 66 5f 7a 5f 74 65 73 74 22 2c 20 20  rintf_z_test",  
18cc0 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
18cd0 6f 63 2a 29 74 65 73 74 5f 6d 70 72 69 6e 74 66  oc*)test_mprintf
18ce0 5f 7a 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20  _z        },.   
18cf0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72    { "sqlite3_mpr
18d00 69 6e 74 66 5f 6e 5f 74 65 73 74 22 2c 20 20 20  intf_n_test",   
18d10 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
18d20 63 2a 29 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f  c*)test_mprintf_
18d30 6e 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  n        },.    
18d40 20 7b 20 22 73 71 6c 69 74 65 33 5f 6c 61 73 74   { "sqlite3_last
18d50 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 22 2c 20  _insert_rowid", 
18d60 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
18d70 2a 29 74 65 73 74 5f 6c 61 73 74 5f 72 6f 77 69  *)test_last_rowi
18d80 64 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  d       },.     
18d90 7b 20 22 73 71 6c 69 74 65 33 5f 65 78 65 63 5f  { "sqlite3_exec_
18da0 70 72 69 6e 74 66 22 2c 20 20 20 20 20 20 20 20  printf",        
18db0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
18dc0 29 74 65 73 74 5f 65 78 65 63 5f 70 72 69 6e 74  )test_exec_print
18dd0 66 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b  f      },.     {
18de0 20 22 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61   "sqlite3_get_ta
18df0 62 6c 65 5f 70 72 69 6e 74 66 22 2c 20 20 20 20  ble_printf",    
18e00 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
18e10 74 65 73 74 5f 67 65 74 5f 74 61 62 6c 65 5f 70  test_get_table_p
18e20 72 69 6e 74 66 20 7d 2c 0a 20 20 20 20 20 7b 20  rintf },.     { 
18e30 22 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 22 2c  "sqlite3_close",
18e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e50 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
18e60 71 6c 69 74 65 5f 74 65 73 74 5f 63 6c 6f 73 65  qlite_test_close
18e70 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
18e80 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
18e90 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20 20 20 20  unction",       
18ea0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
18eb0 73 74 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  st_create_functi
18ec0 6f 6e 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73  on  },.     { "s
18ed0 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 61 67  qlite3_create_ag
18ee0 67 72 65 67 61 74 65 22 2c 20 20 20 20 20 20 28  gregate",      (
18ef0 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
18f00 74 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61  t_create_aggrega
18f10 74 65 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  te },.     { "sq
18f20 6c 69 74 65 5f 72 65 67 69 73 74 65 72 5f 74 65  lite_register_te
18f30 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 28 54  st_function", (T
18f40 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
18f50 5f 72 65 67 69 73 74 65 72 5f 66 75 6e 63 20 20  _register_func  
18f60 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
18f70 69 74 65 5f 61 62 6f 72 74 22 2c 20 20 20 20 20  ite_abort",     
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
18f90 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74  l_CmdProc*)sqlit
18fa0 65 5f 61 62 6f 72 74 20 20 20 20 20 20 20 20 20  e_abort         
18fb0 20 7d 2c 0a 23 69 66 64 65 66 20 53 51 4c 49 54   },.#ifdef SQLIT
18fc0 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 20 20 20  E_MEMDEBUG.     
18fd0 7b 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  { "sqlite_malloc
18fe0 5f 66 61 69 6c 22 2c 20 20 20 20 20 20 20 20 20  _fail",         
18ff0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
19000 29 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66  )sqlite_malloc_f
19010 61 69 6c 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b  ail    },.     {
19020 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f   "sqlite_malloc_
19030 73 74 61 74 22 2c 20 20 20 20 20 20 20 20 20 20  stat",          
19040 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
19050 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74  sqlite_malloc_st
19060 61 74 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a  at    },.#endif.
19070 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 62       { "sqlite_b
19080 69 6e 64 22 2c 20 20 20 20 20 20 20 20 20 20 20  ind",           
19090 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
190a0 50 72 6f 63 2a 29 74 65 73 74 5f 62 69 6e 64 20  Proc*)test_bind 
190b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
190c0 20 20 20 20 7b 20 22 62 72 65 61 6b 70 6f 69 6e      { "breakpoin
190d0 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  t",             
190e0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
190f0 72 6f 63 2a 29 74 65 73 74 5f 62 72 65 61 6b 70  roc*)test_breakp
19100 6f 69 6e 74 20 20 20 20 20 20 20 7d 2c 0a 20 20  oint       },.  
19110 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6b 65     { "sqlite3_ke
19120 79 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  y",             
19130 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
19140 6f 63 2a 29 74 65 73 74 5f 6b 65 79 20 20 20 20  oc*)test_key    
19150 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
19160 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 72 65 6b    { "sqlite3_rek
19170 65 79 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ey",            
19180 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
19190 63 2a 29 74 65 73 74 5f 72 65 6b 65 79 20 20 20  c*)test_rekey   
191a0 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
191b0 20 7b 20 22 73 71 6c 69 74 65 5f 73 65 74 5f 6d   { "sqlite_set_m
191c0 61 67 69 63 22 2c 20 20 20 20 20 20 20 20 20 20  agic",          
191d0 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
191e0 2a 29 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67  *)sqlite_set_mag
191f0 69 63 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  ic      },.     
19200 7b 20 22 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  { "sqlite3_inter
19210 72 75 70 74 22 2c 20 20 20 20 20 20 20 20 20 20  rupt",          
19220 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
19230 29 74 65 73 74 5f 69 6e 74 65 72 72 75 70 74 20  )test_interrupt 
19240 20 20 20 20 20 20 20 7d 2c 0a 23 69 66 20 30 0a         },.#if 0.
19250 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
19260 73 6c 65 65 70 22 2c 20 20 20 20 20 20 20 20 20  sleep",         
19270 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
19280 50 72 6f 63 2a 29 74 65 73 74 5f 73 6c 65 65 70  Proc*)test_sleep
19290 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 23              },.#
192a0 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71  endif.     { "sq
192b0 6c 69 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e 63  lite_delete_func
192c0 74 69 6f 6e 22 2c 20 20 20 20 20 20 20 20 28 54  tion",        (T
192d0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65  cl_CmdProc*)dele
192e0 74 65 5f 66 75 6e 63 74 69 6f 6e 20 20 20 20 20  te_function     
192f0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
19300 69 74 65 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c 61  ite_delete_colla
19310 74 69 6f 6e 22 2c 20 20 20 20 20 20 20 28 54 63  tion",       (Tc
19320 6c 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65 74  l_CmdProc*)delet
19330 65 5f 63 6f 6c 6c 61 74 69 6f 6e 20 20 20 20 20  e_collation     
19340 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
19350 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
19360 69 74 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c  it",        (Tcl
19370 5f 43 6d 64 50 72 6f 63 2a 29 67 65 74 5f 61 75  _CmdProc*)get_au
19380 74 6f 63 6f 6d 6d 69 74 20 20 20 20 20 20 20 20  tocommit        
19390 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
193a0 65 33 5f 73 74 61 63 6b 5f 75 73 65 64 22 2c 20  e3_stack_used", 
193b0 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
193c0 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 73 74  CmdProc*)test_st
193d0 61 63 6b 5f 75 73 65 64 20 20 20 20 20 20 20 7d  ack_used       }
193e0 2c 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69 63 20  ,.  };.  static 
193f0 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 63 68  struct {.     ch
19400 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20  ar *zName;.     
19410 54 63 6c 5f 4f 62 6a 43 6d 64 50 72 6f 63 20 2a  Tcl_ObjCmdProc *
19420 78 50 72 6f 63 3b 0a 20 20 20 20 20 76 6f 69 64  xProc;.     void
19430 20 2a 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20   *clientData;.  
19440 7d 20 61 4f 62 6a 43 6d 64 5b 5d 20 3d 20 7b 0a  } aObjCmd[] = {.
19450 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
19460 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74  connection_point
19470 65 72 22 2c 20 20 20 20 67 65 74 5f 73 71 6c 69  er",    get_sqli
19480 74 65 5f 70 6f 69 6e 74 65 72 2c 20 30 20 7d 2c  te_pointer, 0 },
19490 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
194a0 5f 62 69 6e 64 5f 69 6e 74 22 2c 20 20 20 20 20  _bind_int",     
194b0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69           test_bi
194c0 6e 64 5f 69 6e 74 2c 20 20 20 20 20 20 30 20 7d  nd_int,      0 }
194d0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
194e0 33 5f 62 69 6e 64 5f 69 6e 74 36 34 22 2c 20 20  3_bind_int64",  
194f0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62            test_b
19500 69 6e 64 5f 69 6e 74 36 34 2c 20 20 20 20 30 20  ind_int64,    0 
19510 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
19520 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 22 2c  e3_bind_double",
19530 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
19540 62 69 6e 64 5f 64 6f 75 62 6c 65 2c 20 20 20 30  bind_double,   0
19550 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
19560 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 22 2c 20  te3_bind_null", 
19570 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
19580 5f 62 69 6e 64 5f 6e 75 6c 6c 20 20 20 20 20 2c  _bind_null     ,
19590 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
195a0 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 22 2c  ite3_bind_text",
195b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
195c0 74 5f 62 69 6e 64 5f 74 65 78 74 20 20 20 20 20  t_bind_text     
195d0 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
195e0 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31  lite3_bind_text1
195f0 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 74 65  6",           te
19600 73 74 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 20  st_bind_text16  
19610 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
19620 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
19630 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 74  ",             t
19640 65 73 74 5f 62 69 6e 64 5f 62 6c 6f 62 20 20 20  est_bind_blob   
19650 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
19660 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
19670 61 6d 65 74 65 72 5f 63 6f 75 6e 74 22 2c 20 20  ameter_count",  
19680 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65  test_bind_parame
19690 74 65 72 5f 63 6f 75 6e 74 2c 20 30 7d 2c 0a 20  ter_count, 0},. 
196a0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62      { "sqlite3_b
196b0 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
196c0 6d 65 22 2c 20 20 20 74 65 73 74 5f 62 69 6e 64  me",   test_bind
196d0 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 2c  _parameter_name,
196e0 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71    0},.     { "sq
196f0 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
19700 65 74 65 72 5f 69 6e 64 65 78 22 2c 20 20 74 65  eter_index",  te
19710 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  st_bind_paramete
19720 72 5f 69 6e 64 65 78 2c 20 30 7d 2c 0a 23 69 66  r_index, 0},.#if
19730 20 30 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74   0.     { "sqlit
19740 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67  e3_clear_binding
19750 73 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f  s",        test_
19760 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 2c 20  clear_bindings, 
19770 30 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20  0},.#endif.     
19780 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  { "sqlite3_errco
19790 64 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  de",            
197a0 20 20 20 74 65 73 74 5f 65 72 72 63 6f 64 65 20     test_errcode 
197b0 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20        ,0 },.    
197c0 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72 6d   { "sqlite3_errm
197d0 73 67 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  sg",            
197e0 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67 20      test_errmsg 
197f0 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
19800 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72    { "sqlite3_err
19810 6d 73 67 31 36 22 2c 20 20 20 20 20 20 20 20 20  msg16",         
19820 20 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67       test_errmsg
19830 31 36 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20  16      ,0 },.  
19840 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f 70     { "sqlite3_op
19850 65 6e 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  en",            
19860 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65 6e 20        test_open 
19870 20 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20           ,0 },. 
19880 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f      { "sqlite3_o
19890 70 65 6e 31 36 22 2c 20 20 20 20 20 20 20 20 20  pen16",         
198a0 20 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65 6e         test_open
198b0 31 36 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a  16        ,0 },.
198c0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
198d0 63 6f 6d 70 6c 65 74 65 31 36 22 2c 20 20 20 20  complete16",    
198e0 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6d          test_com
198f0 70 6c 65 74 65 31 36 20 20 20 20 2c 30 20 7d 2c  plete16    ,0 },
19900 0a 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ..     { "sqlite
19910 33 5f 70 72 65 70 61 72 65 22 2c 20 20 20 20 20  3_prepare",     
19920 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 70            test_p
19930 72 65 70 61 72 65 20 20 20 20 20 20 20 2c 30 20  repare       ,0 
19940 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
19950 65 33 5f 70 72 65 70 61 72 65 31 36 22 2c 20 20  e3_prepare16",  
19960 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
19970 70 72 65 70 61 72 65 31 36 20 20 20 20 20 2c 30  prepare16     ,0
19980 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
19990 74 65 33 5f 66 69 6e 61 6c 69 7a 65 22 2c 20 20  te3_finalize",  
199a0 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
199b0 5f 66 69 6e 61 6c 69 7a 65 20 20 20 20 20 20 2c  _finalize      ,
199c0 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
199d0 69 74 65 33 5f 72 65 73 65 74 22 2c 20 20 20 20  ite3_reset",    
199e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
199f0 74 5f 72 65 73 65 74 20 20 20 20 20 20 20 20 20  t_reset         
19a00 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
19a10 6c 69 74 65 33 5f 65 78 70 69 72 65 64 22 2c 20  lite3_expired", 
19a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
19a30 73 74 5f 65 78 70 69 72 65 64 20 20 20 20 20 20  st_expired      
19a40 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
19a50 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72 5f  qlite3_transfer_
19a60 62 69 6e 64 69 6e 67 73 22 2c 20 20 20 20 20 74  bindings",     t
19a70 65 73 74 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e  est_transfer_bin
19a80 64 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22  d ,0 },.     { "
19a90 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 22  sqlite3_changes"
19aa0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
19ab0 74 65 73 74 5f 63 68 61 6e 67 65 73 20 20 20 20  test_changes    
19ac0 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
19ad0 22 73 71 6c 69 74 65 33 5f 73 74 65 70 22 2c 20  "sqlite3_step", 
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19af0 20 74 65 73 74 5f 73 74 65 70 20 20 20 20 20 20   test_step      
19b00 20 20 20 20 2c 30 20 7d 2c 0a 0a 20 20 20 20 20      ,0 },..     
19b10 7b 20 22 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  { "sqlite3_relea
19b20 73 65 5f 6d 65 6d 6f 72 79 22 2c 20 20 20 20 20  se_memory",     
19b30 20 20 20 74 65 73 74 5f 72 65 6c 65 61 73 65 5f     test_release_
19b40 6d 65 6d 6f 72 79 2c 20 20 20 20 20 30 7d 2c 0a  memory,     0},.
19b50 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
19b60 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 22  soft_heap_limit"
19b70 2c 20 20 20 20 20 20 20 74 65 73 74 5f 73 6f 66  ,       test_sof
19b80 74 5f 68 65 61 70 5f 6c 69 6d 69 74 2c 20 20 20  t_heap_limit,   
19b90 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c   0},.     { "sql
19ba0 69 74 65 33 5f 63 6c 65 61 72 5f 74 73 64 5f 6d  ite3_clear_tsd_m
19bb0 65 6d 64 65 62 75 67 22 2c 20 20 20 20 74 65 73  emdebug",    tes
19bc0 74 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65 6d 64  t_clear_tsd_memd
19bd0 65 62 75 67 2c 20 30 7d 2c 0a 20 20 20 20 20 7b  ebug, 0},.     {
19be0 20 22 73 71 6c 69 74 65 33 5f 74 73 64 5f 72 65   "sqlite3_tsd_re
19bf0 6c 65 61 73 65 22 2c 20 20 20 20 20 20 20 20 20  lease",         
19c00 20 20 74 65 73 74 5f 74 73 64 5f 72 65 6c 65 61    test_tsd_relea
19c10 73 65 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20  se,        0},. 
19c20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 74      { "sqlite3_t
19c30 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 22 2c 20  hread_cleanup", 
19c40 20 20 20 20 20 20 20 74 65 73 74 5f 74 68 72 65         test_thre
19c50 61 64 5f 63 6c 65 61 6e 75 70 2c 20 20 20 20 20  ad_cleanup,     
19c60 30 7d 2c 0a 0a 20 20 20 20 20 2f 2a 20 73 71 6c  0},..     /* sql
19c70 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 2a 28 29 20  ite3_column_*() 
19c80 41 50 49 20 2a 2f 0a 20 20 20 20 20 7b 20 22 73  API */.     { "s
19c90 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
19ca0 75 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 74  unt",          t
19cb0 65 73 74 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  est_column_count
19cc0 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
19cd0 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75  sqlite3_data_cou
19ce0 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  nt",            
19cf0 74 65 73 74 5f 64 61 74 61 5f 63 6f 75 6e 74 20  test_data_count 
19d00 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
19d10 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
19d20 74 79 70 65 22 2c 20 20 20 20 20 20 20 20 20 20  type",          
19d30 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 74 79 70   test_column_typ
19d40 65 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b  e   ,0 },.     {
19d50 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
19d60 5f 62 6c 6f 62 22 2c 20 20 20 20 20 20 20 20 20  _blob",         
19d70 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 62 6c    test_column_bl
19d80 6f 62 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20  ob   ,0 },.     
19d90 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
19da0 6e 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20 20 20  n_double",      
19db0 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64     test_column_d
19dc0 6f 75 62 6c 65 20 2c 30 20 7d 2c 0a 20 20 20 20  ouble ,0 },.    
19dd0 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
19de0 6d 6e 5f 69 6e 74 36 34 22 2c 20 20 20 20 20 20  mn_int64",      
19df0 20 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f      test_column_
19e00 69 6e 74 36 34 20 20 2c 30 20 7d 2c 0a 20 20 20  int64  ,0 },.   
19e10 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
19e20 75 6d 6e 5f 74 65 78 74 22 2c 20 20 20 20 20 20  umn_text",      
19e30 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c   test_stmt_utf8,
19e40 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
19e50 5f 74 65 78 74 20 20 20 20 20 20 7d 2c 0a 20 20  _text      },.  
19e60 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
19e70 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 22 2c 20  lumn_decltype", 
19e80 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38    test_stmt_utf8
19e90 2c 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ,  sqlite3_colum
19ea0 6e 5f 64 65 63 6c 74 79 70 65 20 20 7d 2c 0a 20  n_decltype  },. 
19eb0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
19ec0 6f 6c 75 6d 6e 5f 6e 61 6d 65 22 2c 20 20 20 20  olumn_name",    
19ed0 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66     test_stmt_utf
19ee0 38 2c 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  8,  sqlite3_colu
19ef0 6d 6e 5f 6e 61 6d 65 20 20 20 20 20 20 7d 2c 0a  mn_name      },.
19f00 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
19f10 63 6f 6c 75 6d 6e 5f 69 6e 74 22 2c 20 20 20 20  column_int",    
19f20 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e      test_stmt_in
19f30 74 2c 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c  t,   sqlite3_col
19f40 75 6d 6e 5f 69 6e 74 20 20 20 20 20 20 20 7d 2c  umn_int       },
19f50 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
19f60 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 22 2c 20  _column_bytes", 
19f70 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 69       test_stmt_i
19f80 6e 74 2c 20 20 20 73 71 6c 69 74 65 33 5f 63 6f  nt,   sqlite3_co
19f90 6c 75 6d 6e 5f 62 79 74 65 73 20 20 20 20 20 7d  lumn_bytes     }
19fa0 2c 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ,.#ifdef SQLITE_
19fb0 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45  ENABLE_COLUMN_ME
19fc0 54 41 44 41 54 41 0a 7b 20 22 73 71 6c 69 74 65  TADATA.{ "sqlite
19fd0 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
19fe0 65 5f 6e 61 6d 65 22 2c 20 74 65 73 74 5f 73 74  e_name", test_st
19ff0 6d 74 5f 75 74 66 38 2c 20 73 71 6c 69 74 65 33  mt_utf8, sqlite3
1a000 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
1a010 5f 6e 61 6d 65 7d 2c 0a 7b 20 22 73 71 6c 69 74  _name},.{ "sqlit
1a020 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f  e3_column_table_
1a030 6e 61 6d 65 22 2c 20 74 65 73 74 5f 73 74 6d 74  name", test_stmt
1a040 5f 75 74 66 38 2c 20 73 71 6c 69 74 65 33 5f 63  _utf8, sqlite3_c
1a050 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
1a060 7d 2c 0a 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f  },.{ "sqlite3_co
1a070 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
1a080 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66  ", test_stmt_utf
1a090 38 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  8, sqlite3_colum
1a0a0 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 7d 2c 0a  n_origin_name},.
1a0b0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
1a0c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
1a0d0 36 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  6.     { "sqlite
1a0e0 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36  3_column_bytes16
1a0f0 22 2c 20 20 20 20 74 65 73 74 5f 73 74 6d 74 5f  ",    test_stmt_
1a100 69 6e 74 2c 20 20 20 73 71 6c 69 74 65 33 5f 63  int,   sqlite3_c
1a110 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20 20 20  olumn_bytes16   
1a120 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1a130 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36  e3_column_text16
1a140 22 2c 20 20 20 20 20 74 65 73 74 5f 73 74 6d 74  ",     test_stmt
1a150 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65 33 5f  _utf16, sqlite3_
1a160 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 20 20 20  column_text16   
1a170 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1a180 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
1a190 79 70 65 31 36 22 2c 20 74 65 73 74 5f 73 74 6d  ype16", test_stm
1a1a0 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65 33  t_utf16, sqlite3
1a1b0 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
1a1c0 31 36 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  16},.     { "sql
1a1d0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
1a1e0 31 36 22 2c 20 20 20 20 20 74 65 73 74 5f 73 74  16",     test_st
1a1f0 6d 74 5f 75 74 66 31 36 2c 20 73 71 6c 69 74 65  mt_utf16, sqlite
1a200 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 20  3_column_name16 
1a210 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 61 64     },.     { "ad
1a220 64 5f 61 6c 69 67 6e 6d 65 6e 74 5f 74 65 73 74  d_alignment_test
1a230 5f 63 6f 6c 6c 61 74 69 6f 6e 73 22 2c 20 61 64  _collations", ad
1a240 64 5f 61 6c 69 67 6e 6d 65 6e 74 5f 74 65 73 74  d_alignment_test
1a250 5f 63 6f 6c 6c 61 74 69 6f 6e 73 2c 20 30 20 20  _collations, 0  
1a260 20 20 20 20 7d 2c 0a 23 69 66 64 65 66 20 53 51      },.#ifdef SQ
1a270 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
1a280 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 7b 22 73 71  MN_METADATA.{"sq
1a290 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74  lite3_column_dat
1a2a0 61 62 61 73 65 5f 6e 61 6d 65 31 36 22 2c 0a 20  abase_name16",. 
1a2b0 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36   test_stmt_utf16
1a2c0 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  , sqlite3_column
1a2d0 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36  _database_name16
1a2e0 7d 2c 0a 7b 22 73 71 6c 69 74 65 33 5f 63 6f 6c  },.{"sqlite3_col
1a2f0 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36  umn_table_name16
1a300 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66  ", test_stmt_utf
1a310 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  16, sqlite3_colu
1a320 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 31 36 7d  mn_table_name16}
1a330 2c 0a 7b 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ,.{"sqlite3_colu
1a340 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31 36  mn_origin_name16
1a350 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66  ", test_stmt_utf
1a360 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  16, sqlite3_colu
1a370 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31 36  mn_origin_name16
1a380 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  },.#endif.#endif
1a390 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1a3a0 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 22  _global_recover"
1a3b0 2c 20 20 20 20 74 65 73 74 5f 67 6c 6f 62 61 6c  ,    test_global
1a3c0 5f 72 65 63 6f 76 65 72 2c 20 30 20 20 20 7d 2c  _recover, 0   },
1a3d0 0a 0a 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69  ..     /* Functi
1a3e0 6f 6e 73 20 66 72 6f 6d 20 6f 73 2e 68 20 2a 2f  ons from os.h */
1a3f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1a400 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 20 20 20 20  OMIT_DISKIO.    
1a410 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 4f 70 65   { "sqlite3OsOpe
1a420 6e 52 65 61 64 57 72 69 74 65 22 2c 74 65 73 74  nReadWrite",test
1a430 5f 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65  _sqlite3OsOpenRe
1a440 61 64 57 72 69 74 65 2c 20 30 20 7d 2c 0a 20 20  adWrite, 0 },.  
1a450 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 43     { "sqlite3OsC
1a460 6c 6f 73 65 22 2c 20 20 20 20 20 20 20 20 74 65  lose",        te
1a470 73 74 5f 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73  st_sqlite3OsClos
1a480 65 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22  e, 0 },.     { "
1a490 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 22 2c 20  sqlite3OsLock", 
1a4a0 20 20 20 20 20 20 20 20 74 65 73 74 5f 73 71 6c          test_sql
1a4b0 69 74 65 33 4f 73 4c 6f 63 6b 2c 20 30 20 7d 2c  ite3OsLock, 0 },
1a4c0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1a4d0 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 22 2c  OsTempFileName",
1a4e0 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 54   test_sqlite3OsT
1a4f0 65 6d 70 46 69 6c 65 4e 61 6d 65 2c 20 30 20 7d  empFileName, 0 }
1a500 2c 0a 20 20 20 0a 20 20 20 20 20 2f 2a 20 43 75  ,.   .     /* Cu
1a510 73 74 6f 6d 20 74 65 73 74 20 69 6e 74 65 72 66  stom test interf
1a520 61 63 65 73 20 2a 2f 0a 20 20 20 20 20 7b 20 22  aces */.     { "
1a530 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 22  sqlite3OsUnlock"
1a540 2c 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 73  ,         test_s
1a550 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 2c 20  qlite3OsUnlock, 
1a560 30 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  0    },.#endif.#
1a570 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1a580 49 54 5f 55 54 46 31 36 0a 20 20 20 20 20 7b 20  IT_UTF16.     { 
1a590 22 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74  "add_test_collat
1a5a0 65 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f  e",        test_
1a5b0 63 6f 6c 6c 61 74 65 2c 20 30 20 20 20 20 20 20  collate, 0      
1a5c0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
1a5d0 22 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74  "add_test_collat
1a5e0 65 5f 6e 65 65 64 65 64 22 2c 20 74 65 73 74 5f  e_needed", test_
1a5f0 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 2c 20  collate_needed, 
1a600 30 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20  0     },.     { 
1a610 22 61 64 64 5f 74 65 73 74 5f 66 75 6e 63 74 69  "add_test_functi
1a620 6f 6e 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f  on",       test_
1a630 66 75 6e 63 74 69 6f 6e 2c 20 30 20 20 20 20 20  function, 0     
1a640 20 20 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a        },.#endif.
1a650 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
1a660 4d 44 45 42 55 47 0a 20 20 20 20 20 7b 20 22 73  MDEBUG.     { "s
1a670 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74  qlite_malloc_out
1a680 73 74 61 6e 64 69 6e 67 22 2c 20 73 71 6c 69 74  standing", sqlit
1a690 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e  e_malloc_outstan
1a6a0 64 69 6e 67 2c 20 30 7d 2c 0a 23 65 6e 64 69 66  ding, 0},.#endif
1a6b0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1a6c0 5f 74 65 73 74 5f 65 72 72 73 74 72 22 2c 20 20  _test_errstr",  
1a6d0 20 20 20 74 65 73 74 5f 65 72 72 73 74 72 2c 20     test_errstr, 
1a6e0 30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c  0             },
1a6f0 0a 20 20 20 20 20 7b 20 22 74 63 6c 5f 76 61 72  .     { "tcl_var
1a700 69 61 62 6c 65 5f 74 79 70 65 22 2c 20 20 20 20  iable_type",    
1a710 20 20 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f     tcl_variable_
1a720 74 79 70 65 2c 20 30 20 20 20 20 20 20 20 7d 2c  type, 0       },
1a730 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1a740 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
1a750 45 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  E.     { "sqlite
1a760 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f  3_enable_shared_
1a770 63 61 63 68 65 22 2c 20 74 65 73 74 5f 65 6e 61  cache", test_ena
1a780 62 6c 65 5f 73 68 61 72 65 64 2c 20 30 20 20 7d  ble_shared, 0  }
1a790 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20  ,.#endif.     { 
1a7a0 22 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73  "sqlite3_libvers
1a7b0 69 6f 6e 5f 6e 75 6d 62 65 72 22 2c 20 74 65 73  ion_number", tes
1a7c0 74 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d  t_libversion_num
1a7d0 62 65 72 2c 20 30 20 20 7d 2c 0a 23 69 66 64 65  ber, 0  },.#ifde
1a7e0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1a7f0 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a  COLUMN_METADATA.
1a800 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1a810 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74  table_column_met
1a820 61 64 61 74 61 22 2c 20 74 65 73 74 5f 74 61 62  adata", test_tab
1a830 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
1a840 74 61 2c 20 30 20 20 7d 2c 0a 23 65 6e 64 69 66  ta, 0  },.#endif
1a850 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1a860 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
1a870 49 4f 4e 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  ION.     { "sqli
1a880 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  te3_load_extensi
1a890 6f 6e 22 2c 20 74 65 73 74 5f 6c 6f 61 64 5f 65  on", test_load_e
1a8a0 78 74 65 6e 73 69 6f 6e 2c 20 30 20 20 7d 2c 0a  xtension, 0  },.
1a8b0 23 65 6e 64 69 66 0a 20 20 7d 3b 0a 20 20 73 74  #endif.  };.  st
1a8c0 61 74 69 63 20 69 6e 74 20 62 69 74 6d 61 73 6b  atic int bitmask
1a8d0 5f 73 69 7a 65 20 3d 20 73 69 7a 65 6f 66 28 42  _size = sizeof(B
1a8e0 69 74 6d 61 73 6b 29 2a 38 3b 0a 20 20 69 6e 74  itmask)*8;.  int
1a8f0 20 69 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74   i;.  extern int
1a900 20 73 71 6c 69 74 65 33 5f 6f 73 5f 74 72 61 63   sqlite3_os_trac
1a910 65 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  e;.  extern int 
1a920 73 71 6c 69 74 65 33 5f 77 68 65 72 65 5f 74 72  sqlite3_where_tr
1a930 61 63 65 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  ace;.  extern in
1a940 74 20 73 71 6c 69 74 65 33 5f 73 79 6e 63 5f 63  t sqlite3_sync_c
1a950 6f 75 6e 74 2c 20 73 71 6c 69 74 65 33 5f 66 75  ount, sqlite3_fu
1a960 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 3b 0a 20 20  llsync_count;.  
1a970 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
1a980 65 33 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f 75 6e  e3_opentemp_coun
1a990 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  t;.  extern int 
1a9a0 73 71 6c 69 74 65 33 5f 6d 65 6d 55 73 65 64 3b  sqlite3_memUsed;
1a9b0 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
1a9c0 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 69 64 3b  lite3_malloc_id;
1a9d0 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
1a9e0 6c 69 74 65 33 5f 6d 65 6d 4d 61 78 3b 0a 20 20  lite3_memMax;.  
1a9f0 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
1aa00 65 33 5f 6c 69 6b 65 5f 63 6f 75 6e 74 3b 0a 20  e3_like_count;. 
1aa10 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
1aa20 74 65 33 5f 74 73 64 5f 63 6f 75 6e 74 3b 0a 23  te3_tsd_count;.#
1aa30 69 66 20 4f 53 5f 55 4e 49 58 20 26 26 20 64 65  if OS_UNIX && de
1aa40 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
1aa50 54 29 20 26 26 20 64 65 66 69 6e 65 64 28 54 48  T) && defined(TH
1aa60 52 45 41 44 53 41 46 45 29 20 26 26 20 54 48 52  READSAFE) && THR
1aa70 45 41 44 53 41 46 45 0a 20 20 65 78 74 65 72 6e  EADSAFE.  extern
1aa80 20 69 6e 74 20 74 68 72 65 61 64 73 4f 76 65 72   int threadsOver
1aa90 72 69 64 65 45 61 63 68 4f 74 68 65 72 73 4c 6f  rideEachOthersLo
1aaa0 63 6b 73 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  cks;.#endif.#if 
1aab0 4f 53 5f 57 49 4e 0a 20 20 65 78 74 65 72 6e 20  OS_WIN.  extern 
1aac0 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 73 5f 74  int sqlite3_os_t
1aad0 79 70 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  ype;.#endif.#ifd
1aae0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1aaf0 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
1ab00 69 74 65 33 5f 76 64 62 65 5f 61 64 64 6f 70 5f  ite3_vdbe_addop_
1ab10 74 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a 23 69  trace;.#endif.#i
1ab20 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
1ab30 0a 20 20 65 78 74 65 72 6e 20 63 68 61 72 20 73  .  extern char s
1ab40 71 6c 69 74 65 33 5f 71 75 65 72 79 5f 70 6c 61  qlite3_query_pla
1ab50 6e 5b 5d 3b 0a 20 20 73 74 61 74 69 63 20 63 68  n[];.  static ch
1ab60 61 72 20 2a 71 75 65 72 79 5f 70 6c 61 6e 20 3d  ar *query_plan =
1ab70 20 73 71 6c 69 74 65 33 5f 71 75 65 72 79 5f 70   sqlite3_query_p
1ab80 6c 61 6e 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 66  lan;.#endif..  f
1ab90 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66  or(i=0; i<sizeof
1aba0 28 61 43 6d 64 29 2f 73 69 7a 65 6f 66 28 61 43  (aCmd)/sizeof(aC
1abb0 6d 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20  md[0]); i++){.  
1abc0 20 20 54 63 6c 5f 43 72 65 61 74 65 43 6f 6d 6d    Tcl_CreateComm
1abd0 61 6e 64 28 69 6e 74 65 72 70 2c 20 61 43 6d 64  and(interp, aCmd
1abe0 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 61 43 6d 64 5b  [i].zName, aCmd[
1abf0 69 5d 2e 78 50 72 6f 63 2c 20 30 2c 20 30 29 3b  i].xProc, 0, 0);
1ac00 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20  .  }.  for(i=0; 
1ac10 69 3c 73 69 7a 65 6f 66 28 61 4f 62 6a 43 6d 64  i<sizeof(aObjCmd
1ac20 29 2f 73 69 7a 65 6f 66 28 61 4f 62 6a 43 6d 64  )/sizeof(aObjCmd
1ac30 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  [0]); i++){.    
1ac40 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d  Tcl_CreateObjCom
1ac50 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 61 4f 62  mand(interp, aOb
1ac60 6a 43 6d 64 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 0a  jCmd[i].zName, .
1ac70 20 20 20 20 20 20 20 20 61 4f 62 6a 43 6d 64 5b          aObjCmd[
1ac80 69 5d 2e 78 50 72 6f 63 2c 20 61 4f 62 6a 43 6d  i].xProc, aObjCm
1ac90 64 5b 69 5d 2e 63 6c 69 65 6e 74 44 61 74 61 2c  d[i].clientData,
1aca0 20 30 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 4c   0);.  }.  Tcl_L
1acb0 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
1acc0 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f 63 6f  sqlite_search_co
1acd0 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68  unt", .      (ch
1ace0 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 73 65 61  ar*)&sqlite3_sea
1acf0 72 63 68 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c  rch_count, TCL_L
1ad00 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
1ad10 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
1ad20 22 73 71 6c 69 74 65 5f 73 6f 72 74 5f 63 6f 75  "sqlite_sort_cou
1ad30 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61  nt", .      (cha
1ad40 72 2a 29 26 73 71 6c 69 74 65 33 5f 73 6f 72 74  r*)&sqlite3_sort
1ad50 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b  _count, TCL_LINK
1ad60 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
1ad70 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1ad80 6c 69 74 65 5f 6c 69 6b 65 5f 63 6f 75 6e 74 22  lite_like_count"
1ad90 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  , .      (char*)
1ada0 26 73 71 6c 69 74 65 33 5f 6c 69 6b 65 5f 63 6f  &sqlite3_like_co
1adb0 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  unt, TCL_LINK_IN
1adc0 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  T);.  Tcl_LinkVa
1add0 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
1ade0 65 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  e_interrupt_coun
1adf0 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72  t", .      (char
1ae00 2a 29 26 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  *)&sqlite3_inter
1ae10 72 75 70 74 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  rupt_count, TCL_
1ae20 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c  LINK_INT);.  Tcl
1ae30 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
1ae40 20 22 73 71 6c 69 74 65 5f 6f 70 65 6e 5f 66 69   "sqlite_open_fi
1ae50 6c 65 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20  le_count", .    
1ae60 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
1ae70 33 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e  3_open_file_coun
1ae80 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
1ae90 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
1aea0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1aeb0 63 75 72 72 65 6e 74 5f 74 69 6d 65 22 2c 20 0a  current_time", .
1aec0 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
1aed0 6c 69 74 65 33 5f 63 75 72 72 65 6e 74 5f 74 69  lite3_current_ti
1aee0 6d 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  me, TCL_LINK_INT
1aef0 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
1af00 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1af10 5f 6f 73 5f 74 72 61 63 65 22 2c 0a 20 20 20 20  _os_trace",.    
1af20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
1af30 33 5f 6f 73 5f 74 72 61 63 65 2c 20 54 43 4c 5f  3_os_trace, TCL_
1af40 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c  LINK_INT);.  Tcl
1af50 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
1af60 20 22 73 71 6c 69 74 65 33 5f 74 73 64 5f 63 6f   "sqlite3_tsd_co
1af70 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61  unt",.      (cha
1af80 72 2a 29 26 73 71 6c 69 74 65 33 5f 74 73 64 5f  r*)&sqlite3_tsd_
1af90 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
1afa0 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
1afb0 56 61 72 28 69 6e 74 65 72 70 2c 20 22 75 6e 61  Var(interp, "una
1afc0 6c 69 67 6e 65 64 5f 73 74 72 69 6e 67 5f 63 6f  ligned_string_co
1afd0 75 6e 74 65 72 22 2c 0a 20 20 20 20 20 20 28 63  unter",.      (c
1afe0 68 61 72 2a 29 26 75 6e 61 6c 69 67 6e 65 64 5f  har*)&unaligned_
1aff0 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72 2c 20  string_counter, 
1b000 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23  TCL_LINK_INT);.#
1b010 69 66 20 4f 53 5f 55 4e 49 58 20 26 26 20 64 65  if OS_UNIX && de
1b020 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
1b030 54 29 20 26 26 20 64 65 66 69 6e 65 64 28 54 48  T) && defined(TH
1b040 52 45 41 44 53 41 46 45 29 20 26 26 20 54 48 52  READSAFE) && THR
1b050 45 41 44 53 41 46 45 0a 20 20 54 63 6c 5f 4c 69  EADSAFE.  Tcl_Li
1b060 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 74  nkVar(interp, "t
1b070 68 72 65 61 64 73 4f 76 65 72 72 69 64 65 45 61  hreadsOverrideEa
1b080 63 68 4f 74 68 65 72 73 4c 6f 63 6b 73 22 2c 0a  chOthersLocks",.
1b090 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 74 68        (char*)&th
1b0a0 72 65 61 64 73 4f 76 65 72 72 69 64 65 45 61 63  readsOverrideEac
1b0b0 68 4f 74 68 65 72 73 4c 6f 63 6b 73 2c 20 54 43  hOthersLocks, TC
1b0c0 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e  L_LINK_INT);.#en
1b0d0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
1b0e0 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
1b0f0 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1b100 72 70 2c 20 22 73 71 6c 69 74 65 5f 6c 61 73 74  rp, "sqlite_last
1b110 5f 6e 65 65 64 65 64 5f 63 6f 6c 6c 61 74 69 6f  _needed_collatio
1b120 6e 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  n",.      (char*
1b130 29 26 70 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74  )&pzNeededCollat
1b140 69 6f 6e 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54  ion, TCL_LINK_ST
1b150 52 49 4e 47 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45  RING|TCL_LINK_RE
1b160 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AD_ONLY);.#endif
1b170 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d  .#ifdef SQLITE_M
1b180 45 4d 44 45 42 55 47 0a 20 20 54 63 6c 5f 4c 69  EMDEBUG.  Tcl_Li
1b190 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
1b1a0 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 69 64 22  qlite_malloc_id"
1b1b0 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
1b1c0 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 69  sqlite3_malloc_i
1b1d0 64 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49  d, TCL_LINK_STRI
1b1e0 4e 47 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  NG);.#endif.#if 
1b1f0 4f 53 5f 57 49 4e 0a 20 20 54 63 6c 5f 4c 69 6e  OS_WIN.  Tcl_Lin
1b200 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1b210 6c 69 74 65 5f 6f 73 5f 74 79 70 65 22 2c 0a 20  lite_os_type",. 
1b220 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
1b230 69 74 65 33 5f 6f 73 5f 74 79 70 65 2c 20 54 43  ite3_os_type, TC
1b240 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e  L_LINK_INT);.#en
1b250 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
1b260 45 5f 54 45 53 54 0a 20 20 54 63 6c 5f 4c 69 6e  E_TEST.  Tcl_Lin
1b270 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1b280 6c 69 74 65 5f 71 75 65 72 79 5f 70 6c 61 6e 22  lite_query_plan"
1b290 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
1b2a0 71 75 65 72 79 5f 70 6c 61 6e 2c 20 54 43 4c 5f  query_plan, TCL_
1b2b0 4c 49 4e 4b 5f 53 54 52 49 4e 47 7c 54 43 4c 5f  LINK_STRING|TCL_
1b2c0 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b  LINK_READ_ONLY);
1b2d0 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
1b2e0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 54 63  QLITE_DEBUG.  Tc
1b2f0 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
1b300 2c 20 22 73 71 6c 69 74 65 5f 61 64 64 6f 70 5f  , "sqlite_addop_
1b310 74 72 61 63 65 22 2c 0a 20 20 20 20 20 20 28 63  trace",.      (c
1b320 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 76 64  har*)&sqlite3_vd
1b330 62 65 5f 61 64 64 6f 70 5f 74 72 61 63 65 2c 20  be_addop_trace, 
1b340 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20  TCL_LINK_INT);. 
1b350 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1b360 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 77 68 65  erp, "sqlite_whe
1b370 72 65 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 20  re_trace",.     
1b380 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
1b390 5f 77 68 65 72 65 5f 74 72 61 63 65 2c 20 54 43  _where_trace, TC
1b3a0 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e  L_LINK_INT);.#en
1b3b0 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
1b3c0 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 54 63 6c  E_MEMDEBUG.  Tcl
1b3d0 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
1b3e0 20 22 73 71 6c 69 74 65 5f 6d 65 6d 75 73 65 64   "sqlite_memused
1b3f0 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
1b400 26 73 71 6c 69 74 65 33 5f 6d 65 6d 55 73 65 64  &sqlite3_memUsed
1b410 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 20 7c  , TCL_LINK_INT |
1b420 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f   TCL_LINK_READ_O
1b430 4e 4c 59 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  NLY);.  Tcl_Link
1b440 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
1b450 69 74 65 5f 6d 65 6d 6d 61 78 22 2c 0a 20 20 20  ite_memmax",.   
1b460 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
1b470 65 33 5f 6d 65 6d 4d 61 78 2c 20 54 43 4c 5f 4c  e3_memMax, TCL_L
1b480 49 4e 4b 5f 49 4e 54 20 7c 20 54 43 4c 5f 4c 49  INK_INT | TCL_LI
1b490 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23  NK_READ_ONLY);.#
1b4a0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
1b4b0 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f  LITE_OMIT_DISKIO
1b4c0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1b4d0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
1b4e0 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 22 2c 0a  pentemp_count",.
1b4f0 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
1b500 6c 69 74 65 33 5f 6f 70 65 6e 74 65 6d 70 5f 63  lite3_opentemp_c
1b510 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  ount, TCL_LINK_I
1b520 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 20 20 54 63  NT);.#endif.  Tc
1b530 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
1b540 2c 20 22 73 71 6c 69 74 65 5f 73 74 61 74 69 63  , "sqlite_static
1b550 5f 62 69 6e 64 5f 76 61 6c 75 65 22 2c 0a 20 20  _bind_value",.  
1b560 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
1b570 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76  te_static_bind_v
1b580 61 6c 75 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53  alue, TCL_LINK_S
1b590 54 52 49 4e 47 29 3b 0a 20 20 54 63 6c 5f 4c 69  TRING);.  Tcl_Li
1b5a0 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
1b5b0 71 6c 69 74 65 5f 74 65 6d 70 5f 64 69 72 65 63  qlite_temp_direc
1b5c0 74 6f 72 79 22 2c 0a 20 20 20 20 20 20 28 63 68  tory",.      (ch
1b5d0 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 74 65 6d  ar*)&sqlite3_tem
1b5e0 70 5f 64 69 72 65 63 74 6f 72 79 2c 20 54 43 4c  p_directory, TCL
1b5f0 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a 20  _LINK_STRING);. 
1b600 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1b610 65 72 70 2c 20 22 62 69 74 6d 61 73 6b 5f 73 69  erp, "bitmask_si
1b620 7a 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  ze",.      (char
1b630 2a 29 26 62 69 74 6d 61 73 6b 5f 73 69 7a 65 2c  *)&bitmask_size,
1b640 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 7c 54 43   TCL_LINK_INT|TC
1b650 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59  L_LINK_READ_ONLY
1b660 29 3b 0a 23 69 66 20 4f 53 5f 55 4e 49 58 0a 20  );.#if OS_UNIX. 
1b670 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1b680 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 79 6e  erp, "sqlite_syn
1b690 63 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20  c_count",.      
1b6a0 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
1b6b0 73 79 6e 63 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  sync_count, TCL_
1b6c0 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c  LINK_INT);.  Tcl
1b6d0 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
1b6e0 20 22 73 71 6c 69 74 65 5f 66 75 6c 6c 73 79 6e   "sqlite_fullsyn
1b6f0 63 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20  c_count",.      
1b700 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
1b710 66 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 2c 20  fullsync_count, 
1b720 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23  TCL_LINK_INT);.#
1b730 65 6e 64 69 66 20 2f 2a 20 4f 53 5f 55 4e 49 58  endif /* OS_UNIX
1b740 20 2a 2f 0a 20 20 73 65 74 5f 6f 70 74 69 6f 6e   */.  set_option
1b750 73 28 69 6e 74 65 72 70 29 3b 0a 0a 20 20 7b 0a  s(interp);..  {.
1b760 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1b770 42 55 47 0a 20 20 20 20 65 78 74 65 72 6e 20 69  BUG.    extern i
1b780 6e 74 20 73 71 6c 69 74 65 33 5f 73 68 61 72 65  nt sqlite3_share
1b790 64 5f 63 61 63 68 65 5f 72 65 70 6f 72 74 28 76  d_cache_report(v
1b7a0 6f 69 64 20 2a 2c 20 54 63 6c 5f 49 6e 74 65 72  oid *, Tcl_Inter
1b7b0 70 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  p *,.           
1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7d0 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 54 63           int, Tc
1b7e0 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 5b 5d 29 3b  l_Obj *CONST[]);
1b7f0 0a 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65 4f  .    Tcl_CreateO
1b800 62 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70  bjCommand(interp
1b810 2c 20 22 73 71 6c 69 74 65 5f 73 68 61 72 65 64  , "sqlite_shared
1b820 5f 63 61 63 68 65 5f 72 65 70 6f 72 74 22 2c 20  _cache_report", 
1b830 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1b840 5f 73 68 61 72 65 64 5f 63 61 63 68 65 5f 72 65  _shared_cache_re
1b850 70 6f 72 74 2c 20 30 2c 20 30 29 3b 0a 23 65 6e  port, 0, 0);.#en
1b860 64 69 66 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  dif.  }.  return
1b870 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a                  TCL_OK;.}.