/ Hex Artifact Content
Login

Artifact 89e25646feceaf09e55c11ecba03ddcfd7cf7c0a:


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 74 68 65 20 70  or testing the p
0190: 72 69 6e 74 66 28 29 20 69 6e 74 65 72 66 61 63  rintf() interfac
01a0: 65 20 74 6f 20 53 51 4c 69 74 65 2e 20 20 54 68  e to SQLite.  Th
01b0: 69 73 20 63 6f 64 65 0a 2a 2a 20 69 73 20 6e 6f  is code.** is no
01c0: 74 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  t included in th
01d0: 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
01e0: 2e 20 20 49 74 20 69 73 20 75 73 65 64 20 66 6f  .  It is used fo
01f0: 72 20 61 75 74 6f 6d 61 74 65 64 0a 2a 2a 20 74  r automated.** t
0200: 65 73 74 69 6e 67 20 6f 66 20 74 68 65 20 53 51  esting of the SQ
0210: 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a  Lite library..**
0220: 0a 2a 2a 20 24 49 64 3a 20 74 65 73 74 31 2e 63  .** $Id: test1.c
0230: 2c 76 20 31 2e 31 38 30 20 32 30 30 36 2f 30 31  ,v 1.180 2006/01
0240: 2f 30 35 20 31 35 3a 35 30 3a 30 37 20 64 72 68  /05 15:50:07 drh
0250: 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c 75   Exp $.*/.#inclu
0260: 64 65 20 22 73 71 6c 69 74 65 49 6e 74 2e 68 22  de "sqliteInt.h"
0270: 0a 23 69 6e 63 6c 75 64 65 20 22 74 63 6c 2e 68  .#include "tcl.h
0280: 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68  ".#include "os.h
0290: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c  ".#include <stdl
02a0: 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ib.h>.#include <
02b0: 73 74 72 69 6e 67 2e 68 3e 0a 0a 2f 2a 0a 2a 2a  string.h>../*.**
02c0: 20 54 68 69 73 20 69 73 20 61 20 63 6f 70 79 20   This is a copy 
02d0: 6f 66 20 74 68 65 20 66 69 72 73 74 20 70 61 72  of the first par
02e0: 74 20 6f 66 20 74 68 65 20 53 71 6c 69 74 65 44  t of the SqliteD
02f0: 62 20 73 74 72 75 63 74 75 72 65 20 69 6e 20 0a  b structure in .
0300: 2a 2a 20 74 63 6c 73 71 6c 69 74 65 2e 63 2e 20  ** tclsqlite.c. 
0310: 20 57 65 20 6e 65 65 64 20 69 74 20 68 65 72 65   We need it here
0320: 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 65 74   so that the get
0330: 5f 73 71 6c 69 74 65 5f 70 6f 69 6e 74 65 72 20  _sqlite_pointer 
0340: 72 6f 75 74 69 6e 65 0a 2a 2a 20 63 61 6e 20 65  routine.** can e
0350: 78 74 72 61 63 74 20 74 68 65 20 73 71 6c 69 74  xtract the sqlit
0360: 65 33 2a 20 70 6f 69 6e 74 65 72 20 66 72 6f 6d  e3* pointer from
0370: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 54 63 6c   an existing Tcl
0380: 20 53 51 4c 69 74 65 0a 2a 2a 20 63 6f 6e 6e 65   SQLite.** conne
0390: 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
03a0: 20 53 71 6c 69 74 65 44 62 20 7b 0a 20 20 73 71   SqliteDb {.  sq
03b0: 6c 69 74 65 33 20 2a 64 62 3b 0a 7d 3b 0a 0a 2f  lite3 *db;.};../
03c0: 2a 0a 2a 2a 20 41 20 54 43 4c 20 63 6f 6d 6d 61  *.** A TCL comma
03d0: 6e 64 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  nd that returns 
03e0: 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  the address of t
03f0: 68 65 20 73 71 6c 69 74 65 2a 20 70 6f 69 6e 74  he sqlite* point
0400: 65 72 0a 2a 2a 20 66 6f 72 20 61 6e 20 73 71 6c  er.** for an sql
0410: 69 74 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ite connection i
0420: 6e 73 74 61 6e 63 65 2e 20 20 42 61 64 20 74 68  nstance.  Bad th
0430: 69 6e 67 73 20 68 61 70 70 65 6e 20 69 66 20 74  ings happen if t
0440: 68 65 0a 2a 2a 20 69 6e 70 75 74 20 69 73 20 6e  he.** input is n
0450: 6f 74 20 61 6e 20 73 71 6c 69 74 65 20 63 6f 6e  ot an sqlite con
0460: 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74  nection..*/.stat
0470: 69 63 20 69 6e 74 20 67 65 74 5f 73 71 6c 69 74  ic int get_sqlit
0480: 65 5f 70 6f 69 6e 74 65 72 28 0a 20 20 76 6f 69  e_pointer(.  voi
0490: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
04a0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
04b0: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
04c0: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
04d0: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
04e0: 74 72 75 63 74 20 53 71 6c 69 74 65 44 62 20 2a  truct SqliteDb *
04f0: 70 3b 0a 20 20 54 63 6c 5f 43 6d 64 49 6e 66 6f  p;.  Tcl_CmdInfo
0500: 20 63 6d 64 49 6e 66 6f 3b 0a 20 20 63 68 61 72   cmdInfo;.  char
0510: 20 7a 42 75 66 5b 31 30 30 5d 3b 0a 20 20 69 66   zBuf[100];.  if
0520: 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
0530: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
0540: 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
0550: 76 2c 20 22 53 51 4c 49 54 45 2d 43 4f 4e 4e 45  v, "SQLITE-CONNE
0560: 43 54 49 4f 4e 22 29 3b 0a 20 20 20 20 72 65 74  CTION");.    ret
0570: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
0580: 20 7d 0a 20 20 69 66 28 20 21 54 63 6c 5f 47 65   }.  if( !Tcl_Ge
0590: 74 43 6f 6d 6d 61 6e 64 49 6e 66 6f 28 69 6e 74  tCommandInfo(int
05a0: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
05b0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 63 6d  ng(objv[1]), &cm
05c0: 64 49 6e 66 6f 29 20 29 7b 0a 20 20 20 20 54 63  dInfo) ){.    Tc
05d0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
05e0: 6e 74 65 72 70 2c 20 22 63 6f 6d 6d 61 6e 64 20  nterp, "command 
05f0: 6e 6f 74 20 66 6f 75 6e 64 3a 20 22 2c 0a 20 20  not found: ",.  
0600: 20 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74           Tcl_Get
0610: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
0620: 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20   (char*)0);.    
0630: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
0640: 3b 0a 20 20 7d 0a 20 20 70 20 3d 20 28 73 74 72  ;.  }.  p = (str
0650: 75 63 74 20 53 71 6c 69 74 65 44 62 2a 29 63 6d  uct SqliteDb*)cm
0660: 64 49 6e 66 6f 2e 6f 62 6a 43 6c 69 65 6e 74 44  dInfo.objClientD
0670: 61 74 61 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a  ata;.  sprintf(z
0680: 42 75 66 2c 20 22 25 70 22 2c 20 70 2d 3e 64 62  Buf, "%p", p->db
0690: 29 3b 0a 20 20 69 66 28 20 73 74 72 6e 63 6d 70  );.  if( strncmp
06a0: 28 7a 42 75 66 2c 22 30 78 22 2c 32 29 20 29 7b  (zBuf,"0x",2) ){
06b0: 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75  .    sprintf(zBu
06c0: 66 2c 20 22 30 78 25 70 22 2c 20 70 2d 3e 64 62  f, "0x%p", p->db
06d0: 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70  );.  }.  Tcl_App
06e0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
06f0: 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65  , zBuf, 0);.  re
0700: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
0710: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
0720: 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65  te3TestErrorName
0730: 28 69 6e 74 20 72 63 29 7b 0a 20 20 63 6f 6e 73  (int rc){.  cons
0740: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20  t char *zName = 
0750: 30 3b 0a 20 20 73 77 69 74 63 68 28 20 72 63 20  0;.  switch( rc 
0760: 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  ){.    case SQLI
0770: 54 45 5f 4f 4b 3a 20 20 20 20 20 20 20 20 20 7a  TE_OK:         z
0780: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4f  Name = "SQLITE_O
0790: 4b 22 3b 20 20 20 20 20 20 20 20 20 20 62 72 65  K";          bre
07a0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
07b0: 49 54 45 5f 45 52 52 4f 52 3a 20 20 20 20 20 20  ITE_ERROR:      
07c0: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
07d0: 45 52 52 4f 52 22 3b 20 20 20 20 20 20 20 62 72  ERROR";       br
07e0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
07f0: 4c 49 54 45 5f 50 45 52 4d 3a 20 20 20 20 20 20  LITE_PERM:      
0800: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0810: 5f 50 45 52 4d 22 3b 20 20 20 20 20 20 20 20 62  _PERM";        b
0820: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
0830: 51 4c 49 54 45 5f 41 42 4f 52 54 3a 20 20 20 20  QLITE_ABORT:    
0840: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
0850: 45 5f 41 42 4f 52 54 22 3b 20 20 20 20 20 20 20  E_ABORT";       
0860: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0870: 53 51 4c 49 54 45 5f 42 55 53 59 3a 20 20 20 20  SQLITE_BUSY:    
0880: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0890: 54 45 5f 42 55 53 59 22 3b 20 20 20 20 20 20 20  TE_BUSY";       
08a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
08b0: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3a 20   SQLITE_LOCKED: 
08c0: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
08d0: 49 54 45 5f 4c 4f 43 4b 45 44 22 3b 20 20 20 20  ITE_LOCKED";    
08e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
08f0: 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3a 20  e SQLITE_NOMEM: 
0900: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
0910: 4c 49 54 45 5f 4e 4f 4d 45 4d 22 3b 20 20 20 20  LITE_NOMEM";    
0920: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
0930: 73 65 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e  se SQLITE_READON
0940: 4c 59 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53  LY:   zName = "S
0950: 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 22 3b  QLITE_READONLY";
0960: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
0970: 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  ase SQLITE_INTER
0980: 52 55 50 54 3a 20 20 7a 4e 61 6d 65 20 3d 20 22  RUPT:  zName = "
0990: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
09a0: 22 3b 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  ";   break;.    
09b0: 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  case SQLITE_IOER
09c0: 52 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  R:      zName = 
09d0: 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 22 3b 20  "SQLITE_IOERR"; 
09e0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
09f0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43 4f 52   case SQLITE_COR
0a00: 52 55 50 54 3a 20 20 20 20 7a 4e 61 6d 65 20 3d  RUPT:    zName =
0a10: 20 22 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54   "SQLITE_CORRUPT
0a20: 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ";     break;.  
0a30: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 55    case SQLITE_FU
0a40: 4c 4c 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  LL:       zName 
0a50: 3d 20 22 53 51 4c 49 54 45 5f 46 55 4c 4c 22 3b  = "SQLITE_FULL";
0a60: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
0a70: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 43     case SQLITE_C
0a80: 41 4e 54 4f 50 45 4e 3a 20 20 20 7a 4e 61 6d 65  ANTOPEN:   zName
0a90: 20 3d 20 22 53 51 4c 49 54 45 5f 43 41 4e 54 4f   = "SQLITE_CANTO
0aa0: 50 45 4e 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a  PEN";    break;.
0ab0: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
0ac0: 50 52 4f 54 4f 43 4f 4c 3a 20 20 20 7a 4e 61 6d  PROTOCOL:   zNam
0ad0: 65 20 3d 20 22 53 51 4c 49 54 45 5f 50 52 4f 54  e = "SQLITE_PROT
0ae0: 4f 43 4f 4c 22 3b 20 20 20 20 62 72 65 61 6b 3b  OCOL";    break;
0af0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0b00: 5f 45 4d 50 54 59 3a 20 20 20 20 20 20 7a 4e 61  _EMPTY:      zNa
0b10: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 45 4d 50  me = "SQLITE_EMP
0b20: 54 59 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  TY";       break
0b30: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0b40: 45 5f 53 43 48 45 4d 41 3a 20 20 20 20 20 7a 4e  E_SCHEMA:     zN
0b50: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 53 43  ame = "SQLITE_SC
0b60: 48 45 4d 41 22 3b 20 20 20 20 20 20 62 72 65 61  HEMA";      brea
0b70: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
0b80: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 3a 20 7a  TE_CONSTRAINT: z
0b90: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43  Name = "SQLITE_C
0ba0: 4f 4e 53 54 52 41 49 4e 54 22 3b 20 20 62 72 65  ONSTRAINT";  bre
0bb0: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
0bc0: 49 54 45 5f 4d 49 53 4d 41 54 43 48 3a 20 20 20  ITE_MISMATCH:   
0bd0: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
0be0: 4d 49 53 4d 41 54 43 48 22 3b 20 20 20 20 62 72  MISMATCH";    br
0bf0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0c00: 4c 49 54 45 5f 4d 49 53 55 53 45 3a 20 20 20 20  LITE_MISUSE:    
0c10: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0c20: 5f 4d 49 53 55 53 45 22 3b 20 20 20 20 20 20 62  _MISUSE";      b
0c30: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
0c40: 51 4c 49 54 45 5f 4e 4f 4c 46 53 3a 20 20 20 20  QLITE_NOLFS:    
0c50: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
0c60: 45 5f 4e 4f 4c 46 53 22 3b 20 20 20 20 20 20 20  E_NOLFS";       
0c70: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0c80: 53 51 4c 49 54 45 5f 41 55 54 48 3a 20 20 20 20  SQLITE_AUTH:    
0c90: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0ca0: 54 45 5f 41 55 54 48 22 3b 20 20 20 20 20 20 20  TE_AUTH";       
0cb0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
0cc0: 20 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 3a 20   SQLITE_FORMAT: 
0cd0: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
0ce0: 49 54 45 5f 46 4f 52 4d 41 54 22 3b 20 20 20 20  ITE_FORMAT";    
0cf0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0d00: 65 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 3a 20  e SQLITE_RANGE: 
0d10: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
0d20: 4c 49 54 45 5f 52 41 4e 47 45 22 3b 20 20 20 20  LITE_RANGE";    
0d30: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
0d40: 73 65 20 53 51 4c 49 54 45 5f 52 4f 57 3a 20 20  se SQLITE_ROW:  
0d50: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
0d60: 51 4c 49 54 45 5f 52 4f 57 22 3b 20 20 20 20 20  QLITE_ROW";     
0d70: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
0d80: 61 73 65 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3a  ase SQLITE_DONE:
0d90: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0da0: 53 51 4c 49 54 45 5f 44 4f 4e 45 22 3b 20 20 20  SQLITE_DONE";   
0db0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
0dc0: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 54 41  case SQLITE_NOTA
0dd0: 44 42 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  DB:     zName = 
0de0: 22 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42 22 3b  "SQLITE_NOTADB";
0df0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
0e00: 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20   default:       
0e10: 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d           zName =
0e20: 20 22 53 51 4c 49 54 45 5f 55 6e 6b 6e 6f 77 6e   "SQLITE_Unknown
0e30: 22 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ";     break;.  
0e40: 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61 6d 65  }.  return zName
0e50: 3b 0a 7d 0a 23 64 65 66 69 6e 65 20 65 72 72 6f  ;.}.#define erro
0e60: 72 4e 61 6d 65 20 73 71 6c 69 74 65 33 54 65 73  rName sqlite3Tes
0e70: 74 45 72 72 6f 72 4e 61 6d 65 0a 0a 2f 2a 0a 2a  tErrorName../*.*
0e80: 2a 20 43 6f 6e 76 65 72 74 20 61 6e 20 73 71 6c  * Convert an sql
0e90: 69 74 65 33 5f 73 74 6d 74 2a 20 69 6e 74 6f 20  ite3_stmt* into 
0ea0: 61 6e 20 73 71 6c 69 74 65 33 2a 2e 20 20 54 68  an sqlite3*.  Th
0eb0: 69 73 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68  is depends on th
0ec0: 65 0a 2a 2a 20 66 61 63 74 20 74 68 61 74 20 74  e.** fact that t
0ed0: 68 65 20 73 71 6c 69 74 65 33 2a 20 69 73 20 74  he sqlite3* is t
0ee0: 68 65 20 66 69 72 73 74 20 66 69 65 6c 64 20 69  he first field i
0ef0: 6e 20 74 68 65 20 56 64 62 65 20 73 74 72 75 63  n the Vdbe struc
0f00: 74 75 72 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ture..*/.#define
0f10: 20 53 74 6d 74 54 6f 44 62 28 58 29 20 20 20 73   StmtToDb(X)   s
0f20: 71 6c 69 74 65 33 5f 64 62 5f 68 61 6e 64 6c 65  qlite3_db_handle
0f30: 28 58 29 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b  (X)../*.** Check
0f40: 20 61 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20   a return value 
0f50: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20  to make sure it 
0f60: 61 67 72 65 65 73 20 77 69 74 68 20 74 68 65 20  agrees with the 
0f70: 72 65 73 75 6c 74 73 0a 2a 2a 20 66 72 6f 6d 20  results.** from 
0f80: 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 2e  sqlite3_errcode.
0f90: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  .*/.int sqlite3T
0fa0: 65 73 74 45 72 72 43 6f 64 65 28 54 63 6c 5f 49  estErrCode(Tcl_I
0fb0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 73  nterp *interp, s
0fc0: 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20  qlite3 *db, int 
0fd0: 72 63 29 7b 0a 20 20 69 66 28 20 72 63 21 3d 53  rc){.  if( rc!=S
0fe0: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 26 26 20  QLITE_MISUSE && 
0ff0: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc!=SQLITE_OK &&
1000: 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65   sqlite3_errcode
1010: 28 64 62 29 21 3d 72 63 20 29 7b 0a 20 20 20 20  (db)!=rc ){.    
1020: 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a  char zBuf[200];.
1030: 20 20 20 20 69 6e 74 20 72 32 20 3d 20 73 71 6c      int r2 = sql
1040: 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29  ite3_errcode(db)
1050: 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42  ;.    sprintf(zB
1060: 75 66 2c 20 22 65 72 72 6f 72 20 63 6f 64 65 20  uf, "error code 
1070: 25 73 20 28 25 64 29 20 64 6f 65 73 20 6e 6f 74  %s (%d) does not
1080: 20 6d 61 74 63 68 20 73 71 6c 69 74 65 33 5f 65   match sqlite3_e
1090: 72 72 63 6f 64 65 20 25 73 20 28 25 64 29 22 2c  rrcode %s (%d)",
10a0: 0a 20 20 20 20 20 20 20 65 72 72 6f 72 4e 61 6d  .       errorNam
10b0: 65 28 72 63 29 2c 20 72 63 2c 20 65 72 72 6f 72  e(rc), rc, error
10c0: 4e 61 6d 65 28 72 32 29 2c 20 72 32 29 3b 0a 20  Name(r2), r2);. 
10d0: 20 20 20 54 63 6c 5f 52 65 73 65 74 52 65 73 75     Tcl_ResetResu
10e0: 6c 74 28 69 6e 74 65 72 70 29 3b 0a 20 20 20 20  lt(interp);.    
10f0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
1100: 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30  (interp, zBuf, 0
1110: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  );.    return 1;
1120: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
1130: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6f 64 65  .}../*.** Decode
1140: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
1150: 20 73 71 6c 69 74 65 33 20 6f 62 6a 65 63 74 2e   sqlite3 object.
1160: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67  .*/.static int g
1170: 65 74 44 62 50 6f 69 6e 74 65 72 28 54 63 6c 5f  etDbPointer(Tcl_
1180: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
1190: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 2c 20  const char *zA, 
11a0: 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 29 7b  sqlite3 **ppDb){
11b0: 0a 20 20 2a 70 70 44 62 20 3d 20 28 73 71 6c 69  .  *ppDb = (sqli
11c0: 74 65 33 2a 29 73 71 6c 69 74 65 33 54 65 78 74  te3*)sqlite3Text
11d0: 54 6f 50 74 72 28 7a 41 29 3b 0a 20 20 72 65 74  ToPtr(zA);.  ret
11e0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
11f0: 2a 0a 2a 2a 20 44 65 63 6f 64 65 20 61 20 70 6f  *.** Decode a po
1200: 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
1210: 74 65 33 5f 73 74 6d 74 20 6f 62 6a 65 63 74 2e  te3_stmt object.
1220: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67  .*/.static int g
1230: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 0a 20  etStmtPointer(. 
1240: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
1250: 65 72 70 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68  erp, .  const ch
1260: 61 72 20 2a 7a 41 72 67 2c 20 20 0a 20 20 73 71  ar *zArg,  .  sq
1270: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53  lite3_stmt **ppS
1280: 74 6d 74 0a 29 7b 0a 20 20 2a 70 70 53 74 6d 74  tmt.){.  *ppStmt
1290: 20 3d 20 28 73 71 6c 69 74 65 33 5f 73 74 6d 74   = (sqlite3_stmt
12a0: 2a 29 73 71 6c 69 74 65 33 54 65 78 74 54 6f 50  *)sqlite3TextToP
12b0: 74 72 28 7a 41 72 67 29 3b 0a 20 20 72 65 74 75  tr(zArg);.  retu
12c0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
12d0: 0a 2a 2a 20 44 65 63 6f 64 65 20 61 20 70 6f 69  .** Decode a poi
12e0: 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
12f0: 65 33 5f 73 74 6d 74 20 6f 62 6a 65 63 74 2e 0a  e3_stmt object..
1300: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65  */.static int ge
1310: 74 46 69 6c 65 50 6f 69 6e 74 65 72 28 0a 20 20  tFilePointer(.  
1320: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
1330: 72 70 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61  rp, .  const cha
1340: 72 20 2a 7a 41 72 67 2c 20 20 0a 20 20 4f 73 46  r *zArg,  .  OsF
1350: 69 6c 65 20 2a 2a 70 70 46 69 6c 65 0a 29 7b 0a  ile **ppFile.){.
1360: 20 20 2a 70 70 46 69 6c 65 20 3d 20 28 4f 73 46    *ppFile = (OsF
1370: 69 6c 65 2a 29 73 71 6c 69 74 65 33 54 65 78 74  ile*)sqlite3Text
1380: 54 6f 50 74 72 28 7a 41 72 67 29 3b 0a 20 20 72  ToPtr(zArg);.  r
1390: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
13a0: 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20  ./*.** Generate 
13b0: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
13c0: 61 74 69 6f 6e 20 6f 66 20 61 20 70 6f 69 6e 74  ation of a point
13d0: 65 72 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  er that can be u
13e0: 6e 64 65 72 73 74 6f 6f 64 0a 2a 2a 20 62 79 20  nderstood.** by 
13f0: 74 68 65 20 67 65 74 44 62 50 6f 69 6e 74 65 72  the getDbPointer
1400: 20 61 6e 64 20 67 65 74 56 6d 50 6f 69 6e 74 65   and getVmPointe
1410: 72 20 72 6f 75 74 69 6e 65 73 20 61 62 6f 76 65  r routines above
1420: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 6f 62  ..**.** The prob
1430: 6c 65 6d 20 69 73 2c 20 6f 6e 20 73 6f 6d 65 20  lem is, on some 
1440: 6d 61 63 68 69 6e 65 73 20 28 53 6f 6c 61 72 69  machines (Solari
1450: 73 29 20 69 66 20 79 6f 75 20 64 6f 20 61 20 70  s) if you do a p
1460: 72 69 6e 74 66 20 77 69 74 68 0a 2a 2a 20 22 25  rintf with.** "%
1470: 70 22 20 79 6f 75 20 63 61 6e 6e 6f 74 20 74 75  p" you cannot tu
1480: 72 6e 20 61 72 6f 75 6e 64 20 61 6e 64 20 64 6f  rn around and do
1490: 20 61 20 73 63 61 6e 66 20 77 69 74 68 20 74 68   a scanf with th
14a0: 65 20 73 61 6d 65 20 22 25 70 22 20 61 6e 64 0a  e same "%p" and.
14b0: 2a 2a 20 67 65 74 20 79 6f 75 72 20 70 6f 69 6e  ** get your poin
14c0: 74 65 72 20 62 61 63 6b 2e 20 20 59 6f 75 20 68  ter back.  You h
14d0: 61 76 65 20 74 6f 20 70 72 65 70 65 6e 64 20 61  ave to prepend a
14e0: 20 22 30 78 22 20 62 65 66 6f 72 65 20 69 74 20   "0x" before it 
14f0: 77 69 6c 6c 0a 2a 2a 20 77 6f 72 6b 2e 20 20 4f  will.** work.  O
1500: 72 20 61 74 20 6c 65 61 73 74 20 74 68 61 74 20  r at least that 
1510: 69 73 20 77 68 61 74 20 69 73 20 72 65 70 6f 72  is what is repor
1520: 74 65 64 20 74 6f 20 6d 65 20 28 64 72 68 29 2e  ted to me (drh).
1530: 20 20 42 75 74 20 74 68 69 73 0a 2a 2a 20 62 65    But this.** be
1540: 68 61 76 69 6f 72 20 76 61 72 69 65 73 20 66 72  havior varies fr
1550: 6f 6d 20 6d 61 63 68 69 6e 65 20 74 6f 20 6d 61  om machine to ma
1560: 63 68 69 6e 65 2e 20 20 54 68 65 20 73 6f 6c 75  chine.  The solu
1570: 74 69 6f 6e 20 75 73 65 64 20 68 65 72 20 69 73  tion used her is
1580: 0a 2a 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20  .** to test the 
1590: 73 74 72 69 6e 67 20 72 69 67 68 74 20 61 66 74  string right aft
15a0: 65 72 20 69 74 20 69 73 20 67 65 6e 65 72 61 74  er it is generat
15b0: 65 64 20 74 6f 20 73 65 65 20 69 66 20 69 74 20  ed to see if it 
15c0: 63 61 6e 20 62 65 0a 2a 2a 20 75 6e 64 65 72 73  can be.** unders
15d0: 74 6f 6f 64 20 62 79 20 73 63 61 6e 66 2c 20 61  tood by scanf, a
15e0: 6e 64 20 69 66 20 6e 6f 74 2c 20 74 72 79 20 70  nd if not, try p
15f0: 72 65 70 65 6e 64 69 6e 67 20 61 6e 20 22 30 78  repending an "0x
1600: 22 20 74 6f 20 73 65 65 20 69 66 0a 2a 2a 20 74  " to see if.** t
1610: 68 61 74 20 68 65 6c 70 73 2e 20 20 49 66 20 6e  hat helps.  If n
1620: 6f 74 68 69 6e 67 20 77 6f 72 6b 73 2c 20 61 20  othing works, a 
1630: 66 61 74 61 6c 20 65 72 72 6f 72 20 69 73 20 67  fatal error is g
1640: 65 6e 65 72 61 74 65 64 2e 0a 2a 2f 0a 73 74 61  enerated..*/.sta
1650: 74 69 63 20 69 6e 74 20 6d 61 6b 65 50 6f 69 6e  tic int makePoin
1660: 74 65 72 53 74 72 28 54 63 6c 5f 49 6e 74 65 72  terStr(Tcl_Inter
1670: 70 20 2a 69 6e 74 65 72 70 2c 20 63 68 61 72 20  p *interp, char 
1680: 2a 7a 50 74 72 2c 20 76 6f 69 64 20 2a 70 29 7b  *zPtr, void *p){
1690: 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  .  sqlite3_snpri
16a0: 6e 74 66 28 31 30 30 2c 20 7a 50 74 72 2c 20 22  ntf(100, zPtr, "
16b0: 25 70 22 2c 20 70 29 3b 0a 20 20 72 65 74 75 72  %p", p);.  retur
16c0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
16d0: 2a 2a 20 54 68 65 20 63 61 6c 6c 62 61 63 6b 20  ** The callback 
16e0: 72 6f 75 74 69 6e 65 20 66 6f 72 20 73 71 6c 69  routine for sqli
16f0: 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74 66 28  te3_exec_printf(
1700: 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  )..*/.static int
1710: 20 65 78 65 63 5f 70 72 69 6e 74 66 5f 63 62 28   exec_printf_cb(
1720: 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20  void *pArg, int 
1730: 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67  argc, char **arg
1740: 76 2c 20 63 68 61 72 20 2a 2a 6e 61 6d 65 29 7b  v, char **name){
1750: 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 20 2a  .  Tcl_DString *
1760: 73 74 72 20 3d 20 28 54 63 6c 5f 44 53 74 72 69  str = (Tcl_DStri
1770: 6e 67 2a 29 70 41 72 67 3b 0a 20 20 69 6e 74 20  ng*)pArg;.  int 
1780: 69 3b 0a 0a 20 20 69 66 28 20 54 63 6c 5f 44 53  i;..  if( Tcl_DS
1790: 74 72 69 6e 67 4c 65 6e 67 74 68 28 73 74 72 29  tringLength(str)
17a0: 3d 3d 30 20 29 7b 0a 20 20 20 20 66 6f 72 28 69  ==0 ){.    for(i
17b0: 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29  =0; i<argc; i++)
17c0: 7b 0a 20 20 20 20 20 20 54 63 6c 5f 44 53 74 72  {.      Tcl_DStr
17d0: 69 6e 67 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ingAppendElement
17e0: 28 73 74 72 2c 20 6e 61 6d 65 5b 69 5d 20 3f 20  (str, name[i] ? 
17f0: 6e 61 6d 65 5b 69 5d 20 3a 20 22 4e 55 4c 4c 22  name[i] : "NULL"
1800: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66  );.    }.  }.  f
1810: 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20  or(i=0; i<argc; 
1820: 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f 44 53  i++){.    Tcl_DS
1830: 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65 6d 65  tringAppendEleme
1840: 6e 74 28 73 74 72 2c 20 61 72 67 76 5b 69 5d 20  nt(str, argv[i] 
1850: 3f 20 61 72 67 76 5b 69 5d 20 3a 20 22 4e 55 4c  ? argv[i] : "NUL
1860: 4c 22 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  L");.  }.  retur
1870: 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  n 0;.}../*.** Us
1880: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 65 78  age:  sqlite3_ex
1890: 65 63 5f 70 72 69 6e 74 66 20 20 44 42 20 20 46  ec_printf  DB  F
18a0: 4f 52 4d 41 54 20 20 53 54 52 49 4e 47 0a 2a 2a  ORMAT  STRING.**
18b0: 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 73  .** Invoke the s
18c0: 71 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e  qlite3_exec_prin
18d0: 74 66 28 29 20 69 6e 74 65 72 66 61 63 65 20 75  tf() interface u
18e0: 73 69 6e 67 20 74 68 65 20 6f 70 65 6e 20 64 61  sing the open da
18f0: 74 61 62 61 73 65 0a 2a 2a 20 44 42 2e 20 20 54  tabase.** DB.  T
1900: 68 65 20 53 51 4c 20 69 73 20 74 68 65 20 73 74  he SQL is the st
1910: 72 69 6e 67 20 46 4f 52 4d 41 54 2e 20 20 54 68  ring FORMAT.  Th
1920: 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
1930: 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 0a 2a  should contain.*
1940: 2a 20 6f 6e 65 20 25 73 20 6f 72 20 25 71 2e 20  * one %s or %q. 
1950: 20 53 54 52 49 4e 47 20 69 73 20 74 68 65 20 76   STRING is the v
1960: 61 6c 75 65 20 69 6e 73 65 72 74 65 64 20 69 6e  alue inserted in
1970: 74 6f 20 25 73 20 6f 72 20 25 71 2e 0a 2a 2f 0a  to %s or %q..*/.
1980: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
1990: 65 78 65 63 5f 70 72 69 6e 74 66 28 0a 20 20 76  exec_printf(.  v
19a0: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
19b0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
19c0: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
19d0: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
19e0: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
19f0: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
1a00: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
1a10: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1a20: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
1a30: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
1a40: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
1a50: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
1a60: 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  */.){.  sqlite3 
1a70: 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69  *db;.  Tcl_DStri
1a80: 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74 20 72 63  ng str;.  int rc
1a90: 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d  ;.  char *zErr =
1aa0: 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c   0;.  char *zSql
1ab0: 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33 30  ;.  char zBuf[30
1ac0: 5d 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34  ];.  if( argc!=4
1ad0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
1ae0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
1af0: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
1b00: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
1b10: 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20  rgv[0], .       
1b20: 22 20 44 42 20 46 4f 52 4d 41 54 20 53 54 52 49  " DB FORMAT STRI
1b30: 4e 47 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  NG", 0);.    ret
1b40: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1b50: 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
1b60: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
1b70: 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
1b80: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1b90: 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 49 6e 69    Tcl_DStringIni
1ba0: 74 28 26 73 74 72 29 3b 0a 20 20 7a 53 71 6c 20  t(&str);.  zSql 
1bb0: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
1bc0: 66 28 61 72 67 76 5b 32 5d 2c 20 61 72 67 76 5b  f(argv[2], argv[
1bd0: 33 5d 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  3]);.  rc = sqli
1be0: 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71  te3_exec(db, zSq
1bf0: 6c 2c 20 65 78 65 63 5f 70 72 69 6e 74 66 5f 63  l, exec_printf_c
1c00: 62 2c 20 26 73 74 72 2c 20 26 7a 45 72 72 29 3b  b, &str, &zErr);
1c10: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
1c20: 7a 53 71 6c 29 3b 0a 20 20 73 70 72 69 6e 74 66  zSql);.  sprintf
1c30: 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 72 63 29  (zBuf, "%d", rc)
1c40: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c  ;.  Tcl_AppendEl
1c50: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42  ement(interp, zB
1c60: 75 66 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  uf);.  Tcl_Appen
1c70: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
1c80: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 3f   rc==SQLITE_OK ?
1c90: 20 54 63 6c 5f 44 53 74 72 69 6e 67 56 61 6c 75   Tcl_DStringValu
1ca0: 65 28 26 73 74 72 29 20 3a 20 7a 45 72 72 29 3b  e(&str) : zErr);
1cb0: 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 46 72  .  Tcl_DStringFr
1cc0: 65 65 28 26 73 74 72 29 3b 0a 20 20 69 66 28 20  ee(&str);.  if( 
1cd0: 7a 45 72 72 20 29 20 66 72 65 65 28 7a 45 72 72  zErr ) free(zErr
1ce0: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
1cf0: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
1d00: 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65  rp, db, rc) ) re
1d10: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1d20: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
1d30: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
1d40: 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74    sqlite3_mprint
1d50: 66 5f 7a 5f 74 65 73 74 20 20 53 45 50 41 52 41  f_z_test  SEPARA
1d60: 54 4f 52 20 20 41 52 47 30 20 20 41 52 47 31 20  TOR  ARG0  ARG1 
1d70: 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74  ....**.** Test t
1d80: 68 65 20 25 7a 20 66 6f 72 6d 61 74 20 6f 66 20  he %z format of 
1d90: 6d 70 72 69 6e 74 66 28 29 2e 20 20 55 73 65 20  mprintf().  Use 
1da0: 6d 75 6c 74 69 70 6c 65 20 6d 70 72 69 6e 74 66  multiple mprintf
1db0: 28 29 20 63 61 6c 6c 73 20 74 6f 20 0a 2a 2a 20  () calls to .** 
1dc0: 63 6f 6e 63 61 74 65 6e 61 74 65 20 61 72 67 30  concatenate arg0
1dd0: 20 74 68 72 6f 75 67 68 20 61 72 67 6e 20 75 73   through argn us
1de0: 69 6e 67 20 73 65 70 61 72 61 74 6f 72 20 61 73  ing separator as
1df0: 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 2e 0a   the separator..
1e00: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65  ** Return the re
1e10: 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  sult..*/.static 
1e20: 69 6e 74 20 74 65 73 74 5f 6d 70 72 69 6e 74 66  int test_mprintf
1e30: 5f 7a 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  _z(.  void *NotU
1e40: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
1e50: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
1e60: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
1e70: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
1e80: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
1e90: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
1ea0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1eb0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
1ec0: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
1ed0: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
1ee0: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
1ef0: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63  gument */.){.  c
1f00: 68 61 72 20 2a 7a 52 65 73 75 6c 74 20 3d 20 30  har *zResult = 0
1f10: 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 66 6f  ;.  int i;..  fo
1f20: 72 28 69 3d 32 3b 20 69 3c 61 72 67 63 3b 20 69  r(i=2; i<argc; i
1f30: 2b 2b 29 7b 0a 20 20 20 20 7a 52 65 73 75 6c 74  ++){.    zResult
1f40: 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
1f50: 66 28 22 25 7a 25 73 25 73 22 2c 20 7a 52 65 73  f("%z%s%s", zRes
1f60: 75 6c 74 2c 20 61 72 67 76 5b 31 5d 2c 20 61 72  ult, argv[1], ar
1f70: 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 54 63  gv[i]);.  }.  Tc
1f80: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
1f90: 6e 74 65 72 70 2c 20 7a 52 65 73 75 6c 74 2c 20  nterp, zResult, 
1fa0: 30 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65  0);.  sqliteFree
1fb0: 28 7a 52 65 73 75 6c 74 29 3b 0a 20 20 72 65 74  (zResult);.  ret
1fc0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
1fd0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
1fe0: 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70  ite3_get_table_p
1ff0: 72 69 6e 74 66 20 20 44 42 20 20 46 4f 52 4d 41  rintf  DB  FORMA
2000: 54 20 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20  T  STRING.**.** 
2010: 49 6e 76 6f 6b 65 20 74 68 65 20 73 71 6c 69 74  Invoke the sqlit
2020: 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69  e3_get_table_pri
2030: 6e 74 66 28 29 20 69 6e 74 65 72 66 61 63 65 20  ntf() interface 
2040: 75 73 69 6e 67 20 74 68 65 20 6f 70 65 6e 20 64  using the open d
2050: 61 74 61 62 61 73 65 0a 2a 2a 20 44 42 2e 20 20  atabase.** DB.  
2060: 54 68 65 20 53 51 4c 20 69 73 20 74 68 65 20 73  The SQL is the s
2070: 74 72 69 6e 67 20 46 4f 52 4d 41 54 2e 20 20 54  tring FORMAT.  T
2080: 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
2090: 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 0a   should contain.
20a0: 2a 2a 20 6f 6e 65 20 25 73 20 6f 72 20 25 71 2e  ** one %s or %q.
20b0: 20 20 53 54 52 49 4e 47 20 69 73 20 74 68 65 20    STRING is the 
20c0: 76 61 6c 75 65 20 69 6e 73 65 72 74 65 64 20 69  value inserted i
20d0: 6e 74 6f 20 25 73 20 6f 72 20 25 71 2e 0a 2a 2f  nto %s or %q..*/
20e0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
20f0: 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74  _get_table_print
2100: 66 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  f(.  void *NotUs
2110: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
2120: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
2130: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
2140: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
2150: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
2160: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
2170: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2180: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
2190: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
21a0: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
21b0: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
21c0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
21d0: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 54 63 6c  lite3 *db;.  Tcl
21e0: 5f 44 53 74 72 69 6e 67 20 73 74 72 3b 0a 20 20  _DString str;.  
21f0: 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a  int rc;.  char *
2200: 7a 45 72 72 20 3d 20 30 3b 0a 20 20 69 6e 74 20  zErr = 0;.  int 
2210: 6e 52 6f 77 2c 20 6e 43 6f 6c 3b 0a 20 20 63 68  nRow, nCol;.  ch
2220: 61 72 20 2a 2a 61 52 65 73 75 6c 74 3b 0a 20 20  ar **aResult;.  
2230: 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 7a 42  int i;.  char zB
2240: 75 66 5b 33 30 5d 3b 0a 20 20 63 68 61 72 20 2a  uf[30];.  char *
2250: 7a 53 71 6c 3b 0a 20 20 69 66 28 20 61 72 67 63  zSql;.  if( argc
2260: 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=4 ){.    Tcl_A
2270: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
2280: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
2290: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
22a0: 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20  , argv[0], .    
22b0: 20 20 20 22 20 44 42 20 46 4f 52 4d 41 54 20 53     " DB FORMAT S
22c0: 54 52 49 4e 47 22 2c 20 30 29 3b 0a 20 20 20 20  TRING", 0);.    
22d0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
22e0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
22f0: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
2300: 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
2310: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
2320: 52 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  R;.  Tcl_DString
2330: 49 6e 69 74 28 26 73 74 72 29 3b 0a 20 20 7a 53  Init(&str);.  zS
2340: 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
2350: 69 6e 74 66 28 61 72 67 76 5b 32 5d 2c 61 72 67  intf(argv[2],arg
2360: 76 5b 33 5d 29 3b 0a 20 20 72 63 20 3d 20 73 71  v[3]);.  rc = sq
2370: 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 28  lite3_get_table(
2380: 64 62 2c 20 7a 53 71 6c 2c 20 26 61 52 65 73 75  db, zSql, &aResu
2390: 6c 74 2c 20 26 6e 52 6f 77 2c 20 26 6e 43 6f 6c  lt, &nRow, &nCol
23a0: 2c 20 26 7a 45 72 72 29 3b 0a 20 20 73 71 6c 69  , &zErr);.  sqli
23b0: 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a  te3_free(zSql);.
23c0: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
23d0: 22 25 64 22 2c 20 72 63 29 3b 0a 20 20 54 63 6c  "%d", rc);.  Tcl
23e0: 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  _AppendElement(i
23f0: 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20  nterp, zBuf);.  
2400: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2410: 4b 20 29 7b 0a 20 20 20 20 73 70 72 69 6e 74 66  K ){.    sprintf
2420: 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 6e 52 6f  (zBuf, "%d", nRo
2430: 77 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  w);.    Tcl_Appe
2440: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
2450: 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 73 70 72  , zBuf);.    spr
2460: 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c  intf(zBuf, "%d",
2470: 20 6e 43 6f 6c 29 3b 0a 20 20 20 20 54 63 6c 5f   nCol);.    Tcl_
2480: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
2490: 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20  terp, zBuf);.   
24a0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 28 6e 52 6f   for(i=0; i<(nRo
24b0: 77 2b 31 29 2a 6e 43 6f 6c 3b 20 69 2b 2b 29 7b  w+1)*nCol; i++){
24c0: 0a 20 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  .      Tcl_Appen
24d0: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
24e0: 20 61 52 65 73 75 6c 74 5b 69 5d 20 3f 20 61 52   aResult[i] ? aR
24f0: 65 73 75 6c 74 5b 69 5d 20 3a 20 22 4e 55 4c 4c  esult[i] : "NULL
2500: 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ");.    }.  }els
2510: 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  e{.    Tcl_Appen
2520: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
2530: 20 7a 45 72 72 29 3b 0a 20 20 7d 0a 20 20 73 71   zErr);.  }.  sq
2540: 6c 69 74 65 33 5f 66 72 65 65 5f 74 61 62 6c 65  lite3_free_table
2550: 28 61 52 65 73 75 6c 74 29 3b 0a 20 20 69 66 28  (aResult);.  if(
2560: 20 7a 45 72 72 20 29 20 66 72 65 65 28 7a 45 72   zErr ) free(zEr
2570: 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  r);.  if( sqlite
2580: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
2590: 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72  erp, db, rc) ) r
25a0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
25b0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
25c0: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  ;.}.../*.** Usag
25d0: 65 3a 20 20 73 71 6c 69 74 65 33 5f 6c 61 73 74  e:  sqlite3_last
25e0: 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 20 44 42  _insert_rowid DB
25f0: 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74  .**.** Returns t
2600: 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44  he integer ROWID
2610: 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63   of the most rec
2620: 65 6e 74 20 69 6e 73 65 72 74 2e 0a 2a 2f 0a 73  ent insert..*/.s
2630: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6c  tatic int test_l
2640: 61 73 74 5f 72 6f 77 69 64 28 0a 20 20 76 6f 69  ast_rowid(.  voi
2650: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
2660: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
2670: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
2680: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
2690: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
26a0: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
26b0: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
26c0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
26d0: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
26e0: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
26f0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
2700: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
2710: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
2720: 62 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33  b;.  char zBuf[3
2730: 30 5d 3b 0a 0a 20 20 69 66 28 20 61 72 67 63 21  0];..  if( argc!
2740: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
2750: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
2760: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
2770: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
2780: 20 61 72 67 76 5b 30 5d 2c 20 22 20 44 42 5c 22   argv[0], " DB\"
2790: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
27a0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
27b0: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
27c0: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
27d0: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
27e0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
27f0: 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25  sprintf(zBuf, "%
2800: 6c 6c 64 22 2c 20 73 71 6c 69 74 65 33 5f 6c 61  lld", sqlite3_la
2810: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28  st_insert_rowid(
2820: 64 62 29 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  db));.  Tcl_Appe
2830: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
2840: 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74   zBuf, 0);.  ret
2850: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
2860: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
2870: 73 71 6c 69 74 65 33 5f 6b 65 79 20 44 42 20 4b  sqlite3_key DB K
2880: 45 59 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65  EY.**.** Set the
2890: 20 63 6f 64 65 63 20 6b 65 79 2e 0a 2a 2f 0a 73   codec key..*/.s
28a0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6b  tatic int test_k
28b0: 65 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  ey(.  void *NotU
28c0: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
28d0: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
28e0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
28f0: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
2900: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
2910: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
2920: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
2930: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
2940: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
2950: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
2960: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
2970: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73  gument */.){.  s
2980: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f  qlite3 *db;.  co
2990: 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a  nst char *zKey;.
29a0: 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 69 66    int nKey;.  if
29b0: 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20  ( argc!=3 ){.   
29c0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
29d0: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
29e0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
29f0: 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
2a00: 0a 20 20 20 20 20 20 20 22 20 46 49 4c 45 4e 41  .       " FILENA
2a10: 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  ME\"", 0);.    r
2a20: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
2a30: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
2a40: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
2a50: 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
2a60: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
2a70: 3b 0a 20 20 7a 4b 65 79 20 3d 20 61 72 67 76 5b  ;.  zKey = argv[
2a80: 32 5d 3b 0a 20 20 6e 4b 65 79 20 3d 20 73 74 72  2];.  nKey = str
2a90: 6c 65 6e 28 7a 4b 65 79 29 3b 0a 23 69 66 64 65  len(zKey);.#ifde
2aa0: 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44  f SQLITE_HAS_COD
2ab0: 45 43 0a 20 20 73 71 6c 69 74 65 33 5f 6b 65 79  EC.  sqlite3_key
2ac0: 28 64 62 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 29  (db, zKey, nKey)
2ad0: 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
2ae0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
2af0: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
2b00: 65 33 5f 72 65 6b 65 79 20 44 42 20 4b 45 59 0a  e3_rekey DB KEY.
2b10: 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65  **.** Change the
2b20: 20 63 6f 64 65 63 20 6b 65 79 2e 0a 2a 2f 0a 73   codec key..*/.s
2b30: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 72  tatic int test_r
2b40: 65 6b 65 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  ekey(.  void *No
2b50: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
2b60: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
2b70: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
2b80: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
2b90: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
2ba0: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
2bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2bc0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
2bd0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
2be0: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
2bf0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
2c00: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
2c10: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
2c20: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79  const char *zKey
2c30: 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20  ;.  int nKey;.  
2c40: 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20  if( argc!=3 ){. 
2c50: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
2c60: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
2c70: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
2c80: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
2c90: 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c 45  ],.       " FILE
2ca0: 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20  NAME\"", 0);.   
2cb0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
2cc0: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
2cd0: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
2ce0: 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20  , argv[1], &db) 
2cf0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
2d00: 4f 52 3b 0a 20 20 7a 4b 65 79 20 3d 20 61 72 67  OR;.  zKey = arg
2d10: 76 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20 3d 20 73  v[2];.  nKey = s
2d20: 74 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a 23 69 66  trlen(zKey);.#if
2d30: 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43  def SQLITE_HAS_C
2d40: 4f 44 45 43 0a 20 20 73 71 6c 69 74 65 33 5f 72  ODEC.  sqlite3_r
2d50: 65 6b 65 79 28 64 62 2c 20 7a 4b 65 79 2c 20 6e  ekey(db, zKey, n
2d60: 4b 65 79 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72  Key);.#endif.  r
2d70: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
2d80: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
2d90: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 44 42 0a  qlite3_close DB.
2da0: 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 73 20 74 68 65  **.** Closes the
2db0: 20 64 61 74 61 62 61 73 65 20 6f 70 65 6e 65 64   database opened
2dc0: 20 62 79 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e   by sqlite3_open
2dd0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
2de0: 73 71 6c 69 74 65 5f 74 65 73 74 5f 63 6c 6f 73  sqlite_test_clos
2df0: 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  e(.  void *NotUs
2e00: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
2e10: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
2e20: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
2e30: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
2e40: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
2e50: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
2e60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2e70: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
2e80: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
2e90: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
2ea0: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
2eb0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
2ec0: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74  lite3 *db;.  int
2ed0: 20 72 63 3b 0a 20 20 69 66 28 20 61 72 67 63 21   rc;.  if( argc!
2ee0: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
2ef0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
2f00: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
2f10: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
2f20: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
2f30: 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c 20   " FILENAME\"", 
2f40: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
2f50: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
2f60: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
2f70: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
2f80: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
2f90: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
2fa0: 3d 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28  = sqlite3_close(
2fb0: 64 62 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65  db);.  Tcl_SetRe
2fc0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
2fd0: 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72  ar *)errorName(r
2fe0: 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  c), TCL_STATIC);
2ff0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
3000: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65  ;.}../*.** Imple
3010: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
3020: 20 78 5f 63 6f 61 6c 65 73 63 65 28 29 20 66 75   x_coalesce() fu
3030: 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 52 65 74 75 72  nction..** Retur
3040: 6e 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  n the first argu
3050: 6d 65 6e 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72  ment non-NULL ar
3060: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69  gument..*/.stati
3070: 63 20 76 6f 69 64 20 69 66 6e 75 6c 6c 46 75 6e  c void ifnullFun
3080: 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  c(sqlite3_contex
3090: 74 20 2a 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20  t *context, int 
30a0: 61 72 67 63 2c 20 73 71 6c 69 74 65 33 5f 76 61  argc, sqlite3_va
30b0: 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a 20 20 69  lue **argv){.  i
30c0: 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  nt i;.  for(i=0;
30d0: 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20   i<argc; i++){. 
30e0: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 55     if( SQLITE_NU
30f0: 4c 4c 21 3d 73 71 6c 69 74 65 33 5f 76 61 6c 75  LL!=sqlite3_valu
3100: 65 5f 74 79 70 65 28 61 72 67 76 5b 69 5d 29 20  e_type(argv[i]) 
3110: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
3120: 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e  _result_text(con
3130: 74 65 78 74 2c 20 28 63 68 61 72 2a 29 73 71 6c  text, (char*)sql
3140: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
3150: 61 72 67 76 5b 69 5d 29 2c 0a 20 20 20 20 20 20  argv[i]),.      
3160: 20 20 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75      sqlite3_valu
3170: 65 5f 62 79 74 65 73 28 61 72 67 76 5b 69 5d 29  e_bytes(argv[i])
3180: 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
3190: 4e 54 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  NT);.      break
31a0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
31b0: 2a 0a 2a 2a 20 41 20 73 74 72 75 63 74 75 72 65  *.** A structure
31c0: 20 69 6e 74 6f 20 77 68 69 63 68 20 74 6f 20 61   into which to a
31d0: 63 63 75 6d 75 6c 61 74 65 20 74 65 78 74 2e 0a  ccumulate text..
31e0: 2a 2f 0a 73 74 72 75 63 74 20 64 73 74 72 20 7b  */.struct dstr {
31f0: 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20  .  int nAlloc;  
3200: 2f 2a 20 53 70 61 63 65 20 61 6c 6c 6f 63 61 74  /* Space allocat
3210: 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65  ed */.  int nUse
3220: 64 3b 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73  d;   /* Space us
3230: 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b  ed */.  char *z;
3240: 20 20 20 20 20 2f 2a 20 54 68 65 20 73 70 61 63       /* The spac
3250: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  e */.};../*.** A
3260: 70 70 65 6e 64 20 74 65 78 74 20 74 6f 20 61 20  ppend text to a 
3270: 64 73 74 72 0a 2a 2f 0a 73 74 61 74 69 63 20 76  dstr.*/.static v
3280: 6f 69 64 20 64 73 74 72 41 70 70 65 6e 64 28 73  oid dstrAppend(s
3290: 74 72 75 63 74 20 64 73 74 72 20 2a 70 2c 20 63  truct dstr *p, c
32a0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
32b0: 74 20 64 69 76 69 64 65 72 29 7b 0a 20 20 69 6e  t divider){.  in
32c0: 74 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 29 3b  t n = strlen(z);
32d0: 0a 20 20 69 66 28 20 70 2d 3e 6e 55 73 65 64 20  .  if( p->nUsed 
32e0: 2b 20 6e 20 2b 20 32 20 3e 20 70 2d 3e 6e 41 6c  + n + 2 > p->nAl
32f0: 6c 6f 63 20 29 7b 0a 20 20 20 20 63 68 61 72 20  loc ){.    char 
3300: 2a 7a 4e 65 77 3b 0a 20 20 20 20 70 2d 3e 6e 41  *zNew;.    p->nA
3310: 6c 6c 6f 63 20 3d 20 70 2d 3e 6e 41 6c 6c 6f 63  lloc = p->nAlloc
3320: 2a 32 20 2b 20 6e 20 2b 20 32 30 30 3b 0a 20 20  *2 + n + 200;.  
3330: 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65 52    zNew = sqliteR
3340: 65 61 6c 6c 6f 63 28 70 2d 3e 7a 2c 20 70 2d 3e  ealloc(p->z, p->
3350: 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20 20 69 66 28  nAlloc);.    if(
3360: 20 7a 4e 65 77 3d 3d 30 20 29 7b 0a 20 20 20 20   zNew==0 ){.    
3370: 20 20 73 71 6c 69 74 65 46 72 65 65 28 70 2d 3e    sqliteFree(p->
3380: 7a 29 3b 0a 20 20 20 20 20 20 6d 65 6d 73 65 74  z);.      memset
3390: 28 70 2c 20 30 2c 20 73 69 7a 65 6f 66 28 2a 70  (p, 0, sizeof(*p
33a0: 29 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ));.      return
33b0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 7a  ;.    }.    p->z
33c0: 20 3d 20 7a 4e 65 77 3b 0a 20 20 7d 0a 20 20 69   = zNew;.  }.  i
33d0: 66 28 20 64 69 76 69 64 65 72 20 26 26 20 70 2d  f( divider && p-
33e0: 3e 6e 55 73 65 64 3e 30 20 29 7b 0a 20 20 20 20  >nUsed>0 ){.    
33f0: 70 2d 3e 7a 5b 70 2d 3e 6e 55 73 65 64 2b 2b 5d  p->z[p->nUsed++]
3400: 20 3d 20 64 69 76 69 64 65 72 3b 0a 20 20 7d 0a   = divider;.  }.
3410: 20 20 6d 65 6d 63 70 79 28 26 70 2d 3e 7a 5b 70    memcpy(&p->z[p
3420: 2d 3e 6e 55 73 65 64 5d 2c 20 7a 2c 20 6e 2b 31  ->nUsed], z, n+1
3430: 29 3b 0a 20 20 70 2d 3e 6e 55 73 65 64 20 2b 3d  );.  p->nUsed +=
3440: 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76   n;.}../*.** Inv
3450: 6f 6b 65 64 20 66 6f 72 20 65 61 63 68 20 63 61  oked for each ca
3460: 6c 6c 62 61 63 6b 20 66 72 6f 6d 20 73 71 6c 69  llback from sqli
3470: 74 65 33 45 78 65 63 46 75 6e 63 0a 2a 2f 0a 73  te3ExecFunc.*/.s
3480: 74 61 74 69 63 20 69 6e 74 20 65 78 65 63 46 75  tatic int execFu
3490: 6e 63 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20  ncCallback(void 
34a0: 2a 70 44 61 74 61 2c 20 69 6e 74 20 61 72 67 63  *pData, int argc
34b0: 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 2c 20 63  , char **argv, c
34c0: 68 61 72 20 2a 2a 4e 6f 74 55 73 65 64 29 7b 0a  har **NotUsed){.
34d0: 20 20 73 74 72 75 63 74 20 64 73 74 72 20 2a 70    struct dstr *p
34e0: 20 3d 20 28 73 74 72 75 63 74 20 64 73 74 72 2a   = (struct dstr*
34f0: 29 70 44 61 74 61 3b 0a 20 20 69 6e 74 20 69 3b  )pData;.  int i;
3500: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72  .  for(i=0; i<ar
3510: 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  gc; i++){.    if
3520: 28 20 61 72 67 76 5b 69 5d 3d 3d 30 20 29 7b 0a  ( argv[i]==0 ){.
3530: 20 20 20 20 20 20 64 73 74 72 41 70 70 65 6e 64        dstrAppend
3540: 28 70 2c 20 22 4e 55 4c 4c 22 2c 20 27 20 27 29  (p, "NULL", ' ')
3550: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
3560: 20 20 20 64 73 74 72 41 70 70 65 6e 64 28 70 2c     dstrAppend(p,
3570: 20 61 72 67 76 5b 69 5d 2c 20 27 20 27 29 3b 0a   argv[i], ' ');.
3580: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
3590: 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  rn 0;.}../*.** I
35a0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
35b0: 20 74 68 65 20 78 5f 73 71 6c 69 74 65 5f 65 78   the x_sqlite_ex
35c0: 65 63 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 20  ec() function.  
35d0: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 61  This function ta
35e0: 6b 65 73 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  kes.** a single 
35f0: 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 61 74 74  argument and att
3600: 65 6d 70 74 73 20 74 6f 20 65 78 65 63 75 74 65  empts to execute
3610: 20 74 68 61 74 20 61 72 67 75 6d 65 6e 74 20 61   that argument a
3620: 73 20 53 51 4c 20 63 6f 64 65 2e 0a 2a 2a 20 54  s SQL code..** T
3630: 68 69 73 20 69 73 20 69 6c 6c 65 67 61 6c 20 61  his is illegal a
3640: 6e 64 20 73 68 6f 75 6c 64 20 73 65 74 20 74 68  nd should set th
3650: 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  e SQLITE_MISUSE 
3660: 66 6c 61 67 20 6f 6e 20 74 68 65 20 64 61 74 61  flag on the data
3670: 62 61 73 65 2e 0a 2a 2a 0a 2a 2a 20 32 30 30 34  base..**.** 2004
3680: 2d 4a 61 6e 2d 30 37 3a 20 20 57 65 20 68 61 76  -Jan-07:  We hav
3690: 65 20 63 68 61 6e 67 65 64 20 74 68 69 73 20 74  e changed this t
36a0: 6f 20 6d 61 6b 65 20 69 74 20 6c 65 67 61 6c 20  o make it legal 
36b0: 74 6f 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f  to call sqlite3_
36c0: 65 78 65 63 28 29 0a 2a 2a 20 66 72 6f 6d 20 77  exec().** from w
36d0: 69 74 68 69 6e 20 61 20 66 75 6e 63 74 69 6f 6e  ithin a function
36e0: 20 63 61 6c 6c 2e 20 20 0a 2a 2a 20 0a 2a 2a 20   call.  .** .** 
36f0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 73 69 6d  This routine sim
3700: 75 6c 61 74 65 73 20 74 68 65 20 65 66 66 65 63  ulates the effec
3710: 74 20 6f 66 20 68 61 76 69 6e 67 20 74 77 6f 20  t of having two 
3720: 74 68 72 65 61 64 73 20 61 74 74 65 6d 70 74 20  threads attempt 
3730: 74 6f 0a 2a 2a 20 75 73 65 20 74 68 65 20 73 61  to.** use the sa
3740: 6d 65 20 64 61 74 61 62 61 73 65 20 61 74 20 74  me database at t
3750: 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2f  he same time..*/
3760: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 71 6c  .static void sql
3770: 69 74 65 33 45 78 65 63 46 75 6e 63 28 0a 20 20  ite3ExecFunc(.  
3780: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
3790: 2a 63 6f 6e 74 65 78 74 2c 20 0a 20 20 69 6e 74  *context, .  int
37a0: 20 61 72 67 63 2c 20 20 0a 20 20 73 71 6c 69 74   argc,  .  sqlit
37b0: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a  e3_value **argv.
37c0: 29 7b 0a 20 20 73 74 72 75 63 74 20 64 73 74 72  ){.  struct dstr
37d0: 20 78 3b 0a 20 20 6d 65 6d 73 65 74 28 26 78 2c   x;.  memset(&x,
37e0: 20 30 2c 20 73 69 7a 65 6f 66 28 78 29 29 3b 0a   0, sizeof(x));.
37f0: 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 28    sqlite3_exec((
3800: 73 71 6c 69 74 65 33 2a 29 73 71 6c 69 74 65 33  sqlite3*)sqlite3
3810: 5f 75 73 65 72 5f 64 61 74 61 28 63 6f 6e 74 65  _user_data(conte
3820: 78 74 29 2c 0a 20 20 20 20 20 20 28 63 68 61 72  xt),.      (char
3830: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
3840: 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c 0a 20  text(argv[0]),. 
3850: 20 20 20 20 20 65 78 65 63 46 75 6e 63 43 61 6c       execFuncCal
3860: 6c 62 61 63 6b 2c 20 26 78 2c 20 30 29 3b 0a 20  lback, &x, 0);. 
3870: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
3880: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 78 2e  text(context, x.
3890: 7a 2c 20 78 2e 6e 55 73 65 64 2c 20 53 51 4c 49  z, x.nUsed, SQLI
38a0: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
38b0: 20 73 71 6c 69 74 65 46 72 65 65 28 78 2e 7a 29   sqliteFree(x.z)
38c0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
38d0: 3a 20 20 73 71 6c 69 74 65 5f 74 65 73 74 5f 63  :  sqlite_test_c
38e0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 44  reate_function D
38f0: 42 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 74 68 65  B.**.** Call the
3900: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
3910: 66 75 6e 63 74 69 6f 6e 20 41 50 49 20 6f 6e 20  function API on 
3920: 74 68 65 20 67 69 76 65 6e 20 64 61 74 61 62 61  the given databa
3930: 73 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74  se in order.** t
3940: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
3950: 69 6f 6e 20 6e 61 6d 65 64 20 22 78 5f 63 6f 61  ion named "x_coa
3960: 6c 65 73 63 65 22 2e 20 20 54 68 69 73 20 66 75  lesce".  This fu
3970: 6e 63 74 69 6f 6e 20 64 6f 65 73 20 74 68 65 20  nction does the 
3980: 73 61 6d 65 20 74 68 69 6e 67 0a 2a 2a 20 61 73  same thing.** as
3990: 20 74 68 65 20 22 63 6f 61 6c 65 73 63 65 22 20   the "coalesce" 
39a0: 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 69 73 20  function.  This 
39b0: 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f 20 72 65  function also re
39c0: 67 69 73 74 65 72 73 20 61 6e 20 53 51 4c 20 66  gisters an SQL f
39d0: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6e 61 6d 65 64  unction.** named
39e0: 20 22 78 5f 73 71 6c 69 74 65 5f 65 78 65 63 22   "x_sqlite_exec"
39f0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 73 71   that invokes sq
3a00: 6c 69 74 65 33 5f 65 78 65 63 28 29 2e 20 20 49  lite3_exec().  I
3a10: 6e 76 6f 6b 69 6e 67 20 73 71 6c 69 74 65 33 5f  nvoking sqlite3_
3a20: 65 78 65 63 28 29 0a 2a 2a 20 69 6e 20 74 68 69  exec().** in thi
3a30: 73 20 77 61 79 20 69 73 20 69 6c 6c 65 67 61 6c  s way is illegal
3a40: 20 72 65 63 75 72 73 69 6f 6e 20 61 6e 64 20 73   recursion and s
3a50: 68 6f 75 6c 64 20 72 61 69 73 65 20 61 6e 20 53  hould raise an S
3a60: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72  QLITE_MISUSE err
3a70: 6f 72 2e 0a 2a 2a 20 54 68 65 20 65 66 66 65 63  or..** The effec
3a80: 74 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20  t is similar to 
3a90: 74 72 79 69 6e 67 20 74 6f 20 75 73 65 20 74 68  trying to use th
3aa0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
3ab0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 72 6f 6d 0a  connection from.
3ac0: 2a 2a 20 74 77 6f 20 74 68 72 65 61 64 73 20 61  ** two threads a
3ad0: 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 2e  t the same time.
3ae0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6f 72 69 67 69  .**.** The origi
3af0: 6e 61 6c 20 6d 6f 74 69 76 61 74 69 6f 6e 20 66  nal motivation f
3b00: 6f 72 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  or this routine 
3b10: 77 61 73 20 74 6f 20 62 65 20 61 62 6c 65 20 74  was to be able t
3b20: 6f 20 63 61 6c 6c 20 74 68 65 0a 2a 2a 20 73 71  o call the.** sq
3b30: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
3b40: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 77  ction function w
3b50: 68 69 6c 65 20 61 20 71 75 65 72 79 20 69 73 20  hile a query is 
3b60: 69 6e 20 70 72 6f 67 72 65 73 73 20 69 6e 20 6f  in progress in o
3b70: 72 64 65 72 0a 2a 2a 20 74 6f 20 74 65 73 74 20  rder.** to test 
3b80: 74 68 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  the SQLITE_MISUS
3b90: 45 20 64 65 74 65 63 74 69 6f 6e 20 6c 6f 67 69  E detection logi
3ba0: 63 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  c..*/.static int
3bb0: 20 74 65 73 74 5f 63 72 65 61 74 65 5f 66 75 6e   test_create_fun
3bc0: 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 4e  ction(.  void *N
3bd0: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
3be0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
3bf0: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
3c00: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
3c10: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
3c20: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3c40: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
3c50: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
3c60: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
3c70: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
3c80: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
3c90: 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69    int rc;.  sqli
3ca0: 74 65 33 20 2a 64 62 3b 0a 20 20 65 78 74 65 72  te3 *db;.  exter
3cb0: 6e 20 76 6f 69 64 20 4d 64 35 5f 52 65 67 69 73  n void Md5_Regis
3cc0: 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 0a  ter(sqlite3*);..
3cd0: 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b    if( argc!=2 ){
3ce0: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
3cf0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
3d00: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
3d10: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
3d20: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 44 42  [0],.       " DB
3d30: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
3d40: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
3d50: 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
3d60: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
3d70: 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
3d80: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
3d90: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
3da0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64  reate_function(d
3db0: 62 2c 20 22 78 5f 63 6f 61 6c 65 73 63 65 22 2c  b, "x_coalesce",
3dc0: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c   -1, SQLITE_ANY,
3dd0: 20 30 2c 20 0a 20 20 20 20 20 20 20 20 69 66 6e   0, .        ifn
3de0: 75 6c 6c 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a  ullFunc, 0, 0);.
3df0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3e00: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 20  OMIT_UTF16.  /* 
3e10: 55 73 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f  Use the sqlite3_
3e20: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31  create_function1
3e30: 36 28 29 20 41 50 49 20 68 65 72 65 2e 20 4d 61  6() API here. Ma
3e40: 69 6e 6c 79 20 66 6f 72 20 66 75 6e 2c 20 62 75  inly for fun, bu
3e50: 74 20 61 6c 73 6f 20 0a 20 20 2a 2a 20 62 65 63  t also .  ** bec
3e60: 61 75 73 65 20 69 74 20 69 73 20 6e 6f 74 20 74  ause it is not t
3e70: 65 73 74 65 64 20 61 6e 79 77 68 65 72 65 20 65  ested anywhere e
3e80: 6c 73 65 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63  lse. */.  if( rc
3e90: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
3ea0: 20 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65     sqlite3_value
3eb0: 20 2a 70 56 61 6c 3b 0a 20 20 20 20 70 56 61 6c   *pVal;.    pVal
3ec0: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
3ed0: 65 77 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  ew();.    sqlite
3ee0: 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61  3ValueSetStr(pVa
3ef0: 6c 2c 20 2d 31 2c 20 22 78 5f 73 71 6c 69 74 65  l, -1, "x_sqlite
3f00: 5f 65 78 65 63 22 2c 20 53 51 4c 49 54 45 5f 55  _exec", SQLITE_U
3f10: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
3f20: 49 43 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  IC);.    rc = sq
3f30: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
3f40: 63 74 69 6f 6e 31 36 28 64 62 2c 20 0a 20 20 20  ction16(db, .   
3f50: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
3f60: 65 33 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c  e3ValueText(pVal
3f70: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  , SQLITE_UTF16NA
3f80: 54 49 56 45 29 2c 0a 20 20 20 20 20 20 20 20 20  TIVE),.         
3f90: 20 20 20 20 20 31 2c 20 53 51 4c 49 54 45 5f 55       1, SQLITE_U
3fa0: 54 46 31 36 2c 20 64 62 2c 20 73 71 6c 69 74 65  TF16, db, sqlite
3fb0: 33 45 78 65 63 46 75 6e 63 2c 20 30 2c 20 30 29  3ExecFunc, 0, 0)
3fc0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c  ;.    sqlite3Val
3fd0: 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20  ueFree(pVal);.  
3fe0: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20  }.#endif..  if( 
3ff0: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
4000: 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
4010: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
4020: 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74  ERROR;.  Tcl_Set
4030: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
4040: 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65  char *)errorName
4050: 28 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74 75  (rc), 0);.  retu
4060: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
4070: 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20  .** Routines to 
4080: 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 78 5f  implement the x_
4090: 63 6f 75 6e 74 28 29 20 61 67 67 72 65 67 61 74  count() aggregat
40a0: 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 74  e function..*/.t
40b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f  ypedef struct Co
40c0: 75 6e 74 43 74 78 20 43 6f 75 6e 74 43 74 78 3b  untCtx CountCtx;
40d0: 0a 73 74 72 75 63 74 20 43 6f 75 6e 74 43 74 78  .struct CountCtx
40e0: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 7d 3b 0a 73   {.  int n;.};.s
40f0: 74 61 74 69 63 20 76 6f 69 64 20 63 6f 75 6e 74  tatic void count
4100: 53 74 65 70 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Step(sqlite3_con
4110: 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20 69  text *context, i
4120: 6e 74 20 61 72 67 63 2c 20 73 71 6c 69 74 65 33  nt argc, sqlite3
4130: 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a  _value **argv){.
4140: 20 20 43 6f 75 6e 74 43 74 78 20 2a 70 3b 0a 20    CountCtx *p;. 
4150: 20 70 20 3d 20 73 71 6c 69 74 65 33 5f 61 67 67   p = sqlite3_agg
4160: 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63  regate_context(c
4170: 6f 6e 74 65 78 74 2c 20 73 69 7a 65 6f 66 28 2a  ontext, sizeof(*
4180: 70 29 29 3b 0a 20 20 69 66 28 20 28 61 72 67 63  p));.  if( (argc
4190: 3d 3d 30 20 7c 7c 20 53 51 4c 49 54 45 5f 4e 55  ==0 || SQLITE_NU
41a0: 4c 4c 21 3d 73 71 6c 69 74 65 33 5f 76 61 6c 75  LL!=sqlite3_valu
41b0: 65 5f 74 79 70 65 28 61 72 67 76 5b 30 5d 29 20  e_type(argv[0]) 
41c0: 29 20 26 26 20 70 20 29 7b 0a 20 20 20 20 70 2d  ) && p ){.    p-
41d0: 3e 6e 2b 2b 3b 0a 20 20 7d 0a 7d 20 20 20 0a 73  >n++;.  }.}   .s
41e0: 74 61 74 69 63 20 76 6f 69 64 20 63 6f 75 6e 74  tatic void count
41f0: 46 69 6e 61 6c 69 7a 65 28 73 71 6c 69 74 65 33  Finalize(sqlite3
4200: 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78  _context *contex
4210: 74 29 7b 0a 20 20 43 6f 75 6e 74 43 74 78 20 2a  t){.  CountCtx *
4220: 70 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74 65 33  p;.  p = sqlite3
4230: 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74 65  _aggregate_conte
4240: 78 74 28 63 6f 6e 74 65 78 74 2c 20 73 69 7a 65  xt(context, size
4250: 6f 66 28 2a 70 29 29 3b 0a 20 20 73 71 6c 69 74  of(*p));.  sqlit
4260: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f  e3_result_int(co
4270: 6e 74 65 78 74 2c 20 70 20 3f 20 70 2d 3e 6e 20  ntext, p ? p->n 
4280: 3a 20 30 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  : 0);.}../*.** U
4290: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 74 65  sage:  sqlite_te
42a0: 73 74 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67  st_create_aggreg
42b0: 61 74 65 20 44 42 0a 2a 2a 0a 2a 2a 20 43 61 6c  ate DB.**.** Cal
42c0: 6c 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72  l the sqlite3_cr
42d0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 41 50  eate_function AP
42e0: 49 20 6f 6e 20 74 68 65 20 67 69 76 65 6e 20 64  I on the given d
42f0: 61 74 61 62 61 73 65 20 69 6e 20 6f 72 64 65 72  atabase in order
4300: 0a 2a 2a 20 74 6f 20 63 72 65 61 74 65 20 61 20  .** to create a 
4310: 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22  function named "
4320: 78 5f 63 6f 75 6e 74 22 2e 20 20 54 68 69 73 20  x_count".  This 
4330: 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 74 68  function does th
4340: 65 20 73 61 6d 65 20 74 68 69 6e 67 0a 2a 2a 20  e same thing.** 
4350: 61 73 20 74 68 65 20 22 6d 64 35 73 75 6d 22 20  as the "md5sum" 
4360: 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
4370: 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f 74  The original mot
4380: 69 76 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73  ivation for this
4390: 20 72 6f 75 74 69 6e 65 20 77 61 73 20 74 6f 20   routine was to 
43a0: 62 65 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c 20  be able to call 
43b0: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63  the.** sqlite3_c
43c0: 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 20  reate_aggregate 
43d0: 66 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20 61  function while a
43e0: 20 71 75 65 72 79 20 69 73 20 69 6e 20 70 72 6f   query is in pro
43f0: 67 72 65 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a  gress in order.*
4400: 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20 53 51  * to test the SQ
4410: 4c 49 54 45 5f 4d 49 53 55 53 45 20 64 65 74 65  LITE_MISUSE dete
4420: 63 74 69 6f 6e 20 6c 6f 67 69 63 2e 0a 2a 2f 0a  ction logic..*/.
4430: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
4440: 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65  create_aggregate
4450: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
4460: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
4470: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
4480: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
4490: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
44a0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
44b0: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
44c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
44d0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
44e0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
4500: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
4510: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  ment */.){.  sql
4520: 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
4530: 72 63 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  rc;.  if( argc!=
4540: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
4550: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
4560: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
4570: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
4580: 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
4590: 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30  " FILENAME\"", 0
45a0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
45b0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
45c0: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
45d0: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
45e0: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
45f0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
4600: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
4610: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78 5f  function(db, "x_
4620: 63 6f 75 6e 74 22 2c 20 30 2c 20 53 51 4c 49 54  count", 0, SQLIT
4630: 45 5f 55 54 46 38 2c 20 30 2c 20 30 2c 0a 20 20  E_UTF8, 0, 0,.  
4640: 20 20 20 20 63 6f 75 6e 74 53 74 65 70 2c 63 6f      countStep,co
4650: 75 6e 74 46 69 6e 61 6c 69 7a 65 29 3b 0a 20 20  untFinalize);.  
4660: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
4670: 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  K ){.    sqlite3
4680: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
4690: 28 64 62 2c 20 22 78 5f 63 6f 75 6e 74 22 2c 20  (db, "x_count", 
46a0: 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  1, SQLITE_UTF8, 
46b0: 30 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 63 6f  0, 0,.        co
46c0: 75 6e 74 53 74 65 70 2c 63 6f 75 6e 74 46 69 6e  untStep,countFin
46d0: 61 6c 69 7a 65 29 3b 0a 20 20 7d 0a 20 20 69 66  alize);.  }.  if
46e0: 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
46f0: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c  Code(interp, db,
4700: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
4710: 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72  L_ERROR;.  retur
4720: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 0a 2f  n TCL_OK;.}..../
4730: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
4740: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74  ite3_mprintf_int
4750: 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52 20   FORMAT INTEGER 
4760: 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 0a  INTEGER INTEGER.
4770: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
4780: 74 66 20 77 69 74 68 20 74 68 72 65 65 20 69 6e  tf with three in
4790: 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 0a  teger arguments.
47a0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
47b0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
47c0: 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  t(.  void *NotUs
47d0: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
47e0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
47f0: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
4800: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
4810: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
4820: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
4830: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
4840: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
4850: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
4860: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
4870: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
4880: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ument */.){.  in
4890: 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 63 68 61  t a[3], i;.  cha
48a0: 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63  r *z;.  if( argc
48b0: 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=5 ){.    Tcl_A
48c0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
48d0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
48e0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
48f0: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
4900: 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49    " FORMAT INT I
4910: 4e 54 20 49 4e 54 5c 22 22 2c 20 30 29 3b 0a 20  NT INT\"", 0);. 
4920: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
4930: 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69  ROR;.  }.  for(i
4940: 3d 32 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a 20  =2; i<5; i++){. 
4950: 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e     if( Tcl_GetIn
4960: 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69  t(interp, argv[i
4970: 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72 65  ], &a[i-2]) ) re
4980: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
4990: 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65    }.  z = sqlite
49a0: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31  3_mprintf(argv[1
49b0: 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61  ], a[0], a[1], a
49c0: 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  [2]);.  Tcl_Appe
49d0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
49e0: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
49f0: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
4a00: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
4a10: 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72 65 70  *.** If zNum rep
4a20: 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65 67  resents an integ
4a30: 65 72 20 74 68 61 74 20 77 69 6c 6c 20 66 69 74  er that will fit
4a40: 20 69 6e 20 36 34 2d 62 69 74 73 2c 20 74 68 65   in 64-bits, the
4a50: 6e 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c 75 65  n set.** *pValue
4a60: 20 74 6f 20 74 68 61 74 20 69 6e 74 65 67 65 72   to that integer
4a70: 20 61 6e 64 20 72 65 74 75 72 6e 20 74 72 75 65   and return true
4a80: 2e 20 20 4f 74 68 65 72 77 69 73 65 20 72 65 74  .  Otherwise ret
4a90: 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f 0a 73 74  urn false..*/.st
4aa0: 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33  atic int sqlite3
4ab0: 47 65 74 49 6e 74 36 34 28 63 6f 6e 73 74 20 63  GetInt64(const c
4ac0: 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 36 34 20 2a  har *zNum, i64 *
4ad0: 70 56 61 6c 75 65 29 7b 0a 20 20 69 66 28 20 73  pValue){.  if( s
4ae0: 71 6c 69 74 65 33 46 69 74 73 49 6e 36 34 42 69  qlite3FitsIn64Bi
4af0: 74 73 28 7a 4e 75 6d 29 20 29 7b 0a 20 20 20 20  ts(zNum) ){.    
4b00: 73 71 6c 69 74 65 33 61 74 6f 69 36 34 28 7a 4e  sqlite3atoi64(zN
4b10: 75 6d 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 20  um, pValue);.   
4b20: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20   return 1;.  }. 
4b30: 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
4b40: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
4b50: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36  te3_mprintf_int6
4b60: 34 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52  4 FORMAT INTEGER
4b70: 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52   INTEGER INTEGER
4b80: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
4b90: 6e 74 66 20 77 69 74 68 20 74 68 72 65 65 20 36  ntf with three 6
4ba0: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 61 72  4-bit integer ar
4bb0: 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61 74 69  guments.*/.stati
4bc0: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70  c int sqlite3_mp
4bd0: 72 69 6e 74 66 5f 69 6e 74 36 34 28 0a 20 20 76  rintf_int64(.  v
4be0: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
4bf0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
4c00: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
4c10: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
4c20: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
4c30: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
4c40: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
4c50: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
4c60: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
4c70: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
4c80: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
4c90: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
4ca0: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  */.){.  int i;. 
4cb0: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 61 5b   sqlite_int64 a[
4cc0: 33 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20  3];.  char *z;. 
4cd0: 20 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a   if( argc!=5 ){.
4ce0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
4cf0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
4d00: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
4d10: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
4d20: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52  0],.       " FOR
4d30: 4d 41 54 20 49 4e 54 20 49 4e 54 20 49 4e 54 5c  MAT INT INT INT\
4d40: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
4d50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
4d60: 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 35  }.  for(i=2; i<5
4d70: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
4d80: 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74 36 34  !sqlite3GetInt64
4d90: 28 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32  (argv[i], &a[i-2
4da0: 5d 29 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f  ]) ){.      Tcl_
4db0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
4dc0: 65 72 70 2c 20 22 61 72 67 75 6d 65 6e 74 20 69  erp, "argument i
4dd0: 73 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 36 34  s not a valid 64
4de0: 2d 62 69 74 20 69 6e 74 65 67 65 72 22 2c 20 30  -bit integer", 0
4df0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
4e00: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  TCL_ERROR;.    }
4e10: 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74  .  }.  z = sqlit
4e20: 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b  e3_mprintf(argv[
4e30: 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20  1], a[0], a[1], 
4e40: 61 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70  a[2]);.  Tcl_App
4e50: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
4e60: 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  , z, 0);.  sqlit
4e70: 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65  e3_free(z);.  re
4e80: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
4e90: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
4ea0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74  lite3_mprintf_st
4eb0: 72 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52  r FORMAT INTEGER
4ec0: 20 49 4e 54 45 47 45 52 20 53 54 52 49 4e 47 0a   INTEGER STRING.
4ed0: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
4ee0: 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e 74 65  tf with two inte
4ef0: 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  ger arguments an
4f00: 64 20 6f 6e 65 20 73 74 72 69 6e 67 20 61 72 67  d one string arg
4f10: 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63 20  ument.*/.static 
4f20: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  int sqlite3_mpri
4f30: 6e 74 66 5f 73 74 72 28 0a 20 20 76 6f 69 64 20  ntf_str(.  void 
4f40: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
4f50: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
4f60: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
4f70: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
4f80: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
4f90: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
4fa0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
4fb0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
4fc0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
4fd0: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
4fe0: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
4ff0: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
5000: 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69 3b  {.  int a[3], i;
5010: 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66  .  char *z;.  if
5020: 28 20 61 72 67 63 3c 34 20 7c 7c 20 61 72 67 63  ( argc<4 || argc
5030: 3e 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  >5 ){.    Tcl_Ap
5040: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
5050: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
5060: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
5070: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
5080: 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e   " FORMAT INT IN
5090: 54 20 3f 53 54 52 49 4e 47 3f 5c 22 22 2c 20 30  T ?STRING?\"", 0
50a0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
50b0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66  L_ERROR;.  }.  f
50c0: 6f 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b  or(i=2; i<4; i++
50d0: 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47  ){.    if( Tcl_G
50e0: 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72  etInt(interp, ar
50f0: 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29 20  gv[i], &a[i-2]) 
5100: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
5110: 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71  OR;.  }.  z = sq
5120: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72  lite3_mprintf(ar
5130: 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31  gv[1], a[0], a[1
5140: 5d 2c 20 61 72 67 63 3e 34 20 3f 20 61 72 67 76  ], argc>4 ? argv
5150: 5b 34 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 20 20 54  [4] : NULL);.  T
5160: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
5170: 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20  interp, z, 0);. 
5180: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29   sqlite3_free(z)
5190: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
51a0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
51b0: 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e:  sqlite3_mpri
51c0: 6e 74 66 5f 64 6f 75 62 6c 65 20 46 4f 52 4d 41  ntf_double FORMA
51d0: 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45  T INTEGER INTEGE
51e0: 52 20 44 4f 55 42 4c 45 0a 2a 2a 0a 2a 2a 20 43  R DOUBLE.**.** C
51f0: 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69 74 68  all mprintf with
5200: 20 74 77 6f 20 69 6e 74 65 67 65 72 20 61 72 67   two integer arg
5210: 75 6d 65 6e 74 73 20 61 6e 64 20 6f 6e 65 20 64  uments and one d
5220: 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 0a 2a  ouble argument.*
5230: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
5240: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75  ite3_mprintf_dou
5250: 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  ble(.  void *Not
5260: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
5270: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
5280: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
5290: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
52a0: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
52b0: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
52c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
52d0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
52e0: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
52f0: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
5300: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
5310: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
5320: 69 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 64  int a[3], i;.  d
5330: 6f 75 62 6c 65 20 72 3b 0a 20 20 63 68 61 72 20  ouble r;.  char 
5340: 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  *z;.  if( argc!=
5350: 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  5 ){.    Tcl_App
5360: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
5370: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
5380: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
5390: 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
53a0: 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54  " FORMAT INT INT
53b0: 20 44 4f 55 42 4c 45 5c 22 22 2c 20 30 29 3b 0a   DOUBLE\"", 0);.
53c0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
53d0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28  RROR;.  }.  for(
53e0: 69 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a  i=2; i<4; i++){.
53f0: 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49      if( Tcl_GetI
5400: 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  nt(interp, argv[
5410: 69 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72  i], &a[i-2]) ) r
5420: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
5430: 0a 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47  .  }.  if( Tcl_G
5440: 65 74 44 6f 75 62 6c 65 28 69 6e 74 65 72 70 2c  etDouble(interp,
5450: 20 61 72 67 76 5b 34 5d 2c 20 26 72 29 20 29 20   argv[4], &r) ) 
5460: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
5470: 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f  ;.  z = sqlite3_
5480: 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c  mprintf(argv[1],
5490: 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 72 29 3b   a[0], a[1], r);
54a0: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
54b0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30  ult(interp, z, 0
54c0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
54d0: 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  e(z);.  return T
54e0: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
54f0: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
5500: 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65 64 20 46  mprintf_scaled F
5510: 4f 52 4d 41 54 20 44 4f 55 42 4c 45 20 44 4f 55  ORMAT DOUBLE DOU
5520: 42 4c 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d  BLE.**.** Call m
5530: 70 72 69 6e 74 66 20 77 69 74 68 20 61 20 73 69  printf with a si
5540: 6e 67 6c 65 20 64 6f 75 62 6c 65 20 61 72 67 75  ngle double argu
5550: 6d 65 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  ment which is th
5560: 65 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65  e product of the
5570: 0a 2a 2a 20 74 77 6f 20 61 72 67 75 6d 65 6e 74  .** two argument
5580: 73 20 67 69 76 65 6e 20 61 62 6f 76 65 2e 20 20  s given above.  
5590: 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
55a0: 67 65 6e 65 72 61 74 65 20 6f 76 65 72 66 6c 6f  generate overflo
55b0: 77 20 61 6e 64 20 75 6e 64 65 72 66 6c 6f 77 0a  w and underflow.
55c0: 2a 2a 20 64 6f 75 62 6c 65 73 20 74 6f 20 74 65  ** doubles to te
55d0: 73 74 20 74 68 61 74 20 74 68 65 79 20 61 72 65  st that they are
55e0: 20 63 6f 6e 76 65 72 74 65 64 20 70 72 6f 70 65   converted prope
55f0: 72 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  rly..*/.static i
5600: 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  nt sqlite3_mprin
5610: 74 66 5f 73 63 61 6c 65 64 28 0a 20 20 76 6f 69  tf_scaled(.  voi
5620: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
5630: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
5640: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
5650: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
5660: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
5670: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
5680: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
5690: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
56a0: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
56b0: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
56c0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
56d0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
56e0: 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 64  .){.  int i;.  d
56f0: 6f 75 62 6c 65 20 72 5b 32 5d 3b 0a 20 20 63 68  ouble r[2];.  ch
5700: 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67  ar *z;.  if( arg
5710: 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=4 ){.    Tcl_
5720: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
5730: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
5740: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
5750: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
5760: 20 20 20 22 20 46 4f 52 4d 41 54 20 44 4f 55 42     " FORMAT DOUB
5770: 4c 45 20 44 4f 55 42 4c 45 5c 22 22 2c 20 30 29  LE DOUBLE\"", 0)
5780: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
5790: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f  _ERROR;.  }.  fo
57a0: 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b 2b 29  r(i=2; i<4; i++)
57b0: 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65  {.    if( Tcl_Ge
57c0: 74 44 6f 75 62 6c 65 28 69 6e 74 65 72 70 2c 20  tDouble(interp, 
57d0: 61 72 67 76 5b 69 5d 2c 20 26 72 5b 69 2d 32 5d  argv[i], &r[i-2]
57e0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
57f0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20  RROR;.  }.  z = 
5800: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
5810: 61 72 67 76 5b 31 5d 2c 20 72 5b 30 5d 2a 72 5b  argv[1], r[0]*r[
5820: 31 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  1]);.  Tcl_Appen
5830: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
5840: 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  z, 0);.  sqlite3
5850: 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75  _free(z);.  retu
5860: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
5870: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
5880: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f  te3_mprintf_stro
5890: 6e 6c 79 20 46 4f 52 4d 41 54 20 53 54 52 49 4e  nly FORMAT STRIN
58a0: 47 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72  G.**.** Call mpr
58b0: 69 6e 74 66 20 77 69 74 68 20 61 20 73 69 6e 67  intf with a sing
58c0: 6c 65 20 64 6f 75 62 6c 65 20 61 72 67 75 6d 65  le double argume
58d0: 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
58e0: 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 0a 2a  product of the.*
58f0: 2a 20 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20  * two arguments 
5900: 67 69 76 65 6e 20 61 62 6f 76 65 2e 20 20 54 68  given above.  Th
5910: 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 67 65  is is used to ge
5920: 6e 65 72 61 74 65 20 6f 76 65 72 66 6c 6f 77 20  nerate overflow 
5930: 61 6e 64 20 75 6e 64 65 72 66 6c 6f 77 0a 2a 2a  and underflow.**
5940: 20 64 6f 75 62 6c 65 73 20 74 6f 20 74 65 73 74   doubles to test
5950: 20 74 68 61 74 20 74 68 65 79 20 61 72 65 20 63   that they are c
5960: 6f 6e 76 65 72 74 65 64 20 70 72 6f 70 65 72 6c  onverted properl
5970: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  y..*/.static int
5980: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
5990: 5f 73 74 72 6f 6e 6c 79 28 0a 20 20 76 6f 69 64  _stronly(.  void
59a0: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
59b0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
59c0: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
59d0: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
59e0: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
59f0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
5a00: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
5a10: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
5a20: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
5a30: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
5a40: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
5a50: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
5a60: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20  ){.  char *z;.  
5a70: 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20  if( argc!=3 ){. 
5a80: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
5a90: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
5aa0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
5ab0: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
5ac0: 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d  ],.       " FORM
5ad0: 41 54 20 53 54 52 49 4e 47 5c 22 22 2c 20 30 29  AT STRING\"", 0)
5ae0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
5af0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20  _ERROR;.  }.  z 
5b00: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
5b10: 66 28 61 72 67 76 5b 31 5d 2c 20 61 72 67 76 5b  f(argv[1], argv[
5b20: 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  2]);.  Tcl_Appen
5b30: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
5b40: 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  z, 0);.  sqlite3
5b50: 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75  _free(z);.  retu
5b60: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
5b70: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
5b80: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78 64  te3_mprintf_hexd
5b90: 6f 75 62 6c 65 20 46 4f 52 4d 41 54 20 48 45 58  ouble FORMAT HEX
5ba0: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
5bb0: 6e 74 66 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ntf with a singl
5bc0: 65 20 64 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e  e double argumen
5bd0: 74 20 77 68 69 63 68 20 69 73 20 64 65 72 69 76  t which is deriv
5be0: 65 64 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 68  ed from the.** h
5bf0: 65 78 61 64 65 63 69 6d 61 6c 20 65 6e 63 6f 64  exadecimal encod
5c00: 69 6e 67 20 6f 66 20 61 6e 20 49 45 45 45 20 64  ing of an IEEE d
5c10: 6f 75 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  ouble..*/.static
5c20: 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72   int sqlite3_mpr
5c30: 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65 28 0a  intf_hexdouble(.
5c40: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
5c50: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
5c60: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
5c70: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
5c80: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
5c90: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
5ca0: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
5cb0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
5cc0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
5cd0: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
5ce0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
5cf0: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
5d00: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20  nt */.){.  char 
5d10: 2a 7a 3b 0a 20 20 64 6f 75 62 6c 65 20 72 3b 0a  *z;.  double r;.
5d20: 20 20 75 6e 73 69 67 6e 65 64 20 20 78 31 2c 20    unsigned  x1, 
5d30: 78 32 3b 0a 20 20 6c 6f 6e 67 20 6c 6f 6e 67 20  x2;.  long long 
5d40: 75 6e 73 69 67 6e 65 64 20 64 3b 0a 20 20 69 66  unsigned d;.  if
5d50: 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20  ( argc!=3 ){.   
5d60: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
5d70: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
5d80: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
5d90: 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
5da0: 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54  .       " FORMAT
5db0: 20 53 54 52 49 4e 47 5c 22 22 2c 20 30 29 3b 0a   STRING\"", 0);.
5dc0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
5dd0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
5de0: 73 73 63 61 6e 66 28 61 72 67 76 5b 32 5d 2c 20  sscanf(argv[2], 
5df0: 22 25 30 38 78 25 30 38 78 22 2c 20 26 78 32 2c  "%08x%08x", &x2,
5e00: 20 26 78 31 29 21 3d 32 20 29 7b 0a 20 20 20 20   &x1)!=2 ){.    
5e10: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
5e20: 28 69 6e 74 65 72 70 2c 20 22 32 6e 64 20 61 72  (interp, "2nd ar
5e30: 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64 20 62 65  gument should be
5e40: 20 31 36 2d 63 68 61 72 61 63 74 65 72 73 20 6f   16-characters o
5e50: 66 20 68 65 78 22 2c 20 30 29 3b 0a 20 20 20 20  f hex", 0);.    
5e60: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
5e70: 3b 0a 20 20 7d 0a 20 20 64 20 3d 20 78 32 3b 0a  ;.  }.  d = x2;.
5e80: 20 20 64 20 3d 20 28 64 3c 3c 33 32 29 20 2b 20    d = (d<<32) + 
5e90: 78 31 3b 0a 20 20 6d 65 6d 63 70 79 28 26 72 2c  x1;.  memcpy(&r,
5ea0: 20 26 64 2c 20 73 69 7a 65 6f 66 28 72 29 29 3b   &d, sizeof(r));
5eb0: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d  .  z = sqlite3_m
5ec0: 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20  printf(argv[1], 
5ed0: 72 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  r);.  Tcl_Append
5ee0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
5ef0: 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  , 0);.  sqlite3_
5f00: 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75 72  free(z);.  retur
5f10: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
5f20: 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
5f30: 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 20 4e 20 20  _malloc_fail N  
5f40: 3f 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c  ?REPEAT-INTERVAL
5f50: 3f 0a 2a 2a 0a 2a 2a 20 52 69 67 20 73 71 6c 69  ?.**.** Rig sqli
5f60: 74 65 4d 61 6c 6c 6f 63 28 29 20 74 6f 20 66 61  teMalloc() to fa
5f70: 69 6c 20 6f 6e 20 74 68 65 20 4e 2d 74 68 20 63  il on the N-th c
5f80: 61 6c 6c 20 61 6e 64 20 65 76 65 72 79 20 52 45  all and every RE
5f90: 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20 63 61  PEAT-INTERVAL ca
5fa0: 6c 6c 0a 2a 2a 20 61 66 74 65 72 20 74 68 61 74  ll.** after that
5fb0: 2e 20 20 49 66 20 52 45 50 45 41 54 2d 49 4e 54  .  If REPEAT-INT
5fc0: 45 52 56 41 4c 20 69 73 20 30 20 6f 72 20 69 73  ERVAL is 0 or is
5fd0: 20 6f 6d 69 74 74 65 64 2c 20 74 68 65 6e 20 6f   omitted, then o
5fe0: 6e 6c 79 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  nly a single.** 
5ff0: 6d 61 6c 6c 6f 63 20 77 69 6c 6c 20 66 61 69 6c  malloc will fail
6000: 2e 20 20 49 66 20 52 45 50 45 41 54 2d 49 4e 54  .  If REPEAT-INT
6010: 45 52 56 41 4c 20 69 73 20 31 20 74 68 65 6e 20  ERVAL is 1 then 
6020: 61 6c 6c 20 6d 61 6c 6c 6f 63 73 20 61 66 74 65  all mallocs afte
6030: 72 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 66  r the.** first f
6040: 61 69 6c 75 72 65 20 77 69 6c 6c 20 63 6f 6e 74  ailure will cont
6050: 69 6e 75 65 20 74 6f 20 66 61 69 6c 20 6f 6e 20  inue to fail on 
6060: 65 76 65 72 79 20 63 61 6c 6c 2e 20 20 49 66 20  every call.  If 
6070: 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20  REPEAT-INTERVAL 
6080: 69 73 0a 2a 2a 20 32 20 74 68 65 6e 20 65 76 65  is.** 2 then eve
6090: 72 79 20 6f 74 68 65 72 20 6d 61 6c 6c 6f 63 20  ry other malloc 
60a0: 77 69 6c 6c 20 66 61 69 6c 2e 20 20 41 6e 64 20  will fail.  And 
60b0: 73 6f 20 66 6f 72 74 68 2e 0a 2a 2a 0a 2a 2a 20  so forth..**.** 
60c0: 54 75 72 6e 20 6f 66 66 20 74 68 69 73 20 6d 65  Turn off this me
60d0: 63 68 61 6e 69 73 6d 20 61 6e 64 20 72 65 73 65  chanism and rese
60e0: 74 20 74 68 65 20 73 71 6c 69 74 65 33 54 73 64  t the sqlite3Tsd
60f0: 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  ()->mallocFailed
6100: 20 76 61 72 69 61 62 6c 65 20 69 73 20 4e 3d 3d   variable is N==
6110: 30 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  0..*/.#ifdef SQL
6120: 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 73 74 61  ITE_MEMDEBUG.sta
6130: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 5f 6d  tic int sqlite_m
6140: 61 6c 6c 6f 63 5f 66 61 69 6c 28 0a 20 20 76 6f  alloc_fail(.  vo
6150: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
6160: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
6170: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
6180: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
6190: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
61a0: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
61b0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
61c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
61d0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
61e0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
61f0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
6200: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
6210: 2f 0a 29 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  /.){.  int n;.  
6220: 69 6e 74 20 72 65 70 3b 0a 20 20 69 66 28 20 61  int rep;.  if( a
6230: 72 67 63 21 3d 32 20 26 26 20 61 72 67 63 21 3d  rgc!=2 && argc!=
6240: 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
6250: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
6260: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
6270: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
6280: 61 72 67 76 5b 30 5d 2c 20 22 20 4e 5c 22 22 2c  argv[0], " N\"",
6290: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
62a0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
62b0: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28   if( Tcl_GetInt(
62c0: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
62d0: 20 26 6e 29 20 29 20 72 65 74 75 72 6e 20 54 43   &n) ) return TC
62e0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 61  L_ERROR;.  if( a
62f0: 72 67 63 3d 3d 33 20 29 7b 0a 20 20 20 20 69 66  rgc==3 ){.    if
6300: 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74  ( Tcl_GetInt(int
6310: 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26 72  erp, argv[2], &r
6320: 65 70 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ep) ) return TCL
6330: 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b  _ERROR;.  }else{
6340: 0a 20 20 20 20 72 65 70 20 3d 20 30 3b 0a 20 20  .    rep = 0;.  
6350: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c  }.  sqlite3_iMal
6360: 6c 6f 63 46 61 69 6c 20 3d 20 6e 3b 0a 20 20 73  locFail = n;.  s
6370: 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 52 65  qlite3_iMallocRe
6380: 73 65 74 20 3d 20 72 65 70 3b 0a 20 20 72 65 74  set = rep;.  ret
6390: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65  urn TCL_OK;.}.#e
63a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  ndif../*.** Usag
63b0: 65 3a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  e: sqlite_malloc
63c0: 5f 73 74 61 74 0a 2a 2a 0a 2a 2a 20 52 65 74 75  _stat.**.** Retu
63d0: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
63e0: 20 70 72 69 6f 72 20 63 61 6c 6c 73 20 74 6f 20   prior calls to 
63f0: 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28 29 20 61  sqliteMalloc() a
6400: 6e 64 20 73 71 6c 69 74 65 46 72 65 65 28 29 2e  nd sqliteFree().
6410: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
6420: 45 5f 4d 45 4d 44 45 42 55 47 0a 73 74 61 74 69  E_MEMDEBUG.stati
6430: 63 20 69 6e 74 20 73 71 6c 69 74 65 5f 6d 61 6c  c int sqlite_mal
6440: 6c 6f 63 5f 73 74 61 74 28 0a 20 20 76 6f 69 64  loc_stat(.  void
6450: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
6460: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
6470: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
6480: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
6490: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
64a0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
64b0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
64c0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
64d0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
64e0: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
64f0: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
6500: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
6510: 29 7b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 32  ){.  char zBuf[2
6520: 30 30 5d 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a  00];.  sprintf(z
6530: 42 75 66 2c 20 22 25 64 20 25 64 20 25 64 22 2c  Buf, "%d %d %d",
6540: 20 73 71 6c 69 74 65 33 5f 6e 4d 61 6c 6c 6f 63   sqlite3_nMalloc
6550: 2c 73 71 6c 69 74 65 33 5f 6e 46 72 65 65 2c 73  ,sqlite3_nFree,s
6560: 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61  qlite3_iMallocFa
6570: 69 6c 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  il);.  Tcl_Appen
6580: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
6590: 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75  zBuf, 0);.  retu
65a0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
65b0: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
65c0: 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 54  n implements a T
65d0: 63 6c 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20  cl command that 
65e0: 6d 61 79 20 62 65 20 69 6e 76 6f 6b 65 64 20 75  may be invoked u
65f0: 73 69 6e 67 20 61 6e 79 20 6f 66 0a 2a 2a 20 74  sing any of.** t
6600: 68 65 20 66 6f 75 72 20 66 6f 72 6d 73 20 65 6e  he four forms en
6610: 75 6d 65 72 61 74 65 64 20 62 65 6c 6f 77 2e 0a  umerated below..
6620: 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 6c  **.** sqlite_mal
6630: 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 0a  loc_outstanding.
6640: 2a 2a 20 20 20 20 20 52 65 74 75 72 6e 20 61 20  **     Return a 
6650: 73 75 6d 6d 61 72 79 20 6f 66 20 61 6c 6c 20 75  summary of all u
6660: 6e 66 72 65 65 64 20 62 6c 6f 63 6b 73 20 6f 66  nfreed blocks of
6670: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 65   memory allocate
6680: 64 20 62 79 20 74 68 65 0a 2a 2a 20 20 20 20 20  d by the.**     
6690: 63 75 72 72 65 6e 74 20 74 68 72 65 61 64 2e 20  current thread. 
66a0: 53 65 65 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f  See comments abo
66b0: 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69  ve function sqli
66c0: 74 65 33 4f 75 74 73 74 61 6e 64 69 6e 67 4d 61  te3OutstandingMa
66d0: 6c 6c 6f 63 73 28 29 20 0a 2a 2a 20 20 20 20 20  llocs() .**     
66e0: 69 6e 20 75 74 69 6c 2e 63 20 66 6f 72 20 61 20  in util.c for a 
66f0: 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 74  description of t
6700: 68 65 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75  he returned valu
6710: 65 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 5f  e..**.** sqlite_
6720: 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69  malloc_outstandi
6730: 6e 67 20 2d 62 79 74 65 73 0a 2a 2a 20 20 20 20  ng -bytes.**    
6740: 20 52 65 74 75 72 6e 20 74 68 65 20 74 6f 74 61   Return the tota
6750: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 75 6e 66 72  l amount of unfr
6760: 65 65 64 20 6d 65 6d 6f 72 79 20 28 69 6e 20 62  eed memory (in b
6770: 79 74 65 73 29 20 61 6c 6c 6f 63 61 74 65 64 20  ytes) allocated 
6780: 62 79 20 0a 2a 2a 20 20 20 20 20 74 68 69 73 20  by .**     this 
6790: 74 68 72 65 61 64 2e 0a 2a 2a 0a 2a 2a 20 73 71  thread..**.** sq
67a0: 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73  lite_malloc_outs
67b0: 74 61 6e 64 69 6e 67 20 2d 6d 61 78 62 79 74 65  tanding -maxbyte
67c0: 73 0a 2a 2a 20 20 20 20 20 52 65 74 75 72 6e 20  s.**     Return 
67d0: 74 68 65 20 6d 61 78 69 6d 75 6d 20 61 6d 6f 75  the maximum amou
67e0: 6e 74 20 6f 66 20 64 79 6e 61 6d 69 63 20 6d 65  nt of dynamic me
67f0: 6d 6f 72 79 20 69 6e 20 75 73 65 20 61 74 20 6f  mory in use at o
6800: 6e 65 20 74 69 6d 65 20 0a 2a 2a 20 20 20 20 20  ne time .**     
6810: 62 79 20 74 68 69 73 20 74 68 72 65 61 64 2e 0a  by this thread..
6820: 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 6c  **.** sqlite_mal
6830: 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20  loc_outstanding 
6840: 2d 63 6c 65 61 72 6d 61 78 62 79 74 65 73 0a 2a  -clearmaxbytes.*
6850: 2a 20 20 20 20 20 53 65 74 20 74 68 65 20 76 61  *     Set the va
6860: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
6870: 5b 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f  [sqlite_malloc_o
6880: 75 74 73 74 61 6e 64 69 6e 67 20 2d 6d 61 78 62  utstanding -maxb
6890: 79 74 65 73 5d 0a 2a 2a 20 20 20 20 20 74 6f 20  ytes].**     to 
68a0: 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
68b0: 65 20 6f 66 20 5b 73 71 6c 69 74 65 5f 6d 61 6c  e of [sqlite_mal
68c0: 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20  loc_outstanding 
68d0: 2d 62 79 74 65 73 5d 2e 20 0a 2a 2f 0a 73 74 61  -bytes]. .*/.sta
68e0: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 5f 6d  tic int sqlite_m
68f0: 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e  alloc_outstandin
6900: 67 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20  g(.  ClientData 
6910: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
6920: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
6930: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
6940: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
6950: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
6960: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f  mmand */.  int o
6970: 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  bjc,            
6980: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
6990: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63  rguments */.  Tc
69a0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
69b0: 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20  v[]  /* Command 
69c0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a  arguments */.){.
69d0: 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
69e0: 69 74 65 33 4f 75 74 73 74 61 6e 64 69 6e 67 4d  ite3OutstandingM
69f0: 61 6c 6c 6f 63 73 28 54 63 6c 5f 49 6e 74 65 72  allocs(Tcl_Inter
6a00: 70 20 2a 69 6e 74 65 72 70 29 3b 0a 0a 20 20 69  p *interp);..  i
6a10: 66 28 20 6f 62 6a 63 21 3d 31 20 26 26 20 6f 62  f( objc!=1 && ob
6a20: 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
6a30: 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
6a40: 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
6a50: 3f 2d 62 79 74 65 73 3f 22 29 3b 0a 20 20 20 20  ?-bytes?");.    
6a60: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
6a70: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 6f 62 6a  ;.  }..  if( obj
6a80: 63 3d 3d 32 20 29 7b 0a 20 20 20 20 63 6f 6e 73  c==2 ){.    cons
6a90: 74 20 63 68 61 72 20 2a 7a 41 72 67 20 3d 20 54  t char *zArg = T
6aa0: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
6ab0: 76 5b 31 5d 29 3b 0a 20 20 20 20 69 66 28 20 30  v[1]);.    if( 0
6ac0: 3d 3d 73 74 72 63 6d 70 28 7a 41 72 67 2c 20 22  ==strcmp(zArg, "
6ad0: 2d 62 79 74 65 73 22 29 20 29 7b 0a 20 20 20 20  -bytes") ){.    
6ae0: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
6af0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
6b00: 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
6b10: 54 73 64 28 29 2d 3e 6e 41 6c 6c 6f 63 29 29 3b  Tsd()->nAlloc));
6b20: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6b30: 4f 4d 49 54 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41  OMIT_MEMORY_MANA
6b40: 47 45 4d 45 4e 54 0a 20 20 20 20 7d 65 6c 73 65  GEMENT.    }else
6b50: 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 7a   if( 0==strcmp(z
6b60: 41 72 67 2c 20 22 2d 6d 61 78 62 79 74 65 73 22  Arg, "-maxbytes"
6b70: 29 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53  ) ){.      Tcl_S
6b80: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
6b90: 72 70 2c 20 54 63 6c 5f 4e 65 77 57 69 64 65 49  rp, Tcl_NewWideI
6ba0: 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 54 73 64  ntObj(sqlite3Tsd
6bb0: 28 29 2d 3e 6e 4d 61 78 41 6c 6c 6f 63 29 29 3b  ()->nMaxAlloc));
6bc0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 30  .    }else if( 0
6bd0: 3d 3d 73 74 72 63 6d 70 28 7a 41 72 67 2c 20 22  ==strcmp(zArg, "
6be0: 2d 63 6c 65 61 72 6d 61 78 62 79 74 65 73 22 29  -clearmaxbytes")
6bf0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
6c00: 33 54 73 64 28 29 2d 3e 6e 4d 61 78 41 6c 6c 6f  3Tsd()->nMaxAllo
6c10: 63 20 3d 20 73 71 6c 69 74 65 33 54 73 64 28 29  c = sqlite3Tsd()
6c20: 2d 3e 6e 41 6c 6c 6f 63 3b 0a 23 65 6e 64 69 66  ->nAlloc;.#endif
6c30: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
6c40: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
6c50: 6c 74 28 69 6e 74 65 72 70 2c 20 22 62 61 64 20  lt(interp, "bad 
6c60: 6f 70 74 69 6f 6e 20 5c 22 22 2c 20 7a 41 72 67  option \"", zArg
6c70: 2c 20 0a 20 20 20 20 20 20 20 20 22 5c 22 3a 20  , .        "\": 
6c80: 6d 75 73 74 20 62 65 20 2d 62 79 74 65 73 2c 20  must be -bytes, 
6c90: 2d 6d 61 78 62 79 74 65 73 20 6f 72 20 2d 63 6c  -maxbytes or -cl
6ca0: 65 61 72 6d 61 78 62 79 74 65 73 22 2c 20 30 0a  earmaxbytes", 0.
6cb0: 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 72        );.      r
6cc0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
6cd0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 72 65 74 75  .    }..    retu
6ce0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 20 7d 0a 0a  rn TCL_OK;.  }..
6cf0: 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33    return sqlite3
6d00: 4f 75 74 73 74 61 6e 64 69 6e 67 4d 61 6c 6c 6f  OutstandingMallo
6d10: 63 73 28 69 6e 74 65 72 70 29 3b 0a 7d 0a 23 65  cs(interp);.}.#e
6d20: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  ndif../*.** Usag
6d30: 65 3a 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  e: sqlite3_enabl
6d40: 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 20 42  e_shared_cache B
6d50: 4f 4f 4c 45 41 4e 0a 2a 2a 0a 2a 2f 0a 23 69 66  OOLEAN.**.*/.#if
6d60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
6d70: 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 73 74  _SHARED_CACHE.st
6d80: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65 6e  atic int test_en
6d90: 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68  able_shared_cach
6da0: 65 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20  e(.  ClientData 
6db0: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
6dc0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
6dd0: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
6de0: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
6df0: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
6e00: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f  mmand */.  int o
6e10: 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  bjc,            
6e20: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
6e30: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63  rguments */.  Tc
6e40: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
6e50: 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20  v[]  /* Command 
6e60: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a  arguments */.){.
6e70: 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
6e80: 65 6e 61 62 6c 65 3b 0a 20 20 53 71 6c 69 74 65  enable;.  Sqlite
6e90: 54 73 64 20 2a 70 54 73 64 20 3d 20 73 71 6c 69  Tsd *pTsd = sqli
6ea0: 74 65 33 54 73 64 28 29 3b 0a 20 20 54 63 6c 5f  te3Tsd();.  Tcl_
6eb0: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
6ec0: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c  erp, Tcl_NewBool
6ed0: 65 61 6e 4f 62 6a 28 70 54 73 64 2d 3e 75 73 65  eanObj(pTsd->use
6ee0: 53 68 61 72 65 64 44 61 74 61 29 29 3b 0a 0a 20  SharedData));.. 
6ef0: 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
6f00: 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
6f10: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
6f20: 6f 62 6a 76 2c 20 22 42 4f 4f 4c 45 41 4e 22 29  objv, "BOOLEAN")
6f30: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
6f40: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
6f50: 28 20 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e  ( Tcl_GetBoolean
6f60: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
6f70: 6f 62 6a 76 5b 31 5d 2c 20 26 65 6e 61 62 6c 65  objv[1], &enable
6f80: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
6f90: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
6fa0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 6e   rc = sqlite3_en
6fb0: 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68  able_shared_cach
6fc0: 65 28 65 6e 61 62 6c 65 29 3b 0a 20 20 69 66 28  e(enable);.  if(
6fd0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
6fe0: 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73  {.    Tcl_SetRes
6ff0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
7000: 72 20 2a 29 73 71 6c 69 74 65 33 45 72 72 53 74  r *)sqlite3ErrSt
7010: 72 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49  r(rc), TCL_STATI
7020: 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  C);.    return T
7030: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
7040: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
7050: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55  .#endif../*.** U
7060: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 61 62  sage:  sqlite_ab
7070: 6f 72 74 0a 2a 2a 0a 2a 2a 20 53 68 75 74 64 6f  ort.**.** Shutdo
7080: 77 6e 20 74 68 65 20 70 72 6f 63 65 73 73 20 69  wn the process i
7090: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54 68 69  mmediately.  Thi
70a0: 73 20 69 73 20 6e 6f 74 20 61 20 63 6c 65 61 6e  s is not a clean
70b0: 20 73 68 75 74 64 6f 77 6e 2e 0a 2a 2a 20 54 68   shutdown..** Th
70c0: 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73  is command is us
70d0: 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20 72  ed to test the r
70e0: 65 63 6f 76 65 72 61 62 69 6c 69 74 79 20 6f 66  ecoverability of
70f0: 20 61 20 64 61 74 61 62 61 73 65 20 69 6e 0a 2a   a database in.*
7100: 2a 20 74 68 65 20 65 76 65 6e 74 20 6f 66 20 61  * the event of a
7110: 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 2e 0a   program crash..
7120: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
7130: 6c 69 74 65 5f 61 62 6f 72 74 28 0a 20 20 76 6f  lite_abort(.  vo
7140: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
7150: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
7160: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
7170: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
7180: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
7190: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
71a0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
71b0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
71c0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
71d0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
71e0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
71f0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
7200: 2f 0a 29 7b 0a 20 20 61 73 73 65 72 74 28 20 69  /.){.  assert( i
7210: 6e 74 65 72 70 3d 3d 30 20 29 3b 20 20 20 2f 2a  nterp==0 );   /*
7220: 20 54 68 69 73 20 77 69 6c 6c 20 61 6c 77 61 79   This will alway
7230: 73 20 66 61 69 6c 20 2a 2f 0a 20 20 72 65 74 75  s fail */.  retu
7240: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
7250: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
7260: 67 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 75  g routine is a u
7270: 73 65 72 2d 64 65 66 69 6e 65 64 20 53 51 4c 20  ser-defined SQL 
7280: 66 75 6e 63 74 69 6f 6e 20 77 68 6f 73 65 20 70  function whose p
7290: 75 72 70 6f 73 65 0a 2a 2a 20 69 73 20 74 6f 20  urpose.** is to 
72a0: 74 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 5f  test the sqlite_
72b0: 73 65 74 5f 72 65 73 75 6c 74 28 29 20 41 50 49  set_result() API
72c0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
72d0: 20 74 65 73 74 46 75 6e 63 28 73 71 6c 69 74 65   testFunc(sqlite
72e0: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65  3_context *conte
72f0: 78 74 2c 20 69 6e 74 20 61 72 67 63 2c 20 73 71  xt, int argc, sq
7300: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
7310: 67 76 29 7b 0a 20 20 77 68 69 6c 65 28 20 61 72  gv){.  while( ar
7320: 67 63 3e 3d 32 20 29 7b 0a 20 20 20 20 63 6f 6e  gc>=2 ){.    con
7330: 73 74 20 63 68 61 72 20 2a 7a 41 72 67 30 20 3d  st char *zArg0 =
7340: 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f   (char*)sqlite3_
7350: 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b  value_text(argv[
7360: 30 5d 29 3b 0a 20 20 20 20 69 66 28 20 7a 41 72  0]);.    if( zAr
7370: 67 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  g0 ){.      if( 
7380: 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d  0==sqlite3StrICm
7390: 70 28 7a 41 72 67 30 2c 20 22 69 6e 74 22 29 20  p(zArg0, "int") 
73a0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
73b0: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f  e3_result_int(co
73c0: 6e 74 65 78 74 2c 20 73 71 6c 69 74 65 33 5f 76  ntext, sqlite3_v
73d0: 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b 31 5d  alue_int(argv[1]
73e0: 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  ));.      }else 
73f0: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
7400: 6d 70 28 7a 41 72 67 30 2c 22 69 6e 74 36 34 22  mp(zArg0,"int64"
7410: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
7420: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
7430: 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20 73 71  nt64(context, sq
7440: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36  lite3_value_int6
7450: 34 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20  4(argv[1]));.   
7460: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
7470: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67  ite3StrICmp(zArg
7480: 30 2c 22 73 74 72 69 6e 67 22 29 3d 3d 30 20 29  0,"string")==0 )
7490: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
74a0: 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63 6f  3_result_text(co
74b0: 6e 74 65 78 74 2c 20 28 63 68 61 72 2a 29 73 71  ntext, (char*)sq
74c0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
74d0: 28 61 72 67 76 5b 31 5d 29 2c 20 2d 31 2c 0a 20  (argv[1]), -1,. 
74e0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
74f0: 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  E_TRANSIENT);.  
7500: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71      }else if( sq
7510: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72  lite3StrICmp(zAr
7520: 67 30 2c 22 64 6f 75 62 6c 65 22 29 3d 3d 30 20  g0,"double")==0 
7530: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
7540: 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65  e3_result_double
7550: 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69 74 65  (context, sqlite
7560: 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 61  3_value_double(a
7570: 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20  rgv[1]));.      
7580: 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
7590: 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22  3StrICmp(zArg0,"
75a0: 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20  null")==0 ){.   
75b0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
75c0: 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74  ult_null(context
75d0: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  );.      }else i
75e0: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
75f0: 70 28 7a 41 72 67 30 2c 22 76 61 6c 75 65 22 29  p(zArg0,"value")
7600: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
7610: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 76 61  qlite3_result_va
7620: 6c 75 65 28 63 6f 6e 74 65 78 74 2c 20 61 72 67  lue(context, arg
7630: 76 5b 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  v[sqlite3_value_
7640: 69 6e 74 28 61 72 67 76 5b 31 5d 29 5d 29 3b 0a  int(argv[1])]);.
7650: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
7660: 20 20 20 20 20 67 6f 74 6f 20 65 72 72 6f 72 5f       goto error_
7670: 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
7680: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f   }else{.      go
7690: 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b 0a 20 20  to error_out;.  
76a0: 20 20 7d 0a 20 20 20 20 61 72 67 63 20 2d 3d 20    }.    argc -= 
76b0: 32 3b 0a 20 20 20 20 61 72 67 76 20 2b 3d 20 32  2;.    argv += 2
76c0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 3b 0a  ;.  }.  return;.
76d0: 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a 20 20 73 71  .error_out:.  sq
76e0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72  lite3_result_err
76f0: 6f 72 28 63 6f 6e 74 65 78 74 2c 22 66 69 72 73  or(context,"firs
7700: 74 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c  t argument shoul
7710: 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20 22 0a 20  d be one of: ". 
7720: 20 20 20 20 20 22 69 6e 74 20 69 6e 74 36 34 20       "int int64 
7730: 73 74 72 69 6e 67 20 64 6f 75 62 6c 65 20 6e 75  string double nu
7740: 6c 6c 20 76 61 6c 75 65 22 2c 20 2d 31 29 3b 0a  ll value", -1);.
7750: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
7760: 20 20 73 71 6c 69 74 65 5f 72 65 67 69 73 74 65    sqlite_registe
7770: 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20  r_test_function 
7780: 20 44 42 20 20 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20   DB  NAME.**.** 
7790: 52 65 67 69 73 74 65 72 20 74 68 65 20 74 65 73  Register the tes
77a0: 74 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 6f  t SQL function o
77b0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 44  n the database D
77c0: 42 20 75 6e 64 65 72 20 74 68 65 20 6e 61 6d 65  B under the name
77d0: 20 4e 41 4d 45 2e 0a 2a 2f 0a 73 74 61 74 69 63   NAME..*/.static
77e0: 20 69 6e 74 20 74 65 73 74 5f 72 65 67 69 73 74   int test_regist
77f0: 65 72 5f 66 75 6e 63 28 0a 20 20 76 6f 69 64 20  er_func(.  void 
7800: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
7810: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
7820: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
7830: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
7840: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
7850: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
7860: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
7870: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
7880: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
7890: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
78a0: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
78b0: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
78c0: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
78d0: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28  .  int rc;.  if(
78e0: 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20   argc!=3 ){.    
78f0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
7900: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
7910: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
7920: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20  e \"", argv[0], 
7930: 0a 20 20 20 20 20 20 20 22 20 44 42 20 46 55 4e  .       " DB FUN
7940: 43 54 49 4f 4e 2d 4e 41 4d 45 22 2c 20 30 29 3b  CTION-NAME", 0);
7950: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
7960: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
7970: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
7980: 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
7990: 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
79a0: 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73  _ERROR;.  rc = s
79b0: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
79c0: 6e 63 74 69 6f 6e 28 64 62 2c 20 61 72 67 76 5b  nction(db, argv[
79d0: 32 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  2], -1, SQLITE_U
79e0: 54 46 38 2c 20 30 2c 20 0a 20 20 20 20 20 20 74  TF8, 0, .      t
79f0: 65 73 74 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a  estFunc, 0, 0);.
7a00: 20 20 69 66 28 20 72 63 21 3d 30 20 29 7b 0a 20    if( rc!=0 ){. 
7a10: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
7a20: 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c 69  ult(interp, sqli
7a30: 74 65 33 45 72 72 53 74 72 28 72 63 29 2c 20 30  te3ErrStr(rc), 0
7a40: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
7a50: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
7a60: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
7a70: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
7a80: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
7a90: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75  CL_ERROR;.  retu
7aa0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
7ab0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
7ac0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 20 53 54  te3_finalize  ST
7ad0: 4d 54 20 0a 2a 2a 0a 2a 2a 20 46 69 6e 61 6c 69  MT .**.** Finali
7ae0: 7a 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 68  ze a statement h
7af0: 61 6e 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  andle..*/.static
7b00: 20 69 6e 74 20 74 65 73 74 5f 66 69 6e 61 6c 69   int test_finali
7b10: 7a 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  ze(.  void * cli
7b20: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
7b30: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
7b40: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
7b50: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
7b60: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
7b70: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69  stmt *pStmt;.  i
7b80: 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33  nt rc;.  sqlite3
7b90: 20 2a 64 62 3b 0a 0a 20 20 69 66 28 20 6f 62 6a   *db;..  if( obj
7ba0: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
7bb0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
7bc0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
7bd0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
7be0: 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
7bf0: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
7c00: 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c  objv[0], 0), " <
7c10: 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20  STMT>", 0);.    
7c20: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
7c30: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
7c40: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
7c50: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
7c60: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
7c70: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
7c80: 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66 28 20 70  _ERROR;..  if( p
7c90: 53 74 6d 74 20 29 7b 0a 20 20 20 20 64 62 20 3d  Stmt ){.    db =
7ca0: 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29   StmtToDb(pStmt)
7cb0: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
7cc0: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53  ite3_finalize(pS
7cd0: 74 6d 74 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52  tmt);.  Tcl_SetR
7ce0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
7cf0: 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28  har *)errorName(
7d00: 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  rc), TCL_STATIC)
7d10: 3b 0a 20 20 69 66 28 20 64 62 20 26 26 20 73 71  ;.  if( db && sq
7d20: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
7d30: 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
7d40: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
7d50: 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  ROR;.  return TC
7d60: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
7d70: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 72  sage:  sqlite3_r
7d80: 65 73 65 74 20 20 53 54 4d 54 20 0a 2a 2a 0a 2a  eset  STMT .**.*
7d90: 2a 20 52 65 73 65 74 20 61 20 73 74 61 74 65 6d  * Reset a statem
7da0: 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73  ent handle..*/.s
7db0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 72  tatic int test_r
7dc0: 65 73 65 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  eset(.  void * c
7dd0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
7de0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
7df0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
7e00: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
7e10: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
7e20: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
7e30: 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
7e40: 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
7e50: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
7e60: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
7e70: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
7e80: 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
7e90: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
7ea0: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
7eb0: 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20  " <STMT>", 0);. 
7ec0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
7ed0: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
7ee0: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
7ef0: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
7f00: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
7f10: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
7f20: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63  TCL_ERROR;..  rc
7f30: 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74   = sqlite3_reset
7f40: 28 70 53 74 6d 74 29 3b 0a 20 20 69 66 28 20 70  (pStmt);.  if( p
7f50: 53 74 6d 74 20 26 26 20 73 71 6c 69 74 65 33 54  Stmt && sqlite3T
7f60: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
7f70: 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
7f80: 74 29 2c 20 72 63 29 20 29 7b 0a 20 20 20 20 72  t), rc) ){.    r
7f90: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7fa0: 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74 52 65  .  }.  Tcl_SetRe
7fb0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
7fc0: 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72  ar *)errorName(r
7fd0: 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  c), TCL_STATIC);
7fe0: 0a 2f 2a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  ./*.  if( rc ){.
7ff0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
8000: 52 52 4f 52 3b 0a 20 20 7d 0a 2a 2f 0a 20 20 72  RROR;.  }.*/.  r
8010: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
8020: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
8030: 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64 20 53  qlite3_expired S
8040: 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  TMT .**.** Retur
8050: 6e 20 54 52 55 45 20 69 66 20 61 20 72 65 63 6f  n TRUE if a reco
8060: 6d 70 69 6c 61 74 69 6f 6e 20 6f 66 20 74 68 65  mpilation of the
8070: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 72 65   statement is re
8080: 63 6f 6d 6d 65 6e 64 65 64 2e 0a 2a 2f 0a 73 74  commended..*/.st
8090: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65 78  atic int test_ex
80a0: 70 69 72 65 64 28 0a 20 20 76 6f 69 64 20 2a 20  pired(.  void * 
80b0: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
80c0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
80d0: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
80e0: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
80f0: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
8100: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
8110: 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
8120: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
8130: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
8140: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
8150: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
8160: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
8170: 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
8180: 2c 20 30 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c  , 0), " <STMT>",
8190: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
81a0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
81b0: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
81c0: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
81d0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
81e0: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
81f0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
8200: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
8210: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
8220: 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 73 71 6c  ewBooleanObj(sql
8230: 69 74 65 33 5f 65 78 70 69 72 65 64 28 70 53 74  ite3_expired(pSt
8240: 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  mt)));.  return 
8250: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
8260: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
8270: 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 69 6e  _transfer_bindin
8280: 67 73 20 46 52 4f 4d 53 54 4d 54 20 54 4f 53 54  gs FROMSTMT TOST
8290: 4d 54 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65  MT.**.** Transfe
82a0: 72 20 61 6c 6c 20 62 69 6e 64 69 6e 67 73 20 66  r all bindings f
82b0: 72 6f 6d 20 46 52 4f 4d 53 54 4d 54 20 6f 76 65  rom FROMSTMT ove
82c0: 72 20 74 6f 20 54 4f 53 54 4d 54 0a 2a 2f 0a 73  r to TOSTMT.*/.s
82d0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 74  tatic int test_t
82e0: 72 61 6e 73 66 65 72 5f 62 69 6e 64 28 0a 20 20  ransfer_bind(.  
82f0: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
8300: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
8310: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
8320: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
8330: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
8340: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
8350: 70 53 74 6d 74 31 2c 20 2a 70 53 74 6d 74 32 3b  pStmt1, *pStmt2;
8360: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
8370: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
8380: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
8390: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
83a0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
83b0: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
83c0: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
83d0: 5d 2c 20 30 29 2c 20 22 20 46 52 4f 4d 2d 53 54  ], 0), " FROM-ST
83e0: 4d 54 20 54 4f 2d 53 54 4d 54 22 2c 20 30 29 3b  MT TO-STMT", 0);
83f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
8400: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
8410: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
8420: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
8430: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
8440: 26 70 53 74 6d 74 31 29 29 20 72 65 74 75 72 6e  &pStmt1)) return
8450: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
8460: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
8470: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
8480: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 2c  String(objv[2]),
8490: 20 26 70 53 74 6d 74 32 29 29 20 72 65 74 75 72   &pStmt2)) retur
84a0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
84b0: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
84c0: 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63  interp, .     Tc
84d0: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69  l_NewIntObj(sqli
84e0: 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e  te3_transfer_bin
84f0: 64 69 6e 67 73 28 70 53 74 6d 74 31 2c 70 53 74  dings(pStmt1,pSt
8500: 6d 74 32 29 29 29 3b 0a 20 20 72 65 74 75 72 6e  mt2)));.  return
8510: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
8520: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
8530: 33 5f 63 68 61 6e 67 65 73 20 44 42 0a 2a 2a 0a  3_changes DB.**.
8540: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
8550: 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20  mber of changes 
8560: 6d 61 64 65 20 74 6f 20 74 68 65 20 64 61 74 61  made to the data
8570: 62 61 73 65 20 62 79 20 74 68 65 20 6c 61 73 74  base by the last
8580: 20 53 51 4c 0a 2a 2a 20 65 78 65 63 75 74 69 6f   SQL.** executio
8590: 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  n..*/.static int
85a0: 20 74 65 73 74 5f 63 68 61 6e 67 65 73 28 0a 20   test_changes(. 
85b0: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
85c0: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
85d0: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
85e0: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
85f0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
8600: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
8610: 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
8620: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
8630: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
8640: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
8650: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
8660: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
8670: 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22  (objv[0]), " DB"
8680: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
8690: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
86a0: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
86b0: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
86c0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
86d0: 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ), &db) ) return
86e0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63   TCL_ERROR;.  Tc
86f0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
8700: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
8710: 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 68 61  tObj(sqlite3_cha
8720: 6e 67 65 73 28 64 62 29 29 29 3b 0a 20 20 72 65  nges(db)));.  re
8730: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
8740: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  /*.** This is th
8750: 65 20 22 73 74 61 74 69 63 5f 62 69 6e 64 5f 76  e "static_bind_v
8760: 61 6c 75 65 22 20 74 68 61 74 20 76 61 72 69 61  alue" that varia
8770: 62 6c 65 73 20 61 72 65 20 62 6f 75 6e 64 20 74  bles are bound t
8780: 6f 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 46 4c  o when.** the FL
8790: 41 47 20 6f 70 74 69 6f 6e 20 6f 66 20 73 71 6c  AG option of sql
87a0: 69 74 65 33 5f 62 69 6e 64 20 69 73 20 22 73 74  ite3_bind is "st
87b0: 61 74 69 63 22 0a 2a 2f 0a 73 74 61 74 69 63 20  atic".*/.static 
87c0: 63 68 61 72 20 2a 73 71 6c 69 74 65 5f 73 74 61  char *sqlite_sta
87d0: 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 20 3d  tic_bind_value =
87e0: 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65   0;../*.** Usage
87f0: 3a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 20  :  sqlite3_bind 
8800: 20 56 4d 20 20 49 44 58 20 20 56 41 4c 55 45 20   VM  IDX  VALUE 
8810: 20 46 4c 41 47 53 0a 2a 2a 0a 2a 2a 20 53 65 74   FLAGS.**.** Set
8820: 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
8830: 68 65 20 49 44 58 2d 74 68 20 6f 63 63 75 72 61  he IDX-th occura
8840: 6e 63 65 20 6f 66 20 22 3f 22 20 69 6e 20 74 68  nce of "?" in th
8850: 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 0a 2a  e original SQL.*
8860: 2a 20 73 74 72 69 6e 67 2e 20 20 56 41 4c 55 45  * string.  VALUE
8870: 20 69 73 20 74 68 65 20 6e 65 77 20 76 61 6c 75   is the new valu
8880: 65 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e  e.  If FLAGS=="n
8890: 75 6c 6c 22 20 74 68 65 6e 20 56 41 4c 55 45 20  ull" then VALUE 
88a0: 69 73 0a 2a 2a 20 69 67 6e 6f 72 65 64 20 61 6e  is.** ignored an
88b0: 64 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 73  d the value is s
88c0: 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 49 66 20  et to NULL.  If 
88d0: 46 4c 41 47 53 3d 3d 22 73 74 61 74 69 63 22 20  FLAGS=="static" 
88e0: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 76 61 6c 75  then.** the valu
88f0: 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  e is set to the 
8900: 76 61 6c 75 65 20 6f 66 20 61 20 73 74 61 74 69  value of a stati
8910: 63 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 64  c variable named
8920: 0a 2a 2a 20 22 73 71 6c 69 74 65 5f 73 74 61 74  .** "sqlite_stat
8930: 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 22 2e 20  ic_bind_value". 
8940: 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e 6f 72 6d   If FLAGS=="norm
8950: 61 6c 22 20 74 68 65 6e 20 61 20 63 6f 70 79 0a  al" then a copy.
8960: 2a 2a 20 6f 66 20 74 68 65 20 56 41 4c 55 45 20  ** of the VALUE 
8970: 69 73 20 6d 61 64 65 2e 20 20 49 66 20 46 4c 41  is made.  If FLA
8980: 47 53 3d 3d 22 62 6c 6f 62 31 30 22 20 74 68 65  GS=="blob10" the
8990: 6e 20 61 20 56 41 4c 55 45 20 69 73 20 69 67 6e  n a VALUE is ign
89a0: 6f 72 65 64 0a 2a 2a 20 61 6e 20 61 20 31 30 2d  ored.** an a 10-
89b0: 62 79 74 65 20 62 6c 6f 62 20 22 61 62 63 5c 30  byte blob "abc\0
89c0: 30 30 78 79 7a 5c 30 30 30 70 71 22 20 69 73 20  00xyz\000pq" is 
89d0: 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a 73 74 61  inserted..*/.sta
89e0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
89f0: 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  d(.  void *NotUs
8a00: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
8a10: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
8a20: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
8a30: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
8a40: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
8a50: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
8a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
8a70: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
8a80: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
8a90: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
8aa0: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
8ab0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
8ac0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
8ad0: 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  t;.  int rc;.  i
8ae0: 6e 74 20 69 64 78 3b 0a 20 20 69 66 28 20 61 72  nt idx;.  if( ar
8af0: 67 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=5 ){.    Tcl
8b00: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
8b10: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
8b20: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
8b30: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20  "", argv[0], .  
8b40: 20 20 20 20 20 22 20 56 4d 20 49 44 58 20 56 41       " VM IDX VA
8b50: 4c 55 45 20 28 6e 75 6c 6c 7c 73 74 61 74 69 63  LUE (null|static
8b60: 7c 6e 6f 72 6d 61 6c 29 5c 22 22 2c 20 30 29 3b  |normal)\"", 0);
8b70: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
8b80: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
8b90: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
8ba0: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
8bb0: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
8bc0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
8bd0: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e  f( Tcl_GetInt(in
8be0: 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26  terp, argv[2], &
8bf0: 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43  idx) ) return TC
8c00: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 73  L_ERROR;.  if( s
8c10: 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 6e  trcmp(argv[4],"n
8c20: 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ull")==0 ){.    
8c30: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
8c40: 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64  d_null(pStmt, id
8c50: 78 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  x);.  }else if( 
8c60: 73 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22  strcmp(argv[4],"
8c70: 73 74 61 74 69 63 22 29 3d 3d 30 20 29 7b 0a 20  static")==0 ){. 
8c80: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
8c90: 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c  bind_text(pStmt,
8ca0: 20 69 64 78 2c 20 73 71 6c 69 74 65 5f 73 74 61   idx, sqlite_sta
8cb0: 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 2c 20  tic_bind_value, 
8cc0: 2d 31 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20  -1, 0);.  }else 
8cd0: 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b  if( strcmp(argv[
8ce0: 34 5d 2c 22 6e 6f 72 6d 61 6c 22 29 3d 3d 30 20  4],"normal")==0 
8cf0: 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
8d00: 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 53  te3_bind_text(pS
8d10: 74 6d 74 2c 20 69 64 78 2c 20 61 72 67 76 5b 33  tmt, idx, argv[3
8d20: 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52  ], -1, SQLITE_TR
8d30: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 7d 65 6c 73  ANSIENT);.  }els
8d40: 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67  e if( strcmp(arg
8d50: 76 5b 34 5d 2c 22 62 6c 6f 62 31 30 22 29 3d 3d  v[4],"blob10")==
8d60: 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
8d70: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
8d80: 70 53 74 6d 74 2c 20 69 64 78 2c 20 22 61 62 63  pStmt, idx, "abc
8d90: 5c 30 30 30 78 79 7a 5c 30 30 30 70 71 22 2c 20  \000xyz\000pq", 
8da0: 31 30 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  10, SQLITE_STATI
8db0: 43 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  C);.  }else{.   
8dc0: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
8dd0: 74 28 69 6e 74 65 72 70 2c 20 22 34 74 68 20 61  t(interp, "4th a
8de0: 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64 20 62  rgument should b
8df0: 65 20 22 0a 20 20 20 20 20 20 20 20 22 5c 22 6e  e ".        "\"n
8e00: 75 6c 6c 5c 22 20 6f 72 20 5c 22 73 74 61 74 69  ull\" or \"stati
8e10: 63 5c 22 20 6f 72 20 5c 22 6e 6f 72 6d 61 6c 5c  c\" or \"normal\
8e20: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
8e30: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
8e40: 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  }.  if( sqlite3T
8e50: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
8e60: 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
8e70: 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  t), rc) ) return
8e80: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
8e90: 28 20 72 63 20 29 7b 0a 20 20 20 20 63 68 61 72  ( rc ){.    char
8ea0: 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20 20 20 73   zBuf[50];.    s
8eb0: 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 28 25  printf(zBuf, "(%
8ec0: 64 29 20 22 2c 20 72 63 29 3b 0a 20 20 20 20 54  d) ", rc);.    T
8ed0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
8ee0: 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 73 71  interp, zBuf, sq
8ef0: 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 2c  lite3ErrStr(rc),
8f00: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
8f10: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
8f20: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
8f30: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
8f40: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 2f 2a 0a  E_OMIT_UTF16./*.
8f50: 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74 65  ** Usage: add_te
8f60: 73 74 5f 63 6f 6c 6c 61 74 65 20 3c 64 62 20 70  st_collate <db p
8f70: 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31  tr> <utf8> <utf1
8f80: 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e 0a 2a  6le> <utf16be>.*
8f90: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
8fa0: 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 74 65  on is used to te
8fb0: 73 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 73  st that SQLite s
8fc0: 65 6c 65 63 74 73 20 74 68 65 20 63 6f 72 72 65  elects the corre
8fd0: 63 74 20 63 6f 6c 6c 61 74 69 6f 6e 0a 2a 2a 20  ct collation.** 
8fe0: 73 65 71 75 65 6e 63 65 20 63 61 6c 6c 62 61 63  sequence callbac
8ff0: 6b 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  k when multiple 
9000: 76 65 72 73 69 6f 6e 73 20 28 66 6f 72 20 64 69  versions (for di
9010: 66 66 65 72 65 6e 74 20 74 65 78 74 20 65 6e 63  fferent text enc
9020: 6f 64 69 6e 67 73 29 0a 2a 2a 20 61 72 65 20 61  odings).** are a
9030: 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  vailable..**.** 
9040: 43 61 6c 6c 69 6e 67 20 74 68 69 73 20 72 6f 75  Calling this rou
9050: 74 69 6e 65 20 72 65 67 69 73 74 65 72 73 20 74  tine registers t
9060: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
9070: 75 65 6e 63 65 20 22 74 65 73 74 5f 63 6f 6c 6c  uence "test_coll
9080: 61 74 65 22 0a 2a 2a 20 77 69 74 68 20 64 61 74  ate".** with dat
9090: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 64 62  abase handle <db
90a0: 3e 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 61 72  >. The second ar
90b0: 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 61  gument must be a
90c0: 20 6c 69 73 74 20 6f 66 20 74 68 72 65 65 0a 2a   list of three.*
90d0: 2a 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 73  * boolean values
90e0: 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 20 69  . If the first i
90f0: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 61 20 76  s true, then a v
9100: 65 72 73 69 6f 6e 20 6f 66 20 74 65 73 74 5f 63  ersion of test_c
9110: 6f 6c 6c 61 74 65 20 69 73 0a 2a 2a 20 72 65 67  ollate is.** reg
9120: 69 73 74 65 72 65 64 20 66 6f 72 20 55 54 46 2d  istered for UTF-
9130: 38 2c 20 69 66 20 74 68 65 20 73 65 63 6f 6e 64  8, if the second
9140: 20 69 73 20 74 72 75 65 2c 20 61 20 76 65 72 73   is true, a vers
9150: 69 6f 6e 20 69 73 20 72 65 67 69 73 74 65 72 65  ion is registere
9160: 64 20 66 6f 72 0a 2a 2a 20 55 54 46 2d 31 36 6c  d for.** UTF-16l
9170: 65 2c 20 69 66 20 74 68 65 20 74 68 69 72 64 20  e, if the third 
9180: 69 73 20 74 72 75 65 2c 20 61 20 55 54 46 2d 31  is true, a UTF-1
9190: 36 62 65 20 76 65 72 73 69 6f 6e 20 69 73 20 61  6be version is a
91a0: 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 20 50 72 65  vailable..** Pre
91b0: 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
91c0: 66 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 61  f test_collate a
91d0: 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a 2a 0a 2a  re deleted..**.*
91e0: 2a 20 54 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  * The collation 
91f0: 73 65 71 75 65 6e 63 65 20 74 65 73 74 5f 63 6f  sequence test_co
9200: 6c 6c 61 74 65 20 69 73 20 69 6d 70 6c 65 6d 65  llate is impleme
9210: 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20  nted by calling 
9220: 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67  the.** following
9230: 20 54 43 4c 20 73 63 72 69 70 74 3a 0a 2a 2a 0a   TCL script:.**.
9240: 2a 2a 20 20 20 22 74 65 73 74 5f 63 6f 6c 6c 61  **   "test_colla
9250: 74 65 20 3c 65 6e 63 3e 20 3c 6c 68 73 3e 20 3c  te <enc> <lhs> <
9260: 72 68 73 3e 22 0a 2a 2a 0a 2a 2a 20 54 68 65 20  rhs>".**.** The 
9270: 3c 6c 68 73 3e 20 61 6e 64 20 3c 72 68 73 3e 20  <lhs> and <rhs> 
9280: 61 72 65 20 74 68 65 20 74 77 6f 20 76 61 6c 75  are the two valu
9290: 65 73 20 62 65 69 6e 67 20 63 6f 6d 70 61 72 65  es being compare
92a0: 64 2c 20 65 6e 63 6f 64 65 64 20 69 6e 20 55 54  d, encoded in UT
92b0: 46 2d 38 2e 0a 2a 2a 20 54 68 65 20 3c 65 6e 63  F-8..** The <enc
92c0: 3e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 74  > parameter is t
92d0: 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74  he encoding of t
92e0: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e  he collation fun
92f0: 63 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 53 51  ction that.** SQ
9300: 4c 69 74 65 20 73 65 6c 65 63 74 65 64 20 74 6f  Lite selected to
9310: 20 63 61 6c 6c 2e 20 54 68 65 20 54 43 4c 20 74   call. The TCL t
9320: 65 73 74 20 73 63 72 69 70 74 20 69 6d 70 6c 65  est script imple
9330: 6d 65 6e 74 73 20 74 68 65 0a 2a 2a 20 22 74 65  ments the.** "te
9340: 73 74 5f 63 6f 6c 6c 61 74 65 22 20 70 72 6f 63  st_collate" proc
9350: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
9360: 74 20 74 68 69 73 20 77 69 6c 6c 20 6f 6e 6c 79  t this will only
9370: 20 77 6f 72 6b 20 77 69 74 68 20 6f 6e 65 20 69   work with one i
9380: 6e 74 65 70 72 65 74 65 72 20 61 74 20 61 20 74  ntepreter at a t
9390: 69 6d 65 2c 20 61 73 20 74 68 65 0a 2a 2a 20 69  ime, as the.** i
93a0: 6e 74 65 72 70 20 70 6f 69 6e 74 65 72 20 74 6f  nterp pointer to
93b0: 20 75 73 65 20 77 68 65 6e 20 65 76 61 6c 75 61   use when evalua
93c0: 74 69 6e 67 20 74 68 65 20 54 43 4c 20 73 63 72  ting the TCL scr
93d0: 69 70 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ipt is stored in
93e0: 0a 2a 2a 20 70 54 65 73 74 43 6f 6c 6c 61 74 65  .** pTestCollate
93f0: 49 6e 74 65 72 70 2e 0a 2a 2f 0a 73 74 61 74 69  Interp..*/.stati
9400: 63 20 54 63 6c 5f 49 6e 74 65 72 70 2a 20 70 54  c Tcl_Interp* pT
9410: 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70  estCollateInterp
9420: 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  ;.static int tes
9430: 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 28 0a  t_collate_func(.
9440: 20 20 76 6f 69 64 20 2a 70 43 74 78 2c 20 0a 20    void *pCtx, . 
9450: 20 69 6e 74 20 6e 41 2c 20 63 6f 6e 73 74 20 76   int nA, const v
9460: 6f 69 64 20 2a 7a 41 2c 0a 20 20 69 6e 74 20 6e  oid *zA,.  int n
9470: 42 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  B, const void *z
9480: 42 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72  B.){.  Tcl_Inter
9490: 70 20 2a 69 20 3d 20 70 54 65 73 74 43 6f 6c 6c  p *i = pTestColl
94a0: 61 74 65 49 6e 74 65 72 70 3b 0a 20 20 69 6e 74  ateInterp;.  int
94b0: 20 65 6e 63 69 6e 20 3d 20 28 69 6e 74 29 70 43   encin = (int)pC
94c0: 74 78 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  tx;.  int res;. 
94d0: 20 69 6e 74 20 6e 3b 0a 0a 20 20 73 71 6c 69 74   int n;..  sqlit
94e0: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a  e3_value *pVal;.
94f0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 0a    Tcl_Obj *pX;..
9500: 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74    pX = Tcl_NewSt
9510: 72 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f 63 6f  ringObj("test_co
9520: 6c 6c 61 74 65 22 2c 20 2d 31 29 3b 0a 20 20 54  llate", -1);.  T
9530: 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28  cl_IncrRefCount(
9540: 70 58 29 3b 0a 0a 20 20 73 77 69 74 63 68 28 20  pX);..  switch( 
9550: 65 6e 63 69 6e 20 29 7b 0a 20 20 20 20 63 61 73  encin ){.    cas
9560: 65 20 53 51 4c 49 54 45 5f 55 54 46 38 3a 0a 20  e SQLITE_UTF8:. 
9570: 20 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a       Tcl_ListObj
9580: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c  AppendElement(i,
9590: 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  pX,Tcl_NewString
95a0: 4f 62 6a 28 22 55 54 46 2d 38 22 2c 2d 31 29 29  Obj("UTF-8",-1))
95b0: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
95c0: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 55     case SQLITE_U
95d0: 54 46 31 36 4c 45 3a 0a 20 20 20 20 20 20 54 63  TF16LE:.      Tc
95e0: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
95f0: 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f  lement(i,pX,Tcl_
9600: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54  NewStringObj("UT
9610: 46 2d 31 36 4c 45 22 2c 2d 31 29 29 3b 0a 20 20  F-16LE",-1));.  
9620: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
9630: 61 73 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ase SQLITE_UTF16
9640: 42 45 3a 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69  BE:.      Tcl_Li
9650: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
9660: 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53  nt(i,pX,Tcl_NewS
9670: 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36  tringObj("UTF-16
9680: 42 45 22 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20  BE",-1));.      
9690: 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75  break;.    defau
96a0: 6c 74 3a 0a 20 20 20 20 20 20 61 73 73 65 72 74  lt:.      assert
96b0: 28 30 29 3b 0a 20 20 7d 0a 0a 20 20 70 56 61 6c  (0);.  }..  pVal
96c0: 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
96d0: 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ew();.  sqlite3V
96e0: 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
96f0: 20 6e 41 2c 20 7a 41 2c 20 65 6e 63 69 6e 2c 20   nA, zA, encin, 
9700: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
9710: 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76 61    n = sqlite3_va
9720: 6c 75 65 5f 62 79 74 65 73 28 70 56 61 6c 29 3b  lue_bytes(pVal);
9730: 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  .  Tcl_ListObjAp
9740: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58  pendElement(i,pX
9750: 2c 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53  ,.      Tcl_NewS
9760: 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29  tringObj((char*)
9770: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
9780: 78 74 28 70 56 61 6c 29 2c 6e 29 29 3b 0a 20 20  xt(pVal),n));.  
9790: 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
97a0: 74 72 28 70 56 61 6c 2c 20 6e 42 2c 20 7a 42 2c  tr(pVal, nB, zB,
97b0: 20 65 6e 63 69 6e 2c 20 53 51 4c 49 54 45 5f 53   encin, SQLITE_S
97c0: 54 41 54 49 43 29 3b 0a 20 20 6e 20 3d 20 73 71  TATIC);.  n = sq
97d0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65  lite3_value_byte
97e0: 73 28 70 56 61 6c 29 3b 0a 20 20 54 63 6c 5f 4c  s(pVal);.  Tcl_L
97f0: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
9800: 65 6e 74 28 69 2c 70 58 2c 0a 20 20 20 20 20 20  ent(i,pX,.      
9810: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
9820: 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  ((char*)sqlite3_
9830: 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c 29  value_text(pVal)
9840: 2c 6e 29 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ,n));.  sqlite3V
9850: 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a  alueFree(pVal);.
9860: 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78  .  Tcl_EvalObjEx
9870: 28 69 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54 63  (i, pX, 0);.  Tc
9880: 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70  l_DecrRefCount(p
9890: 58 29 3b 0a 20 20 54 63 6c 5f 47 65 74 49 6e 74  X);.  Tcl_GetInt
98a0: 46 72 6f 6d 4f 62 6a 28 69 2c 20 54 63 6c 5f 47  FromObj(i, Tcl_G
98b0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 29 2c 20  etObjResult(i), 
98c0: 26 72 65 73 29 3b 0a 20 20 72 65 74 75 72 6e 20  &res);.  return 
98d0: 72 65 73 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e  res;.}.static in
98e0: 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 28 0a  t test_collate(.
98f0: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
9900: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
9910: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
9920: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
9930: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
9940: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
9950: 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 20 20 73 71  .  int val;.  sq
9960: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
9970: 6c 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  l;.  int rc;..  
9980: 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 20 67 6f  if( objc!=5 ) go
9990: 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20 20 70  to bad_args;.  p
99a0: 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72  TestCollateInter
99b0: 70 20 3d 20 69 6e 74 65 72 70 3b 0a 20 20 69 66  p = interp;.  if
99c0: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
99d0: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
99e0: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
99f0: 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
9a00: 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66 28 20 54  _ERROR;..  if( T
9a10: 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
9a20: 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
9a30: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 76  erp, objv[2], &v
9a40: 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
9a50: 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73  _ERROR;.  rc = s
9a60: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
9a70: 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 74 65 73  llation(db, "tes
9a80: 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 53 51 4c 49  t_collate", SQLI
9a90: 54 45 5f 55 54 46 38 2c 20 0a 20 20 20 20 20 20  TE_UTF8, .      
9aa0: 20 20 20 20 28 76 6f 69 64 20 2a 29 53 51 4c 49      (void *)SQLI
9ab0: 54 45 5f 55 54 46 38 2c 20 76 61 6c 3f 74 65 73  TE_UTF8, val?tes
9ac0: 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30  t_collate_func:0
9ad0: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
9ae0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66  ITE_OK ){.    if
9af0: 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65  ( TCL_OK!=Tcl_Ge
9b00: 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28  tBooleanFromObj(
9b10: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c  interp, objv[3],
9b20: 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20   &val) ) return 
9b30: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 72  TCL_ERROR;.    r
9b40: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
9b50: 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  te_collation(db,
9b60: 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c   "test_collate",
9b70: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c   SQLITE_UTF16LE,
9b80: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 76   .            (v
9b90: 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f 55 54 46  oid *)SQLITE_UTF
9ba0: 31 36 4c 45 2c 20 76 61 6c 3f 74 65 73 74 5f 63  16LE, val?test_c
9bb0: 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a  ollate_func:0);.
9bc0: 20 20 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d      if( TCL_OK!=
9bd0: 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72  Tcl_GetBooleanFr
9be0: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
9bf0: 6a 76 5b 34 5d 2c 20 26 76 61 6c 29 20 29 20 72  jv[4], &val) ) r
9c00: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
9c10: 0a 0a 20 20 20 20 70 56 61 6c 20 3d 20 73 71 6c  ..    pVal = sql
9c20: 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a  ite3ValueNew();.
9c30: 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65      sqlite3Value
9c40: 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c  SetStr(pVal, -1,
9c50: 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c   "test_collate",
9c60: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
9c70: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
9c80: 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65    sqlite3_create
9c90: 5f 63 6f 6c 6c 61 74 69 6f 6e 31 36 28 64 62 2c  _collation16(db,
9ca0: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78   sqlite3ValueTex
9cb0: 74 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55  t(pVal, SQLITE_U
9cc0: 54 46 31 36 4e 41 54 49 56 45 29 2c 20 0a 20 20  TF16NATIVE), .  
9cd0: 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 55          SQLITE_U
9ce0: 54 46 31 36 42 45 2c 20 28 76 6f 69 64 20 2a 29  TF16BE, (void *)
9cf0: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20  SQLITE_UTF16BE, 
9d00: 76 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61 74 65  val?test_collate
9d10: 5f 66 75 6e 63 3a 30 29 3b 0a 20 20 20 20 73 71  _func:0);.    sq
9d20: 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
9d30: 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  Val);.  }.  if( 
9d40: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
9d50: 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
9d60: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
9d70: 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20  ERROR;.  return 
9d80: 54 43 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f 61 72 67  TCL_OK;..bad_arg
9d90: 73 3a 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  s:.  Tcl_AppendR
9da0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
9db0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
9dc0: 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
9dd0: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
9de0: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
9df0: 30 29 2c 20 22 20 3c 44 42 3e 20 3c 75 74 66 38  0), " <DB> <utf8
9e00: 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66  > <utf16le> <utf
9e10: 31 36 62 65 3e 22 2c 20 30 29 3b 0a 20 20 72 65  16be>", 0);.  re
9e20: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
9e30: 7d 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  }../*.** When th
9e40: 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 6e 65 65 64  e collation need
9e50: 65 64 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 69  ed callback is i
9e60: 6e 76 6f 6b 65 64 2c 20 72 65 63 6f 72 64 20 74  nvoked, record t
9e70: 68 65 20 6e 61 6d 65 20 6f 66 20 0a 2a 2a 20 74  he name of .** t
9e80: 68 65 20 72 65 71 75 65 73 74 65 64 20 63 6f 6c  he requested col
9e90: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
9ea0: 68 65 72 65 2e 20 20 54 68 65 20 72 65 63 6f 72  here.  The recor
9eb0: 64 65 64 20 6e 61 6d 65 20 69 73 20 6c 69 6e 6b  ded name is link
9ec0: 65 64 0a 2a 2a 20 74 6f 20 61 20 54 43 4c 20 76  ed.** to a TCL v
9ed0: 61 72 69 61 62 6c 65 20 61 6e 64 20 75 73 65 64  ariable and used
9ee0: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
9ef0: 61 74 20 74 68 65 20 72 65 71 75 65 73 74 65 64  at the requested
9f00: 20 63 6f 6c 6c 61 74 69 6f 6e 0a 2a 2a 20 6e 61   collation.** na
9f10: 6d 65 20 69 73 20 63 6f 72 72 65 63 74 2e 0a 2a  me is correct..*
9f20: 2f 0a 73 74 61 74 69 63 20 63 68 61 72 20 7a 4e  /.static char zN
9f30: 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b 32  eededCollation[2
9f40: 30 30 5d 3b 0a 73 74 61 74 69 63 20 63 68 61 72  00];.static char
9f50: 20 2a 70 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74   *pzNeededCollat
9f60: 69 6f 6e 20 3d 20 7a 4e 65 65 64 65 64 43 6f 6c  ion = zNeededCol
9f70: 6c 61 74 69 6f 6e 3b 0a 0a 0a 2f 2a 0a 2a 2a 20  lation;.../*.** 
9f80: 43 61 6c 6c 65 64 20 77 68 65 6e 20 61 20 63 6f  Called when a co
9f90: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
9fa0: 20 69 73 20 6e 65 65 64 65 64 2e 20 20 52 65 67   is needed.  Reg
9fb0: 69 73 74 65 72 65 64 20 75 73 69 6e 67 0a 2a 2a  istered using.**
9fc0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69   sqlite3_collati
9fd0: 6f 6e 5f 6e 65 65 64 65 64 31 36 28 29 2e 0a 2a  on_needed16()..*
9fe0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 65  /.static void te
9ff0: 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65  st_collate_neede
a000: 64 5f 63 62 28 0a 20 20 76 6f 69 64 20 2a 70 43  d_cb(.  void *pC
a010: 74 78 2c 20 0a 20 20 73 71 6c 69 74 65 33 20 2a  tx, .  sqlite3 *
a020: 64 62 2c 0a 20 20 69 6e 74 20 65 54 65 78 74 52  db,.  int eTextR
a030: 65 70 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  ep,.  const void
a040: 20 2a 70 4e 61 6d 65 0a 29 7b 0a 20 20 69 6e 74   *pName.){.  int
a050: 20 65 6e 63 20 3d 20 64 62 2d 3e 65 6e 63 3b 0a   enc = db->enc;.
a060: 20 20 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20    int i;.  char 
a070: 2a 7a 3b 0a 20 20 66 6f 72 28 7a 20 3d 20 28 63  *z;.  for(z = (c
a080: 68 61 72 2a 29 70 4e 61 6d 65 2c 20 69 3d 30 3b  har*)pName, i=0;
a090: 20 2a 7a 20 7c 7c 20 7a 5b 31 5d 3b 20 7a 2b 2b   *z || z[1]; z++
a0a0: 29 7b 0a 20 20 20 20 69 66 28 20 2a 7a 20 29 20  ){.    if( *z ) 
a0b0: 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e  zNeededCollation
a0c0: 5b 69 2b 2b 5d 20 3d 20 2a 7a 3b 0a 20 20 7d 0a  [i++] = *z;.  }.
a0d0: 20 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69    zNeededCollati
a0e0: 6f 6e 5b 69 5d 20 3d 20 30 3b 0a 20 20 73 71 6c  on[i] = 0;.  sql
a0f0: 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c  ite3_create_coll
a100: 61 74 69 6f 6e 28 0a 20 20 20 20 20 20 64 62 2c  ation(.      db,
a110: 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c   "test_collate",
a120: 20 64 62 2d 3e 65 6e 63 2c 20 28 76 6f 69 64 20   db->enc, (void 
a130: 2a 29 65 6e 63 2c 20 74 65 73 74 5f 63 6f 6c 6c  *)enc, test_coll
a140: 61 74 65 5f 66 75 6e 63 29 3b 0a 7d 0a 0a 2f 2a  ate_func);.}../*
a150: 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74  .** Usage: add_t
a160: 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64  est_collate_need
a170: 65 64 20 44 42 0a 2a 2f 0a 73 74 61 74 69 63 20  ed DB.*/.static 
a180: 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65  int test_collate
a190: 5f 6e 65 65 64 65 64 28 0a 20 20 76 6f 69 64 20  _needed(.  void 
a1a0: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
a1b0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
a1c0: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
a1d0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
a1e0: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
a1f0: 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
a200: 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
a210: 3d 32 20 29 20 67 6f 74 6f 20 62 61 64 5f 61 72  =2 ) goto bad_ar
a220: 67 73 3b 0a 20 20 69 66 28 20 67 65 74 44 62 50  gs;.  if( getDbP
a230: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
a240: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
a250: 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
a260: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
a270: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
a280: 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31  ollation_needed1
a290: 36 28 64 62 2c 20 30 2c 20 74 65 73 74 5f 63 6f  6(db, 0, test_co
a2a0: 6c 6c 61 74 65 5f 6e 65 65 64 65 64 5f 63 62 29  llate_needed_cb)
a2b0: 3b 0a 20 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61  ;.  zNeededColla
a2c0: 74 69 6f 6e 5b 30 5d 20 3d 20 30 3b 0a 20 20 69  tion[0] = 0;.  i
a2d0: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
a2e0: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
a2f0: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
a300: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75  CL_ERROR;.  retu
a310: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f  rn TCL_OK;..bad_
a320: 61 72 67 73 3a 0a 20 20 54 63 6c 5f 57 72 6f 6e  args:.  Tcl_Wron
a330: 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
a340: 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42 22 29 3b   1, objv, "DB");
a350: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52  .  return TCL_ER
a360: 52 4f 52 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  ROR;.}.#endif /*
a370: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
a380: 31 36 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  16 */../*.** Usa
a390: 67 65 3a 20 61 64 64 5f 74 65 73 74 5f 66 75 6e  ge: add_test_fun
a3a0: 63 74 69 6f 6e 20 3c 64 62 20 70 74 72 3e 20 3c  ction <db ptr> <
a3b0: 75 74 66 38 3e 20 3c 75 74 66 31 36 6c 65 3e 20  utf8> <utf16le> 
a3c0: 3c 75 74 66 31 36 62 65 3e 0a 2a 2a 0a 2a 2a 20  <utf16be>.**.** 
a3d0: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  This function is
a3e0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68   used to test th
a3f0: 61 74 20 53 51 4c 69 74 65 20 73 65 6c 65 63 74  at SQLite select
a400: 73 20 74 68 65 20 63 6f 72 72 65 63 74 20 75 73  s the correct us
a410: 65 72 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 63  er.** function c
a420: 61 6c 6c 62 61 63 6b 20 77 68 65 6e 20 6d 75 6c  allback when mul
a430: 74 69 70 6c 65 20 76 65 72 73 69 6f 6e 73 20 28  tiple versions (
a440: 66 6f 72 20 64 69 66 66 65 72 65 6e 74 20 74 65  for different te
a450: 78 74 20 65 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a  xt encodings).**
a460: 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 2e 0a   are available..
a470: 2a 2a 0a 2a 2a 20 43 61 6c 6c 69 6e 67 20 74 68  **.** Calling th
a480: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 67 69 73  is routine regis
a490: 74 65 72 73 20 75 70 20 74 6f 20 74 68 72 65 65  ters up to three
a4a0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65   versions of the
a4b0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a   user function.*
a4c0: 2a 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  * "test_function
a4d0: 22 20 77 69 74 68 20 64 61 74 61 62 61 73 65 20  " with database 
a4e0: 68 61 6e 64 6c 65 20 3c 64 62 3e 2e 20 20 49 66  handle <db>.  If
a4f0: 20 74 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75   the second argu
a500: 6d 65 6e 74 20 69 73 0a 2a 2a 20 74 72 75 65 2c  ment is.** true,
a510: 20 74 68 65 6e 20 61 20 76 65 72 73 69 6f 6e 20   then a version 
a520: 6f 66 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  of test_function
a530: 20 69 73 20 72 65 67 69 73 74 65 72 65 64 20 66   is registered f
a540: 6f 72 20 55 54 46 2d 38 2c 20 69 66 20 74 68 65  or UTF-8, if the
a550: 0a 2a 2a 20 74 68 69 72 64 20 69 73 20 74 72 75  .** third is tru
a560: 65 2c 20 61 20 76 65 72 73 69 6f 6e 20 69 73 20  e, a version is 
a570: 72 65 67 69 73 74 65 72 65 64 20 66 6f 72 20 55  registered for U
a580: 54 46 2d 31 36 6c 65 2c 20 69 66 20 74 68 65 20  TF-16le, if the 
a590: 66 6f 75 72 74 68 20 69 73 0a 2a 2a 20 74 72 75  fourth is.** tru
a5a0: 65 2c 20 61 20 55 54 46 2d 31 36 62 65 20 76 65  e, a UTF-16be ve
a5b0: 72 73 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  rsion is availab
a5c0: 6c 65 2e 20 20 50 72 65 76 69 6f 75 73 20 76 65  le.  Previous ve
a5d0: 72 73 69 6f 6e 73 20 6f 66 0a 2a 2a 20 74 65 73  rsions of.** tes
a5e0: 74 5f 66 75 6e 63 74 69 6f 6e 20 61 72 65 20 64  t_function are d
a5f0: 65 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  eleted..**.** Th
a600: 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  e user function 
a610: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
a620: 79 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 6f  y calling the fo
a630: 6c 6c 6f 77 69 6e 67 20 54 43 4c 20 73 63 72 69  llowing TCL scri
a640: 70 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 22 74 65 73  pt:.**.**   "tes
a650: 74 5f 66 75 6e 63 74 69 6f 6e 20 3c 65 6e 63 3e  t_function <enc>
a660: 20 3c 61 72 67 3e 22 0a 2a 2a 0a 2a 2a 20 57 68   <arg>".**.** Wh
a670: 65 72 65 20 3c 65 6e 63 3e 20 69 73 20 6f 6e 65  ere <enc> is one
a680: 20 6f 66 20 55 54 46 2d 38 2c 20 55 54 46 2d 31   of UTF-8, UTF-1
a690: 36 4c 45 20 6f 72 20 55 54 46 31 36 42 45 2c 20  6LE or UTF16BE, 
a6a0: 61 6e 64 20 3c 61 72 67 3e 20 69 73 20 74 68 65  and <arg> is the
a6b0: 0a 2a 2a 20 73 69 6e 67 6c 65 20 61 72 67 75 6d  .** single argum
a6c0: 65 6e 74 20 70 61 73 73 65 64 20 74 6f 20 74 68  ent passed to th
a6d0: 65 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20  e SQL function. 
a6e0: 54 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  The value return
a6f0: 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 54 43 4c  ed by.** the TCL
a700: 20 73 63 72 69 70 74 20 69 73 20 75 73 65 64 20   script is used 
a710: 61 73 20 74 68 65 20 72 65 74 75 72 6e 20 76 61  as the return va
a720: 6c 75 65 20 6f 66 20 74 68 65 20 53 51 4c 20 66  lue of the SQL f
a730: 75 6e 63 74 69 6f 6e 2e 20 49 74 0a 2a 2a 20 69  unction. It.** i
a740: 73 20 70 61 73 73 65 64 20 74 6f 20 53 51 4c 69  s passed to SQLi
a750: 74 65 20 75 73 69 6e 67 20 55 54 46 2d 31 36 42  te using UTF-16B
a760: 45 20 66 6f 72 20 61 20 55 54 46 2d 38 20 74 65  E for a UTF-8 te
a770: 73 74 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20 55  st_function(), U
a780: 54 46 2d 38 0a 2a 2a 20 66 6f 72 20 61 20 55 54  TF-8.** for a UT
a790: 46 2d 31 36 4c 45 20 74 65 73 74 5f 66 75 6e 63  F-16LE test_func
a7a0: 74 69 6f 6e 28 29 2c 20 61 6e 64 20 55 54 46 2d  tion(), and UTF-
a7b0: 31 36 4c 45 20 66 6f 72 20 61 6e 20 69 6d 70 6c  16LE for an impl
a7c0: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 68 61 74 0a  ementation that.
a7d0: 2a 2a 20 70 72 65 66 65 72 73 20 55 54 46 2d 31  ** prefers UTF-1
a7e0: 36 42 45 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  6BE..*/.#ifndef 
a7f0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
a800: 36 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 65  6.static void te
a810: 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 38  st_function_utf8
a820: 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (.  sqlite3_cont
a830: 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 69 6e  ext *pCtx, .  in
a840: 74 20 6e 41 72 67 2c 0a 20 20 73 71 6c 69 74 65  t nArg,.  sqlite
a850: 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29  3_value **argv.)
a860: 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  {.  Tcl_Interp *
a870: 69 6e 74 65 72 70 3b 0a 20 20 54 63 6c 5f 4f 62  interp;.  Tcl_Ob
a880: 6a 20 2a 70 58 3b 0a 20 20 73 71 6c 69 74 65 33  j *pX;.  sqlite3
a890: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20  _value *pVal;.  
a8a0: 69 6e 74 65 72 70 20 3d 20 28 54 63 6c 5f 49 6e  interp = (Tcl_In
a8b0: 74 65 72 70 20 2a 29 73 71 6c 69 74 65 33 5f 75  terp *)sqlite3_u
a8c0: 73 65 72 5f 64 61 74 61 28 70 43 74 78 29 3b 0a  ser_data(pCtx);.
a8d0: 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74    pX = Tcl_NewSt
a8e0: 72 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f 66 75  ringObj("test_fu
a8f0: 6e 63 74 69 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20  nction", -1);.  
a900: 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74  Tcl_IncrRefCount
a910: 28 70 58 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74  (pX);.  Tcl_List
a920: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
a930: 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 54 63 6c  (interp, pX, Tcl
a940: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55  _NewStringObj("U
a950: 54 46 2d 38 22 2c 20 2d 31 29 29 3b 0a 20 20 54  TF-8", -1));.  T
a960: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
a970: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
a980: 70 58 2c 20 0a 20 20 20 20 20 20 54 63 6c 5f 4e  pX, .      Tcl_N
a990: 65 77 53 74 72 69 6e 67 4f 62 6a 28 28 63 68 61  ewStringObj((cha
a9a0: 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
a9b0: 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c 20  _text(argv[0]), 
a9c0: 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 45 76 61 6c  -1));.  Tcl_Eval
a9d0: 4f 62 6a 45 78 28 69 6e 74 65 72 70 2c 20 70 58  ObjEx(interp, pX
a9e0: 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72  , 0);.  Tcl_Decr
a9f0: 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20  RefCount(pX);.  
aa00: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
aa10: 65 78 74 28 70 43 74 78 2c 20 54 63 6c 5f 47 65  ext(pCtx, Tcl_Ge
aa20: 74 53 74 72 69 6e 67 52 65 73 75 6c 74 28 69 6e  tStringResult(in
aa30: 74 65 72 70 29 2c 20 2d 31 2c 20 53 51 4c 49 54  terp), -1, SQLIT
aa40: 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  E_TRANSIENT);.  
aa50: 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61  pVal = sqlite3Va
aa60: 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69  lueNew();.  sqli
aa70: 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70  te3ValueSetStr(p
aa80: 56 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f 47 65 74  Val, -1, Tcl_Get
aa90: 53 74 72 69 6e 67 52 65 73 75 6c 74 28 69 6e 74  StringResult(int
aaa0: 65 72 70 29 2c 20 0a 20 20 20 20 20 20 53 51 4c  erp), .      SQL
aab0: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
aac0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69  _STATIC);.  sqli
aad0: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31  te3_result_text1
aae0: 36 62 65 28 70 43 74 78 2c 20 73 71 6c 69 74 65  6be(pCtx, sqlite
aaf0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 62 65  3_value_text16be
ab00: 28 70 56 61 6c 29 2c 0a 20 20 20 20 20 20 2d 31  (pVal),.      -1
ab10: 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
ab20: 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61  NT);.  sqlite3Va
ab30: 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 7d  lueFree(pVal);.}
ab40: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 65 73  .static void tes
ab50: 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36  t_function_utf16
ab60: 6c 65 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  le(.  sqlite3_co
ab70: 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a 20 20  ntext *pCtx, .  
ab80: 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73 71 6c 69  int nArg,.  sqli
ab90: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76  te3_value **argv
aba0: 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  .){.  Tcl_Interp
abb0: 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63 6c 5f   *interp;.  Tcl_
abc0: 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71 6c 69 74  Obj *pX;.  sqlit
abd0: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a  e3_value *pVal;.
abe0: 20 20 69 6e 74 65 72 70 20 3d 20 28 54 63 6c 5f    interp = (Tcl_
abf0: 49 6e 74 65 72 70 20 2a 29 73 71 6c 69 74 65 33  Interp *)sqlite3
ac00: 5f 75 73 65 72 5f 64 61 74 61 28 70 43 74 78 29  _user_data(pCtx)
ac10: 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77  ;.  pX = Tcl_New
ac20: 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f  StringObj("test_
ac30: 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31 29 3b 0a  function", -1);.
ac40: 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75    Tcl_IncrRefCou
ac50: 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f 4c 69  nt(pX);.  Tcl_Li
ac60: 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
ac70: 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 54  nt(interp, pX, T
ac80: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
ac90: 22 55 54 46 2d 31 36 4c 45 22 2c 20 2d 31 29 29  "UTF-16LE", -1))
aca0: 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
acb0: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
acc0: 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20 20 20  erp, pX, .      
acd0: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
ace0: 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  ((char*)sqlite3_
acf0: 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b  value_text(argv[
ad00: 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c  0]), -1));.  Tcl
ad10: 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74 65 72  _EvalObjEx(inter
ad20: 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54 63 6c  p, pX, 0);.  Tcl
ad30: 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 58  _DecrRefCount(pX
ad40: 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69  );.  pVal = sqli
ad50: 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20  te3ValueNew();. 
ad60: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
ad70: 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 54 63  Str(pVal, -1, Tc
ad80: 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73 75 6c  l_GetStringResul
ad90: 74 28 69 6e 74 65 72 70 29 2c 20 0a 20 20 20 20  t(interp), .    
ada0: 20 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53    SQLITE_UTF8, S
adb0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
adc0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
add0: 74 65 78 74 28 70 43 74 78 2c 28 63 68 61 72 2a  text(pCtx,(char*
ade0: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
adf0: 65 78 74 28 70 56 61 6c 29 2c 2d 31 2c 53 51 4c  ext(pVal),-1,SQL
ae00: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
ae10: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72    sqlite3ValueFr
ae20: 65 65 28 70 56 61 6c 29 3b 0a 7d 0a 73 74 61 74  ee(pVal);.}.stat
ae30: 69 63 20 76 6f 69 64 20 74 65 73 74 5f 66 75 6e  ic void test_fun
ae40: 63 74 69 6f 6e 5f 75 74 66 31 36 62 65 28 0a 20  ction_utf16be(. 
ae50: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
ae60: 20 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e   *pCtx, .  int n
ae70: 41 72 67 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76  Arg,.  sqlite3_v
ae80: 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20  alue **argv.){. 
ae90: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
aea0: 65 72 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  erp;.  Tcl_Obj *
aeb0: 70 58 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  pX;.  sqlite3_va
aec0: 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74  lue *pVal;.  int
aed0: 65 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74 65 72  erp = (Tcl_Inter
aee0: 70 20 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72  p *)sqlite3_user
aef0: 5f 64 61 74 61 28 70 43 74 78 29 3b 0a 20 20 70  _data(pCtx);.  p
af00: 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  X = Tcl_NewStrin
af10: 67 4f 62 6a 28 22 74 65 73 74 5f 66 75 6e 63 74  gObj("test_funct
af20: 69 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c  ion", -1);.  Tcl
af30: 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 58  _IncrRefCount(pX
af40: 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  );.  Tcl_ListObj
af50: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
af60: 74 65 72 70 2c 20 70 58 2c 20 54 63 6c 5f 4e 65  terp, pX, Tcl_Ne
af70: 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d  wStringObj("UTF-
af80: 31 36 42 45 22 2c 20 2d 31 29 29 3b 0a 20 20 54  16BE", -1));.  T
af90: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
afa0: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
afb0: 70 58 2c 20 0a 20 20 20 20 20 20 54 63 6c 5f 4e  pX, .      Tcl_N
afc0: 65 77 53 74 72 69 6e 67 4f 62 6a 28 28 63 68 61  ewStringObj((cha
afd0: 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
afe0: 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c 20  _text(argv[0]), 
aff0: 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 45 76 61 6c  -1));.  Tcl_Eval
b000: 4f 62 6a 45 78 28 69 6e 74 65 72 70 2c 20 70 58  ObjEx(interp, pX
b010: 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72  , 0);.  Tcl_Decr
b020: 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20  RefCount(pX);.  
b030: 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61  pVal = sqlite3Va
b040: 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69  lueNew();.  sqli
b050: 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70  te3ValueSetStr(p
b060: 56 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f 47 65 74  Val, -1, Tcl_Get
b070: 53 74 72 69 6e 67 52 65 73 75 6c 74 28 69 6e 74  StringResult(int
b080: 65 72 70 29 2c 20 0a 20 20 20 20 20 20 53 51 4c  erp), .      SQL
b090: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
b0a0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69  _STATIC);.  sqli
b0b0: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31  te3_result_text1
b0c0: 36 6c 65 28 70 43 74 78 2c 20 73 71 6c 69 74 65  6le(pCtx, sqlite
b0d0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 6c 65  3_value_text16le
b0e0: 28 70 56 61 6c 29 2c 0a 20 20 20 20 20 20 2d 31  (pVal),.      -1
b0f0: 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
b100: 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61  NT);.  sqlite3Va
b110: 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 7d  lueFree(pVal);.}
b120: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
b130: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
b140: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
b150: 66 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64  function(.  void
b160: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
b170: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
b180: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
b190: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
b1a0: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e  T objv[].){.#ifn
b1b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
b1c0: 55 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33 20  UTF16.  sqlite3 
b1d0: 2a 64 62 3b 0a 20 20 69 6e 74 20 76 61 6c 3b 0a  *db;.  int val;.
b1e0: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29  .  if( objc!=5 )
b1f0: 20 67 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a   goto bad_args;.
b200: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
b210: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
b220: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
b230: 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ), &db) ) return
b240: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69   TCL_ERROR;..  i
b250: 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47  f( TCL_OK!=Tcl_G
b260: 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a  etBooleanFromObj
b270: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
b280: 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e  , &val) ) return
b290: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
b2a0: 28 20 76 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c  ( val ){.    sql
b2b0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
b2c0: 74 69 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 66  tion(db, "test_f
b2d0: 75 6e 63 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c  unction", 1, SQL
b2e0: 49 54 45 5f 55 54 46 38 2c 20 0a 20 20 20 20 20  ITE_UTF8, .     
b2f0: 20 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f     interp, test_
b300: 66 75 6e 63 74 69 6f 6e 5f 75 74 66 38 2c 20 30  function_utf8, 0
b310: 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  , 0);.  }.  if( 
b320: 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42  TCL_OK!=Tcl_GetB
b330: 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e  ooleanFromObj(in
b340: 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26  terp, objv[3], &
b350: 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  val) ) return TC
b360: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76  L_ERROR;.  if( v
b370: 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  al ){.    sqlite
b380: 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
b390: 6e 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63  n(db, "test_func
b3a0: 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45  tion", 1, SQLITE
b3b0: 5f 55 54 46 31 36 4c 45 2c 20 0a 20 20 20 20 20  _UTF16LE, .     
b3c0: 20 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f     interp, test_
b3d0: 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 6c 65  function_utf16le
b3e0: 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69  , 0, 0);.  }.  i
b3f0: 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47  f( TCL_OK!=Tcl_G
b400: 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a  etBooleanFromObj
b410: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d  (interp, objv[4]
b420: 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e  , &val) ) return
b430: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
b440: 28 20 76 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c  ( val ){.    sql
b450: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
b460: 74 69 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 66  tion(db, "test_f
b470: 75 6e 63 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c  unction", 1, SQL
b480: 49 54 45 5f 55 54 46 31 36 42 45 2c 20 0a 20 20  ITE_UTF16BE, .  
b490: 20 20 20 20 20 20 69 6e 74 65 72 70 2c 20 74 65        interp, te
b4a0: 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31  st_function_utf1
b4b0: 36 62 65 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a  6be, 0, 0);.  }.
b4c0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
b4d0: 3b 0a 62 61 64 5f 61 72 67 73 3a 0a 20 20 54 63  ;.bad_args:.  Tc
b4e0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
b4f0: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
b500: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
b510: 5c 22 22 2c 0a 20 20 20 20 20 20 54 63 6c 5f 47  \"",.      Tcl_G
b520: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
b530: 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c  objv[0], 0), " <
b540: 44 42 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31  DB> <utf8> <utf1
b550: 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e 22 2c  6le> <utf16be>",
b560: 20 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53   0);.#endif /* S
b570: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
b580: 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   */.  return TCL
b590: 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  _ERROR;.}../*.**
b5a0: 20 55 73 61 67 65 3a 20 20 20 20 20 20 20 20 20   Usage:         
b5b0: 74 65 73 74 5f 65 72 72 73 74 72 20 3c 65 72 72  test_errstr <err
b5c0: 20 63 6f 64 65 3e 0a 2a 2a 0a 2a 2a 20 54 65 73   code>.**.** Tes
b5d0: 74 20 74 68 61 74 20 74 68 65 20 65 6e 67 6c 69  t that the engli
b5e0: 73 68 20 6c 61 6e 67 75 61 67 65 20 73 74 72 69  sh language stri
b5f0: 6e 67 20 65 71 75 69 76 61 6c 65 6e 74 73 20 66  ng equivalents f
b600: 6f 72 20 73 71 6c 69 74 65 20 65 72 72 6f 72 20  or sqlite error 
b610: 63 6f 64 65 73 0a 2a 2a 20 61 72 65 20 73 61 6e  codes.** are san
b620: 65 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72  e. The parameter
b630: 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72   is an integer r
b640: 65 70 72 65 73 65 6e 74 69 6e 67 20 61 6e 20 73  epresenting an s
b650: 71 6c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65  qlite error code
b660: 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20  ..** The result 
b670: 69 73 20 61 20 6c 69 73 74 20 6f 66 20 74 77 6f  is a list of two
b680: 20 65 6c 65 6d 65 6e 74 73 2c 20 74 68 65 20 73   elements, the s
b690: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
b6a0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 65  tion of the.** e
b6b0: 72 72 6f 72 20 63 6f 64 65 20 61 6e 64 20 74 68  rror code and th
b6c0: 65 20 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61  e english langua
b6d0: 67 65 20 65 78 70 6c 61 6e 61 74 69 6f 6e 2e 0a  ge explanation..
b6e0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
b6f0: 73 74 5f 65 72 72 73 74 72 28 0a 20 20 76 6f 69  st_errstr(.  voi
b700: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
b710: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
b720: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
b730: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
b740: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63  ST objv[].){.  c
b750: 68 61 72 20 2a 7a 43 6f 64 65 3b 0a 20 20 69 6e  har *zCode;.  in
b760: 74 20 69 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21  t i;.  if( objc!
b770: 3d 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =1 ){.    Tcl_Wr
b780: 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
b790: 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3c 65 72  p, 1, objv, "<er
b7a0: 72 6f 72 20 63 6f 64 65 3e 22 29 3b 0a 20 20 7d  ror code>");.  }
b7b0: 0a 0a 20 20 7a 43 6f 64 65 20 3d 20 54 63 6c 5f  ..  zCode = Tcl_
b7c0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
b7d0: 5d 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  ]);.  for(i=0; i
b7e0: 3c 32 30 30 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  <200; i++){.    
b7f0: 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 65 72  if( 0==strcmp(er
b800: 72 6f 72 4e 61 6d 65 28 69 29 2c 20 7a 43 6f 64  rorName(i), zCod
b810: 65 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  e) ) break;.  }.
b820: 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
b830: 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29  interp, (char *)
b840: 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 29  sqlite3ErrStr(i)
b850: 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
b860: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
b870: 55 73 61 67 65 3a 20 20 20 20 62 72 65 61 6b 70  Usage:    breakp
b880: 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  oint.**.** This 
b890: 72 6f 75 74 69 6e 65 20 65 78 69 73 74 73 20 66  routine exists f
b8a0: 6f 72 20 6f 6e 65 20 70 75 72 70 6f 73 65 20 2d  or one purpose -
b8b0: 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 70 6c   to provide a pl
b8c0: 61 63 65 20 74 6f 20 70 75 74 20 61 0a 2a 2a 20  ace to put a.** 
b8d0: 62 72 65 61 6b 70 6f 69 6e 74 20 77 69 74 68 20  breakpoint with 
b8e0: 47 44 42 20 74 68 61 74 20 63 61 6e 20 62 65 20  GDB that can be 
b8f0: 74 72 69 67 67 65 72 65 64 20 75 73 69 6e 67 20  triggered using 
b900: 54 43 4c 20 63 6f 64 65 2e 20 20 54 68 65 20 75  TCL code.  The u
b910: 73 65 0a 2a 2a 20 66 6f 72 20 74 68 69 73 20 69  se.** for this i
b920: 73 20 77 68 65 6e 20 61 20 70 61 72 74 69 63 75  s when a particu
b930: 6c 61 72 20 74 65 73 74 20 66 61 69 6c 73 20 6f  lar test fails o
b940: 6e 20 28 73 61 79 29 20 74 68 65 20 31 34 38 35  n (say) the 1485
b950: 74 68 20 69 74 65 72 61 74 69 6f 6e 2e 0a 2a 2a  th iteration..**
b960: 20 49 6e 20 74 68 65 20 54 43 4c 20 74 65 73 74   In the TCL test
b970: 20 73 63 72 69 70 74 2c 20 77 65 20 63 61 6e 20   script, we can 
b980: 61 64 64 20 63 6f 64 65 20 6c 69 6b 65 20 74 68  add code like th
b990: 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 69 66  is:.**.**     if
b9a0: 20 7b 24 69 3d 3d 31 34 38 35 7d 20 62 72 65 61   {$i==1485} brea
b9b0: 6b 70 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 65  kpoint.**.** The
b9c0: 6e 20 72 75 6e 20 74 65 73 74 66 69 78 74 75 72  n run testfixtur
b9d0: 65 20 69 6e 20 74 68 65 20 64 65 62 75 67 67 65  e in the debugge
b9e0: 72 20 61 6e 64 20 77 61 69 74 20 66 6f 72 20 74  r and wait for t
b9f0: 68 65 20 62 72 65 61 6b 70 6f 69 6e 74 20 74 6f  he breakpoint to
ba00: 0a 2a 2a 20 66 69 72 65 2e 20 20 54 68 65 6e 20  .** fire.  Then 
ba10: 61 64 64 69 74 69 6f 6e 61 6c 20 62 72 65 61 6b  additional break
ba20: 70 6f 69 6e 74 73 20 63 61 6e 20 62 65 20 73 65  points can be se
ba30: 74 20 74 6f 20 74 72 61 63 65 20 64 6f 77 6e 20  t to trace down 
ba40: 74 68 65 20 62 75 67 2e 0a 2a 2f 0a 73 74 61 74  the bug..*/.stat
ba50: 69 63 20 69 6e 74 20 74 65 73 74 5f 62 72 65 61  ic int test_brea
ba60: 6b 70 6f 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a  kpoint(.  void *
ba70: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
ba80: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
ba90: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
baa0: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
bab0: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
bac0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
bad0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
bae0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
baf0: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
bb00: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
bb10: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
bb20: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
bb30: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
bb40: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20  ;         /* Do 
bb50: 6e 6f 74 68 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f 2a  nothing */.}../*
bb60: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c  .** Usage:   sql
bb70: 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 20 53  ite3_bind_int  S
bb80: 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a  TMT N VALUE.**.*
bb90: 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74  * Test the sqlit
bba0: 65 33 5f 62 69 6e 64 5f 69 6e 74 20 69 6e 74 65  e3_bind_int inte
bbb0: 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20  rface.  STMT is 
bbc0: 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
bbd0: 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68  ment..** N is th
bbe0: 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c  e index of a wil
bbf0: 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65  dcard in the pre
bc00: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
bc10: 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a    This command.*
bc20: 2a 20 62 69 6e 64 73 20 61 20 33 32 2d 62 69 74  * binds a 32-bit
bc30: 20 69 6e 74 65 67 65 72 20 56 41 4c 55 45 20 74   integer VALUE t
bc40: 6f 20 74 68 61 74 20 77 69 6c 64 63 61 72 64 2e  o that wildcard.
bc50: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
bc60: 65 73 74 5f 62 69 6e 64 5f 69 6e 74 28 0a 20 20  est_bind_int(.  
bc70: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
bc80: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
bc90: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
bca0: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
bcb0: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
bcc0: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
bcd0: 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78  pStmt;.  int idx
bce0: 3b 0a 20 20 69 6e 74 20 76 61 6c 75 65 3b 0a 20  ;.  int value;. 
bcf0: 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
bd00: 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54  objc!=4 ){.    T
bd10: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
bd20: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
bd30: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
bd40: 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
bd50: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
bd60: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
bd70: 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c  " STMT N VALUE",
bd80: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
bd90: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
bda0: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
bdb0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
bdc0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
bdd0: 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
bde0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
bdf0: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
be00: 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
be10: 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20   objv[2], &idx) 
be20: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
be30: 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
be40: 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
be50: 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61  rp, objv[3], &va
be60: 6c 75 65 29 20 29 20 72 65 74 75 72 6e 20 54 43  lue) ) return TC
be70: 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d  L_ERROR;..  rc =
be80: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
be90: 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61  t(pStmt, idx, va
bea0: 6c 75 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  lue);.  if( sqli
beb0: 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
bec0: 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28  nterp, StmtToDb(
bed0: 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65  pStmt), rc) ) re
bee0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
bef0: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
bf00: 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72  _OK ){.    retur
bf10: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
bf20: 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ..  return TCL_O
bf30: 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  K;.}.../*.** Usa
bf40: 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ge:   sqlite3_bi
bf50: 6e 64 5f 69 6e 74 36 34 20 20 53 54 4d 54 20 4e  nd_int64  STMT N
bf60: 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73   VALUE.**.** Tes
bf70: 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69  t the sqlite3_bi
bf80: 6e 64 5f 69 6e 74 36 34 20 69 6e 74 65 72 66 61  nd_int64 interfa
bf90: 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70  ce.  STMT is a p
bfa0: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
bfb0: 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69  t..** N is the i
bfc0: 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61  ndex of a wildca
bfd0: 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  rd in the prepar
bfe0: 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  ed statement.  T
bff0: 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62  his command.** b
c000: 69 6e 64 73 20 61 20 36 34 2d 62 69 74 20 69 6e  inds a 64-bit in
c010: 74 65 67 65 72 20 56 41 4c 55 45 20 74 6f 20 74  teger VALUE to t
c020: 68 61 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f  hat wildcard..*/
c030: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
c040: 5f 62 69 6e 64 5f 69 6e 74 36 34 28 0a 20 20 76  _bind_int64(.  v
c050: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
c060: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
c070: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
c080: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
c090: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
c0a0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
c0b0: 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b  Stmt;.  int idx;
c0c0: 0a 20 20 69 36 34 20 76 61 6c 75 65 3b 0a 20 20  .  i64 value;.  
c0d0: 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
c0e0: 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63  bjc!=4 ){.    Tc
c0f0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
c100: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
c110: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
c120: 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c  \"",.        Tcl
c130: 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
c140: 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
c150: 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20   STMT N VALUE", 
c160: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
c170: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
c180: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
c190: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
c1a0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
c1b0: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
c1c0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
c1d0: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
c1e0: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
c1f0: 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29  objv[2], &idx) )
c200: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
c210: 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
c220: 57 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  WideIntFromObj(i
c230: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20  nterp, objv[3], 
c240: 26 76 61 6c 75 65 29 20 29 20 72 65 74 75 72 6e  &value) ) return
c250: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
c260: 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
c270: 5f 69 6e 74 36 34 28 70 53 74 6d 74 2c 20 69 64  _int64(pStmt, id
c280: 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69 66 28  x, value);.  if(
c290: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
c2a0: 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74  ode(interp, Stmt
c2b0: 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29  ToDb(pStmt), rc)
c2c0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
c2d0: 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  ROR;.  if( rc!=S
c2e0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
c2f0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
c300: 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20  ;.  }..  return 
c310: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  TCL_OK;.}.../*.*
c320: 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
c330: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 20 20  e3_bind_double  
c340: 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a  STMT N VALUE.**.
c350: 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69  ** Test the sqli
c360: 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 20  te3_bind_double 
c370: 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54  interface.  STMT
c380: 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73   is a prepared s
c390: 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69  tatement..** N i
c3a0: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
c3b0: 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65   wildcard in the
c3c0: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
c3d0: 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61  ent.  This comma
c3e0: 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 36 34  nd.** binds a 64
c3f0: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 56 41 4c  -bit integer VAL
c400: 55 45 20 74 6f 20 74 68 61 74 20 77 69 6c 64 63  UE to that wildc
c410: 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ard..*/.static i
c420: 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 64 6f 75  nt test_bind_dou
c430: 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ble(.  void * cl
c440: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
c450: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
c460: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
c470: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
c480: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
c490: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
c4a0: 69 6e 74 20 69 64 78 3b 0a 20 20 64 6f 75 62 6c  int idx;.  doubl
c4b0: 65 20 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72  e value;.  int r
c4c0: 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
c4d0: 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  4 ){.    Tcl_App
c4e0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
c4f0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
c500: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
c510: 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53          Tcl_GetS
c520: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
c530: 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54  v[0], 0), " STMT
c540: 20 4e 20 56 41 4c 55 45 22 2c 20 30 29 3b 0a 20   N VALUE", 0);. 
c550: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
c560: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
c570: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
c580: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
c590: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
c5a0: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
c5b0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
c5c0: 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
c5d0: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
c5e0: 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74 75  2], &idx) ) retu
c5f0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
c600: 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c  if( Tcl_GetDoubl
c610: 65 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  eFromObj(interp,
c620: 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75 65   objv[3], &value
c630: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
c640: 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71  RROR;..  rc = sq
c650: 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
c660: 65 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61  e(pStmt, idx, va
c670: 6c 75 65 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  lue);.  if( sqli
c680: 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
c690: 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28  nterp, StmtToDb(
c6a0: 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65  pStmt), rc) ) re
c6b0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
c6c0: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
c6d0: 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72  _OK ){.    retur
c6e0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
c6f0: 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ..  return TCL_O
c700: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
c710: 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  e:   sqlite3_bin
c720: 64 5f 6e 75 6c 6c 20 20 53 54 4d 54 20 4e 0a 2a  d_null  STMT N.*
c730: 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71  *.** Test the sq
c740: 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20  lite3_bind_null 
c750: 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54  interface.  STMT
c760: 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73   is a prepared s
c770: 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69  tatement..** N i
c780: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
c790: 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65   wildcard in the
c7a0: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
c7b0: 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61  ent.  This comma
c7c0: 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 4e 55  nd.** binds a NU
c7d0: 4c 4c 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61  LL to the wildca
c7e0: 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  rd..*/.static in
c7f0: 74 20 74 65 73 74 5f 62 69 6e 64 5f 6e 75 6c 6c  t test_bind_null
c800: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
c810: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
c820: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
c830: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
c840: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
c850: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
c860: 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74  mt *pStmt;.  int
c870: 20 69 64 78 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   idx;.  int rc;.
c880: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
c890: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
c8a0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
c8b0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
c8c0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
c8d0: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
c8e0: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
c8f0: 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 22  ], 0), " STMT N"
c900: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
c910: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
c920: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
c930: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
c940: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
c950: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
c960: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
c970: 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
c980: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
c990: 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29  , objv[2], &idx)
c9a0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
c9b0: 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
c9c0: 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70  ite3_bind_null(p
c9d0: 53 74 6d 74 2c 20 69 64 78 29 3b 0a 20 20 69 66  Stmt, idx);.  if
c9e0: 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
c9f0: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d  Code(interp, Stm
ca00: 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63  tToDb(pStmt), rc
ca10: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
ca20: 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d  RROR;.  if( rc!=
ca30: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
ca40: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
ca50: 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  R;.  }..  return
ca60: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
ca70: 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
ca80: 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 20 53 54  e3_bind_text  ST
ca90: 4d 54 20 4e 20 53 54 52 49 4e 47 20 42 59 54 45  MT N STRING BYTE
caa0: 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65  S.**.** Test the
cab0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
cac0: 78 74 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53  xt interface.  S
cad0: 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65  TMT is a prepare
cae0: 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  d statement..** 
caf0: 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  N is the index o
cb00: 66 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20  f a wildcard in 
cb10: 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
cb20: 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f  tement.  This co
cb30: 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61  mmand.** binds a
cb40: 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 53 54   UTF-8 string ST
cb50: 52 49 4e 47 20 74 6f 20 74 68 65 20 77 69 6c 64  RING to the wild
cb60: 63 61 72 64 2e 20 20 54 68 65 20 73 74 72 69 6e  card.  The strin
cb70: 67 20 69 73 20 42 59 54 45 53 20 62 79 74 65 73  g is BYTES bytes
cb80: 0a 2a 2a 20 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61  .** long..*/.sta
cb90: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
cba0: 64 5f 74 65 78 74 28 0a 20 20 76 6f 69 64 20 2a  d_text(.  void *
cbb0: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
cbc0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
cbd0: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
cbe0: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
cbf0: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
cc00: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
cc10: 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e  .  int idx;.  in
cc20: 74 20 62 79 74 65 73 3b 0a 20 20 63 68 61 72 20  t bytes;.  char 
cc30: 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63  *value;.  int rc
cc40: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35  ;..  if( objc!=5
cc50: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
cc60: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
cc70: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
cc80: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
cc90: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
cca0: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
ccb0: 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20  [0], 0), " STMT 
ccc0: 4e 20 56 41 4c 55 45 20 42 59 54 45 53 22 2c 20  N VALUE BYTES", 
ccd0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
cce0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
ccf0: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
cd00: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
cd10: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
cd20: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
cd30: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
cd40: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
cd50: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
cd60: 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29  objv[2], &idx) )
cd70: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
cd80: 52 3b 0a 20 20 76 61 6c 75 65 20 3d 20 54 63 6c  R;.  value = Tcl
cd90: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
cda0: 33 5d 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  3]);.  if( Tcl_G
cdb0: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
cdc0: 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 62  erp, objv[4], &b
cdd0: 79 74 65 73 29 20 29 20 72 65 74 75 72 6e 20 54  ytes) ) return T
cde0: 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20  CL_ERROR;..  rc 
cdf0: 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  = sqlite3_bind_t
ce00: 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20  ext(pStmt, idx, 
ce10: 76 61 6c 75 65 2c 20 62 79 74 65 73 2c 20 53 51  value, bytes, SQ
ce20: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
ce30: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
ce40: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
ce50: 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74  , StmtToDb(pStmt
ce60: 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  ), rc) ) return 
ce70: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
ce80: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
ce90: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
cea0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73  Result(interp, s
ceb0: 71 6c 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e  qlite3TestErrorN
cec0: 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 20  ame(rc), 0);.   
ced0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
cee0: 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  R;.  }..  return
cef0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
cf00: 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
cf10: 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 20  e3_bind_text16  
cf20: 53 54 4d 54 20 4e 20 53 54 52 49 4e 47 20 42 59  STMT N STRING BY
cf30: 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74  TES.**.** Test t
cf40: 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  he sqlite3_bind_
cf50: 74 65 78 74 31 36 20 69 6e 74 65 72 66 61 63 65  text16 interface
cf60: 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65  .  STMT is a pre
cf70: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
cf80: 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64  .** N is the ind
cf90: 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64  ex of a wildcard
cfa0: 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
cfb0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69   statement.  Thi
cfc0: 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e  s command.** bin
cfd0: 64 73 20 61 20 55 54 46 2d 31 36 20 73 74 72 69  ds a UTF-16 stri
cfe0: 6e 67 20 53 54 52 49 4e 47 20 74 6f 20 74 68 65  ng STRING to the
cff0: 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20   wildcard.  The 
d000: 73 74 72 69 6e 67 20 69 73 20 42 59 54 45 53 20  string is BYTES 
d010: 62 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e 0a 2a  bytes.** long..*
d020: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
d030: 74 5f 62 69 6e 64 5f 74 65 78 74 31 36 28 0a 20  t_bind_text16(. 
d040: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
d050: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
d060: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
d070: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
d080: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
d090: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d0a0: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c  OMIT_UTF16.  sql
d0b0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
d0c0: 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69  ;.  int idx;.  i
d0d0: 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 68 61 72  nt bytes;.  char
d0e0: 20 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72   *value;.  int r
d0f0: 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
d100: 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  5 ){.    Tcl_App
d110: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
d120: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
d130: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
d140: 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53          Tcl_GetS
d150: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
d160: 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54  v[0], 0), " STMT
d170: 20 4e 20 56 41 4c 55 45 20 42 59 54 45 53 22 2c   N VALUE BYTES",
d180: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
d190: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
d1a0: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
d1b0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
d1c0: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
d1d0: 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
d1e0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
d1f0: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
d200: 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
d210: 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20   objv[2], &idx) 
d220: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
d230: 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d 20 28 63  OR;.  value = (c
d240: 68 61 72 2a 29 54 63 6c 5f 47 65 74 42 79 74 65  har*)Tcl_GetByte
d250: 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a  ArrayFromObj(obj
d260: 76 5b 33 5d 2c 20 30 29 3b 0a 20 20 69 66 28 20  v[3], 0);.  if( 
d270: 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
d280: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34  j(interp, objv[4
d290: 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74  ], &bytes) ) ret
d2a0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
d2b0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62    rc = sqlite3_b
d2c0: 69 6e 64 5f 74 65 78 74 31 36 28 70 53 74 6d 74  ind_text16(pStmt
d2d0: 2c 20 69 64 78 2c 20 28 76 6f 69 64 20 2a 29 76  , idx, (void *)v
d2e0: 61 6c 75 65 2c 20 62 79 74 65 73 2c 20 53 51 4c  alue, bytes, SQL
d2f0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
d300: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
d310: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
d320: 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29   StmtToDb(pStmt)
d330: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
d340: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
d350: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
d360: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
d370: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 23 65 6e 64  ERROR;.  }..#end
d380: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
d390: 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74  T_UTF16 */.  ret
d3a0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
d3b0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
d3c0: 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 20  lite3_bind_blob 
d3d0: 20 53 54 4d 54 20 4e 20 44 41 54 41 20 42 59 54   STMT N DATA BYT
d3e0: 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  ES.**.** Test th
d3f0: 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62  e sqlite3_bind_b
d400: 6c 6f 62 20 69 6e 74 65 72 66 61 63 65 2e 20 20  lob interface.  
d410: 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72  STMT is a prepar
d420: 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  ed statement..**
d430: 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78 20   N is the index 
d440: 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e  of a wildcard in
d450: 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
d460: 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63  atement.  This c
d470: 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20  ommand.** binds 
d480: 61 20 42 4c 4f 42 20 74 6f 20 74 68 65 20 77 69  a BLOB to the wi
d490: 6c 64 63 61 72 64 2e 20 20 54 68 65 20 42 4c 4f  ldcard.  The BLO
d4a0: 42 20 69 73 20 42 59 54 45 53 20 62 79 74 65 73  B is BYTES bytes
d4b0: 20 69 6e 20 73 69 7a 65 2e 0a 2a 2f 0a 73 74 61   in size..*/.sta
d4c0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
d4d0: 64 5f 62 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a  d_blob(.  void *
d4e0: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
d4f0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
d500: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
d510: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
d520: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
d530: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
d540: 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e  .  int idx;.  in
d550: 74 20 62 79 74 65 73 3b 0a 20 20 63 68 61 72 20  t bytes;.  char 
d560: 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63  *value;.  int rc
d570: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35  ;..  if( objc!=5
d580: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
d590: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
d5a0: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
d5b0: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
d5c0: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
d5d0: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
d5e0: 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20  [0], 0), " STMT 
d5f0: 4e 20 44 41 54 41 20 42 59 54 45 53 22 2c 20 30  N DATA BYTES", 0
d600: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
d610: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
d620: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
d630: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
d640: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
d650: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
d660: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
d670: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
d680: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
d690: 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20  bjv[2], &idx) ) 
d6a0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
d6b0: 3b 0a 20 20 76 61 6c 75 65 20 3d 20 54 63 6c 5f  ;.  value = Tcl_
d6c0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33  GetString(objv[3
d6d0: 5d 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  ]);.  if( Tcl_Ge
d6e0: 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
d6f0: 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 62 79  rp, objv[4], &by
d700: 74 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43  tes) ) return TC
d710: 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d  L_ERROR;..  rc =
d720: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c   sqlite3_bind_bl
d730: 6f 62 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76  ob(pStmt, idx, v
d740: 61 6c 75 65 2c 20 62 79 74 65 73 2c 20 53 51 4c  alue, bytes, SQL
d750: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
d760: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
d770: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
d780: 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29   StmtToDb(pStmt)
d790: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
d7a0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
d7b0: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
d7c0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
d7d0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65  ERROR;.  }..  re
d7e0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
d7f0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73  /*.** Usage:   s
d800: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
d810: 6d 65 74 65 72 5f 63 6f 75 6e 74 20 20 53 54 4d  meter_count  STM
d820: 54 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  T.**.** Return t
d830: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 77 69 6c  he number of wil
d840: 64 63 61 72 64 73 20 69 6e 20 74 68 65 20 67 69  dcards in the gi
d850: 76 65 6e 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ven statement..*
d860: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
d870: 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  t_bind_parameter
d880: 5f 63 6f 75 6e 74 28 0a 20 20 76 6f 69 64 20 2a  _count(.  void *
d890: 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
d8a0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
d8b0: 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
d8c0: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
d8d0: 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
d8e0: 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
d8f0: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
d900: 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
d910: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
d920: 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 22 29  1, objv, "STMT")
d930: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
d940: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
d950: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
d960: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
d970: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
d980: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
d990: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
d9a0: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
d9b0: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49  interp, Tcl_NewI
d9c0: 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 62 69  ntObj(sqlite3_bi
d9d0: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75  nd_parameter_cou
d9e0: 6e 74 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72  nt(pStmt)));.  r
d9f0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
da00: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
da10: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
da20: 61 6d 65 74 65 72 5f 6e 61 6d 65 20 20 53 54 4d  ameter_name  STM
da30: 54 20 20 4e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  T  N.**.** Retur
da40: 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  n the name of th
da50: 65 20 4e 74 68 20 77 69 6c 64 63 61 72 64 2e 20  e Nth wildcard. 
da60: 20 54 68 65 20 66 69 72 73 74 20 77 69 6c 64 63   The first wildc
da70: 61 72 64 20 69 73 20 31 2e 0a 2a 2a 20 41 6e 20  ard is 1..** An 
da80: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 69 73 20  empty string is 
da90: 72 65 74 75 72 6e 65 64 20 69 66 20 4e 20 69 73  returned if N is
daa0: 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 20 6f 72   out of range or
dab0: 20 69 66 20 74 68 65 20 77 69 6c 64 63 61 72 64   if the wildcard
dac0: 0a 2a 2a 20 69 73 20 6e 61 6d 65 6c 65 73 73 2e  .** is nameless.
dad0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
dae0: 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  est_bind_paramet
daf0: 65 72 5f 6e 61 6d 65 28 0a 20 20 76 6f 69 64 20  er_name(.  void 
db00: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
db10: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
db20: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
db30: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
db40: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
db50: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
db60: 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 69 66  ;.  int i;..  if
db70: 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
db80: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
db90: 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
dba0: 76 2c 20 22 53 54 4d 54 20 4e 22 29 3b 0a 20 20  v, "STMT N");.  
dbb0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
dbc0: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
dbd0: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
dbe0: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
dbf0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
dc00: 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
dc10: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
dc20: 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
dc30: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
dc40: 2c 20 26 69 29 20 29 20 72 65 74 75 72 6e 20 54  , &i) ) return T
dc50: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
dc60: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
dc70: 65 72 70 2c 20 0a 20 20 20 20 20 54 63 6c 5f 4e  erp, .     Tcl_N
dc80: 65 77 53 74 72 69 6e 67 4f 62 6a 28 73 71 6c 69  ewStringObj(sqli
dc90: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
dca0: 65 72 5f 6e 61 6d 65 28 70 53 74 6d 74 2c 69 29  er_name(pStmt,i)
dcb0: 2c 2d 31 29 0a 20 20 29 3b 0a 20 20 72 65 74 75  ,-1).  );.  retu
dcc0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
dcd0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c  .** Usage:   sql
dce0: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
dcf0: 74 65 72 5f 69 6e 64 65 78 20 20 53 54 4d 54 20  ter_index  STMT 
dd00: 20 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 74 75   NAME.**.** Retu
dd10: 72 6e 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  rn the index of 
dd20: 74 68 65 20 77 69 6c 64 63 61 72 64 20 63 61 6c  the wildcard cal
dd30: 6c 65 64 20 4e 41 4d 45 2e 20 20 52 65 74 75 72  led NAME.  Retur
dd40: 6e 20 30 20 69 66 20 74 68 65 72 65 20 69 73 0a  n 0 if there is.
dd50: 2a 2a 20 6e 6f 20 73 75 63 68 20 77 69 6c 64 63  ** no such wildc
dd60: 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ard..*/.static i
dd70: 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72  nt test_bind_par
dd80: 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 0a 20 20  ameter_index(.  
dd90: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
dda0: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
ddb0: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
ddc0: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
ddd0: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
dde0: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
ddf0: 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62  pStmt;..  if( ob
de00: 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
de10: 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
de20: 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
de30: 53 54 4d 54 20 4e 41 4d 45 22 29 3b 0a 20 20 20  STMT NAME");.   
de40: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
de50: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
de60: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
de70: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
de80: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
de90: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
dea0: 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65  _ERROR;.  Tcl_Se
deb0: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
dec0: 70 2c 20 0a 20 20 20 20 20 54 63 6c 5f 4e 65 77  p, .     Tcl_New
ded0: 49 6e 74 4f 62 6a 28 0a 20 20 20 20 20 20 20 73  IntObj(.       s
dee0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
def0: 6d 65 74 65 72 5f 69 6e 64 65 78 28 70 53 74 6d  meter_index(pStm
df00: 74 2c 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  t,Tcl_GetString(
df10: 6f 62 6a 76 5b 32 5d 29 29 0a 20 20 20 20 20 29  objv[2])).     )
df20: 0a 20 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  .  );.  return T
df30: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
df40: 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
df50: 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 20  _clear_bindings 
df60: 53 54 4d 54 0a 2a 2a 0a 2a 2f 0a 23 69 66 20 30  STMT.**.*/.#if 0
df70: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
df80: 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 28  _clear_bindings(
df90: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
dfa0: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
dfb0: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
dfc0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
dfd0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
dfe0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
dff0: 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28  t *pStmt;..  if(
e000: 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20   objc!=2 ){.    
e010: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
e020: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
e030: 2c 20 22 53 54 4d 54 22 29 3b 0a 20 20 20 20 72  , "STMT");.    r
e040: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
e050: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74  .  }.  if( getSt
e060: 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
e070: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
e080: 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
e090: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
e0a0: 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  RROR;.  Tcl_SetO
e0b0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
e0c0: 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73   Tcl_NewIntObj(s
e0d0: 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e  qlite3_clear_bin
e0e0: 64 69 6e 67 73 28 70 53 74 6d 74 29 29 29 3b 0a  dings(pStmt)));.
e0f0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
e100: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  .}.#endif../*.**
e110: 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
e120: 65 72 72 63 6f 64 65 20 44 42 0a 2a 2a 0a 2a 2a  errcode DB.**.**
e130: 20 52 65 74 75 72 6e 20 74 68 65 20 73 74 72 69   Return the stri
e140: 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ng representatio
e150: 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65  n of the most re
e160: 63 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20 41  cent sqlite3_* A
e170: 50 49 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65  PI.** error code
e180: 2e 20 65 2e 67 2e 20 22 53 51 4c 49 54 45 5f 45  . e.g. "SQLITE_E
e190: 52 52 4f 52 22 2e 0a 2a 2f 0a 73 74 61 74 69 63  RROR"..*/.static
e1a0: 20 69 6e 74 20 74 65 73 74 5f 65 72 72 63 6f 64   int test_errcod
e1b0: 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
e1c0: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
e1d0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
e1e0: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
e1f0: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
e200: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ].){.  sqlite3 *
e210: 64 62 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  db;..  if( objc!
e220: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
e230: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
e240: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
e250: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
e260: 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
e270: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
e280: 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20   " DB", 0);.    
e290: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
e2a0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
e2b0: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
e2c0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
e2d0: 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20  bjv[1]), &db) ) 
e2e0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
e2f0: 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c  ;.  Tcl_SetResul
e300: 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
e310: 2a 29 65 72 72 6f 72 4e 61 6d 65 28 73 71 6c 69  *)errorName(sqli
e320: 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62 29 29  te3_errcode(db))
e330: 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
e340: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
e350: 55 73 61 67 65 3a 20 20 20 74 65 73 74 5f 65 72  Usage:   test_er
e360: 72 6d 73 67 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65  rmsg DB.**.** Re
e370: 74 75 72 6e 73 20 74 68 65 20 55 54 46 2d 38 20  turns the UTF-8 
e380: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
e390: 66 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  f the error mess
e3a0: 61 67 65 20 73 74 72 69 6e 67 20 66 6f 72 20 74  age string for t
e3b0: 68 65 0a 2a 2a 20 6d 6f 73 74 20 72 65 63 65 6e  he.** most recen
e3c0: 74 20 73 71 6c 69 74 65 33 5f 2a 20 41 50 49 20  t sqlite3_* API 
e3d0: 63 61 6c 6c 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  call..*/.static 
e3e0: 69 6e 74 20 74 65 73 74 5f 65 72 72 6d 73 67 28  int test_errmsg(
e3f0: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
e400: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
e410: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
e420: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
e430: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
e440: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
e450: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
e460: 7a 45 72 72 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  zErr;..  if( obj
e470: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
e480: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
e490: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
e4a0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
e4b0: 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
e4c0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
e4d0: 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20  ), " DB", 0);.  
e4e0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
e4f0: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
e500: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
e510: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
e520: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20  (objv[1]), &db) 
e530: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
e540: 4f 52 3b 0a 0a 20 20 7a 45 72 72 20 3d 20 73 71  OR;..  zErr = sq
e550: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29  lite3_errmsg(db)
e560: 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
e570: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
e580: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 45  _NewStringObj(zE
e590: 72 72 2c 20 2d 31 29 29 3b 0a 20 20 72 65 74 75  rr, -1));.  retu
e5a0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
e5b0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 74 65 73  .** Usage:   tes
e5c0: 74 5f 65 72 72 6d 73 67 31 36 20 44 42 0a 2a 2a  t_errmsg16 DB.**
e5d0: 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20  .** Returns the 
e5e0: 55 54 46 2d 31 36 20 72 65 70 72 65 73 65 6e 74  UTF-16 represent
e5f0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 72 72  ation of the err
e600: 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e  or message strin
e610: 67 20 66 6f 72 20 74 68 65 0a 2a 2a 20 6d 6f 73  g for the.** mos
e620: 74 20 72 65 63 65 6e 74 20 73 71 6c 69 74 65 33  t recent sqlite3
e630: 5f 2a 20 41 50 49 20 63 61 6c 6c 2e 20 54 68 69  _* API call. Thi
e640: 73 20 69 73 20 61 20 62 79 74 65 20 61 72 72 61  s is a byte arra
e650: 79 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20  y object at the 
e660: 54 43 4c 20 0a 2a 2a 20 6c 65 76 65 6c 2c 20 61  TCL .** level, a
e670: 6e 64 20 69 74 20 69 6e 63 6c 75 64 65 73 20 74  nd it includes t
e680: 68 65 20 30 78 30 30 20 30 78 30 30 20 74 65 72  he 0x00 0x00 ter
e690: 6d 69 6e 61 74 6f 72 20 62 79 74 65 73 20 61 74  minator bytes at
e6a0: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a   the end of the.
e6b0: 2a 2a 20 55 54 46 2d 31 36 20 73 74 72 69 6e 67  ** UTF-16 string
e6c0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
e6d0: 74 65 73 74 5f 65 72 72 6d 73 67 31 36 28 0a 20  test_errmsg16(. 
e6e0: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
e6f0: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
e700: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
e710: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
e720: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
e730: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
e740: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c  OMIT_UTF16.  sql
e750: 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73  ite3 *db;.  cons
e760: 74 20 76 6f 69 64 20 2a 7a 45 72 72 3b 0a 20 20  t void *zErr;.  
e770: 69 6e 74 20 62 79 74 65 73 3b 0a 0a 20 20 69 66  int bytes;..  if
e780: 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
e790: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
e7a0: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
e7b0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
e7c0: 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
e7d0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
e7e0: 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30  jv[0]), " DB", 0
e7f0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
e800: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
e810: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
e820: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
e830: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
e840: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
e850: 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a 45 72 72  L_ERROR;..  zErr
e860: 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73   = sqlite3_errms
e870: 67 31 36 28 64 62 29 3b 0a 20 20 62 79 74 65 73  g16(db);.  bytes
e880: 20 3d 20 73 71 6c 69 74 65 33 75 74 66 31 36 42   = sqlite3utf16B
e890: 79 74 65 4c 65 6e 28 7a 45 72 72 2c 20 2d 31 29  yteLen(zErr, -1)
e8a0: 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
e8b0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
e8c0: 5f 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a  _NewByteArrayObj
e8d0: 28 7a 45 72 72 2c 20 62 79 74 65 73 29 29 3b 0a  (zErr, bytes));.
e8e0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
e8f0: 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20  _OMIT_UTF16 */. 
e900: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
e910: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
e920: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
e930: 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69  DB sql bytes tai
e940: 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69  lvar.**.** Compi
e950: 6c 65 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e  le up to <bytes>
e960: 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 73 75   bytes of the su
e970: 70 70 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e  pplied SQL strin
e980: 67 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a  g <sql> using.**
e990: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
e9a0: 20 3c 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d   <DB>. The param
e9b0: 65 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69  eter <tailval> i
e9c0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
e9d0: 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62  global.** variab
e9e0: 6c 65 20 74 68 61 74 20 69 73 20 73 65 74 20 74  le that is set t
e9f0: 6f 20 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72  o the unused por
ea00: 74 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69  tion of <sql> (i
ea10: 66 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d  f any). A.** STM
ea20: 54 20 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75  T handle is retu
ea30: 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rned..*/.static 
ea40: 69 6e 74 20 74 65 73 74 5f 70 72 65 70 61 72 65  int test_prepare
ea50: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
ea60: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
ea70: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
ea80: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
ea90: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
eaa0: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
eab0: 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b;.  const char 
eac0: 2a 7a 53 71 6c 3b 0a 20 20 69 6e 74 20 62 79 74  *zSql;.  int byt
ead0: 65 73 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  es;.  const char
eae0: 20 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20 73   *zTail = 0;.  s
eaf0: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
eb00: 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a  mt = 0;.  char z
eb10: 42 75 66 5b 35 30 5d 3b 0a 20 20 69 6e 74 20 72  Buf[50];.  int r
eb20: 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
eb30: 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  5 ){.    Tcl_App
eb40: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
eb50: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
eb60: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
eb70: 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
eb80: 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
eb90: 22 20 44 42 20 73 71 6c 20 62 79 74 65 73 20 74  " DB sql bytes t
eba0: 61 69 6c 76 61 72 22 2c 20 30 29 3b 0a 20 20 20  ailvar", 0);.   
ebb0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
ebc0: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
ebd0: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
ebe0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
ebf0: 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
ec00: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
ec10: 52 3b 0a 20 20 7a 53 71 6c 20 3d 20 54 63 6c 5f  R;.  zSql = Tcl_
ec20: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32  GetString(objv[2
ec30: 5d 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  ]);.  if( Tcl_Ge
ec40: 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
ec50: 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62 79  rp, objv[3], &by
ec60: 74 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43  tes) ) return TC
ec70: 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d  L_ERROR;..  rc =
ec80: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
ec90: 28 64 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73  (db, zSql, bytes
eca0: 2c 20 26 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c  , &pStmt, &zTail
ecb0: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
ecc0: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
ecd0: 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65  rp, db, rc) ) re
ece0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
ecf0: 20 20 69 66 28 20 7a 54 61 69 6c 20 29 7b 0a 20    if( zTail ){. 
ed00: 20 20 20 69 66 28 20 62 79 74 65 73 3e 3d 30 20     if( bytes>=0 
ed10: 29 7b 0a 20 20 20 20 20 20 62 79 74 65 73 20 3d  ){.      bytes =
ed20: 20 62 79 74 65 73 20 2d 20 28 7a 54 61 69 6c 2d   bytes - (zTail-
ed30: 7a 53 71 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zSql);.    }.   
ed40: 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28   Tcl_ObjSetVar2(
ed50: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c  interp, objv[4],
ed60: 20 30 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e   0, Tcl_NewStrin
ed70: 67 4f 62 6a 28 7a 54 61 69 6c 2c 20 62 79 74 65  gObj(zTail, byte
ed80: 73 29 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66  s), 0);.  }.  if
ed90: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
eda0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
edb0: 53 74 6d 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73  Stmt==0 );.    s
edc0: 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 28 25  printf(zBuf, "(%
edd0: 64 29 20 22 2c 20 72 63 29 3b 0a 20 20 20 20 54  d) ", rc);.    T
ede0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
edf0: 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 73 71  interp, zBuf, sq
ee00: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29  lite3_errmsg(db)
ee10: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
ee20: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
ee30: 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a  .  if( pStmt ){.
ee40: 20 20 20 20 69 66 28 20 6d 61 6b 65 50 6f 69 6e      if( makePoin
ee50: 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a  terStr(interp, z
ee60: 42 75 66 2c 20 70 53 74 6d 74 29 20 29 20 72 65  Buf, pStmt) ) re
ee70: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
ee80: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
ee90: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
eea0: 66 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74  f, 0);.  }.  ret
eeb0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
eec0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
eed0: 74 65 33 5f 70 72 65 70 61 72 65 20 44 42 20 73  te3_prepare DB s
eee0: 71 6c 20 62 79 74 65 73 20 74 61 69 6c 76 61 72  ql bytes tailvar
eef0: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 75  .**.** Compile u
ef00: 70 20 74 6f 20 3c 62 79 74 65 73 3e 20 62 79 74  p to <bytes> byt
ef10: 65 73 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69  es of the suppli
ef20: 65 64 20 53 51 4c 20 73 74 72 69 6e 67 20 3c 73  ed SQL string <s
ef30: 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20 64 61 74  ql> using.** dat
ef40: 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 44 42  abase handle <DB
ef50: 3e 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72  >. The parameter
ef60: 20 3c 74 61 69 6c 76 61 6c 3e 20 69 73 20 74 68   <tailval> is th
ef70: 65 20 6e 61 6d 65 20 6f 66 20 61 20 67 6c 6f 62  e name of a glob
ef80: 61 6c 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 74  al.** variable t
ef90: 68 61 74 20 69 73 20 73 65 74 20 74 6f 20 74 68  hat is set to th
efa0: 65 20 75 6e 75 73 65 64 20 70 6f 72 74 69 6f 6e  e unused portion
efb0: 20 6f 66 20 3c 73 71 6c 3e 20 28 69 66 20 61 6e   of <sql> (if an
efc0: 79 29 2e 20 41 0a 2a 2a 20 53 54 4d 54 20 68 61  y). A.** STMT ha
efd0: 6e 64 6c 65 20 69 73 20 72 65 74 75 72 6e 65 64  ndle is returned
efe0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
eff0: 74 65 73 74 5f 70 72 65 70 61 72 65 31 36 28 0a  test_prepare16(.
f000: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
f010: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
f020: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
f030: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
f040: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
f050: 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
f060: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71  _OMIT_UTF16.  sq
f070: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e  lite3 *db;.  con
f080: 73 74 20 76 6f 69 64 20 2a 7a 53 71 6c 3b 0a 20  st void *zSql;. 
f090: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 54 61   const void *zTa
f0a0: 69 6c 20 3d 20 30 3b 0a 20 20 54 63 6c 5f 4f 62  il = 0;.  Tcl_Ob
f0b0: 6a 20 2a 70 54 61 69 6c 20 3d 20 30 3b 0a 20 20  j *pTail = 0;.  
f0c0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
f0d0: 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20  tmt = 0;.  char 
f0e0: 7a 42 75 66 5b 35 30 5d 3b 20 0a 20 20 69 6e 74  zBuf[50]; .  int
f0f0: 20 72 63 3b 0a 20 20 69 6e 74 20 62 79 74 65 73   rc;.  int bytes
f100: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
f110: 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20   /* The integer 
f120: 73 70 65 63 69 66 69 65 64 20 61 73 20 61 72 67  specified as arg
f130: 20 33 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 6c   3 */.  int objl
f140: 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
f150: 20 20 2f 2a 20 54 68 65 20 62 79 74 65 2d 61 72    /* The byte-ar
f160: 72 61 79 20 6c 65 6e 67 74 68 20 6f 66 20 61 72  ray length of ar
f170: 67 20 32 20 2a 2f 0a 0a 20 20 69 66 28 20 6f 62  g 2 */..  if( ob
f180: 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=5 ){.    Tcl
f190: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
f1a0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
f1b0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
f1c0: 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
f1d0: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
f1e0: 5d 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79 74  ]), " DB sql byt
f1f0: 65 73 20 74 61 69 6c 76 61 72 22 2c 20 30 29 3b  es tailvar", 0);
f200: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
f210: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
f220: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
f230: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
f240: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
f250: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
f260: 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d 20  ERROR;.  zSql = 
f270: 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79  Tcl_GetByteArray
f280: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c  FromObj(objv[2],
f290: 20 26 6f 62 6a 6c 65 6e 29 3b 0a 20 20 69 66 28   &objlen);.  if(
f2a0: 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
f2b0: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
f2c0: 33 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65  3], &bytes) ) re
f2d0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
f2e0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
f2f0: 70 72 65 70 61 72 65 31 36 28 64 62 2c 20 7a 53  prepare16(db, zS
f300: 71 6c 2c 20 62 79 74 65 73 2c 20 26 70 53 74 6d  ql, bytes, &pStm
f310: 74 2c 20 26 7a 54 61 69 6c 29 3b 0a 20 20 69 66  t, &zTail);.  if
f320: 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
f330: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c  Code(interp, db,
f340: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
f350: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  L_ERROR;.  if( r
f360: 63 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  c ){.    return 
f370: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
f380: 20 20 69 66 28 20 7a 54 61 69 6c 20 29 7b 0a 20    if( zTail ){. 
f390: 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 6f 62 6a 6c     objlen = objl
f3a0: 65 6e 20 2d 20 28 28 75 38 20 2a 29 7a 54 61 69  en - ((u8 *)zTai
f3b0: 6c 2d 28 75 38 20 2a 29 7a 53 71 6c 29 3b 0a 20  l-(u8 *)zSql);. 
f3c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6f 62 6a 6c   }else{.    objl
f3d0: 65 6e 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70 54  en = 0;.  }.  pT
f3e0: 61 69 6c 20 3d 20 54 63 6c 5f 4e 65 77 42 79 74  ail = Tcl_NewByt
f3f0: 65 41 72 72 61 79 4f 62 6a 28 28 75 38 20 2a 29  eArrayObj((u8 *)
f400: 7a 54 61 69 6c 2c 20 6f 62 6a 6c 65 6e 29 3b 0a  zTail, objlen);.
f410: 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75    Tcl_IncrRefCou
f420: 6e 74 28 70 54 61 69 6c 29 3b 0a 20 20 54 63 6c  nt(pTail);.  Tcl
f430: 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74 65  _ObjSetVar2(inte
f440: 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30 2c 20  rp, objv[4], 0, 
f450: 70 54 61 69 6c 2c 20 30 29 3b 0a 20 20 54 63 6c  pTail, 0);.  Tcl
f460: 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 54  _DecrRefCount(pT
f470: 61 69 6c 29 3b 0a 0a 20 20 69 66 28 20 70 53 74  ail);..  if( pSt
f480: 6d 74 20 29 7b 0a 20 20 20 20 69 66 28 20 6d 61  mt ){.    if( ma
f490: 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74  kePointerStr(int
f4a0: 65 72 70 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74  erp, zBuf, pStmt
f4b0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
f4c0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  RROR;.  }.  Tcl_
f4d0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
f4e0: 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23  erp, zBuf, 0);.#
f4f0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
f500: 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20  OMIT_UTF16 */.  
f510: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
f520: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
f530: 71 6c 69 74 65 33 5f 6f 70 65 6e 20 66 69 6c 65  qlite3_open file
f540: 6e 61 6d 65 20 3f 6f 70 74 69 6f 6e 73 2d 6c 69  name ?options-li
f550: 73 74 3f 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  st?.*/.static in
f560: 74 20 74 65 73 74 5f 6f 70 65 6e 28 0a 20 20 76  t test_open(.  v
f570: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
f580: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
f590: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
f5a0: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
f5b0: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
f5c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
f5d0: 6c 65 6e 61 6d 65 3b 0a 20 20 73 71 6c 69 74 65  lename;.  sqlite
f5e0: 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
f5f0: 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30  .  char zBuf[100
f600: 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  ];..  if( objc!=
f610: 33 20 26 26 20 6f 62 6a 63 21 3d 32 20 29 7b 0a  3 && objc!=2 ){.
f620: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
f630: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
f640: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
f650: 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
f660: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
f670: 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c  (objv[0]), " fil
f680: 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73 2d 6c 69  ename options-li
f690: 73 74 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  st", 0);.    ret
f6a0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
f6b0: 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20   }..  zFilename 
f6c0: 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  = Tcl_GetString(
f6d0: 6f 62 6a 76 5b 31 5d 29 3b 0a 20 20 72 63 20 3d  objv[1]);.  rc =
f6e0: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 46   sqlite3_open(zF
f6f0: 69 6c 65 6e 61 6d 65 2c 20 26 64 62 29 3b 0a 20  ilename, &db);. 
f700: 20 0a 20 20 69 66 28 20 6d 61 6b 65 50 6f 69 6e   .  if( makePoin
f710: 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a  terStr(interp, z
f720: 42 75 66 2c 20 64 62 29 20 29 20 72 65 74 75 72  Buf, db) ) retur
f730: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
f740: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
f750: 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29  interp, zBuf, 0)
f760: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
f770: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
f780: 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31  e: sqlite3_open1
f790: 36 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f  6 filename optio
f7a0: 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  ns.*/.static int
f7b0: 20 74 65 73 74 5f 6f 70 65 6e 31 36 28 0a 20 20   test_open16(.  
f7c0: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
f7d0: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
f7e0: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
f7f0: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
f800: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
f810: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
f820: 4d 49 54 5f 55 54 46 31 36 0a 20 20 63 6f 6e 73  MIT_UTF16.  cons
f830: 74 20 76 6f 69 64 20 2a 7a 46 69 6c 65 6e 61 6d  t void *zFilenam
f840: 65 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  e;.  sqlite3 *db
f850: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68  ;.  int rc;.  ch
f860: 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a 0a 20  ar zBuf[100];.. 
f870: 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
f880: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
f890: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
f8a0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
f8b0: 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
f8c0: 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
f8d0: 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c  (objv[0]), " fil
f8e0: 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73 2d 6c 69  ename options-li
f8f0: 73 74 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  st", 0);.    ret
f900: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
f910: 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20   }..  zFilename 
f920: 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72  = Tcl_GetByteArr
f930: 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31  ayFromObj(objv[1
f940: 5d 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71  ], 0);.  rc = sq
f950: 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28 7a 46 69  lite3_open16(zFi
f960: 6c 65 6e 61 6d 65 2c 20 26 64 62 29 3b 0a 20 20  lename, &db);.  
f970: 0a 20 20 69 66 28 20 6d 61 6b 65 50 6f 69 6e 74  .  if( makePoint
f980: 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42  erStr(interp, zB
f990: 75 66 2c 20 64 62 29 20 29 20 72 65 74 75 72 6e  uf, db) ) return
f9a0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63   TCL_ERROR;.  Tc
f9b0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
f9c0: 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b  nterp, zBuf, 0);
f9d0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
f9e0: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
f9f0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
fa00: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
fa10: 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74   sqlite3_complet
fa20: 65 31 36 20 3c 55 54 46 2d 31 36 20 73 74 72 69  e16 <UTF-16 stri
fa30: 6e 67 3e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  ng>.**.** Return
fa40: 20 31 20 69 66 20 74 68 65 20 73 75 70 70 6c 69   1 if the suppli
fa50: 65 64 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  ed argument is a
fa60: 20 63 6f 6d 70 6c 65 74 65 20 53 51 4c 20 73 74   complete SQL st
fa70: 61 74 65 6d 65 6e 74 2c 20 6f 72 20 7a 65 72 6f  atement, or zero
fa80: 0a 2a 2a 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a  .** otherwise..*
fa90: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
faa0: 74 5f 63 6f 6d 70 6c 65 74 65 31 36 28 0a 20 20  t_complete16(.  
fab0: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
fac0: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
fad0: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
fae0: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
faf0: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
fb00: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
fb10: 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54  ITE_OMIT_COMPLET
fb20: 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  E) && !defined(S
fb30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
fb40: 29 0a 20 20 63 68 61 72 20 2a 7a 42 75 66 3b 0a  ).  char *zBuf;.
fb50: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
fb60: 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
fb70: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
fb80: 2c 20 6f 62 6a 76 2c 20 22 3c 75 74 66 2d 31 36  , objv, "<utf-16
fb90: 20 73 71 6c 3e 22 29 3b 0a 20 20 20 20 72 65 74   sql>");.    ret
fba0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
fbb0: 20 7d 0a 0a 20 20 7a 42 75 66 20 3d 20 28 63 68   }..  zBuf = (ch
fbc0: 61 72 2a 29 54 63 6c 5f 47 65 74 42 79 74 65 41  ar*)Tcl_GetByteA
fbd0: 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  rrayFromObj(objv
fbe0: 5b 31 5d 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 53  [1], 0);.  Tcl_S
fbf0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
fc00: 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
fc10: 6a 28 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65  j(sqlite3_comple
fc20: 74 65 31 36 28 7a 42 75 66 29 29 29 3b 0a 23 65  te16(zBuf)));.#e
fc30: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
fc40: 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 20 26 26 20  MIT_COMPLETE && 
fc50: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
fc60: 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43  6 */.  return TC
fc70: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
fc80: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 73 74  sage: sqlite3_st
fc90: 65 70 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 41 64  ep STMT.**.** Ad
fca0: 76 61 6e 63 65 20 74 68 65 20 73 74 61 74 65 6d  vance the statem
fcb0: 65 6e 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ent to the next 
fcc0: 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  row..*/.static i
fcd0: 6e 74 20 74 65 73 74 5f 73 74 65 70 28 0a 20 20  nt test_step(.  
fce0: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
fcf0: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
fd00: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
fd10: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
fd20: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
fd30: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
fd40: 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b  pStmt;.  int rc;
fd50: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
fd60: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
fd70: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
fd80: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
fd90: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
fda0: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
fdb0: 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
fdc0: 53 54 4d 54 22 2c 20 30 29 3b 0a 20 20 20 20 72  STMT", 0);.    r
fdd0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
fde0: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
fdf0: 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
fe00: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
fe10: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
fe20: 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
fe30: 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71  ERROR;.  rc = sq
fe40: 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74  lite3_step(pStmt
fe50: 29 3b 0a 0a 20 20 2f 2a 20 69 66 28 20 72 63 21  );..  /* if( rc!
fe60: 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 26 26 20  =SQLITE_DONE && 
fe70: 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29  rc!=SQLITE_ROW )
fe80: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
fe90: 52 3b 20 2a 2f 0a 20 20 54 63 6c 5f 53 65 74 52  R; */.  Tcl_SetR
fea0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
feb0: 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28  har *)errorName(
fec0: 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  rc), 0);.  retur
fed0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
fee0: 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
fef0: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 53  3_column_count S
ff00: 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  TMT .**.** Retur
ff10: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
ff20: 63 6f 6c 75 6d 6e 73 20 72 65 74 75 72 6e 65 64  columns returned
ff30: 20 62 79 20 74 68 65 20 73 71 6c 20 73 74 61 74   by the sql stat
ff40: 65 6d 65 6e 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73  ement STMT..*/.s
ff50: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
ff60: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 0a 20 20 76  olumn_count(.  v
ff70: 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
ff80: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
ff90: 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
ffa0: 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
ffb0: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
ffc0: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
ffd0: 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  Stmt;..  if( obj
ffe0: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
fff0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
10000 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
10010 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
10020 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
10030 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
10040 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
10050 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
10060 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
10070 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
10080 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
10090 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
100a0 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
100b0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
100c0 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  R;..  Tcl_SetObj
100d0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
100e0 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
100f0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
10100 74 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65  t(pStmt)));.  re
10110 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
10120 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
10130 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  ite3_column_type
10140 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a   STMT column.**.
10150 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 74 79  ** Return the ty
10160 70 65 20 6f 66 20 74 68 65 20 64 61 74 61 20 69  pe of the data i
10170 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e  n column 'column
10180 27 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  ' of the current
10190 20 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   row..*/.static 
101a0 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f  int test_column_
101b0 74 79 70 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  type(.  void * c
101c0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
101d0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
101e0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
101f0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
10200 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
10210 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
10220 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 6e 74 20   int col;.  int 
10230 74 70 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  tp;..  if( objc!
10240 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
10250 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
10260 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
10270 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
10280 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
10290 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
102a0 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
102b0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
102c0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
102d0 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
102e0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
102f0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
10300 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
10310 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
10320 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
10330 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
10340 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
10350 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
10360 4f 52 3b 0a 0a 20 20 74 70 20 3d 20 73 71 6c 69  OR;..  tp = sqli
10370 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28  te3_column_type(
10380 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 73  pStmt, col);.  s
10390 77 69 74 63 68 28 20 74 70 20 29 7b 0a 20 20 20  witch( tp ){.   
103a0 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54   case SQLITE_INT
103b0 45 47 45 52 3a 20 0a 20 20 20 20 20 20 54 63 6c  EGER: .      Tcl
103c0 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
103d0 70 2c 20 22 49 4e 54 45 47 45 52 22 2c 20 54 43  p, "INTEGER", TC
103e0 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20  L_STATIC); .    
103f0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
10400 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3a 0a 20  e SQLITE_NULL:. 
10410 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75       Tcl_SetResu
10420 6c 74 28 69 6e 74 65 72 70 2c 20 22 4e 55 4c 4c  lt(interp, "NULL
10430 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20  ", TCL_STATIC); 
10440 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
10450 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4c    case SQLITE_FL
10460 4f 41 54 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53  OAT:.      Tcl_S
10470 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
10480 20 22 46 4c 4f 41 54 22 2c 20 54 43 4c 5f 53 54   "FLOAT", TCL_ST
10490 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72  ATIC); .      br
104a0 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
104b0 4c 49 54 45 5f 54 45 58 54 3a 0a 20 20 20 20 20  LITE_TEXT:.     
104c0 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
104d0 6e 74 65 72 70 2c 20 22 54 45 58 54 22 2c 20 54  nterp, "TEXT", T
104e0 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20  CL_STATIC); .   
104f0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
10500 73 65 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3a 0a  se SQLITE_BLOB:.
10510 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73        Tcl_SetRes
10520 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 42 4c 4f  ult(interp, "BLO
10530 42 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  B", TCL_STATIC);
10540 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20   .      break;. 
10550 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
10560 20 20 61 73 73 65 72 74 28 30 29 3b 0a 20 20 7d    assert(0);.  }
10570 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ..  return TCL_O
10580 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
10590 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
105a0 6e 5f 69 6e 74 36 34 20 53 54 4d 54 20 63 6f 6c  n_int64 STMT col
105b0 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  umn.**.** Return
105c0 20 74 68 65 20 64 61 74 61 20 69 6e 20 63 6f 6c   the data in col
105d0 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20  umn 'column' of 
105e0 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
105f0 63 61 73 74 20 61 73 20 61 6e 0a 2a 2a 20 77 69  cast as an.** wi
10600 64 65 20 28 36 34 2d 62 69 74 29 20 69 6e 74 65  de (64-bit) inte
10610 67 65 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ger..*/.static i
10620 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69  nt test_column_i
10630 6e 74 36 34 28 0a 20 20 76 6f 69 64 20 2a 20 63  nt64(.  void * c
10640 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
10650 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
10660 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
10670 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
10680 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
10690 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
106a0 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 36 34 20   int col;.  i64 
106b0 69 56 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  iVal;..  if( obj
106c0 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
106d0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
106e0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
106f0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
10700 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
10710 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
10720 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
10730 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
10740 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
10750 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
10760 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
10770 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
10780 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
10790 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
107a0 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
107b0 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
107c0 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
107d0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
107e0 52 52 4f 52 3b 0a 0a 20 20 69 56 61 6c 20 3d 20  RROR;..  iVal = 
107f0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
10800 6e 74 36 34 28 70 53 74 6d 74 2c 20 63 6f 6c 29  nt64(pStmt, col)
10810 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
10820 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
10830 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 69  _NewWideIntObj(i
10840 56 61 6c 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  Val));.  return 
10850 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
10860 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
10870 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 53 54 4d 54  column_blob STMT
10880 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69   column.*/.stati
10890 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d  c int test_colum
108a0 6e 5f 62 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a  n_blob(.  void *
108b0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
108c0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
108d0 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
108e0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
108f0 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
10900 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
10910 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 0a 20 20 69  .  int col;..  i
10920 6e 74 20 6c 65 6e 3b 0a 20 20 63 6f 6e 73 74 20  nt len;.  const 
10930 76 6f 69 64 20 2a 70 42 6c 6f 62 3b 0a 0a 20 20  void *pBlob;..  
10940 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
10950 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
10960 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
10970 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
10980 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
10990 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
109a0 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
109b0 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
109c0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
109d0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
109e0 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
109f0 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
10a00 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
10a10 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
10a20 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
10a30 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
10a40 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
10a50 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72  ], &col) ) retur
10a60 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
10a70 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f  pBlob = sqlite3_
10a80 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d  column_blob(pStm
10a90 74 2c 20 63 6f 6c 29 3b 0a 20 20 6c 65 6e 20 3d  t, col);.  len =
10aa0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
10ab0 62 79 74 65 73 28 70 53 74 6d 74 2c 20 63 6f 6c  bytes(pStmt, col
10ac0 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  );.  Tcl_SetObjR
10ad0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
10ae0 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62  l_NewByteArrayOb
10af0 6a 28 70 42 6c 6f 62 2c 20 6c 65 6e 29 29 3b 0a  j(pBlob, len));.
10b00 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
10b10 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
10b20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
10b30 64 6f 75 62 6c 65 20 53 54 4d 54 20 63 6f 6c 75  double STMT colu
10b40 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  mn.**.** Return 
10b50 74 68 65 20 64 61 74 61 20 69 6e 20 63 6f 6c 75  the data in colu
10b60 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74  mn 'column' of t
10b70 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 63  he current row c
10b80 61 73 74 20 61 73 20 61 20 64 6f 75 62 6c 65 2e  ast as a double.
10b90 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
10ba0 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  est_column_doubl
10bb0 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
10bc0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
10bd0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
10be0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
10bf0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
10c00 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
10c10 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
10c20 74 20 63 6f 6c 3b 0a 20 20 64 6f 75 62 6c 65 20  t col;.  double 
10c30 72 56 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  rVal;..  if( obj
10c40 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
10c50 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
10c60 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
10c70 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
10c80 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
10c90 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
10ca0 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
10cb0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
10cc0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
10cd0 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
10ce0 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
10cf0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
10d00 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
10d10 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
10d20 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
10d30 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
10d40 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
10d50 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
10d60 52 52 4f 52 3b 0a 0a 20 20 72 56 61 6c 20 3d 20  RROR;..  rVal = 
10d70 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
10d80 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20 63 6f 6c  ouble(pStmt, col
10d90 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  );.  Tcl_SetObjR
10da0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
10db0 6c 5f 4e 65 77 44 6f 75 62 6c 65 4f 62 6a 28 72  l_NewDoubleObj(r
10dc0 56 61 6c 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  Val));.  return 
10dd0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
10de0 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
10df0 64 61 74 61 5f 63 6f 75 6e 74 20 53 54 4d 54 20  data_count STMT 
10e00 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
10e10 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
10e20 6d 6e 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  mns returned by 
10e30 74 68 65 20 73 71 6c 20 73 74 61 74 65 6d 65 6e  the sql statemen
10e40 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69  t STMT..*/.stati
10e50 63 20 69 6e 74 20 74 65 73 74 5f 64 61 74 61 5f  c int test_data_
10e60 63 6f 75 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20  count(.  void * 
10e70 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
10e80 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
10e90 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
10ea0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
10eb0 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
10ec0 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
10ed0 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
10ee0 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
10ef0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
10f00 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
10f10 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
10f20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
10f30 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53  ng(objv[0]), " S
10f40 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b  TMT column", 0);
10f50 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
10f60 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
10f70 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
10f80 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
10f90 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
10fa0 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
10fb0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
10fc0 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
10fd0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
10fe0 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 64  IntObj(sqlite3_d
10ff0 61 74 61 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  ata_count(pStmt)
11000 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
11010 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
11020 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
11030 75 6d 6e 5f 74 65 78 74 20 53 54 4d 54 20 63 6f  umn_text STMT co
11040 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65  lumn.**.** Usage
11050 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
11060 5f 64 65 63 6c 74 79 70 65 20 53 54 4d 54 20 63  _decltype STMT c
11070 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67  olumn.**.** Usag
11080 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
11090 6e 5f 6e 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75  n_name STMT colu
110a0 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  mn.*/.static int
110b0 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 28   test_stmt_utf8(
110c0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
110d0 44 61 74 61 2c 20 20 20 20 20 20 20 20 2f 2a 20  Data,        /* 
110e0 50 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c 69 74  Pointer to SQLit
110f0 65 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 74  e API function t
11100 6f 20 62 65 20 69 6e 76 6f 6b 65 20 2a 2f 0a 20  o be invoke */. 
11110 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
11120 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
11130 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
11140 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
11150 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
11160 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20  t;.  int col;.  
11170 63 6f 6e 73 74 20 63 68 61 72 20 2a 28 2a 78 46  const char *(*xF
11180 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d  unc)(sqlite3_stm
11190 74 2a 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e  t*, int) = clien
111a0 74 44 61 74 61 3b 0a 20 20 63 6f 6e 73 74 20 63  tData;.  const c
111b0 68 61 72 20 2a 7a 52 65 74 3b 0a 0a 20 20 69 66  har *zRet;..  if
111c0 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
111d0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
111e0 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
111f0 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
11200 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
11210 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
11220 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
11230 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
11240 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
11250 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
11260 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
11270 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
11280 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
11290 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
112a0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
112b0 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
112c0 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
112d0 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20   &col) ) return 
112e0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 52 65  TCL_ERROR;.  zRe
112f0 74 20 3d 20 78 46 75 6e 63 28 70 53 74 6d 74 2c  t = xFunc(pStmt,
11300 20 63 6f 6c 29 3b 0a 20 20 69 66 28 20 7a 52 65   col);.  if( zRe
11310 74 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  t ){.    Tcl_Set
11320 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
11330 63 68 61 72 20 2a 29 7a 52 65 74 2c 20 30 29 3b  char *)zRet, 0);
11340 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
11350 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63 20  L_OK;.}..static 
11360 69 6e 74 20 74 65 73 74 5f 67 6c 6f 62 61 6c 5f  int test_global_
11370 72 65 63 6f 76 65 72 28 0a 20 20 76 6f 69 64 20  recover(.  void 
11380 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
11390 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
113a0 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
113b0 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
113c0 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
113d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47  ef SQLITE_OMIT_G
113e0 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a 20 20 69  LOBALRECOVER.  i
113f0 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 6f 62 6a  nt rc;.  if( obj
11400 63 21 3d 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=1 ){.    Tcl_
11410 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
11420 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 22  erp, 1, objv, ""
11430 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
11440 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
11450 63 20 3d 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62  c = sqlite3_glob
11460 61 6c 5f 72 65 63 6f 76 65 72 28 29 3b 0a 20 20  al_recover();.  
11470 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
11480 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 65 72  terp, (char *)er
11490 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
114a0 5f 53 54 41 54 49 43 29 3b 0a 23 65 6e 64 69 66  _STATIC);.#endif
114b0 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
114c0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
114d0 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
114e0 5f 74 65 78 74 20 53 54 4d 54 20 63 6f 6c 75 6d  _text STMT colum
114f0 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  n.**.** Usage: s
11500 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
11510 63 6c 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75  cltype STMT colu
11520 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  mn.**.** Usage: 
11530 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
11540 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ame STMT column.
11550 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
11560 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 28 0a 20  st_stmt_utf16(. 
11570 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
11580 74 61 2c 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ta,     /* Point
11590 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41 50 49  er to SQLite API
115a0 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
115b0 69 6e 76 6f 6b 65 64 20 2a 2f 0a 20 20 54 63 6c  invoked */.  Tcl
115c0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
115d0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
115e0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
115f0 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
11600 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
11610 36 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  6.  sqlite3_stmt
11620 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63   *pStmt;.  int c
11630 6f 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  ol;.  Tcl_Obj *p
11640 52 65 74 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  Ret;.  const voi
11650 64 20 2a 7a 4e 61 6d 65 31 36 3b 0a 20 20 63 6f  d *zName16;.  co
11660 6e 73 74 20 76 6f 69 64 20 2a 28 2a 78 46 75 6e  nst void *(*xFun
11670 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a  c)(sqlite3_stmt*
11680 2c 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44  , int) = clientD
11690 61 74 61 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  ata;..  if( objc
116a0 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
116b0 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
116c0 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
116d0 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
116e0 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
116f0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
11700 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22  , " STMT column"
11710 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
11720 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
11730 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
11740 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
11750 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
11760 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
11770 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
11780 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
11790 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
117a0 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29  , objv[2], &col)
117b0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
117c0 52 4f 52 3b 0a 0a 20 20 7a 4e 61 6d 65 31 36 20  ROR;..  zName16 
117d0 3d 20 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63  = xFunc(pStmt, c
117e0 6f 6c 29 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65  ol);.  if( zName
117f0 31 36 20 29 7b 0a 20 20 20 20 70 52 65 74 20 3d  16 ){.    pRet =
11800 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61   Tcl_NewByteArra
11810 79 4f 62 6a 28 7a 4e 61 6d 65 31 36 2c 20 73 71  yObj(zName16, sq
11820 6c 69 74 65 33 75 74 66 31 36 42 79 74 65 4c 65  lite3utf16ByteLe
11830 6e 28 7a 4e 61 6d 65 31 36 2c 20 2d 31 29 2b 32  n(zName16, -1)+2
11840 29 3b 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62  );.    Tcl_SetOb
11850 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
11860 70 52 65 74 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  pRet);.  }.#endi
11870 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
11880 5f 55 54 46 31 36 20 2a 2f 0a 0a 20 20 72 65 74  _UTF16 */..  ret
11890 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
118a0 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
118b0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 53  te3_column_int S
118c0 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a  TMT column.**.**
118d0 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
118e0 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 20 53 54 4d  column_bytes STM
118f0 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55  T column.**.** U
11900 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
11910 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20 53 54 4d  lumn_bytes16 STM
11920 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2f 0a 73  T column.**.*/.s
11930 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
11940 74 6d 74 5f 69 6e 74 28 0a 20 20 76 6f 69 64 20  tmt_int(.  void 
11950 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20  * clientData,   
11960 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53   /* Pointer to S
11970 51 4c 69 74 65 20 41 50 49 20 66 75 6e 63 74 69  QLite API functi
11980 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64  on to be invoked
11990 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
119a0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
119b0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
119c0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
119d0 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
119e0 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f  *pStmt;.  int co
119f0 6c 3b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63  l;.  int (*xFunc
11a00 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c  )(sqlite3_stmt*,
11a10 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61   int) = clientDa
11a20 74 61 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  ta;..  if( objc!
11a30 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
11a40 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
11a50 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
11a60 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
11a70 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
11a80 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
11a90 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
11aa0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
11ab0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
11ac0 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
11ad0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
11ae0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
11af0 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
11b00 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
11b10 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
11b20 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
11b30 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
11b40 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
11b50 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62  OR;..  Tcl_SetOb
11b60 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
11b70 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 78 46  Tcl_NewIntObj(xF
11b80 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c 29 29  unc(pStmt, col))
11b90 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
11ba0 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  OK;.}..#ifndef S
11bb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49  QLITE_OMIT_DISKI
11bc0 4f 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  O./*.** Usage:  
11bd0 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61  sqlite3OsOpenRea
11be0 64 57 72 69 74 65 20 3c 66 69 6c 65 6e 61 6d 65  dWrite <filename
11bf0 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  >.*/.static int 
11c00 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 4f 70  test_sqlite3OsOp
11c10 65 6e 52 65 61 64 57 72 69 74 65 28 0a 20 20 76  enReadWrite(.  v
11c20 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
11c30 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
11c40 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
11c50 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
11c60 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
11c70 20 4f 73 46 69 6c 65 20 2a 70 46 69 6c 65 3b 0a   OsFile *pFile;.
11c80 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
11c90 64 75 6d 6d 79 3b 0a 20 20 63 68 61 72 20 7a 42  dummy;.  char zB
11ca0 75 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20  uf[100];..  if( 
11cb0 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
11cc0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
11cd0 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
11ce0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
11cf0 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
11d00 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
11d10 5b 30 5d 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65  [0]), " filename
11d20 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
11d30 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
11d40 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
11d50 4f 73 2e 78 4f 70 65 6e 52 65 61 64 57 72 69 74  Os.xOpenReadWrit
11d60 65 28 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  e(Tcl_GetString(
11d70 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65  objv[1]), &pFile
11d80 2c 20 26 64 75 6d 6d 79 29 3b 0a 20 20 69 66 28  , &dummy);.  if(
11d90 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
11da0 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73  {.    Tcl_SetRes
11db0 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
11dc0 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63  r *)errorName(rc
11dd0 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a  ), TCL_STATIC);.
11de0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
11df0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 6d 61 6b 65  RROR;.  }.  make
11e00 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72  PointerStr(inter
11e10 70 2c 20 7a 42 75 66 2c 20 70 46 69 6c 65 29 3b  p, zBuf, pFile);
11e20 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
11e30 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30  (interp, zBuf, 0
11e40 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
11e50 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  ERROR;.}../*.** 
11e60 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f  Usage:  sqlite3O
11e70 73 43 6c 6f 73 65 20 3c 66 69 6c 65 20 68 61 6e  sClose <file han
11e80 64 6c 65 3e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  dle>.*/.static i
11e90 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f  nt test_sqlite3O
11ea0 73 43 6c 6f 73 65 28 0a 20 20 76 6f 69 64 20 2a  sClose(.  void *
11eb0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
11ec0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
11ed0 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
11ee0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
11ef0 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 4f 73 46 69  objv[].){.  OsFi
11f00 6c 65 20 2a 70 46 69 6c 65 3b 0a 20 20 69 6e 74  le *pFile;.  int
11f10 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
11f20 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
11f30 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
11f40 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
11f50 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
11f60 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
11f70 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
11f80 2c 20 22 20 66 69 6c 65 68 61 6e 64 6c 65 22 2c  , " filehandle",
11f90 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
11fa0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
11fb0 20 20 69 66 28 20 67 65 74 46 69 6c 65 50 6f 69    if( getFilePoi
11fc0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
11fd0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
11fe0 31 5d 29 2c 20 26 70 46 69 6c 65 29 20 29 7b 0a  1]), &pFile) ){.
11ff0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
12000 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  RROR;.  }.  rc =
12010 20 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65 28   sqlite3OsClose(
12020 26 70 46 69 6c 65 29 3b 0a 20 20 69 66 28 20 72  &pFile);.  if( r
12030 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
12040 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c      Tcl_SetResul
12050 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
12060 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  *)errorName(rc),
12070 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20   TCL_STATIC);.  
12080 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
12090 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  OR;.  }.  return
120a0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
120b0 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
120c0 33 4f 73 4c 6f 63 6b 20 3c 66 69 6c 65 20 68 61  3OsLock <file ha
120d0 6e 64 6c 65 3e 20 3c 6c 6f 63 6b 74 79 70 65 3e  ndle> <locktype>
120e0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
120f0 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 4c 6f 63  est_sqlite3OsLoc
12100 6b 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  k(.  void * clie
12110 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
12120 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
12130 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
12140 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
12150 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a 20  ].){.  OsFile * 
12160 70 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b  pFile;.  int rc;
12170 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
12180 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
12190 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
121a0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
121b0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
121c0 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
121d0 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 0a  ring(objv[0]), .
121e0 20 20 20 20 20 20 20 20 22 20 66 69 6c 65 68 61          " fileha
121f0 6e 64 6c 65 20 28 53 48 41 52 45 44 7c 52 45 53  ndle (SHARED|RES
12200 45 52 56 45 44 7c 50 45 4e 44 49 4e 47 7c 45 58  ERVED|PENDING|EX
12210 43 4c 55 53 49 56 45 29 22 2c 20 30 29 3b 0a 20  CLUSIVE)", 0);. 
12220 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
12230 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
12240 67 65 74 46 69 6c 65 50 6f 69 6e 74 65 72 28 69  getFilePointer(i
12250 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
12260 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
12270 70 46 69 6c 65 29 20 29 7b 0a 20 20 20 20 72 65  pFile) ){.    re
12280 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
12290 20 20 7d 0a 0a 20 20 69 66 28 20 30 3d 3d 73 74    }..  if( 0==st
122a0 72 63 6d 70 28 22 53 48 41 52 45 44 22 2c 20 54  rcmp("SHARED", T
122b0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
122c0 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20 20 72 63  v[2])) ){.    rc
122d0 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b   = sqlite3OsLock
122e0 28 70 46 69 6c 65 2c 20 53 48 41 52 45 44 5f 4c  (pFile, SHARED_L
122f0 4f 43 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c 73 65  OCK);.  }.  else
12300 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 22   if( 0==strcmp("
12310 52 45 53 45 52 56 45 44 22 2c 20 54 63 6c 5f 47  RESERVED", Tcl_G
12320 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d  etString(objv[2]
12330 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  )) ){.    rc = s
12340 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69  qlite3OsLock(pFi
12350 6c 65 2c 20 52 45 53 45 52 56 45 44 5f 4c 4f 43  le, RESERVED_LOC
12360 4b 29 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69  K);.  }.  else i
12370 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 22 50 45  f( 0==strcmp("PE
12380 4e 44 49 4e 47 22 2c 20 54 63 6c 5f 47 65 74 53  NDING", Tcl_GetS
12390 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20  tring(objv[2])) 
123a0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
123b0 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c  te3OsLock(pFile,
123c0 20 50 45 4e 44 49 4e 47 5f 4c 4f 43 4b 29 3b 0a   PENDING_LOCK);.
123d0 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 30    }.  else if( 0
123e0 3d 3d 73 74 72 63 6d 70 28 22 45 58 43 4c 55 53  ==strcmp("EXCLUS
123f0 49 56 45 22 2c 20 54 63 6c 5f 47 65 74 53 74 72  IVE", Tcl_GetStr
12400 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b  ing(objv[2])) ){
12410 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
12420 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 45  3OsLock(pFile, E
12430 58 43 4c 55 53 49 56 45 5f 4c 4f 43 4b 29 3b 0a  XCLUSIVE_LOCK);.
12440 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 54 63 6c    }else{.    Tcl
12450 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
12460 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
12470 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
12480 22 22 2c 20 0a 20 20 20 20 20 20 20 20 54 63 6c  "", .        Tcl
12490 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
124a0 30 5d 29 2c 20 0a 20 20 20 20 20 20 20 20 22 20  0]), .        " 
124b0 66 69 6c 65 68 61 6e 64 6c 65 20 28 53 48 41 52  filehandle (SHAR
124c0 45 44 7c 52 45 53 45 52 56 45 44 7c 50 45 4e 44  ED|RESERVED|PEND
124d0 49 4e 47 7c 45 58 43 4c 55 53 49 56 45 29 22 2c  ING|EXCLUSIVE)",
124e0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
124f0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
12500 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
12510 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53  _OK ){.    Tcl_S
12520 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
12530 20 28 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61   (char *)errorNa
12540 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54  me(rc), TCL_STAT
12550 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  IC);.    return 
12560 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
12570 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
12580 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
12590 20 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b   sqlite3OsUnlock
125a0 20 3c 66 69 6c 65 20 68 61 6e 64 6c 65 3e 0a 2a   <file handle>.*
125b0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
125c0 74 5f 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63  t_sqlite3OsUnloc
125d0 6b 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  k(.  void * clie
125e0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
125f0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
12600 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
12610 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
12620 5d 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a 20  ].){.  OsFile * 
12630 70 46 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b  pFile;.  int rc;
12640 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
12650 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
12660 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
12670 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
12680 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
12690 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
126a0 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
126b0 66 69 6c 65 68 61 6e 64 6c 65 22 2c 20 30 29 3b  filehandle", 0);
126c0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
126d0 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
126e0 28 20 67 65 74 46 69 6c 65 50 6f 69 6e 74 65 72  ( getFilePointer
126f0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
12700 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
12710 20 26 70 46 69 6c 65 29 20 29 7b 0a 20 20 20 20   &pFile) ){.    
12720 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
12730 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
12740 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 28 70 46 69  ite3OsUnlock(pFi
12750 6c 65 2c 20 4e 4f 5f 4c 4f 43 4b 29 3b 0a 20 20  le, NO_LOCK);.  
12760 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
12770 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  K ){.    Tcl_Set
12780 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
12790 63 68 61 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65  char *)errorName
127a0 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43  (rc), TCL_STATIC
127b0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
127c0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
127d0 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
127e0 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
127f0 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65  qlite3OsTempFile
12800 4e 61 6d 65 0a 2a 2f 0a 73 74 61 74 69 63 20 69  Name.*/.static i
12810 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f  nt test_sqlite3O
12820 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 0a 20  sTempFileName(. 
12830 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
12840 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
12850 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
12860 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
12870 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
12880 0a 20 20 63 68 61 72 20 7a 46 69 6c 65 5b 53 51  .  char zFile[SQ
12890 4c 49 54 45 5f 54 45 4d 50 4e 41 4d 45 5f 53 49  LITE_TEMPNAME_SI
128a0 5a 45 5d 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  ZE];.  int rc;..
128b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73    rc = sqlite3Os
128c0 2e 78 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 7a  .xTempFileName(z
128d0 46 69 6c 65 29 3b 0a 20 20 69 66 28 20 72 63 21  File);.  if( rc!
128e0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
128f0 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
12900 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29  interp, (char *)
12910 65 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54  errorName(rc), T
12920 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  CL_STATIC);.    
12930 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
12940 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65  ;.  }.  Tcl_Appe
12950 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
12960 20 7a 46 69 6c 65 2c 20 30 29 3b 0a 20 20 72 65   zFile, 0);.  re
12970 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23  turn TCL_OK;.}.#
12980 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  endif../*.** Usa
12990 67 65 3a 20 20 73 71 6c 69 74 65 5f 73 65 74 5f  ge:  sqlite_set_
129a0 6d 61 67 69 63 20 20 44 42 20 20 4d 41 47 49 43  magic  DB  MAGIC
129b0 2d 4e 55 4d 42 45 52 0a 2a 2a 0a 2a 2a 20 53 65  -NUMBER.**.** Se
129c0 74 20 74 68 65 20 64 62 2d 3e 6d 61 67 69 63 20  t the db->magic 
129d0 76 61 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20  value.  This is 
129e0 75 73 65 64 20 74 6f 20 74 65 73 74 20 65 72 72  used to test err
129f0 6f 72 20 72 65 63 6f 76 65 72 79 20 6c 6f 67 69  or recovery logi
12a00 63 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  c..*/.static int
12a10 20 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69   sqlite_set_magi
12a20 63 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  c(.  void * clie
12a30 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
12a40 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
12a50 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72  int argc,.  char
12a60 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c   **argv.){.  sql
12a70 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
12a80 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
12a90 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
12aa0 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
12ab0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
12ac0 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
12ad0 20 20 20 20 20 20 20 20 22 20 44 42 20 4d 41 47          " DB MAG
12ae0 49 43 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  IC", 0);.    ret
12af0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
12b00 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
12b10 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
12b20 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
12b30 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
12b40 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67    if( strcmp(arg
12b50 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41  v[2], "SQLITE_MA
12b60 47 49 43 5f 4f 50 45 4e 22 29 3d 3d 30 20 29 7b  GIC_OPEN")==0 ){
12b70 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  .    db->magic =
12b80 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
12b90 45 4e 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  EN;.  }else if( 
12ba0 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20  strcmp(argv[2], 
12bb0 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c  "SQLITE_MAGIC_CL
12bc0 4f 53 45 44 22 29 3d 3d 30 20 29 7b 0a 20 20 20  OSED")==0 ){.   
12bd0 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c   db->magic = SQL
12be0 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
12bf0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
12c00 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53  rcmp(argv[2], "S
12c10 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
12c20 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d  ")==0 ){.    db-
12c30 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
12c40 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 7d 65  MAGIC_BUSY;.  }e
12c50 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61  lse if( strcmp(a
12c60 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f  rgv[2], "SQLITE_
12c70 4d 41 47 49 43 5f 45 52 52 4f 52 22 29 3d 3d 30  MAGIC_ERROR")==0
12c80 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69   ){.    db->magi
12c90 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
12ca0 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 20  _ERROR;.  }else 
12cb0 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69  if( Tcl_GetInt(i
12cc0 6e 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20  nterp, argv[2], 
12cd0 26 64 62 2d 3e 6d 61 67 69 63 29 20 29 7b 0a 20  &db->magic) ){. 
12ce0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
12cf0 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ROR;.  }.  retur
12d00 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
12d10 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
12d20 65 33 5f 69 6e 74 65 72 72 75 70 74 20 20 44 42  e3_interrupt  DB
12d30 20 0a 2a 2a 0a 2a 2a 20 54 72 69 67 67 65 72 20   .**.** Trigger 
12d40 61 6e 20 69 6e 74 65 72 72 75 70 74 20 6f 6e 20  an interrupt on 
12d50 44 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  DB.*/.static int
12d60 20 74 65 73 74 5f 69 6e 74 65 72 72 75 70 74 28   test_interrupt(
12d70 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
12d80 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
12d90 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
12da0 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
12db0 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74  *argv.){.  sqlit
12dc0 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72  e3 *db;.  if( ar
12dd0 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
12de0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
12df0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
12e00 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
12e10 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44  "", argv[0], " D
12e20 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  B", 0);.    retu
12e30 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
12e40 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
12e50 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
12e60 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
12e70 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
12e80 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
12e90 70 74 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e  pt(db);.  return
12ea0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74   TCL_OK;.}..stat
12eb0 69 63 20 75 38 20 2a 73 71 6c 69 74 65 33 5f 73  ic u8 *sqlite3_s
12ec0 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65 20 3d 20  tack_baseline = 
12ed0 30 3b 0a 0a 2f 2a 0a 2a 2a 20 46 69 6c 6c 20 74  0;../*.** Fill t
12ee0 68 65 20 73 74 61 63 6b 20 77 69 74 68 20 61 20  he stack with a 
12ef0 6b 6e 6f 77 6e 20 62 69 74 70 61 74 74 65 72 6e  known bitpattern
12f00 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
12f10 20 70 72 65 70 53 74 61 63 6b 28 76 6f 69 64 29   prepStack(void)
12f20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 75 33 32  {.  int i;.  u32
12f30 20 62 69 67 42 75 66 5b 36 35 35 33 36 5d 3b 0a   bigBuf[65536];.
12f40 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a    for(i=0; i<siz
12f50 65 6f 66 28 62 69 67 42 75 66 29 3b 20 69 2b 2b  eof(bigBuf); i++
12f60 29 20 62 69 67 42 75 66 5b 69 5d 20 3d 20 30 78  ) bigBuf[i] = 0x
12f70 64 65 61 64 62 65 65 66 3b 0a 20 20 73 71 6c 69  deadbeef;.  sqli
12f80 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69  te3_stack_baseli
12f90 6e 65 20 3d 20 28 75 38 2a 29 26 62 69 67 42 75  ne = (u8*)&bigBu
12fa0 66 5b 36 35 35 33 36 5d 3b 0a 7d 0a 0a 2f 2a 0a  f[65536];.}../*.
12fb0 2a 2a 20 47 65 74 20 74 68 65 20 63 75 72 72 65  ** Get the curre
12fc0 6e 74 20 73 74 61 63 6b 20 64 65 70 74 68 2e 20  nt stack depth. 
12fd0 20 55 73 65 64 20 66 6f 72 20 64 65 62 75 67 67   Used for debugg
12fe0 69 6e 67 20 6f 6e 6c 79 2e 0a 2a 2f 0a 75 36 34  ing only..*/.u64
12ff0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 44 65 70   sqlite3StackDep
13000 74 68 28 76 6f 69 64 29 7b 0a 20 20 75 38 20 78  th(void){.  u8 x
13010 3b 0a 20 20 72 65 74 75 72 6e 20 28 75 36 34 29  ;.  return (u64)
13020 28 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62  (sqlite3_stack_b
13030 61 73 65 6c 69 6e 65 20 2d 20 26 78 29 3b 0a 7d  aseline - &x);.}
13040 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
13050 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 75 73  sqlite3_stack_us
13060 65 64 20 44 42 20 53 51 4c 0a 2a 2a 0a 2a 2a 20  ed DB SQL.**.** 
13070 54 72 79 20 74 6f 20 6d 65 61 73 75 72 65 20 74  Try to measure t
13080 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 73 74 61  he amount of sta
13090 63 6b 20 73 70 61 63 65 20 75 73 65 64 20 62 79  ck space used by
130a0 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74   a call to sqlit
130b0 65 33 5f 65 78 65 63 0a 2a 2f 0a 73 74 61 74 69  e3_exec.*/.stati
130c0 63 20 69 6e 74 20 74 65 73 74 5f 73 74 61 63 6b  c int test_stack
130d0 5f 75 73 65 64 28 0a 20 20 76 6f 69 64 20 2a 20  _used(.  void * 
130e0 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
130f0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
13100 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20  ,.  int argc,.  
13110 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20  char **argv.){. 
13120 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
13130 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 61 72 67  int i;.  if( arg
13140 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
13150 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
13160 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
13170 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
13180 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20  ", argv[0], .   
13190 20 20 20 20 20 22 20 44 42 20 53 51 4c 22 2c 20       " DB SQL", 
131a0 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
131b0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
131c0 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
131d0 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
131e0 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
131f0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 70 72 65  TCL_ERROR;.  pre
13200 70 53 74 61 63 6b 28 29 3b 0a 20 20 73 71 6c 69  pStack();.  sqli
13210 74 65 33 5f 65 78 65 63 28 64 62 2c 20 61 72 67  te3_exec(db, arg
13220 76 5b 32 5d 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  v[2], 0, 0, 0);.
13230 20 20 66 6f 72 28 69 3d 36 35 35 33 35 3b 20 69    for(i=65535; i
13240 3e 3d 30 20 26 26 20 28 28 75 33 32 2a 29 73 71  >=0 && ((u32*)sq
13250 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65  lite3_stack_base
13260 6c 69 6e 65 29 5b 2d 69 5d 3d 3d 30 78 64 65 61  line)[-i]==0xdea
13270 64 62 65 65 66 3b 20 69 2d 2d 29 7b 7d 0a 20 20  dbeef; i--){}.  
13280 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
13290 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
132a0 49 6e 74 4f 62 6a 28 69 2a 34 29 29 3b 0a 20 20  IntObj(i*4));.  
132b0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
132c0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
132d0 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e  qlite_delete_fun
132e0 63 74 69 6f 6e 20 44 42 20 66 75 6e 63 74 69 6f  ction DB functio
132f0 6e 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c  n-name.**.** Del
13300 65 74 65 20 74 68 65 20 75 73 65 72 20 66 75 6e  ete the user fun
13310 63 74 69 6f 6e 20 27 66 75 6e 63 74 69 6f 6e 2d  ction 'function-
13320 6e 61 6d 65 27 20 66 72 6f 6d 20 64 61 74 61 62  name' from datab
13330 61 73 65 20 68 61 6e 64 6c 65 20 44 42 2e 20 49  ase handle DB. I
13340 74 0a 2a 2a 20 69 73 20 61 73 73 75 6d 65 64 20  t.** is assumed 
13350 74 68 61 74 20 74 68 65 20 75 73 65 72 20 66 75  that the user fu
13360 6e 63 74 69 6f 6e 20 77 61 73 20 63 72 65 61 74  nction was creat
13370 65 64 20 61 73 20 55 54 46 38 2c 20 61 6e 79 20  ed as UTF8, any 
13380 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 61 72 67  number of.** arg
13390 75 6d 65 6e 74 73 20 28 74 68 65 20 77 61 79 20  uments (the way 
133a0 74 68 65 20 54 43 4c 20 69 6e 74 65 72 66 61 63  the TCL interfac
133b0 65 20 64 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a 73  e does it)..*/.s
133c0 74 61 74 69 63 20 69 6e 74 20 64 65 6c 65 74 65  tatic int delete
133d0 5f 66 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69  _function(.  voi
133e0 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
133f0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
13400 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63  terp,.  int argc
13410 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a  ,.  char **argv.
13420 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73  ){.  int rc;.  s
13430 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66  qlite3 *db;.  if
13440 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20  ( argc!=3 ){.   
13450 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
13460 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
13470 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
13480 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
13490 20 0a 20 20 20 20 20 20 20 20 22 20 44 42 20 66   .        " DB f
134a0 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 22 2c 20 30  unction-name", 0
134b0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
134c0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
134d0 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
134e0 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
134f0 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
13500 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
13510 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
13520 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 61 72 67  function(db, arg
13530 76 5b 32 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45  v[2], -1, SQLITE
13540 5f 55 54 46 38 2c 20 30 2c 20 30 2c 20 30 2c 20  _UTF8, 0, 0, 0, 
13550 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73  0);.  Tcl_SetRes
13560 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
13570 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63  r *)errorName(rc
13580 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a  ), TCL_STATIC);.
13590 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
135a0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
135b0 20 73 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 63   sqlite_delete_c
135c0 6f 6c 6c 61 74 69 6f 6e 20 44 42 20 63 6f 6c 6c  ollation DB coll
135d0 61 74 69 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a  ation-name.**.**
135e0 20 44 65 6c 65 74 65 20 74 68 65 20 63 6f 6c 6c   Delete the coll
135f0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 27  ation sequence '
13600 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 27 20  collation-name' 
13610 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 68 61  from database ha
13620 6e 64 6c 65 20 0a 2a 2a 20 44 42 2e 20 49 74 20  ndle .** DB. It 
13630 69 73 20 61 73 73 75 6d 65 64 20 74 68 61 74 20  is assumed that 
13640 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
13650 71 75 65 6e 63 65 20 77 61 73 20 63 72 65 61 74  quence was creat
13660 65 64 20 61 73 20 55 54 46 38 20 28 74 68 65 20  ed as UTF8 (the 
13670 0a 2a 2a 20 77 61 79 20 74 68 65 20 54 43 4c 20  .** way the TCL 
13680 69 6e 74 65 72 66 61 63 65 20 64 6f 65 73 20 69  interface does i
13690 74 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  t)..*/.static in
136a0 74 20 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69  t delete_collati
136b0 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  on(.  void * cli
136c0 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
136d0 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
136e0 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61   int argc,.  cha
136f0 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e  r **argv.){.  in
13700 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20  t rc;.  sqlite3 
13710 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63 21  *db;.  if( argc!
13720 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
13730 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
13740 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
13750 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
13760 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
13770 20 20 20 22 20 44 42 20 66 75 6e 63 74 69 6f 6e     " DB function
13780 2d 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20  -name", 0);.    
13790 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
137a0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
137b0 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
137c0 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
137d0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
137e0 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
137f0 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
13800 6f 6e 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20  on(db, argv[2], 
13810 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20  SQLITE_UTF8, 0, 
13820 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73  0);.  Tcl_SetRes
13830 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
13840 72 20 2a 29 65 72 72 6f 72 4e 61 6d 65 28 72 63  r *)errorName(rc
13850 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a  ), TCL_STATIC);.
13860 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
13870 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
13880 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74   sqlite3_get_aut
13890 6f 63 6f 6d 6d 69 74 20 44 42 0a 2a 2a 0a 2a 2a  ocommit DB.**.**
138a0 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
138b0 74 68 65 20 64 61 74 61 62 61 73 65 20 44 42 20  the database DB 
138c0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  is currently in 
138d0 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65  auto-commit mode
138e0 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 66 61 6c 73  ..** Return fals
138f0 65 20 69 66 20 6e 6f 74 2e 0a 2a 2f 0a 73 74 61  e if not..*/.sta
13900 74 69 63 20 69 6e 74 20 67 65 74 5f 61 75 74 6f  tic int get_auto
13910 63 6f 6d 6d 69 74 28 0a 20 20 76 6f 69 64 20 2a  commit(.  void *
13920 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
13930 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
13940 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20  p,.  int argc,. 
13950 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a   char **argv.){.
13960 20 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b    char zBuf[30];
13970 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
13980 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b    if( argc!=2 ){
13990 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
139a0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
139b0 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
139c0 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
139d0 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20  [0], .        " 
139e0 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  DB", 0);.    ret
139f0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
13a00 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
13a10 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
13a20 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
13a30 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
13a40 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
13a50 22 25 64 22 2c 20 73 71 6c 69 74 65 33 5f 67 65  "%d", sqlite3_ge
13a60 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 64 62 29  t_autocommit(db)
13a70 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  );.  Tcl_AppendR
13a80 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42  esult(interp, zB
13a90 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e  uf, 0);.  return
13aa0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
13ab0 2a 20 55 73 61 67 65 3a 20 20 74 63 6c 5f 76 61  * Usage:  tcl_va
13ac0 72 69 61 62 6c 65 5f 74 79 70 65 20 56 41 52 49  riable_type VARI
13ad0 41 42 4c 45 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 52  ABLENAME.**.** R
13ae0 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f  eturn the name o
13af0 66 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  f the internal r
13b00 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f  epresentation fo
13b10 72 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f  r the.** value o
13b20 66 20 74 68 65 20 67 69 76 65 6e 20 76 61 72 69  f the given vari
13b30 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  able..*/.static 
13b40 69 6e 74 20 74 63 6c 5f 76 61 72 69 61 62 6c 65  int tcl_variable
13b50 5f 74 79 70 65 28 0a 20 20 76 6f 69 64 20 2a 20  _type(.  void * 
13b60 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
13b70 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
13b80 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
13b90 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
13ba0 62 6a 76 5b 5d 0a 29 7b 0a 20 20 54 63 6c 5f 4f  bjv[].){.  Tcl_O
13bb0 62 6a 20 2a 70 56 61 72 3b 0a 20 20 69 66 28 20  bj *pVar;.  if( 
13bc0 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
13bd0 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
13be0 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
13bf0 20 22 56 41 52 49 41 42 4c 45 22 29 3b 0a 20 20   "VARIABLE");.  
13c00 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
13c10 4f 52 3b 0a 20 20 7d 0a 20 20 70 56 61 72 20 3d  OR;.  }.  pVar =
13c20 20 54 63 6c 5f 47 65 74 56 61 72 32 45 78 28 69   Tcl_GetVar2Ex(i
13c30 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
13c40 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 30  ring(objv[1]), 0
13c50 2c 20 54 43 4c 5f 4c 45 41 56 45 5f 45 52 52 5f  , TCL_LEAVE_ERR_
13c60 4d 53 47 29 3b 0a 20 20 69 66 28 20 70 56 61 72  MSG);.  if( pVar
13c70 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ==0 ) return TCL
13c80 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 70 56  _ERROR;.  if( pV
13c90 61 72 2d 3e 74 79 70 65 50 74 72 20 29 7b 0a 20  ar->typePtr ){. 
13ca0 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73     Tcl_SetObjRes
13cb0 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
13cc0 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 70 56 61  NewStringObj(pVa
13cd0 72 2d 3e 74 79 70 65 50 74 72 2d 3e 6e 61 6d 65  r->typePtr->name
13ce0 2c 20 2d 31 29 29 3b 0a 20 20 7d 0a 20 20 72 65  , -1));.  }.  re
13cf0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
13d00 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
13d10 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65  lite3_release_me
13d20 6d 6f 72 79 20 3f 4e 3f 0a 2a 2a 0a 2a 2a 20 41  mory ?N?.**.** A
13d30 74 74 65 6d 70 74 20 74 6f 20 72 65 6c 65 61 73  ttempt to releas
13d40 65 20 6d 65 6d 6f 72 79 20 63 75 72 72 65 6e 74  e memory current
13d50 6c 79 20 68 65 6c 64 20 62 75 74 20 6e 6f 74 20  ly held but not 
13d60 61 63 74 75 61 6c 6c 79 20 72 65 71 75 69 72 65  actually require
13d70 64 2e 0a 2a 2a 20 54 68 65 20 69 6e 74 65 67 65  d..** The intege
13d80 72 20 4e 20 69 73 20 74 68 65 20 6e 75 6d 62 65  r N is the numbe
13d90 72 20 6f 66 20 62 79 74 65 73 20 77 65 20 61 72  r of bytes we ar
13da0 65 20 74 72 79 69 6e 67 20 74 6f 20 72 65 6c 65  e trying to rele
13db0 61 73 65 2e 20 20 54 68 65 20 0a 2a 2a 20 72 65  ase.  The .** re
13dc0 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 74 68  turn value is th
13dd0 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f  e amount of memo
13de0 72 79 20 61 63 74 75 61 6c 6c 79 20 72 65 6c 65  ry actually rele
13df0 61 73 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ased..*/.static 
13e00 69 6e 74 20 74 65 73 74 5f 72 65 6c 65 61 73 65  int test_release
13e10 5f 6d 65 6d 6f 72 79 28 0a 20 20 76 6f 69 64 20  _memory(.  void 
13e20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
13e30 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
13e40 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
13e50 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
13e60 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
13e70 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d  ef SQLITE_OMIT_M
13e80 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54  EMORY_MANAGEMENT
13e90 0a 20 20 69 6e 74 20 4e 3b 0a 20 20 69 6e 74 20  .  int N;.  int 
13ea0 61 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21  amt;.  if( objc!
13eb0 3d 31 20 26 26 20 6f 62 6a 63 21 3d 32 20 29 7b  =1 && objc!=2 ){
13ec0 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75  .    Tcl_WrongNu
13ed0 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
13ee0 20 6f 62 6a 76 2c 20 22 3f 4e 3f 22 29 3b 0a 20   objv, "?N?");. 
13ef0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
13f00 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6f  ROR;.  }.  if( o
13f10 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20 20 69 66  bjc==2 ){.    if
13f20 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
13f30 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
13f40 5b 31 5d 2c 20 26 4e 29 20 29 20 72 65 74 75 72  [1], &N) ) retur
13f50 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
13f60 65 6c 73 65 7b 0a 20 20 20 20 4e 20 3d 20 2d 31  else{.    N = -1
13f70 3b 0a 20 20 7d 0a 20 20 61 6d 74 20 3d 20 73 71  ;.  }.  amt = sq
13f80 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65  lite3_release_me
13f90 6d 6f 72 79 28 4e 29 3b 0a 20 20 54 63 6c 5f 53  mory(N);.  Tcl_S
13fa0 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
13fb0 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
13fc0 6a 28 61 6d 74 29 29 3b 0a 23 65 6e 64 69 66 0a  j(amt));.#endif.
13fd0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
13fe0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
13ff0 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68    sqlite3_soft_h
14000 65 61 70 5f 6c 69 6d 69 74 20 3f 4e 3f 0a 2a 2a  eap_limit ?N?.**
14010 0a 2a 2a 20 51 75 65 72 79 20 6f 72 20 73 65 74  .** Query or set
14020 20 74 68 65 20 73 6f 66 74 20 68 65 61 70 20 6c   the soft heap l
14030 69 6d 69 74 20 66 6f 72 20 74 68 65 20 63 75 72  imit for the cur
14040 72 65 6e 74 20 74 68 72 65 61 64 2e 20 20 54 68  rent thread.  Th
14050 65 0a 2a 2a 20 6c 69 6d 69 74 20 69 73 20 6f 6e  e.** limit is on
14060 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20 74 68  ly changed if th
14070 65 20 4e 20 69 73 20 70 72 65 73 65 6e 74 2e 20  e N is present. 
14080 20 54 68 65 20 70 72 65 76 69 6f 75 73 20 6c 69   The previous li
14090 6d 69 74 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  mit.** is return
140a0 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ed..*/.static in
140b0 74 20 74 65 73 74 5f 73 6f 66 74 5f 68 65 61 70  t test_soft_heap
140c0 5f 6c 69 6d 69 74 28 0a 20 20 76 6f 69 64 20 2a  _limit(.  void *
140d0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
140e0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
140f0 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
14100 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
14110 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65  objv[].){.#ifnde
14120 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45  f SQLITE_OMIT_ME
14130 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 0a  MORY_MANAGEMENT.
14140 20 20 69 6e 74 20 61 6d 74 3b 0a 20 20 69 66 28    int amt;.  if(
14150 20 6f 62 6a 63 21 3d 31 20 26 26 20 6f 62 6a 63   objc!=1 && objc
14160 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=2 ){.    Tcl_W
14170 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
14180 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 4e  rp, 1, objv, "?N
14190 3f 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  ?");.    return 
141a0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
141b0 20 61 6d 74 20 3d 20 73 71 6c 69 74 65 33 54 73   amt = sqlite3Ts
141c0 64 28 29 2d 3e 6e 53 6f 66 74 48 65 61 70 4c 69  d()->nSoftHeapLi
141d0 6d 69 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63 3d  mit;.  if( objc=
141e0 3d 32 20 29 7b 0a 20 20 20 20 69 6e 74 20 4e 3b  =2 ){.    int N;
141f0 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74  .    if( Tcl_Get
14200 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
14210 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 4e 29 20  p, objv[1], &N) 
14220 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
14230 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  OR;.    sqlite3_
14240 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 28  soft_heap_limit(
14250 4e 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65  N);.  }.  Tcl_Se
14260 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
14270 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a  p, Tcl_NewIntObj
14280 28 61 6d 74 29 29 3b 0a 23 65 6e 64 69 66 0a 20  (amt));.#endif. 
14290 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
142a0 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 72 6f  }../*.** This ro
142b0 75 74 69 6e 65 20 73 65 74 73 20 65 6e 74 72 69  utine sets entri
142c0 65 73 20 69 6e 20 74 68 65 20 67 6c 6f 62 61 6c  es in the global
142d0 20 3a 3a 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e   ::sqlite_option
142e0 73 28 29 20 61 72 72 61 79 20 76 61 72 69 61 62  s() array variab
142f0 6c 65 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 20  le.** according 
14300 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74  to the compile-t
14310 69 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ime configuratio
14320 6e 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  n of the databas
14330 65 2e 20 20 54 65 73 74 0a 2a 2a 20 70 72 6f 63  e.  Test.** proc
14340 65 64 75 72 65 73 20 75 73 65 20 74 68 69 73 20  edures use this 
14350 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  to determine whe
14360 6e 20 74 65 73 74 73 20 73 68 6f 75 6c 64 20 62  n tests should b
14370 65 20 6f 6d 69 74 74 65 64 2e 0a 2a 2f 0a 73 74  e omitted..*/.st
14380 61 74 69 63 20 76 6f 69 64 20 73 65 74 5f 6f 70  atic void set_op
14390 74 69 6f 6e 73 28 54 63 6c 5f 49 6e 74 65 72 70  tions(Tcl_Interp
143a0 20 2a 69 6e 74 65 72 70 29 7b 0a 23 69 66 64 65   *interp){.#ifde
143b0 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52  f SQLITE_32BIT_R
143c0 4f 57 49 44 0a 20 20 54 63 6c 5f 53 65 74 56 61  OWID.  Tcl_SetVa
143d0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
143e0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72 6f  te_options", "ro
143f0 77 69 64 33 32 22 2c 20 22 31 22 2c 20 54 43 4c  wid32", "1", TCL
14400 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
14410 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61  else.  Tcl_SetVa
14420 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
14430 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72 6f  te_options", "ro
14440 77 69 64 33 32 22 2c 20 22 30 22 2c 20 54 43 4c  wid32", "0", TCL
14450 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
14460 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
14470 4c 49 54 45 5f 43 41 53 45 5f 53 45 4e 53 49 54  LITE_CASE_SENSIT
14480 49 56 45 5f 4c 49 4b 45 0a 20 20 54 63 6c 5f 53  IVE_LIKE.  Tcl_S
14490 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
144a0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
144b0 22 63 61 73 65 73 65 6e 73 69 74 69 76 65 6c 69  "casesensitiveli
144c0 6b 65 22 2c 22 31 22 2c 54 43 4c 5f 47 4c 4f 42  ke","1",TCL_GLOB
144d0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
144e0 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
144f0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
14500 74 69 6f 6e 73 22 2c 22 63 61 73 65 73 65 6e 73  tions","casesens
14510 69 74 69 76 65 6c 69 6b 65 22 2c 22 30 22 2c 54  itivelike","0",T
14520 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
14530 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
14540 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 44  SQLITE_DISABLE_D
14550 49 52 53 59 4e 43 0a 20 20 54 63 6c 5f 53 65 74  IRSYNC.  Tcl_Set
14560 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
14570 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
14580 64 69 72 73 79 6e 63 22 2c 20 22 30 22 2c 20 54  dirsync", "0", T
14590 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
145a0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
145b0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
145c0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
145d0 64 69 72 73 79 6e 63 22 2c 20 22 31 22 2c 20 54  dirsync", "1", T
145e0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
145f0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
14600 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
14610 46 53 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  FS.  Tcl_SetVar2
14620 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
14630 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6c 66 73 22  _options", "lfs"
14640 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
14650 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
14660 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
14670 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
14680 69 6f 6e 73 22 2c 20 22 6c 66 73 22 2c 20 22 31  ions", "lfs", "1
14690 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
146a0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
146b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
146c0 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 54 63 6c  ALTERTABLE.  Tcl
146d0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
146e0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
146f0 22 2c 20 22 61 6c 74 65 72 74 61 62 6c 65 22 2c  ", "altertable",
14700 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
14710 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
14720 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
14730 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
14740 6f 6e 73 22 2c 20 22 61 6c 74 65 72 74 61 62 6c  ons", "altertabl
14750 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  e", "1", TCL_GLO
14760 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
14770 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
14780 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 0a 20 20  _OMIT_ANALYZE.  
14790 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
147a0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
147b0 6f 6e 73 22 2c 20 22 61 6e 61 6c 79 7a 65 22 2c  ons", "analyze",
147c0 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
147d0 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
147e0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
147f0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
14800 6f 6e 73 22 2c 20 22 61 6e 61 6c 79 7a 65 22 2c  ons", "analyze",
14810 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
14820 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
14830 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
14840 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
14850 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
14860 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
14870 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 68 22 2c  ptions", "auth",
14880 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
14890 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
148a0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
148b0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
148c0 6f 6e 73 22 2c 20 22 61 75 74 68 22 2c 20 22 31  ons", "auth", "1
148d0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
148e0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
148f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
14900 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20  AUTOINCREMENT.  
14910 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
14920 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
14930 6f 6e 73 22 2c 20 22 61 75 74 6f 69 6e 63 22 2c  ons", "autoinc",
14940 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
14950 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
14960 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
14970 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
14980 6f 6e 73 22 2c 20 22 61 75 74 6f 69 6e 63 22 2c  ons", "autoinc",
14990 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
149a0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
149b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
149c0 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
149d0 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
149e0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
149f0 6f 6e 73 22 2c 20 22 61 75 74 6f 76 61 63 75 75  ons", "autovacuu
14a00 6d 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  m", "0", TCL_GLO
14a10 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
14a20 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
14a30 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
14a40 70 74 69 6f 6e 73 22 2c 20 22 61 75 74 6f 76 61  ptions", "autova
14a50 63 75 75 6d 22 2c 20 22 31 22 2c 20 54 43 4c 5f  cuum", "1", TCL_
14a60 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
14a70 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
14a80 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 20 2a  MIT_AUTOVACUUM *
14a90 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
14aa0 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 41 55  QLITE_DEFAULT_AU
14ab0 54 4f 56 41 43 55 55 4d 29 20 7c 7c 20 53 51 4c  TOVACUUM) || SQL
14ac0 49 54 45 5f 44 45 46 41 55 4c 54 5f 41 55 54 4f  ITE_DEFAULT_AUTO
14ad0 56 41 43 55 55 4d 3d 3d 30 0a 20 20 54 63 6c 5f  VACUUM==0.  Tcl_
14ae0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 22  SetVar2(interp,"
14af0 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
14b00 22 64 65 66 61 75 6c 74 5f 61 75 74 6f 76 61 63  "default_autovac
14b10 75 75 6d 22 2c 22 30 22 2c 54 43 4c 5f 47 4c 4f  uum","0",TCL_GLO
14b20 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
14b30 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
14b40 6e 74 65 72 70 2c 22 73 71 6c 69 74 65 5f 6f 70  nterp,"sqlite_op
14b50 74 69 6f 6e 73 22 2c 22 64 65 66 61 75 6c 74 5f  tions","default_
14b60 61 75 74 6f 76 61 63 75 75 6d 22 2c 22 31 22 2c  autovacuum","1",
14b70 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
14b80 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
14b90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 45 54   SQLITE_OMIT_BET
14ba0 57 45 45 4e 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  WEEN_OPTIMIZATIO
14bb0 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  N.  Tcl_SetVar2(
14bc0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
14bd0 6f 70 74 69 6f 6e 73 22 2c 20 22 62 65 74 77 65  options", "betwe
14be0 65 6e 5f 6f 70 74 22 2c 20 22 30 22 2c 20 54 43  en_opt", "0", TC
14bf0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
14c00 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
14c10 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
14c20 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 62  ite_options", "b
14c30 65 74 77 65 65 6e 5f 6f 70 74 22 2c 20 22 31 22  etween_opt", "1"
14c40 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
14c50 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
14c60 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
14c70 4c 4f 42 5f 4c 49 54 45 52 41 4c 0a 20 20 54 63  LOB_LITERAL.  Tc
14c80 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14c90 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
14ca0 73 22 2c 20 22 62 6c 6f 62 6c 69 74 22 2c 20 22  s", "bloblit", "
14cb0 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
14cc0 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
14cd0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14ce0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
14cf0 73 22 2c 20 22 62 6c 6f 62 6c 69 74 22 2c 20 22  s", "bloblit", "
14d00 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
14d10 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
14d20 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
14d30 5f 43 41 53 54 0a 20 20 54 63 6c 5f 53 65 74 56  _CAST.  Tcl_SetV
14d40 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
14d50 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63  ite_options", "c
14d60 61 73 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ast", "0", TCL_G
14d70 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
14d80 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
14d90 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
14da0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 61 73 74  _options", "cast
14db0 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
14dc0 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
14dd0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
14de0 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 54 63 6c  OMIT_CHECK.  Tcl
14df0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
14e00 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
14e10 22 2c 20 22 63 68 65 63 6b 22 2c 20 22 30 22 2c  ", "check", "0",
14e20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
14e30 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
14e40 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
14e50 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
14e60 20 22 63 68 65 63 6b 22 2c 20 22 31 22 2c 20 54   "check", "1", T
14e70 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
14e80 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
14e90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
14ea0 4c 45 54 45 0a 20 20 54 63 6c 5f 53 65 74 56 61  LETE.  Tcl_SetVa
14eb0 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
14ec0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f  te_options", "co
14ed0 6d 70 6c 65 74 65 22 2c 20 22 30 22 2c 20 54 43  mplete", "0", TC
14ee0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
14ef0 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
14f00 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
14f10 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63  ite_options", "c
14f20 6f 6d 70 6c 65 74 65 22 2c 20 22 31 22 2c 20 54  omplete", "1", T
14f30 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
14f40 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
14f50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
14f60 4f 55 4e 44 5f 53 45 4c 45 43 54 0a 20 20 54 63  OUND_SELECT.  Tc
14f70 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
14f80 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
14f90 73 22 2c 20 22 63 6f 6d 70 6f 75 6e 64 22 2c 20  s", "compound", 
14fa0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
14fb0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
14fc0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
14fd0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
14fe0 6e 73 22 2c 20 22 63 6f 6d 70 6f 75 6e 64 22 2c  ns", "compound",
14ff0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
15000 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
15010 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
15020 49 54 5f 43 4f 4e 46 4c 49 43 54 5f 43 4c 41 55  IT_CONFLICT_CLAU
15030 53 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  SE.  Tcl_SetVar2
15040 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
15050 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6e 66  _options", "conf
15060 6c 69 63 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f  lict", "0", TCL_
15070 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
15080 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
15090 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
150a0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 63 6f 6e  e_options", "con
150b0 66 6c 69 63 74 22 2c 20 22 31 22 2c 20 54 43 4c  flict", "1", TCL
150c0 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
150d0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
150e0 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49  LITE_OMIT_DATETI
150f0 4d 45 5f 46 55 4e 43 53 0a 20 20 54 63 6c 5f 53  ME_FUNCS.  Tcl_S
15100 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
15110 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
15120 20 22 64 61 74 65 74 69 6d 65 22 2c 20 22 30 22   "datetime", "0"
15130 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
15140 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
15150 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
15160 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
15170 2c 20 22 64 61 74 65 74 69 6d 65 22 2c 20 22 31  , "datetime", "1
15180 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
15190 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
151a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
151b0 44 49 53 4b 49 4f 0a 20 20 54 63 6c 5f 53 65 74  DISKIO.  Tcl_Set
151c0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
151d0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
151e0 64 69 73 6b 69 6f 22 2c 20 22 30 22 2c 20 54 43  diskio", "0", TC
151f0 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
15200 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
15210 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
15220 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 64  ite_options", "d
15230 69 73 6b 69 6f 22 2c 20 22 31 22 2c 20 54 43 4c  iskio", "1", TCL
15240 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
15250 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
15260 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
15270 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  N.  Tcl_SetVar2(
15280 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
15290 6f 70 74 69 6f 6e 73 22 2c 20 22 65 78 70 6c 61  options", "expla
152a0 69 6e 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  in", "0", TCL_GL
152b0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
152c0 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
152d0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
152e0 6f 70 74 69 6f 6e 73 22 2c 20 22 65 78 70 6c 61  options", "expla
152f0 69 6e 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  in", "1", TCL_GL
15300 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
15310 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
15320 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
15330 50 4f 49 4e 54 0a 20 20 54 63 6c 5f 53 65 74 56  POINT.  Tcl_SetV
15340 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
15350 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66  ite_options", "f
15360 6c 6f 61 74 69 6e 67 70 6f 69 6e 74 22 2c 20 22  loatingpoint", "
15370 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
15380 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
15390 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
153a0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
153b0 73 22 2c 20 22 66 6c 6f 61 74 69 6e 67 70 6f 69  s", "floatingpoi
153c0 6e 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  nt", "1", TCL_GL
153d0 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
153e0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
153f0 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
15400 45 59 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  EY.  Tcl_SetVar2
15410 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
15420 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66 6f 72 65  _options", "fore
15430 69 67 6e 6b 65 79 22 2c 20 22 30 22 2c 20 54 43  ignkey", "0", TC
15440 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
15450 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
15460 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
15470 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 66  ite_options", "f
15480 6f 72 65 69 67 6e 6b 65 79 22 2c 20 22 31 22 2c  oreignkey", "1",
15490 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
154a0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
154b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c  f SQLITE_OMIT_GL
154c0 4f 42 41 4c 52 45 43 4f 56 45 52 0a 20 20 54 63  OBALRECOVER.  Tc
154d0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
154e0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
154f0 73 22 2c 20 22 67 6c 6f 62 61 6c 72 65 63 6f 76  s", "globalrecov
15500 65 72 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c  er", "0", TCL_GL
15510 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73  OBAL_ONLY);.#els
15520 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  e.  Tcl_SetVar2(
15530 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
15540 6f 70 74 69 6f 6e 73 22 2c 20 22 67 6c 6f 62 61  options", "globa
15550 6c 72 65 63 6f 76 65 72 22 2c 20 22 31 22 2c 20  lrecover", "1", 
15560 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
15570 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
15580 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
15590 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20 54  EGRITY_CHECK.  T
155a0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
155b0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
155c0 6e 73 22 2c 20 22 69 6e 74 65 67 72 69 74 79 63  ns", "integrityc
155d0 6b 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  k", "0", TCL_GLO
155e0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
155f0 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
15600 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
15610 70 74 69 6f 6e 73 22 2c 20 22 69 6e 74 65 67 72  ptions", "integr
15620 69 74 79 63 6b 22 2c 20 22 31 22 2c 20 54 43 4c  ityck", "1", TCL
15630 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23  _GLOBAL_ONLY);.#
15640 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
15650 4c 49 54 45 5f 4f 4d 49 54 5f 4c 49 4b 45 5f 4f  LITE_OMIT_LIKE_O
15660 50 54 49 4d 49 5a 41 54 49 4f 4e 0a 20 20 54 63  PTIMIZATION.  Tc
15670 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15680 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
15690 73 22 2c 20 22 6c 69 6b 65 5f 6f 70 74 22 2c 20  s", "like_opt", 
156a0 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
156b0 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
156c0 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
156d0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
156e0 6e 73 22 2c 20 22 6c 69 6b 65 5f 6f 70 74 22 2c  ns", "like_opt",
156f0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
15700 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
15710 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
15720 49 54 5f 4d 45 4d 4f 52 59 44 42 0a 20 20 54 63  IT_MEMORYDB.  Tc
15730 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15740 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
15750 73 22 2c 20 22 6d 65 6d 6f 72 79 64 62 22 2c 20  s", "memorydb", 
15760 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
15770 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
15780 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
15790 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
157a0 6e 73 22 2c 20 22 6d 65 6d 6f 72 79 64 62 22 2c  ns", "memorydb",
157b0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
157c0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
157d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
157e0 49 54 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45  IT_MEMORY_MANAGE
157f0 4d 45 4e 54 0a 20 20 54 63 6c 5f 53 65 74 56 61  MENT.  Tcl_SetVa
15800 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
15810 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6d 65  te_options", "me
15820 6d 6f 72 79 6d 61 6e 61 67 65 22 2c 20 22 30 22  morymanage", "0"
15830 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
15840 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
15850 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
15860 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
15870 2c 20 22 6d 65 6d 6f 72 79 6d 61 6e 61 67 65 22  , "memorymanage"
15880 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
15890 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
158a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
158b0 4d 49 54 5f 4f 52 5f 4f 50 54 49 4d 49 5a 41 54  MIT_OR_OPTIMIZAT
158c0 49 4f 4e 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  ION.  Tcl_SetVar
158d0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
158e0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6f 72 5f  e_options", "or_
158f0 6f 70 74 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  opt", "0", TCL_G
15900 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
15910 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
15920 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
15930 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 6f 72 5f 6f  _options", "or_o
15940 70 74 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c  pt", "1", TCL_GL
15950 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  OBAL_ONLY);.#end
15960 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
15970 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
15980 47 4d 41 53 0a 20 20 54 63 6c 5f 53 65 74 56 61  GMAS.  Tcl_SetVa
15990 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
159a0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 61  te_options", "pa
159b0 67 65 72 5f 70 72 61 67 6d 61 73 22 2c 20 22 30  ger_pragmas", "0
159c0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
159d0 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
159e0 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
159f0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
15a00 22 2c 20 22 70 61 67 65 72 5f 70 72 61 67 6d 61  ", "pager_pragma
15a10 73 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  s", "1", TCL_GLO
15a20 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
15a30 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
15a40 5f 4f 4d 49 54 5f 50 41 52 53 45 52 0a 20 20 54  _OMIT_PARSER.  T
15a50 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
15a60 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
15a70 6e 73 22 2c 20 22 70 61 72 73 65 72 22 2c 20 22  ns", "parser", "
15a80 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  0", TCL_GLOBAL_O
15a90 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63  NLY);.#else.  Tc
15aa0 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70  l_SetVar2(interp
15ab0 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e  , "sqlite_option
15ac0 73 22 2c 20 22 70 61 72 73 65 72 22 2c 20 22 31  s", "parser", "1
15ad0 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
15ae0 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  LY);.#endif..#if
15af0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
15b00 4f 4d 49 54 5f 50 52 41 47 4d 41 29 20 7c 7c 20  OMIT_PRAGMA) || 
15b10 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
15b20 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
15b30 29 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  ).  Tcl_SetVar2(
15b40 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
15b50 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72 61 67 6d  options", "pragm
15b60 61 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  a", "0", TCL_GLO
15b70 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 20 20 54 63 6c  BAL_ONLY);.  Tcl
15b80 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
15b90 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
15ba0 22 2c 20 22 69 6e 74 65 67 72 69 74 79 63 6b 22  ", "integrityck"
15bb0 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
15bc0 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
15bd0 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
15be0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
15bf0 69 6f 6e 73 22 2c 20 22 70 72 61 67 6d 61 22 2c  ions", "pragma",
15c00 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
15c10 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
15c20 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
15c30 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
15c40 42 41 43 4b 0a 20 20 54 63 6c 5f 53 65 74 56 61  BACK.  Tcl_SetVa
15c50 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
15c60 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70 72  te_options", "pr
15c70 6f 67 72 65 73 73 22 2c 20 22 30 22 2c 20 54 43  ogress", "0", TC
15c80 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
15c90 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56  #else.  Tcl_SetV
15ca0 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  ar2(interp, "sql
15cb0 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 70  ite_options", "p
15cc0 72 6f 67 72 65 73 73 22 2c 20 22 31 22 2c 20 54  rogress", "1", T
15cd0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
15ce0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
15cf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 52 45 49 4e  SQLITE_OMIT_REIN
15d00 44 45 58 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  DEX.  Tcl_SetVar
15d10 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
15d20 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72 65 69  e_options", "rei
15d30 6e 64 65 78 22 2c 20 22 30 22 2c 20 54 43 4c 5f  ndex", "0", TCL_
15d40 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
15d50 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  lse.  Tcl_SetVar
15d60 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
15d70 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 72 65 69  e_options", "rei
15d80 6e 64 65 78 22 2c 20 22 31 22 2c 20 54 43 4c 5f  ndex", "1", TCL_
15d90 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65  GLOBAL_ONLY);.#e
15da0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
15db0 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
15dc0 50 52 41 47 4d 41 53 0a 20 20 54 63 6c 5f 53 65  PRAGMAS.  Tcl_Se
15dd0 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73  tVar2(interp, "s
15de0 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20  qlite_options", 
15df0 22 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 22  "schema_pragmas"
15e00 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "0", TCL_GLOBA
15e10 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20  L_ONLY);.#else. 
15e20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74   Tcl_SetVar2(int
15e30 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74  erp, "sqlite_opt
15e40 69 6f 6e 73 22 2c 20 22 73 63 68 65 6d 61 5f 70  ions", "schema_p
15e50 72 61 67 6d 61 73 22 2c 20 22 31 22 2c 20 54 43  ragmas", "1", TC
15e60 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a  L_GLOBAL_ONLY);.
15e70 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
15e80 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
15e90 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41  A_VERSION_PRAGMA
15ea0 53 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  S.  Tcl_SetVar2(
15eb0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
15ec0 6f 70 74 69 6f 6e 73 22 2c 20 22 73 63 68 65 6d  options", "schem
15ed0 61 5f 76 65 72 73 69 6f 6e 22 2c 20 22 30 22 2c  a_version", "0",
15ee0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
15ef0 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
15f00 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
15f10 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
15f20 20 22 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e   "schema_version
15f30 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "1", TCL_GLOB
15f40 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66  AL_ONLY);.#endif
15f50 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
15f60 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
15f70 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28  E.  Tcl_SetVar2(
15f80 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
15f90 6f 70 74 69 6f 6e 73 22 2c 20 22 73 68 61 72 65  options", "share
15fa0 64 5f 63 61 63 68 65 22 2c 20 22 30 22 2c 20 54  d_cache", "0", T
15fb0 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
15fc0 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
15fd0 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
15fe0 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
15ff0 73 68 61 72 65 64 5f 63 61 63 68 65 22 2c 20 22  shared_cache", "
16000 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
16010 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
16020 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
16030 5f 53 55 42 51 55 45 52 59 0a 20 20 54 63 6c 5f  _SUBQUERY.  Tcl_
16040 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
16050 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
16060 2c 20 22 73 75 62 71 75 65 72 79 22 2c 20 22 30  , "subquery", "0
16070 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e  ", TCL_GLOBAL_ON
16080 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c  LY);.#else.  Tcl
16090 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
160a0 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
160b0 22 2c 20 22 73 75 62 71 75 65 72 79 22 2c 20 22  ", "subquery", "
160c0 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
160d0 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
160e0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
160f0 5f 54 43 4c 5f 56 41 52 49 41 42 4c 45 0a 20 20  _TCL_VARIABLE.  
16100 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
16110 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
16120 6f 6e 73 22 2c 20 22 74 63 6c 76 61 72 22 2c 20  ons", "tclvar", 
16130 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "0", TCL_GLOBAL_
16140 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54  ONLY);.#else.  T
16150 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72  cl_SetVar2(inter
16160 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f  p, "sqlite_optio
16170 6e 73 22 2c 20 22 74 63 6c 76 61 72 22 2c 20 22  ns", "tclvar", "
16180 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f  1", TCL_GLOBAL_O
16190 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  NLY);.#endif..#i
161a0 66 20 64 65 66 69 6e 65 64 28 54 48 52 45 41 44  f defined(THREAD
161b0 53 41 46 45 29 20 26 26 20 54 48 52 45 41 44 53  SAFE) && THREADS
161c0 41 46 45 0a 20 20 54 63 6c 5f 53 65 74 56 61 72  AFE.  Tcl_SetVar
161d0 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  2(interp, "sqlit
161e0 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 68 72  e_options", "thr
161f0 65 61 64 73 61 66 65 22 2c 20 22 31 22 2c 20 54  eadsafe", "1", T
16200 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b  CL_GLOBAL_ONLY);
16210 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65 74  .#else.  Tcl_Set
16220 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71  Var2(interp, "sq
16230 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22  lite_options", "
16240 74 68 72 65 61 64 73 61 66 65 22 2c 20 22 30 22  threadsafe", "0"
16250 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
16260 59 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  Y);.#endif..#ifd
16270 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
16280 52 41 43 45 0a 20 20 54 63 6c 5f 53 65 74 56 61  RACE.  Tcl_SetVa
16290 72 32 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  r2(interp, "sqli
162a0 74 65 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72  te_options", "tr
162b0 61 63 65 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47  ace", "0", TCL_G
162c0 4c 4f 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c  LOBAL_ONLY);.#el
162d0 73 65 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  se.  Tcl_SetVar2
162e0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
162f0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 74 72 61 63  _options", "trac
16300 65 22 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f  e", "1", TCL_GLO
16310 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69  BAL_ONLY);.#endi
16320 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
16330 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
16340 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
16350 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
16360 6f 6e 73 22 2c 20 22 74 72 69 67 67 65 72 22 2c  ons", "trigger",
16370 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "0", TCL_GLOBAL
16380 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a 20 20  _ONLY);.#else.  
16390 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e 74 65  Tcl_SetVar2(inte
163a0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 74 69  rp, "sqlite_opti
163b0 6f 6e 73 22 2c 20 22 74 72 69 67 67 65 72 22 2c  ons", "trigger",
163c0 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c   "1", TCL_GLOBAL
163d0 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 0a  _ONLY);.#endif..
163e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
163f0 49 54 5f 54 45 4d 50 44 42 0a 20 20 54 63 6c 5f  IT_TEMPDB.  Tcl_
16400 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
16410 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
16420 2c 20 22 74 65 6d 70 64 62 22 2c 20 22 30 22 2c  , "tempdb", "0",
16430 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
16440 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53  );.#else.  Tcl_S
16450 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 22  etVar2(interp, "
16460 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22 2c  sqlite_options",
16470 20 22 74 65 6d 70 64 62 22 2c 20 22 31 22 2c 20   "tempdb", "1", 
16480 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59 29  TCL_GLOBAL_ONLY)
16490 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
164a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
164b0 31 36 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  16.  Tcl_SetVar2
164c0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
164d0 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 75 74 66 31  _options", "utf1
164e0 36 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f  6", "0", TCL_GLO
164f0 42 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65  BAL_ONLY);.#else
16500 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69  .  Tcl_SetVar2(i
16510 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
16520 70 74 69 6f 6e 73 22 2c 20 22 75 74 66 31 36 22  ptions", "utf16"
16530 2c 20 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41  , "1", TCL_GLOBA
16540 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  L_ONLY);.#endif.
16550 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
16560 4d 49 54 5f 56 41 43 55 55 4d 0a 20 20 54 63 6c  MIT_VACUUM.  Tcl
16570 5f 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  _SetVar2(interp,
16580 20 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   "sqlite_options
16590 22 2c 20 22 76 61 63 75 75 6d 22 2c 20 22 30 22  ", "vacuum", "0"
165a0 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c  , TCL_GLOBAL_ONL
165b0 59 29 3b 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f  Y);.#else.  Tcl_
165c0 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
165d0 22 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 22  "sqlite_options"
165e0 2c 20 22 76 61 63 75 75 6d 22 2c 20 22 31 22 2c  , "vacuum", "1",
165f0 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f 4f 4e 4c 59   TCL_GLOBAL_ONLY
16600 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
16610 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
16620 45 57 0a 20 20 54 63 6c 5f 53 65 74 56 61 72 32  EW.  Tcl_SetVar2
16630 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
16640 5f 6f 70 74 69 6f 6e 73 22 2c 20 22 76 69 65 77  _options", "view
16650 22 2c 20 22 30 22 2c 20 54 43 4c 5f 47 4c 4f 42  ", "0", TCL_GLOB
16660 41 4c 5f 4f 4e 4c 59 29 3b 0a 23 65 6c 73 65 0a  AL_ONLY);.#else.
16670 20 20 54 63 6c 5f 53 65 74 56 61 72 32 28 69 6e    Tcl_SetVar2(in
16680 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
16690 74 69 6f 6e 73 22 2c 20 22 76 69 65 77 22 2c 20  tions", "view", 
166a0 22 31 22 2c 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  "1", TCL_GLOBAL_
166b0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 7d 0a  ONLY);.#endif.}.
166c0 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  ./*.** Register 
166d0 63 6f 6d 6d 61 6e 64 73 20 77 69 74 68 20 74 68  commands with th
166e0 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
166f0 72 2e 0a 2a 2f 0a 69 6e 74 20 53 71 6c 69 74 65  r..*/.int Sqlite
16700 74 65 73 74 31 5f 49 6e 69 74 28 54 63 6c 5f 49  test1_Init(Tcl_I
16710 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29 7b 0a  nterp *interp){.
16720 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
16730 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
16740 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  t;.  extern int 
16750 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
16760 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72  t_count;.  exter
16770 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70  n int sqlite3_op
16780 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 3b 0a 20  en_file_count;. 
16790 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
167a0 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 3b 0a  te3_sort_count;.
167b0 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
167c0 69 74 65 33 5f 63 75 72 72 65 6e 74 5f 74 69 6d  ite3_current_tim
167d0 65 3b 0a 20 20 73 74 61 74 69 63 20 73 74 72 75  e;.  static stru
167e0 63 74 20 7b 0a 20 20 20 20 20 63 68 61 72 20 2a  ct {.     char *
167f0 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 54 63 6c 5f  zName;.     Tcl_
16800 43 6d 64 50 72 6f 63 20 2a 78 50 72 6f 63 3b 0a  CmdProc *xProc;.
16810 20 20 7d 20 61 43 6d 64 5b 5d 20 3d 20 7b 0a 20    } aCmd[] = {. 
16820 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
16830 70 72 69 6e 74 66 5f 69 6e 74 22 2c 20 20 20 20  printf_int",    
16840 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
16850 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
16860 69 6e 74 66 5f 69 6e 74 20 20 20 20 7d 2c 0a 20  intf_int    },. 
16870 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
16880 70 72 69 6e 74 66 5f 69 6e 74 36 34 22 2c 20 20  printf_int64",  
16890 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
168a0 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
168b0 69 6e 74 66 5f 69 6e 74 36 34 20 20 7d 2c 0a 20  intf_int64  },. 
168c0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
168d0 70 72 69 6e 74 66 5f 73 74 72 22 2c 20 20 20 20  printf_str",    
168e0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
168f0 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
16900 69 6e 74 66 5f 73 74 72 20 20 20 20 7d 2c 0a 20  intf_str    },. 
16910 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
16920 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 22 2c  printf_stronly",
16930 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
16940 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
16950 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 7d 2c 0a 20  intf_stronly},. 
16960 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
16970 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 22 2c 20  printf_double", 
16980 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
16990 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
169a0 69 6e 74 66 5f 64 6f 75 62 6c 65 20 7d 2c 0a 20  intf_double },. 
169b0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
169c0 70 72 69 6e 74 66 5f 73 63 61 6c 65 64 22 2c 20  printf_scaled", 
169d0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
169e0 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72  roc*)sqlite3_mpr
169f0 69 6e 74 66 5f 73 63 61 6c 65 64 20 7d 2c 0a 20  intf_scaled },. 
16a00 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
16a10 70 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65  printf_hexdouble
16a20 22 2c 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f  ",   (Tcl_CmdPro
16a30 63 2a 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  c*)sqlite3_mprin
16a40 74 66 5f 68 65 78 64 6f 75 62 6c 65 7d 2c 0a 20  tf_hexdouble},. 
16a50 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6d      { "sqlite3_m
16a60 70 72 69 6e 74 66 5f 7a 5f 74 65 73 74 22 2c 20  printf_z_test", 
16a70 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
16a80 72 6f 63 2a 29 74 65 73 74 5f 6d 70 72 69 6e 74  roc*)test_mprint
16a90 66 5f 7a 20 20 20 20 20 20 20 20 7d 2c 0a 20 20  f_z        },.  
16aa0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6c 61     { "sqlite3_la
16ab0 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 22  st_insert_rowid"
16ac0 2c 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72  ,     (Tcl_CmdPr
16ad0 6f 63 2a 29 74 65 73 74 5f 6c 61 73 74 5f 72 6f  oc*)test_last_ro
16ae0 77 69 64 20 20 20 20 20 20 20 7d 2c 0a 20 20 20  wid       },.   
16af0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 78 65    { "sqlite3_exe
16b00 63 5f 70 72 69 6e 74 66 22 2c 20 20 20 20 20 20  c_printf",      
16b10 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
16b20 63 2a 29 74 65 73 74 5f 65 78 65 63 5f 70 72 69  c*)test_exec_pri
16b30 6e 74 66 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  ntf      },.    
16b40 20 7b 20 22 73 71 6c 69 74 65 33 5f 67 65 74 5f   { "sqlite3_get_
16b50 74 61 62 6c 65 5f 70 72 69 6e 74 66 22 2c 20 20  table_printf",  
16b60 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
16b70 2a 29 74 65 73 74 5f 67 65 74 5f 74 61 62 6c 65  *)test_get_table
16b80 5f 70 72 69 6e 74 66 20 7d 2c 0a 20 20 20 20 20  _printf },.     
16b90 7b 20 22 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  { "sqlite3_close
16ba0 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
16bb0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
16bc0 29 73 71 6c 69 74 65 5f 74 65 73 74 5f 63 6c 6f  )sqlite_test_clo
16bd0 73 65 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b  se     },.     {
16be0 20 22 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65   "sqlite3_create
16bf0 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20 20  _function",     
16c00 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
16c10 74 65 73 74 5f 63 72 65 61 74 65 5f 66 75 6e 63  test_create_func
16c20 74 69 6f 6e 20 20 7d 2c 0a 20 20 20 20 20 7b 20  tion  },.     { 
16c30 22 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  "sqlite3_create_
16c40 61 67 67 72 65 67 61 74 65 22 2c 20 20 20 20 20  aggregate",     
16c50 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
16c60 65 73 74 5f 63 72 65 61 74 65 5f 61 67 67 72 65  est_create_aggre
16c70 67 61 74 65 20 7d 2c 0a 20 20 20 20 20 7b 20 22  gate },.     { "
16c80 73 71 6c 69 74 65 5f 72 65 67 69 73 74 65 72 5f  sqlite_register_
16c90 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  test_function", 
16ca0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
16cb0 73 74 5f 72 65 67 69 73 74 65 72 5f 66 75 6e 63  st_register_func
16cc0 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
16cd0 71 6c 69 74 65 5f 61 62 6f 72 74 22 2c 20 20 20  qlite_abort",   
16ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
16cf0 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c  Tcl_CmdProc*)sql
16d00 69 74 65 5f 61 62 6f 72 74 20 20 20 20 20 20 20  ite_abort       
16d10 20 20 20 7d 2c 0a 23 69 66 64 65 66 20 53 51 4c     },.#ifdef SQL
16d20 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 20  ITE_MEMDEBUG.   
16d30 20 20 7b 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c    { "sqlite_mall
16d40 6f 63 5f 66 61 69 6c 22 2c 20 20 20 20 20 20 20  oc_fail",       
16d50 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
16d60 63 2a 29 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  c*)sqlite_malloc
16d70 5f 66 61 69 6c 20 20 20 20 7d 2c 0a 20 20 20 20  _fail    },.    
16d80 20 7b 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f   { "sqlite_mallo
16d90 63 5f 73 74 61 74 22 2c 20 20 20 20 20 20 20 20  c_stat",        
16da0 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
16db0 2a 29 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f  *)sqlite_malloc_
16dc0 73 74 61 74 20 20 20 20 7d 2c 0a 23 65 6e 64 69  stat    },.#endi
16dd0 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  f.     { "sqlite
16de0 5f 62 69 6e 64 22 2c 20 20 20 20 20 20 20 20 20  _bind",         
16df0 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
16e00 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 62 69 6e  mdProc*)test_bin
16e10 64 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c  d             },
16e20 0a 20 20 20 20 20 7b 20 22 62 72 65 61 6b 70 6f  .     { "breakpo
16e30 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 20  int",           
16e40 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
16e50 64 50 72 6f 63 2a 29 74 65 73 74 5f 62 72 65 61  dProc*)test_brea
16e60 6b 70 6f 69 6e 74 20 20 20 20 20 20 20 7d 2c 0a  kpoint       },.
16e70 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
16e80 6b 65 79 22 2c 20 20 20 20 20 20 20 20 20 20 20  key",           
16e90 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
16ea0 50 72 6f 63 2a 29 74 65 73 74 5f 6b 65 79 20 20  Proc*)test_key  
16eb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
16ec0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 72      { "sqlite3_r
16ed0 65 6b 65 79 22 2c 20 20 20 20 20 20 20 20 20 20  ekey",          
16ee0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
16ef0 72 6f 63 2a 29 74 65 73 74 5f 72 65 6b 65 79 20  roc*)test_rekey 
16f00 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
16f10 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 73 65 74     { "sqlite_set
16f20 5f 6d 61 67 69 63 22 2c 20 20 20 20 20 20 20 20  _magic",        
16f30 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
16f40 6f 63 2a 29 73 71 6c 69 74 65 5f 73 65 74 5f 6d  oc*)sqlite_set_m
16f50 61 67 69 63 20 20 20 20 20 20 7d 2c 0a 20 20 20  agic      },.   
16f60 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 69 6e 74    { "sqlite3_int
16f70 65 72 72 75 70 74 22 2c 20 20 20 20 20 20 20 20  errupt",        
16f80 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
16f90 63 2a 29 74 65 73 74 5f 69 6e 74 65 72 72 75 70  c*)test_interrup
16fa0 74 20 20 20 20 20 20 20 20 7d 2c 0a 23 69 66 20  t        },.#if 
16fb0 30 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  0.     { "sqlite
16fc0 33 5f 73 6c 65 65 70 22 2c 20 20 20 20 20 20 20  3_sleep",       
16fd0 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
16fe0 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 73 6c 65  mdProc*)test_sle
16ff0 65 70 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c  ep            },
17000 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22  .#endif.     { "
17010 73 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 66 75  sqlite_delete_fu
17020 6e 63 74 69 6f 6e 22 2c 20 20 20 20 20 20 20 20  nction",        
17030 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 64 65  (Tcl_CmdProc*)de
17040 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 20 20 20  lete_function   
17050 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
17060 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 63 6f 6c  qlite_delete_col
17070 6c 61 74 69 6f 6e 22 2c 20 20 20 20 20 20 20 28  lation",       (
17080 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c  Tcl_CmdProc*)del
17090 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 20 20 20  ete_collation   
170a0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
170b0 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
170c0 6d 6d 69 74 22 2c 20 20 20 20 20 20 20 20 28 54  mmit",        (T
170d0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 67 65 74 5f  cl_CmdProc*)get_
170e0 61 75 74 6f 63 6f 6d 6d 69 74 20 20 20 20 20 20  autocommit      
170f0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
17100 69 74 65 33 5f 73 74 61 63 6b 5f 75 73 65 64 22  ite3_stack_used"
17110 2c 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63  ,            (Tc
17120 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
17130 73 74 61 63 6b 5f 75 73 65 64 20 20 20 20 20 20  stack_used      
17140 20 7d 2c 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69   },.  };.  stati
17150 63 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20  c struct {.     
17160 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20  char *zName;.   
17170 20 20 54 63 6c 5f 4f 62 6a 43 6d 64 50 72 6f 63    Tcl_ObjCmdProc
17180 20 2a 78 50 72 6f 63 3b 0a 20 20 20 20 20 76 6f   *xProc;.     vo
17190 69 64 20 2a 63 6c 69 65 6e 74 44 61 74 61 3b 0a  id *clientData;.
171a0 20 20 7d 20 61 4f 62 6a 43 6d 64 5b 5d 20 3d 20    } aObjCmd[] = 
171b0 7b 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  {.     { "sqlite
171c0 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69  3_connection_poi
171d0 6e 74 65 72 22 2c 20 20 20 20 67 65 74 5f 73 71  nter",    get_sq
171e0 6c 69 74 65 5f 70 6f 69 6e 74 65 72 2c 20 30 20  lite_pointer, 0 
171f0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
17200 65 33 5f 62 69 6e 64 5f 69 6e 74 22 2c 20 20 20  e3_bind_int",   
17210 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
17220 62 69 6e 64 5f 69 6e 74 2c 20 20 20 20 20 20 30  bind_int,      0
17230 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
17240 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 22 2c  te3_bind_int64",
17250 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
17260 5f 62 69 6e 64 5f 69 6e 74 36 34 2c 20 20 20 20  _bind_int64,    
17270 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
17280 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
17290 22 2c 20 20 20 20 20 20 20 20 20 20 20 74 65 73  ",           tes
172a0 74 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 2c 20 20  t_bind_double,  
172b0 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71   0 },.     { "sq
172c0 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 22  lite3_bind_null"
172d0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65  ,             te
172e0 73 74 5f 62 69 6e 64 5f 6e 75 6c 6c 20 20 20 20  st_bind_null    
172f0 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
17300 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
17310 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 74  ",             t
17320 65 73 74 5f 62 69 6e 64 5f 74 65 78 74 20 20 20  est_bind_text   
17330 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
17340 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
17350 74 31 36 22 2c 20 20 20 20 20 20 20 20 20 20 20  t16",           
17360 74 65 73 74 5f 62 69 6e 64 5f 74 65 78 74 31 36  test_bind_text16
17370 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
17380 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c  "sqlite3_bind_bl
17390 6f 62 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ob",            
173a0 20 74 65 73 74 5f 62 69 6e 64 5f 62 6c 6f 62 20   test_bind_blob 
173b0 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
173c0 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70   "sqlite3_bind_p
173d0 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 22 2c  arameter_count",
173e0 20 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61    test_bind_para
173f0 6d 65 74 65 72 5f 63 6f 75 6e 74 2c 20 30 7d 2c  meter_count, 0},
17400 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
17410 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
17420 6e 61 6d 65 22 2c 20 20 20 74 65 73 74 5f 62 69  name",   test_bi
17430 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
17440 65 2c 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22  e,  0},.     { "
17450 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
17460 61 6d 65 74 65 72 5f 69 6e 64 65 78 22 2c 20 20  ameter_index",  
17470 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65  test_bind_parame
17480 74 65 72 5f 69 6e 64 65 78 2c 20 30 7d 2c 0a 23  ter_index, 0},.#
17490 69 66 20 30 0a 20 20 20 20 20 7b 20 22 73 71 6c  if 0.     { "sql
174a0 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
174b0 6e 67 73 22 2c 20 20 20 20 20 20 20 20 74 65 73  ngs",        tes
174c0 74 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73  t_clear_bindings
174d0 2c 20 30 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20  , 0},.#endif.   
174e0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72    { "sqlite3_err
174f0 63 6f 64 65 22 2c 20 20 20 20 20 20 20 20 20 20  code",          
17500 20 20 20 20 20 74 65 73 74 5f 65 72 72 63 6f 64       test_errcod
17510 65 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20  e       ,0 },.  
17520 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72     { "sqlite3_er
17530 72 6d 73 67 22 2c 20 20 20 20 20 20 20 20 20 20  rmsg",          
17540 20 20 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73        test_errms
17550 67 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20  g        ,0 },. 
17560 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65      { "sqlite3_e
17570 72 72 6d 73 67 31 36 22 2c 20 20 20 20 20 20 20  rrmsg16",       
17580 20 20 20 20 20 20 20 74 65 73 74 5f 65 72 72 6d         test_errm
17590 73 67 31 36 20 20 20 20 20 20 2c 30 20 7d 2c 0a  sg16      ,0 },.
175a0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
175b0 6f 70 65 6e 22 2c 20 20 20 20 20 20 20 20 20 20  open",          
175c0 20 20 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65          test_ope
175d0 6e 20 20 20 20 20 20 20 20 20 20 2c 30 20 7d 2c  n          ,0 },
175e0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
175f0 5f 6f 70 65 6e 31 36 22 2c 20 20 20 20 20 20 20  _open16",       
17600 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 6f 70           test_op
17610 65 6e 31 36 20 20 20 20 20 20 20 20 2c 30 20 7d  en16        ,0 }
17620 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
17630 33 5f 63 6f 6d 70 6c 65 74 65 31 36 22 2c 20 20  3_complete16",  
17640 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63            test_c
17650 6f 6d 70 6c 65 74 65 31 36 20 20 20 20 2c 30 20  omplete16    ,0 
17660 7d 2c 0a 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  },..     { "sqli
17670 74 65 33 5f 70 72 65 70 61 72 65 22 2c 20 20 20  te3_prepare",   
17680 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
17690 5f 70 72 65 70 61 72 65 20 20 20 20 20 20 20 2c  _prepare       ,
176a0 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
176b0 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 22 2c  ite3_prepare16",
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
176d0 74 5f 70 72 65 70 61 72 65 31 36 20 20 20 20 20  t_prepare16     
176e0 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
176f0 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 22 2c  lite3_finalize",
17700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
17710 73 74 5f 66 69 6e 61 6c 69 7a 65 20 20 20 20 20  st_finalize     
17720 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
17730 71 6c 69 74 65 33 5f 72 65 73 65 74 22 2c 20 20  qlite3_reset",  
17740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17750 65 73 74 5f 72 65 73 65 74 20 20 20 20 20 20 20  est_reset       
17760 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
17770 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64 22  sqlite3_expired"
17780 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
17790 74 65 73 74 5f 65 78 70 69 72 65 64 20 20 20 20  test_expired    
177a0 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
177b0 22 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65  "sqlite3_transfe
177c0 72 5f 62 69 6e 64 69 6e 67 73 22 2c 20 20 20 20  r_bindings",    
177d0 20 74 65 73 74 5f 74 72 61 6e 73 66 65 72 5f 62   test_transfer_b
177e0 69 6e 64 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b  ind ,0 },.     {
177f0 20 22 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65   "sqlite3_change
17800 73 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  s",             
17810 20 20 74 65 73 74 5f 63 68 61 6e 67 65 73 20 20    test_changes  
17820 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
17830 7b 20 22 73 71 6c 69 74 65 33 5f 73 74 65 70 22  { "sqlite3_step"
17840 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
17850 20 20 20 74 65 73 74 5f 73 74 65 70 20 20 20 20     test_step    
17860 20 20 20 20 20 20 2c 30 20 7d 2c 0a 0a 20 20 20        ,0 },..   
17870 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 72 65 6c    { "sqlite3_rel
17880 65 61 73 65 5f 6d 65 6d 6f 72 79 22 2c 20 20 20  ease_memory",   
17890 20 20 20 20 20 74 65 73 74 5f 72 65 6c 65 61 73       test_releas
178a0 65 5f 6d 65 6d 6f 72 79 2c 20 20 30 7d 2c 0a 20  e_memory,  0},. 
178b0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 73      { "sqlite3_s
178c0 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 22 2c  oft_heap_limit",
178d0 20 20 20 20 20 20 20 74 65 73 74 5f 73 6f 66 74         test_soft
178e0 5f 68 65 61 70 5f 6c 69 6d 69 74 2c 20 30 7d 2c  _heap_limit, 0},
178f0 0a 0a 20 20 20 20 20 2f 2a 20 73 71 6c 69 74 65  ..     /* sqlite
17900 33 5f 63 6f 6c 75 6d 6e 5f 2a 28 29 20 41 50 49  3_column_*() API
17910 20 2a 2f 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   */.     { "sqli
17920 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  te3_column_count
17930 22 2c 20 20 20 20 20 20 20 20 20 20 74 65 73 74  ",          test
17940 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 20 2c  _column_count  ,
17950 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
17960 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 22  ite3_data_count"
17970 2c 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73  ,            tes
17980 74 5f 64 61 74 61 5f 63 6f 75 6e 74 20 20 20 20  t_data_count    
17990 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
179a0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70  lite3_column_typ
179b0 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 74 65  e",           te
179c0 73 74 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 20  st_column_type  
179d0 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
179e0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c  qlite3_column_bl
179f0 6f 62 22 2c 20 20 20 20 20 20 20 20 20 20 20 74  ob",           t
17a00 65 73 74 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20  est_column_blob 
17a10 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
17a20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
17a30 6f 75 62 6c 65 22 2c 20 20 20 20 20 20 20 20 20  ouble",         
17a40 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  test_column_doub
17a50 6c 65 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20  le ,0 },.     { 
17a60 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
17a70 69 6e 74 36 34 22 2c 20 20 20 20 20 20 20 20 20  int64",         
17a80 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69 6e 74   test_column_int
17a90 36 34 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b  64  ,0 },.     {
17aa0 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
17ab0 5f 74 65 78 74 22 2c 20 20 20 20 20 20 20 74 65  _text",       te
17ac0 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 73  st_stmt_utf8,  s
17ad0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
17ae0 78 74 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  xt      },.     
17af0 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
17b00 6e 5f 64 65 63 6c 74 79 70 65 22 2c 20 20 20 74  n_decltype",   t
17b10 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20  est_stmt_utf8,  
17b20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
17b30 65 63 6c 74 79 70 65 20 20 7d 2c 0a 20 20 20 20  ecltype  },.    
17b40 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
17b50 6d 6e 5f 6e 61 6d 65 22 2c 20 20 20 20 20 20 20  mn_name",       
17b60 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20  test_stmt_utf8, 
17b70 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
17b80 6e 61 6d 65 20 20 20 20 20 20 7d 2c 0a 20 20 20  name      },.   
17b90 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
17ba0 75 6d 6e 5f 69 6e 74 22 2c 20 20 20 20 20 20 20  umn_int",       
17bb0 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20   test_stmt_int, 
17bc0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e    sqlite3_column
17bd0 5f 69 6e 74 20 20 20 20 20 20 20 7d 2c 0a 20 20  _int       },.  
17be0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
17bf0 6c 75 6d 6e 5f 62 79 74 65 73 22 2c 20 20 20 20  lumn_bytes",    
17c00 20 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c    test_stmt_int,
17c10 20 20 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d     sqlite3_colum
17c20 6e 5f 62 79 74 65 73 20 20 20 20 20 7d 2c 0a 23  n_bytes     },.#
17c30 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
17c40 49 54 5f 55 54 46 31 36 0a 20 20 20 20 20 7b 20  IT_UTF16.     { 
17c50 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
17c60 62 79 74 65 73 31 36 22 2c 20 20 20 20 74 65 73  bytes16",    tes
17c70 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 20 20 73 71  t_stmt_int,   sq
17c80 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74  lite3_column_byt
17c90 65 73 31 36 20 20 20 7d 2c 0a 20 20 20 20 20 7b  es16   },.     {
17ca0 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
17cb0 5f 74 65 78 74 31 36 22 2c 20 20 20 20 20 74 65  _text16",     te
17cc0 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73  st_stmt_utf16, s
17cd0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
17ce0 78 74 31 36 20 20 20 20 7d 2c 0a 20 20 20 20 20  xt16    },.     
17cf0 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
17d00 6e 5f 64 65 63 6c 74 79 70 65 31 36 22 2c 20 74  n_decltype16", t
17d10 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20  est_stmt_utf16, 
17d20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
17d30 65 63 6c 74 79 70 65 31 36 7d 2c 0a 20 20 20 20  ecltype16},.    
17d40 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
17d50 6d 6e 5f 6e 61 6d 65 31 36 22 2c 20 20 20 20 20  mn_name16",     
17d60 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c  test_stmt_utf16,
17d70 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
17d80 6e 61 6d 65 31 36 20 20 20 20 7d 2c 0a 23 65 6e  name16    },.#en
17d90 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  dif.     { "sqli
17da0 74 65 33 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76  te3_global_recov
17db0 65 72 22 2c 20 20 20 20 74 65 73 74 5f 67 6c 6f  er",    test_glo
17dc0 62 61 6c 5f 72 65 63 6f 76 65 72 2c 20 30 20 20  bal_recover, 0  
17dd0 20 7d 2c 0a 0a 20 20 20 20 20 2f 2a 20 46 75 6e   },..     /* Fun
17de0 63 74 69 6f 6e 73 20 66 72 6f 6d 20 6f 73 2e 68  ctions from os.h
17df0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
17e00 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 20  TE_OMIT_DISKIO. 
17e10 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73      { "sqlite3Os
17e20 4f 70 65 6e 52 65 61 64 57 72 69 74 65 22 2c 74  OpenReadWrite",t
17e30 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 4f 70 65  est_sqlite3OsOpe
17e40 6e 52 65 61 64 57 72 69 74 65 2c 20 30 20 7d 2c  nReadWrite, 0 },
17e50 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
17e60 4f 73 43 6c 6f 73 65 22 2c 20 20 20 20 20 20 20  OsClose",       
17e70 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 43   test_sqlite3OsC
17e80 6c 6f 73 65 2c 20 30 20 7d 2c 0a 20 20 20 20 20  lose, 0 },.     
17e90 7b 20 22 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b  { "sqlite3OsLock
17ea0 22 2c 20 20 20 20 20 20 20 20 20 74 65 73 74 5f  ",         test_
17eb0 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 2c 20 30  sqlite3OsLock, 0
17ec0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
17ed0 74 65 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d  te3OsTempFileNam
17ee0 65 22 2c 20 74 65 73 74 5f 73 71 6c 69 74 65 33  e", test_sqlite3
17ef0 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 2c 20  OsTempFileName, 
17f00 30 20 7d 2c 0a 20 20 20 0a 20 20 20 20 20 2f 2a  0 },.   .     /*
17f10 20 43 75 73 74 6f 6d 20 74 65 73 74 20 69 6e 74   Custom test int
17f20 65 72 66 61 63 65 73 20 2a 2f 0a 20 20 20 20 20  erfaces */.     
17f30 7b 20 22 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f  { "sqlite3OsUnlo
17f40 63 6b 22 2c 20 20 20 20 20 20 20 20 20 74 65 73  ck",         tes
17f50 74 5f 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63  t_sqlite3OsUnloc
17f60 6b 2c 20 30 20 20 20 20 7d 2c 0a 23 65 6e 64 69  k, 0    },.#endi
17f70 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
17f80 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 20 20  _OMIT_UTF16.    
17f90 20 7b 20 22 61 64 64 5f 74 65 73 74 5f 63 6f 6c   { "add_test_col
17fa0 6c 61 74 65 22 2c 20 20 20 20 20 20 20 20 74 65  late",        te
17fb0 73 74 5f 63 6f 6c 6c 61 74 65 2c 20 30 20 20 20  st_collate, 0   
17fc0 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
17fd0 20 7b 20 22 61 64 64 5f 74 65 73 74 5f 63 6f 6c   { "add_test_col
17fe0 6c 61 74 65 5f 6e 65 65 64 65 64 22 2c 20 74 65  late_needed", te
17ff0 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65  st_collate_neede
18000 64 2c 20 30 20 20 20 20 20 7d 2c 0a 20 20 20 20  d, 0     },.    
18010 20 7b 20 22 61 64 64 5f 74 65 73 74 5f 66 75 6e   { "add_test_fun
18020 63 74 69 6f 6e 22 2c 20 20 20 20 20 20 20 74 65  ction",       te
18030 73 74 5f 66 75 6e 63 74 69 6f 6e 2c 20 30 20 20  st_function, 0  
18040 20 20 20 20 20 20 20 20 20 7d 2c 0a 23 65 6e 64           },.#end
18050 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
18060 5f 4d 45 4d 44 45 42 55 47 0a 20 20 20 20 20 7b  _MEMDEBUG.     {
18070 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f   "sqlite_malloc_
18080 6f 75 74 73 74 61 6e 64 69 6e 67 22 2c 20 73 71  outstanding", sq
18090 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73  lite_malloc_outs
180a0 74 61 6e 64 69 6e 67 2c 20 30 7d 2c 0a 23 65 6e  tanding, 0},.#en
180b0 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  dif.     { "sqli
180c0 74 65 33 5f 74 65 73 74 5f 65 72 72 73 74 72 22  te3_test_errstr"
180d0 2c 20 20 20 20 20 74 65 73 74 5f 65 72 72 73 74  ,     test_errst
180e0 72 2c 20 30 20 20 20 20 20 20 20 20 20 20 20 20  r, 0            
180f0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 74 63 6c 5f   },.     { "tcl_
18100 76 61 72 69 61 62 6c 65 5f 74 79 70 65 22 2c 20  variable_type", 
18110 20 20 20 20 20 20 74 63 6c 5f 76 61 72 69 61 62        tcl_variab
18120 6c 65 5f 74 79 70 65 2c 20 30 20 20 20 20 20 20  le_type, 0      
18130 20 7d 2c 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   },.#ifndef SQLI
18140 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
18150 41 43 48 45 0a 20 20 20 20 20 7b 20 22 73 71 6c  ACHE.     { "sql
18160 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72  ite3_enable_shar
18170 65 64 5f 63 61 63 68 65 22 2c 20 74 65 73 74 5f  ed_cache", test_
18180 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61  enable_shared_ca
18190 63 68 65 2c 20 30 7d 2c 0a 23 65 6e 64 69 66 0a  che, 0},.#endif.
181a0 20 20 7d 3b 0a 20 20 73 74 61 74 69 63 20 69 6e    };.  static in
181b0 74 20 62 69 74 6d 61 73 6b 5f 73 69 7a 65 20 3d  t bitmask_size =
181c0 20 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29   sizeof(Bitmask)
181d0 2a 38 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 65  *8;.  int i;.  e
181e0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
181f0 33 5f 6f 73 5f 74 72 61 63 65 3b 0a 20 20 65 78  3_os_trace;.  ex
18200 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
18210 5f 77 68 65 72 65 5f 74 72 61 63 65 3b 0a 20 20  _where_trace;.  
18220 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
18230 65 33 5f 73 79 6e 63 5f 63 6f 75 6e 74 2c 20 73  e3_sync_count, s
18240 71 6c 69 74 65 33 5f 66 75 6c 6c 73 79 6e 63 5f  qlite3_fullsync_
18250 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20  count;.  extern 
18260 69 6e 74 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  int sqlite3_open
18270 74 65 6d 70 5f 63 6f 75 6e 74 3b 0a 20 20 65 78  temp_count;.  ex
18280 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
18290 5f 6d 65 6d 55 73 65 64 3b 0a 20 20 65 78 74 65  _memUsed;.  exte
182a0 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d  rn int sqlite3_m
182b0 61 6c 6c 6f 63 5f 69 64 3b 0a 20 20 65 78 74 65  alloc_id;.  exte
182c0 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d  rn int sqlite3_m
182d0 65 6d 4d 61 78 3b 0a 20 20 65 78 74 65 72 6e 20  emMax;.  extern 
182e0 69 6e 74 20 73 71 6c 69 74 65 33 5f 6c 69 6b 65  int sqlite3_like
182f0 5f 63 6f 75 6e 74 3b 0a 23 69 66 20 4f 53 5f 57  _count;.#if OS_W
18300 49 4e 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  IN.  extern int 
18310 73 71 6c 69 74 65 33 5f 6f 73 5f 74 79 70 65 3b  sqlite3_os_type;
18320 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
18330 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 65 78  QLITE_DEBUG.  ex
18340 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
18350 5f 76 64 62 65 5f 61 64 64 6f 70 5f 74 72 61 63  _vdbe_addop_trac
18360 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  e;.#endif.#ifdef
18370 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 65   SQLITE_TEST.  e
18380 78 74 65 72 6e 20 63 68 61 72 20 73 71 6c 69 74  xtern char sqlit
18390 65 33 5f 71 75 65 72 79 5f 70 6c 61 6e 5b 5d 3b  e3_query_plan[];
183a0 0a 20 20 73 74 61 74 69 63 20 63 68 61 72 20 2a  .  static char *
183b0 71 75 65 72 79 5f 70 6c 61 6e 20 3d 20 73 71 6c  query_plan = sql
183c0 69 74 65 33 5f 71 75 65 72 79 5f 70 6c 61 6e 3b  ite3_query_plan;
183d0 0a 23 65 6e 64 69 66 0a 0a 20 20 66 6f 72 28 69  .#endif..  for(i
183e0 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 61 43 6d  =0; i<sizeof(aCm
183f0 64 29 2f 73 69 7a 65 6f 66 28 61 43 6d 64 5b 30  d)/sizeof(aCmd[0
18400 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63  ]); i++){.    Tc
18410 6c 5f 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28  l_CreateCommand(
18420 69 6e 74 65 72 70 2c 20 61 43 6d 64 5b 69 5d 2e  interp, aCmd[i].
18430 7a 4e 61 6d 65 2c 20 61 43 6d 64 5b 69 5d 2e 78  zName, aCmd[i].x
18440 50 72 6f 63 2c 20 30 2c 20 30 29 3b 0a 20 20 7d  Proc, 0, 0);.  }
18450 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69  .  for(i=0; i<si
18460 7a 65 6f 66 28 61 4f 62 6a 43 6d 64 29 2f 73 69  zeof(aObjCmd)/si
18470 7a 65 6f 66 28 61 4f 62 6a 43 6d 64 5b 30 5d 29  zeof(aObjCmd[0])
18480 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f  ; i++){.    Tcl_
18490 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64  CreateObjCommand
184a0 28 69 6e 74 65 72 70 2c 20 61 4f 62 6a 43 6d 64  (interp, aObjCmd
184b0 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 0a 20 20 20 20  [i].zName, .    
184c0 20 20 20 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 78      aObjCmd[i].x
184d0 50 72 6f 63 2c 20 61 4f 62 6a 43 6d 64 5b 69 5d  Proc, aObjCmd[i]
184e0 2e 63 6c 69 65 6e 74 44 61 74 61 2c 20 30 29 3b  .clientData, 0);
184f0 0a 20 20 7d 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  .  }.  Tcl_LinkV
18500 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
18510 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 22  te_search_count"
18520 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  , .      (char*)
18530 26 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f  &sqlite3_search_
18540 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
18550 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
18560 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
18570 69 74 65 5f 73 6f 72 74 5f 63 6f 75 6e 74 22 2c  ite_sort_count",
18580 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26   .      (char*)&
18590 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
185a0 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  nt, TCL_LINK_INT
185b0 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
185c0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
185d0 5f 6c 69 6b 65 5f 63 6f 75 6e 74 22 2c 20 0a 20  _like_count", . 
185e0 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
185f0 69 74 65 33 5f 6c 69 6b 65 5f 63 6f 75 6e 74 2c  ite3_like_count,
18600 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
18610 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
18620 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 69 6e  terp, "sqlite_in
18630 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 22 2c 20  terrupt_count", 
18640 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
18650 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
18660 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b  _count, TCL_LINK
18670 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
18680 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
18690 6c 69 74 65 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63  lite_open_file_c
186a0 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63  ount", .      (c
186b0 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 70  har*)&sqlite3_op
186c0 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 2c 20 54  en_file_count, T
186d0 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
186e0 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
186f0 72 70 2c 20 22 73 71 6c 69 74 65 5f 63 75 72 72  rp, "sqlite_curr
18700 65 6e 74 5f 74 69 6d 65 22 2c 20 0a 20 20 20 20  ent_time", .    
18710 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
18720 33 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65 2c 20  3_current_time, 
18730 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20  TCL_LINK_INT);. 
18740 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
18750 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 73 5f  erp, "sqlite_os_
18760 74 72 61 63 65 22 2c 0a 20 20 20 20 20 20 28 63  trace",.      (c
18770 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 73  har*)&sqlite3_os
18780 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b  _trace, TCL_LINK
18790 5f 49 4e 54 29 3b 0a 23 69 66 6e 64 65 66 20 53  _INT);.#ifndef S
187a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
187b0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
187c0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6c  nterp, "sqlite_l
187d0 61 73 74 5f 6e 65 65 64 65 64 5f 63 6f 6c 6c 61  ast_needed_colla
187e0 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 28 63 68  tion",.      (ch
187f0 61 72 2a 29 26 70 7a 4e 65 65 64 65 64 43 6f 6c  ar*)&pzNeededCol
18800 6c 61 74 69 6f 6e 2c 20 54 43 4c 5f 4c 49 4e 4b  lation, TCL_LINK
18810 5f 53 54 52 49 4e 47 7c 54 43 4c 5f 4c 49 4e 4b  _STRING|TCL_LINK
18820 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  _READ_ONLY);.#en
18830 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
18840 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 54 63 6c  E_MEMDEBUG.  Tcl
18850 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
18860 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f   "sqlite_malloc_
18870 69 64 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  id",.      (char
18880 2a 29 26 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  *)&sqlite3_mallo
18890 63 5f 69 64 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53  c_id, TCL_LINK_S
188a0 54 52 49 4e 47 29 3b 0a 23 65 6e 64 69 66 0a 23  TRING);.#endif.#
188b0 69 66 20 4f 53 5f 57 49 4e 0a 20 20 54 63 6c 5f  if OS_WIN.  Tcl_
188c0 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
188d0 22 73 71 6c 69 74 65 5f 6f 73 5f 74 79 70 65 22  "sqlite_os_type"
188e0 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
188f0 73 71 6c 69 74 65 33 5f 6f 73 5f 74 79 70 65 2c  sqlite3_os_type,
18900 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
18910 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
18920 4c 49 54 45 5f 54 45 53 54 0a 20 20 54 63 6c 5f  LITE_TEST.  Tcl_
18930 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
18940 22 73 71 6c 69 74 65 5f 71 75 65 72 79 5f 70 6c  "sqlite_query_pl
18950 61 6e 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  an",.      (char
18960 2a 29 26 71 75 65 72 79 5f 70 6c 61 6e 2c 20 54  *)&query_plan, T
18970 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 7c 54  CL_LINK_STRING|T
18980 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c  CL_LINK_READ_ONL
18990 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  Y);.#endif.#ifde
189a0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
189b0 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
189c0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 61 64 64  erp, "sqlite_add
189d0 6f 70 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 20  op_trace",.     
189e0 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
189f0 5f 76 64 62 65 5f 61 64 64 6f 70 5f 74 72 61 63  _vdbe_addop_trac
18a00 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  e, TCL_LINK_INT)
18a10 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
18a20 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
18a30 77 68 65 72 65 5f 74 72 61 63 65 22 2c 0a 20 20  where_trace",.  
18a40 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
18a50 74 65 33 5f 77 68 65 72 65 5f 74 72 61 63 65 2c  te3_where_trace,
18a60 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
18a70 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
18a80 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
18a90 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
18aa0 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d 65 6d 75  rp, "sqlite_memu
18ab0 73 65 64 22 2c 0a 20 20 20 20 20 20 28 63 68 61  sed",.      (cha
18ac0 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d 65 6d 55  r*)&sqlite3_memU
18ad0 73 65 64 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  sed, TCL_LINK_IN
18ae0 54 20 7c 20 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41  T | TCL_LINK_REA
18af0 44 5f 4f 4e 4c 59 29 3b 0a 20 20 54 63 6c 5f 4c  D_ONLY);.  Tcl_L
18b00 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
18b10 73 71 6c 69 74 65 5f 6d 65 6d 6d 61 78 22 2c 0a  sqlite_memmax",.
18b20 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
18b30 6c 69 74 65 33 5f 6d 65 6d 4d 61 78 2c 20 54 43  lite3_memMax, TC
18b40 4c 5f 4c 49 4e 4b 5f 49 4e 54 20 7c 20 54 43 4c  L_LINK_INT | TCL
18b50 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29  _LINK_READ_ONLY)
18b60 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ;.#endif.#ifndef
18b70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53   SQLITE_OMIT_DIS
18b80 4b 49 4f 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  KIO.  Tcl_LinkVa
18b90 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
18ba0 65 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74  e_opentemp_count
18bb0 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
18bc0 26 73 71 6c 69 74 65 33 5f 6f 70 65 6e 74 65 6d  &sqlite3_opentem
18bd0 70 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e  p_count, TCL_LIN
18be0 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 20  K_INT);.#endif. 
18bf0 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
18c00 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 74 61  erp, "sqlite_sta
18c10 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 22 2c  tic_bind_value",
18c20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
18c30 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e  qlite_static_bin
18c40 64 5f 76 61 6c 75 65 2c 20 54 43 4c 5f 4c 49 4e  d_value, TCL_LIN
18c50 4b 5f 53 54 52 49 4e 47 29 3b 0a 20 20 54 63 6c  K_STRING);.  Tcl
18c60 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
18c70 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 64 69   "sqlite_temp_di
18c80 72 65 63 74 6f 72 79 22 2c 0a 20 20 20 20 20 20  rectory",.      
18c90 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
18ca0 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 2c 20  temp_directory, 
18cb0 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 29  TCL_LINK_STRING)
18cc0 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
18cd0 69 6e 74 65 72 70 2c 20 22 62 69 74 6d 61 73 6b  interp, "bitmask
18ce0 5f 73 69 7a 65 22 2c 0a 20 20 20 20 20 20 28 63  _size",.      (c
18cf0 68 61 72 2a 29 26 62 69 74 6d 61 73 6b 5f 73 69  har*)&bitmask_si
18d00 7a 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  ze, TCL_LINK_INT
18d10 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f  |TCL_LINK_READ_O
18d20 4e 4c 59 29 3b 0a 23 69 66 20 4f 53 5f 55 4e 49  NLY);.#if OS_UNI
18d30 58 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  X.  Tcl_LinkVar(
18d40 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
18d50 73 79 6e 63 5f 63 6f 75 6e 74 22 2c 0a 20 20 20  sync_count",.   
18d60 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
18d70 65 33 5f 73 79 6e 63 5f 63 6f 75 6e 74 2c 20 54  e3_sync_count, T
18d80 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
18d90 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
18da0 72 70 2c 20 22 73 71 6c 69 74 65 5f 66 75 6c 6c  rp, "sqlite_full
18db0 73 79 6e 63 5f 63 6f 75 6e 74 22 2c 0a 20 20 20  sync_count",.   
18dc0 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
18dd0 65 33 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e  e3_fullsync_coun
18de0 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
18df0 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 4f 53 5f 55  ;.#endif /* OS_U
18e00 4e 49 58 20 2a 2f 0a 20 20 73 65 74 5f 6f 70 74  NIX */.  set_opt
18e10 69 6f 6e 73 28 69 6e 74 65 72 70 29 3b 0a 20 20  ions(interp);.  
18e20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
18e30 0a                                               .