/ Hex Artifact Content
Login

Artifact 84c841e1088f743200b87581506e93f70344bd32:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 43 6f 64 65 20 66  ******.** Code f
0180: 6f 72 20 74 65 73 74 69 6e 67 20 61 6c 6c 20 73  or testing all s
0190: 6f 72 74 73 20 6f 66 20 53 51 4c 69 74 65 20 69  orts of SQLite i
01a0: 6e 74 65 72 66 61 63 65 73 2e 20 20 54 68 69 73  nterfaces.  This
01b0: 20 63 6f 64 65 0a 2a 2a 20 69 73 20 6e 6f 74 20   code.** is not 
01c0: 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
01d0: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 20  SQLite library. 
01e0: 20 49 74 20 69 73 20 75 73 65 64 20 66 6f 72 20   It is used for 
01f0: 61 75 74 6f 6d 61 74 65 64 0a 2a 2a 20 74 65 73  automated.** tes
0200: 74 69 6e 67 20 6f 66 20 74 68 65 20 53 51 4c 69  ting of the SQLi
0210: 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a  te library..**.*
0220: 2a 20 24 49 64 3a 20 74 65 73 74 31 2e 63 2c 76  * $Id: test1.c,v
0230: 20 31 2e 32 35 33 20 32 30 30 37 2f 30 35 2f 31   1.253 2007/05/1
0240: 35 20 30 33 3a 35 36 3a 35 30 20 64 72 68 20 45  5 03:56:50 drh E
0250: 78 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  xp $.*/.#include
0260: 20 22 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23   "sqliteInt.h".#
0270: 69 6e 63 6c 75 64 65 20 22 74 63 6c 2e 68 22 0a  include "tcl.h".
0280: 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a  #include "os.h".
0290: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
02a0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
02b0: 72 69 6e 67 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 54  ring.h>../*.** T
02c0: 68 69 73 20 69 73 20 61 20 63 6f 70 79 20 6f 66  his is a copy of
02d0: 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
02e0: 6f 66 20 74 68 65 20 53 71 6c 69 74 65 44 62 20  of the SqliteDb 
02f0: 73 74 72 75 63 74 75 72 65 20 69 6e 20 0a 2a 2a  structure in .**
0300: 20 74 63 6c 73 71 6c 69 74 65 2e 63 2e 20 20 57   tclsqlite.c.  W
0310: 65 20 6e 65 65 64 20 69 74 20 68 65 72 65 20 73  e need it here s
0320: 6f 20 74 68 61 74 20 74 68 65 20 67 65 74 5f 73  o that the get_s
0330: 71 6c 69 74 65 5f 70 6f 69 6e 74 65 72 20 72 6f  qlite_pointer ro
0340: 75 74 69 6e 65 0a 2a 2a 20 63 61 6e 20 65 78 74  utine.** can ext
0350: 72 61 63 74 20 74 68 65 20 73 71 6c 69 74 65 33  ract the sqlite3
0360: 2a 20 70 6f 69 6e 74 65 72 20 66 72 6f 6d 20 61  * pointer from a
0370: 6e 20 65 78 69 73 74 69 6e 67 20 54 63 6c 20 53  n existing Tcl S
0380: 51 4c 69 74 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  QLite.** connect
0390: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
03a0: 71 6c 69 74 65 44 62 20 7b 0a 20 20 73 71 6c 69  qliteDb {.  sqli
03b0: 74 65 33 20 2a 64 62 3b 0a 7d 3b 0a 0a 2f 2a 0a  te3 *db;.};../*.
03c0: 2a 2a 20 43 6f 6e 76 65 72 74 20 74 65 78 74 20  ** Convert text 
03d0: 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
03e0: 20 22 25 70 22 20 63 6f 6e 76 65 72 73 69 6f 6e   "%p" conversion
03f0: 20 66 6f 72 6d 61 74 20 62 61 63 6b 20 69 6e 74   format back int
0400: 6f 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 2e 0a  o.** a pointer..
0410: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
0420: 73 74 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68  stHexToInt(int h
0430: 29 7b 0a 20 20 69 66 28 20 68 3e 3d 27 30 27 20  ){.  if( h>='0' 
0440: 26 26 20 68 3c 3d 27 39 27 20 29 7b 0a 20 20 20  && h<='9' ){.   
0450: 20 72 65 74 75 72 6e 20 68 20 2d 20 27 30 27 3b   return h - '0';
0460: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 68 3e 3d  .  }else if( h>=
0470: 27 61 27 20 26 26 20 68 3c 3d 27 66 27 20 29 7b  'a' && h<='f' ){
0480: 0a 20 20 20 20 72 65 74 75 72 6e 20 68 20 2d 20  .    return h - 
0490: 27 61 27 20 2b 20 31 30 3b 0a 20 20 7d 65 6c 73  'a' + 10;.  }els
04a0: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 68  e{.    assert( h
04b0: 3e 3d 27 41 27 20 26 26 20 68 3c 3d 27 46 27 20  >='A' && h<='F' 
04c0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 68 20  );.    return h 
04d0: 2d 20 27 41 27 20 2b 20 31 30 3b 0a 20 20 7d 0a  - 'A' + 10;.  }.
04e0: 7d 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54  }.void *sqlite3T
04f0: 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63  extToPtr(const c
0500: 68 61 72 20 2a 7a 29 7b 0a 20 20 76 6f 69 64 20  har *z){.  void 
0510: 2a 70 3b 0a 20 20 75 36 34 20 76 3b 0a 20 20 75  *p;.  u64 v;.  u
0520: 33 32 20 76 32 3b 0a 20 20 69 66 28 20 7a 5b 30  32 v2;.  if( z[0
0530: 5d 3d 3d 27 30 27 20 26 26 20 7a 5b 31 5d 3d 3d  ]=='0' && z[1]==
0540: 27 78 27 20 29 7b 0a 20 20 20 20 7a 20 2b 3d 20  'x' ){.    z += 
0550: 32 3b 0a 20 20 7d 0a 20 20 76 20 3d 20 30 3b 0a  2;.  }.  v = 0;.
0560: 20 20 77 68 69 6c 65 28 20 2a 7a 20 29 7b 0a 20    while( *z ){. 
0570: 20 20 20 76 20 3d 20 28 76 3c 3c 34 29 20 2b 20     v = (v<<4) + 
0580: 74 65 73 74 48 65 78 54 6f 49 6e 74 28 2a 7a 29  testHexToInt(*z)
0590: 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 7d 0a 20  ;.    z++;.  }. 
05a0: 20 69 66 28 20 73 69 7a 65 6f 66 28 70 29 3d 3d   if( sizeof(p)==
05b0: 73 69 7a 65 6f 66 28 76 29 20 29 7b 0a 20 20 20  sizeof(v) ){.   
05c0: 20 6d 65 6d 63 70 79 28 26 70 2c 20 26 76 2c 20   memcpy(&p, &v, 
05d0: 73 69 7a 65 6f 66 28 70 29 29 3b 0a 20 20 7d 65  sizeof(p));.  }e
05e0: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
05f0: 20 73 69 7a 65 6f 66 28 70 29 3d 3d 73 69 7a 65   sizeof(p)==size
0600: 6f 66 28 76 32 29 20 29 3b 0a 20 20 20 20 76 32  of(v2) );.    v2
0610: 20 3d 20 28 75 33 32 29 76 3b 0a 20 20 20 20 6d   = (u32)v;.    m
0620: 65 6d 63 70 79 28 26 70 2c 20 26 76 32 2c 20 73  emcpy(&p, &v2, s
0630: 69 7a 65 6f 66 28 70 29 29 3b 0a 20 20 7d 0a 20  izeof(p));.  }. 
0640: 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 0a 2f   return p;.}.../
0650: 2a 0a 2a 2a 20 41 20 54 43 4c 20 63 6f 6d 6d 61  *.** A TCL comma
0660: 6e 64 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  nd that returns 
0670: 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  the address of t
0680: 68 65 20 73 71 6c 69 74 65 2a 20 70 6f 69 6e 74  he sqlite* point
0690: 65 72 0a 2a 2a 20 66 6f 72 20 61 6e 20 73 71 6c  er.** for an sql
06a0: 69 74 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ite connection i
06b0: 6e 73 74 61 6e 63 65 2e 20 20 42 61 64 20 74 68  nstance.  Bad th
06c0: 69 6e 67 73 20 68 61 70 70 65 6e 20 69 66 20 74  ings happen if t
06d0: 68 65 0a 2a 2a 20 69 6e 70 75 74 20 69 73 20 6e  he.** input is n
06e0: 6f 74 20 61 6e 20 73 71 6c 69 74 65 20 63 6f 6e  ot an sqlite con
06f0: 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74  nection..*/.stat
0700: 69 63 20 69 6e 74 20 67 65 74 5f 73 71 6c 69 74  ic int get_sqlit
0710: 65 5f 70 6f 69 6e 74 65 72 28 0a 20 20 76 6f 69  e_pointer(.  voi
0720: 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
0730: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
0740: 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
0750: 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
0760: 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
0770: 74 72 75 63 74 20 53 71 6c 69 74 65 44 62 20 2a  truct SqliteDb *
0780: 70 3b 0a 20 20 54 63 6c 5f 43 6d 64 49 6e 66 6f  p;.  Tcl_CmdInfo
0790: 20 63 6d 64 49 6e 66 6f 3b 0a 20 20 63 68 61 72   cmdInfo;.  char
07a0: 20 7a 42 75 66 5b 31 30 30 5d 3b 0a 20 20 69 66   zBuf[100];.  if
07b0: 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
07c0: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
07d0: 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
07e0: 76 2c 20 22 53 51 4c 49 54 45 2d 43 4f 4e 4e 45  v, "SQLITE-CONNE
07f0: 43 54 49 4f 4e 22 29 3b 0a 20 20 20 20 72 65 74  CTION");.    ret
0800: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
0810: 20 7d 0a 20 20 69 66 28 20 21 54 63 6c 5f 47 65   }.  if( !Tcl_Ge
0820: 74 43 6f 6d 6d 61 6e 64 49 6e 66 6f 28 69 6e 74  tCommandInfo(int
0830: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
0840: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 63 6d  ng(objv[1]), &cm
0850: 64 49 6e 66 6f 29 20 29 7b 0a 20 20 20 20 54 63  dInfo) ){.    Tc
0860: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
0870: 6e 74 65 72 70 2c 20 22 63 6f 6d 6d 61 6e 64 20  nterp, "command 
0880: 6e 6f 74 20 66 6f 75 6e 64 3a 20 22 2c 0a 20 20  not found: ",.  
0890: 20 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74           Tcl_Get
08a0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
08b0: 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20   (char*)0);.    
08c0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
08d0: 3b 0a 20 20 7d 0a 20 20 70 20 3d 20 28 73 74 72  ;.  }.  p = (str
08e0: 75 63 74 20 53 71 6c 69 74 65 44 62 2a 29 63 6d  uct SqliteDb*)cm
08f0: 64 49 6e 66 6f 2e 6f 62 6a 43 6c 69 65 6e 74 44  dInfo.objClientD
0900: 61 74 61 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a  ata;.  sprintf(z
0910: 42 75 66 2c 20 22 25 70 22 2c 20 70 2d 3e 64 62  Buf, "%p", p->db
0920: 29 3b 0a 20 20 69 66 28 20 73 74 72 6e 63 6d 70  );.  if( strncmp
0930: 28 7a 42 75 66 2c 22 30 78 22 2c 32 29 20 29 7b  (zBuf,"0x",2) ){
0940: 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75  .    sprintf(zBu
0950: 66 2c 20 22 30 78 25 70 22 2c 20 70 2d 3e 64 62  f, "0x%p", p->db
0960: 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70  );.  }.  Tcl_App
0970: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
0980: 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65  , zBuf, 0);.  re
0990: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
09a0: 2f 2a 0a 2a 2a 20 44 65 63 6f 64 65 20 61 20 70  /*.** Decode a p
09b0: 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c  ointer to an sql
09c0: 69 74 65 33 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a  ite3 object..*/.
09d0: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 44 62  static int getDb
09e0: 50 6f 69 6e 74 65 72 28 54 63 6c 5f 49 6e 74 65  Pointer(Tcl_Inte
09f0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 63 6f 6e 73  rp *interp, cons
0a00: 74 20 63 68 61 72 20 2a 7a 41 2c 20 73 71 6c 69  t char *zA, sqli
0a10: 74 65 33 20 2a 2a 70 70 44 62 29 7b 0a 20 20 73  te3 **ppDb){.  s
0a20: 74 72 75 63 74 20 53 71 6c 69 74 65 44 62 20 2a  truct SqliteDb *
0a30: 70 3b 0a 20 20 54 63 6c 5f 43 6d 64 49 6e 66 6f  p;.  Tcl_CmdInfo
0a40: 20 63 6d 64 49 6e 66 6f 3b 0a 20 20 69 66 28 20   cmdInfo;.  if( 
0a50: 54 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64 49 6e  Tcl_GetCommandIn
0a60: 66 6f 28 69 6e 74 65 72 70 2c 20 7a 41 2c 20 26  fo(interp, zA, &
0a70: 63 6d 64 49 6e 66 6f 29 20 29 7b 0a 20 20 20 20  cmdInfo) ){.    
0a80: 70 20 3d 20 28 73 74 72 75 63 74 20 53 71 6c 69  p = (struct Sqli
0a90: 74 65 44 62 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62  teDb*)cmdInfo.ob
0aa0: 6a 43 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 20  jClientData;.   
0ab0: 20 2a 70 70 44 62 20 3d 20 70 2d 3e 64 62 3b 0a   *ppDb = p->db;.
0ac0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 70 70    }else{.    *pp
0ad0: 44 62 20 3d 20 28 73 71 6c 69 74 65 33 2a 29 73  Db = (sqlite3*)s
0ae0: 71 6c 69 74 65 33 54 65 78 74 54 6f 50 74 72 28  qlite3TextToPtr(
0af0: 7a 41 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  zA);.  }.  retur
0b00: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 63 6f  n TCL_OK;.}...co
0b10: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
0b20: 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65 28 69  3TestErrorName(i
0b30: 6e 74 20 72 63 29 7b 0a 20 20 63 6f 6e 73 74 20  nt rc){.  const 
0b40: 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 30 3b  char *zName = 0;
0b50: 0a 20 20 73 77 69 74 63 68 28 20 72 63 20 26 20  .  switch( rc & 
0b60: 30 78 66 66 20 29 7b 0a 20 20 20 20 63 61 73 65  0xff ){.    case
0b70: 20 53 51 4c 49 54 45 5f 4f 4b 3a 20 20 20 20 20   SQLITE_OK:     
0b80: 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c      zName = "SQL
0b90: 49 54 45 5f 4f 4b 22 3b 20 20 20 20 20 20 20 20  ITE_OK";        
0ba0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0bb0: 65 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3a 20  e SQLITE_ERROR: 
0bc0: 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51       zName = "SQ
0bd0: 4c 49 54 45 5f 45 52 52 4f 52 22 3b 20 20 20 20  LITE_ERROR";    
0be0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
0bf0: 73 65 20 53 51 4c 49 54 45 5f 50 45 52 4d 3a 20  se SQLITE_PERM: 
0c00: 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53        zName = "S
0c10: 51 4c 49 54 45 5f 50 45 52 4d 22 3b 20 20 20 20  QLITE_PERM";    
0c20: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
0c30: 61 73 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  ase SQLITE_ABORT
0c40: 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22  :      zName = "
0c50: 53 51 4c 49 54 45 5f 41 42 4f 52 54 22 3b 20 20  SQLITE_ABORT";  
0c60: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
0c70: 63 61 73 65 20 53 51 4c 49 54 45 5f 42 55 53 59  case SQLITE_BUSY
0c80: 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  :       zName = 
0c90: 22 53 51 4c 49 54 45 5f 42 55 53 59 22 3b 20 20  "SQLITE_BUSY";  
0ca0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
0cb0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4c 4f 43   case SQLITE_LOC
0cc0: 4b 45 44 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d  KED:     zName =
0cd0: 20 22 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 22   "SQLITE_LOCKED"
0ce0: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
0cf0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f    case SQLITE_NO
0d00: 4d 45 4d 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20  MEM:      zName 
0d10: 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 22  = "SQLITE_NOMEM"
0d20: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
0d30: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52     case SQLITE_R
0d40: 45 41 44 4f 4e 4c 59 3a 20 20 20 7a 4e 61 6d 65  EADONLY:   zName
0d50: 20 3d 20 22 53 51 4c 49 54 45 5f 52 45 41 44 4f   = "SQLITE_READO
0d60: 4e 4c 59 22 3b 20 20 20 20 62 72 65 61 6b 3b 0a  NLY";    break;.
0d70: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
0d80: 49 4e 54 45 52 52 55 50 54 3a 20 20 7a 4e 61 6d  INTERRUPT:  zNam
0d90: 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4e 54 45  e = "SQLITE_INTE
0da0: 52 52 55 50 54 22 3b 20 20 20 62 72 65 61 6b 3b  RRUPT";   break;
0db0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
0dc0: 5f 49 4f 45 52 52 3a 20 20 20 20 20 20 7a 4e 61  _IOERR:      zNa
0dd0: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45  me = "SQLITE_IOE
0de0: 52 52 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  RR";       break
0df0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0e00: 45 5f 43 4f 52 52 55 50 54 3a 20 20 20 20 7a 4e  E_CORRUPT:    zN
0e10: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f  ame = "SQLITE_CO
0e20: 52 52 55 50 54 22 3b 20 20 20 20 20 62 72 65 61  RRUPT";     brea
0e30: 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
0e40: 54 45 5f 46 55 4c 4c 3a 20 20 20 20 20 20 20 7a  TE_FULL:       z
0e50: 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 46  Name = "SQLITE_F
0e60: 55 4c 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65  ULL";        bre
0e70: 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
0e80: 49 54 45 5f 43 41 4e 54 4f 50 45 4e 3a 20 20 20  ITE_CANTOPEN:   
0e90: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
0ea0: 43 41 4e 54 4f 50 45 4e 22 3b 20 20 20 20 62 72  CANTOPEN";    br
0eb0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0ec0: 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20  LITE_PROTOCOL:  
0ed0: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
0ee0: 5f 50 52 4f 54 4f 43 4f 4c 22 3b 20 20 20 20 62  _PROTOCOL";    b
0ef0: 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
0f00: 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20 20 20 20  QLITE_EMPTY:    
0f10: 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54    zName = "SQLIT
0f20: 45 5f 45 4d 50 54 59 22 3b 20 20 20 20 20 20 20  E_EMPTY";       
0f30: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
0f40: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3a 20 20  SQLITE_SCHEMA:  
0f50: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
0f60: 54 45 5f 53 43 48 45 4d 41 22 3b 20 20 20 20 20  TE_SCHEMA";     
0f70: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
0f80: 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49   SQLITE_CONSTRAI
0f90: 4e 54 3a 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c  NT: zName = "SQL
0fa0: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 22 3b  ITE_CONSTRAINT";
0fb0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0fc0: 65 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  e SQLITE_MISMATC
0fd0: 48 3a 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51  H:   zName = "SQ
0fe0: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 22 3b 20  LITE_MISMATCH"; 
0ff0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1000: 73 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  se SQLITE_MISUSE
1010: 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53  :     zName = "S
1020: 51 4c 49 54 45 5f 4d 49 53 55 53 45 22 3b 20 20  QLITE_MISUSE";  
1030: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
1040: 61 73 65 20 53 51 4c 49 54 45 5f 4e 4f 4c 46 53  ase SQLITE_NOLFS
1050: 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22  :      zName = "
1060: 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 22 3b 20 20  SQLITE_NOLFS";  
1070: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1080: 63 61 73 65 20 53 51 4c 49 54 45 5f 41 55 54 48  case SQLITE_AUTH
1090: 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20  :       zName = 
10a0: 22 53 51 4c 49 54 45 5f 41 55 54 48 22 3b 20 20  "SQLITE_AUTH";  
10b0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
10c0: 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4f 52   case SQLITE_FOR
10d0: 4d 41 54 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d  MAT:     zName =
10e0: 20 22 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 22   "SQLITE_FORMAT"
10f0: 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
1100: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52 41    case SQLITE_RA
1110: 4e 47 45 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20  NGE:      zName 
1120: 3d 20 22 53 51 4c 49 54 45 5f 52 41 4e 47 45 22  = "SQLITE_RANGE"
1130: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
1140: 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 52     case SQLITE_R
1150: 4f 57 3a 20 20 20 20 20 20 20 20 7a 4e 61 6d 65  OW:        zName
1160: 20 3d 20 22 53 51 4c 49 54 45 5f 52 4f 57 22 3b   = "SQLITE_ROW";
1170: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
1180: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
1190: 44 4f 4e 45 3a 20 20 20 20 20 20 20 7a 4e 61 6d  DONE:       zNam
11a0: 65 20 3d 20 22 53 51 4c 49 54 45 5f 44 4f 4e 45  e = "SQLITE_DONE
11b0: 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ";        break;
11c0: 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
11d0: 5f 4e 4f 54 41 44 42 3a 20 20 20 20 20 7a 4e 61  _NOTADB:     zNa
11e0: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 54  me = "SQLITE_NOT
11f0: 41 44 42 22 3b 20 20 20 20 20 20 62 72 65 61 6b  ADB";      break
1200: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
1210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1220: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 55 6e  ame = "SQLITE_Un
1230: 6b 6e 6f 77 6e 22 3b 20 20 20 20 20 62 72 65 61  known";     brea
1240: 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  k;.  }.  return 
1250: 7a 4e 61 6d 65 3b 0a 7d 0a 23 64 65 66 69 6e 65  zName;.}.#define
1260: 20 74 31 45 72 72 6f 72 4e 61 6d 65 20 73 71 6c   t1ErrorName sql
1270: 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d  ite3TestErrorNam
1280: 65 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  e../*.** Convert
1290: 20 61 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   an sqlite3_stmt
12a0: 2a 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65  * into an sqlite
12b0: 33 2a 2e 20 20 54 68 69 73 20 64 65 70 65 6e 64  3*.  This depend
12c0: 73 20 6f 6e 20 74 68 65 0a 2a 2a 20 66 61 63 74  s on the.** fact
12d0: 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65   that the sqlite
12e0: 33 2a 20 69 73 20 74 68 65 20 66 69 72 73 74 20  3* is the first 
12f0: 66 69 65 6c 64 20 69 6e 20 74 68 65 20 56 64 62  field in the Vdb
1300: 65 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  e structure..*/.
1310: 23 64 65 66 69 6e 65 20 53 74 6d 74 54 6f 44 62  #define StmtToDb
1320: 28 58 29 20 20 20 73 71 6c 69 74 65 33 5f 64 62  (X)   sqlite3_db
1330: 5f 68 61 6e 64 6c 65 28 58 29 0a 0a 2f 2a 0a 2a  _handle(X)../*.*
1340: 2a 20 43 68 65 63 6b 20 61 20 72 65 74 75 72 6e  * Check a return
1350: 20 76 61 6c 75 65 20 74 6f 20 6d 61 6b 65 20 73   value to make s
1360: 75 72 65 20 69 74 20 61 67 72 65 65 73 20 77 69  ure it agrees wi
1370: 74 68 20 74 68 65 20 72 65 73 75 6c 74 73 0a 2a  th the results.*
1380: 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 65  * from sqlite3_e
1390: 72 72 63 6f 64 65 2e 0a 2a 2f 0a 69 6e 74 20 73  rrcode..*/.int s
13a0: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
13b0: 65 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  e(Tcl_Interp *in
13c0: 74 65 72 70 2c 20 73 71 6c 69 74 65 33 20 2a 64  terp, sqlite3 *d
13d0: 62 2c 20 69 6e 74 20 72 63 29 7b 0a 20 20 69 66  b, int rc){.  if
13e0: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4d 49 53  ( rc!=SQLITE_MIS
13f0: 55 53 45 20 26 26 20 72 63 21 3d 53 51 4c 49 54  USE && rc!=SQLIT
1400: 45 5f 4f 4b 20 26 26 20 73 71 6c 69 74 65 33 5f  E_OK && sqlite3_
1410: 65 72 72 63 6f 64 65 28 64 62 29 21 3d 72 63 20  errcode(db)!=rc 
1420: 29 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66  ){.    char zBuf
1430: 5b 32 30 30 5d 3b 0a 20 20 20 20 69 6e 74 20 72  [200];.    int r
1440: 32 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72 63  2 = sqlite3_errc
1450: 6f 64 65 28 64 62 29 3b 0a 20 20 20 20 73 70 72  ode(db);.    spr
1460: 69 6e 74 66 28 7a 42 75 66 2c 20 22 65 72 72 6f  intf(zBuf, "erro
1470: 72 20 63 6f 64 65 20 25 73 20 28 25 64 29 20 64  r code %s (%d) d
1480: 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 73 71  oes not match sq
1490: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 25 73  lite3_errcode %s
14a0: 20 28 25 64 29 22 2c 0a 20 20 20 20 20 20 20 74   (%d)",.       t
14b0: 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  1ErrorName(rc), 
14c0: 72 63 2c 20 74 31 45 72 72 6f 72 4e 61 6d 65 28  rc, t1ErrorName(
14d0: 72 32 29 2c 20 72 32 29 3b 0a 20 20 20 20 54 63  r2), r2);.    Tc
14e0: 6c 5f 52 65 73 65 74 52 65 73 75 6c 74 28 69 6e  l_ResetResult(in
14f0: 74 65 72 70 29 3b 0a 20 20 20 20 54 63 6c 5f 41  terp);.    Tcl_A
1500: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
1510: 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20  rp, zBuf, 0);.  
1520: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a    return 1;.  }.
1530: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
1540: 2a 0a 2a 2a 20 44 65 63 6f 64 65 20 61 20 70 6f  *.** Decode a po
1550: 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
1560: 74 65 33 5f 73 74 6d 74 20 6f 62 6a 65 63 74 2e  te3_stmt object.
1570: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67  .*/.static int g
1580: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 0a 20  etStmtPointer(. 
1590: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
15a0: 65 72 70 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68  erp, .  const ch
15b0: 61 72 20 2a 7a 41 72 67 2c 20 20 0a 20 20 73 71  ar *zArg,  .  sq
15c0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53  lite3_stmt **ppS
15d0: 74 6d 74 0a 29 7b 0a 20 20 2a 70 70 53 74 6d 74  tmt.){.  *ppStmt
15e0: 20 3d 20 28 73 71 6c 69 74 65 33 5f 73 74 6d 74   = (sqlite3_stmt
15f0: 2a 29 73 71 6c 69 74 65 33 54 65 78 74 54 6f 50  *)sqlite3TextToP
1600: 74 72 28 7a 41 72 67 29 3b 0a 20 20 72 65 74 75  tr(zArg);.  retu
1610: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
1620: 0a 2a 2a 20 44 65 63 6f 64 65 20 61 20 70 6f 69  .** Decode a poi
1630: 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
1640: 65 33 5f 73 74 6d 74 20 6f 62 6a 65 63 74 2e 0a  e3_stmt object..
1650: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65  */.static int ge
1660: 74 46 69 6c 65 50 6f 69 6e 74 65 72 28 0a 20 20  tFilePointer(.  
1670: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
1680: 72 70 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61  rp, .  const cha
1690: 72 20 2a 7a 41 72 67 2c 20 20 0a 20 20 4f 73 46  r *zArg,  .  OsF
16a0: 69 6c 65 20 2a 2a 70 70 46 69 6c 65 0a 29 7b 0a  ile **ppFile.){.
16b0: 20 20 2a 70 70 46 69 6c 65 20 3d 20 28 4f 73 46    *ppFile = (OsF
16c0: 69 6c 65 2a 29 73 71 6c 69 74 65 33 54 65 78 74  ile*)sqlite3Text
16d0: 54 6f 50 74 72 28 7a 41 72 67 29 3b 0a 20 20 72  ToPtr(zArg);.  r
16e0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
16f0: 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20  ./*.** Generate 
1700: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
1710: 61 74 69 6f 6e 20 6f 66 20 61 20 70 6f 69 6e 74  ation of a point
1720: 65 72 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  er that can be u
1730: 6e 64 65 72 73 74 6f 6f 64 0a 2a 2a 20 62 79 20  nderstood.** by 
1740: 74 68 65 20 67 65 74 44 62 50 6f 69 6e 74 65 72  the getDbPointer
1750: 20 61 6e 64 20 67 65 74 56 6d 50 6f 69 6e 74 65   and getVmPointe
1760: 72 20 72 6f 75 74 69 6e 65 73 20 61 62 6f 76 65  r routines above
1770: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 6f 62  ..**.** The prob
1780: 6c 65 6d 20 69 73 2c 20 6f 6e 20 73 6f 6d 65 20  lem is, on some 
1790: 6d 61 63 68 69 6e 65 73 20 28 53 6f 6c 61 72 69  machines (Solari
17a0: 73 29 20 69 66 20 79 6f 75 20 64 6f 20 61 20 70  s) if you do a p
17b0: 72 69 6e 74 66 20 77 69 74 68 0a 2a 2a 20 22 25  rintf with.** "%
17c0: 70 22 20 79 6f 75 20 63 61 6e 6e 6f 74 20 74 75  p" you cannot tu
17d0: 72 6e 20 61 72 6f 75 6e 64 20 61 6e 64 20 64 6f  rn around and do
17e0: 20 61 20 73 63 61 6e 66 20 77 69 74 68 20 74 68   a scanf with th
17f0: 65 20 73 61 6d 65 20 22 25 70 22 20 61 6e 64 0a  e same "%p" and.
1800: 2a 2a 20 67 65 74 20 79 6f 75 72 20 70 6f 69 6e  ** get your poin
1810: 74 65 72 20 62 61 63 6b 2e 20 20 59 6f 75 20 68  ter back.  You h
1820: 61 76 65 20 74 6f 20 70 72 65 70 65 6e 64 20 61  ave to prepend a
1830: 20 22 30 78 22 20 62 65 66 6f 72 65 20 69 74 20   "0x" before it 
1840: 77 69 6c 6c 0a 2a 2a 20 77 6f 72 6b 2e 20 20 4f  will.** work.  O
1850: 72 20 61 74 20 6c 65 61 73 74 20 74 68 61 74 20  r at least that 
1860: 69 73 20 77 68 61 74 20 69 73 20 72 65 70 6f 72  is what is repor
1870: 74 65 64 20 74 6f 20 6d 65 20 28 64 72 68 29 2e  ted to me (drh).
1880: 20 20 42 75 74 20 74 68 69 73 0a 2a 2a 20 62 65    But this.** be
1890: 68 61 76 69 6f 72 20 76 61 72 69 65 73 20 66 72  havior varies fr
18a0: 6f 6d 20 6d 61 63 68 69 6e 65 20 74 6f 20 6d 61  om machine to ma
18b0: 63 68 69 6e 65 2e 20 20 54 68 65 20 73 6f 6c 75  chine.  The solu
18c0: 74 69 6f 6e 20 75 73 65 64 20 68 65 72 20 69 73  tion used her is
18d0: 0a 2a 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20  .** to test the 
18e0: 73 74 72 69 6e 67 20 72 69 67 68 74 20 61 66 74  string right aft
18f0: 65 72 20 69 74 20 69 73 20 67 65 6e 65 72 61 74  er it is generat
1900: 65 64 20 74 6f 20 73 65 65 20 69 66 20 69 74 20  ed to see if it 
1910: 63 61 6e 20 62 65 0a 2a 2a 20 75 6e 64 65 72 73  can be.** unders
1920: 74 6f 6f 64 20 62 79 20 73 63 61 6e 66 2c 20 61  tood by scanf, a
1930: 6e 64 20 69 66 20 6e 6f 74 2c 20 74 72 79 20 70  nd if not, try p
1940: 72 65 70 65 6e 64 69 6e 67 20 61 6e 20 22 30 78  repending an "0x
1950: 22 20 74 6f 20 73 65 65 20 69 66 0a 2a 2a 20 74  " to see if.** t
1960: 68 61 74 20 68 65 6c 70 73 2e 20 20 49 66 20 6e  hat helps.  If n
1970: 6f 74 68 69 6e 67 20 77 6f 72 6b 73 2c 20 61 20  othing works, a 
1980: 66 61 74 61 6c 20 65 72 72 6f 72 20 69 73 20 67  fatal error is g
1990: 65 6e 65 72 61 74 65 64 2e 0a 2a 2f 0a 69 6e 74  enerated..*/.int
19a0: 20 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65   sqlite3TestMake
19b0: 50 6f 69 6e 74 65 72 53 74 72 28 54 63 6c 5f 49  PointerStr(Tcl_I
19c0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 63  nterp *interp, c
19d0: 68 61 72 20 2a 7a 50 74 72 2c 20 76 6f 69 64 20  har *zPtr, void 
19e0: 2a 70 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  *p){.  sqlite3_s
19f0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 50 74  nprintf(100, zPt
1a00: 72 2c 20 22 25 70 22 2c 20 70 29 3b 0a 20 20 72  r, "%p", p);.  r
1a10: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
1a20: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 61 6c 6c 62  ./*.** The callb
1a30: 61 63 6b 20 72 6f 75 74 69 6e 65 20 66 6f 72 20  ack routine for 
1a40: 73 71 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69  sqlite3_exec_pri
1a50: 6e 74 66 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63  ntf()..*/.static
1a60: 20 69 6e 74 20 65 78 65 63 5f 70 72 69 6e 74 66   int exec_printf
1a70: 5f 63 62 28 76 6f 69 64 20 2a 70 41 72 67 2c 20  _cb(void *pArg, 
1a80: 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a  int argc, char *
1a90: 2a 61 72 67 76 2c 20 63 68 61 72 20 2a 2a 6e 61  *argv, char **na
1aa0: 6d 65 29 7b 0a 20 20 54 63 6c 5f 44 53 74 72 69  me){.  Tcl_DStri
1ab0: 6e 67 20 2a 73 74 72 20 3d 20 28 54 63 6c 5f 44  ng *str = (Tcl_D
1ac0: 53 74 72 69 6e 67 2a 29 70 41 72 67 3b 0a 20 20  String*)pArg;.  
1ad0: 69 6e 74 20 69 3b 0a 0a 20 20 69 66 28 20 54 63  int i;..  if( Tc
1ae0: 6c 5f 44 53 74 72 69 6e 67 4c 65 6e 67 74 68 28  l_DStringLength(
1af0: 73 74 72 29 3d 3d 30 20 29 7b 0a 20 20 20 20 66  str)==0 ){.    f
1b00: 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20  or(i=0; i<argc; 
1b10: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f  i++){.      Tcl_
1b20: 44 53 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65  DStringAppendEle
1b30: 6d 65 6e 74 28 73 74 72 2c 20 6e 61 6d 65 5b 69  ment(str, name[i
1b40: 5d 20 3f 20 6e 61 6d 65 5b 69 5d 20 3a 20 22 4e  ] ? name[i] : "N
1b50: 55 4c 4c 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  ULL");.    }.  }
1b60: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72  .  for(i=0; i<ar
1b70: 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63  gc; i++){.    Tc
1b80: 6c 5f 44 53 74 72 69 6e 67 41 70 70 65 6e 64 45  l_DStringAppendE
1b90: 6c 65 6d 65 6e 74 28 73 74 72 2c 20 61 72 67 76  lement(str, argv
1ba0: 5b 69 5d 20 3f 20 61 72 67 76 5b 69 5d 20 3a 20  [i] ? argv[i] : 
1bb0: 22 4e 55 4c 4c 22 29 3b 0a 20 20 7d 0a 20 20 72  "NULL");.  }.  r
1bc0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 0;.}../*.*
1bd0: 2a 20 54 68 65 20 49 2f 4f 20 74 72 61 63 69 6e  * The I/O tracin
1be0: 67 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 73  g callback..*/.s
1bf0: 74 61 74 69 63 20 46 49 4c 45 20 2a 69 6f 74 72  tatic FILE *iotr
1c00: 61 63 65 5f 66 69 6c 65 20 3d 20 30 3b 0a 73 74  ace_file = 0;.st
1c10: 61 74 69 63 20 76 6f 69 64 20 69 6f 5f 74 72 61  atic void io_tra
1c20: 63 65 5f 63 61 6c 6c 62 61 63 6b 28 63 6f 6e 73  ce_callback(cons
1c30: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
1c40: 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74   ...){.  va_list
1c50: 20 61 70 3b 0a 20 20 76 61 5f 73 74 61 72 74 28   ap;.  va_start(
1c60: 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20  ap, zFormat);.  
1c70: 76 66 70 72 69 6e 74 66 28 69 6f 74 72 61 63 65  vfprintf(iotrace
1c80: 5f 66 69 6c 65 2c 20 7a 46 6f 72 6d 61 74 2c 20  _file, zFormat, 
1c90: 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70  ap);.  va_end(ap
1ca0: 29 3b 0a 20 20 66 66 6c 75 73 68 28 69 6f 74 72  );.  fflush(iotr
1cb0: 61 63 65 5f 66 69 6c 65 29 3b 0a 7d 0a 0a 2f 2a  ace_file);.}../*
1cc0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 69 6f 5f 74  .** Usage:  io_t
1cd0: 72 61 63 65 20 46 49 4c 45 4e 41 4d 45 0a 2a 2a  race FILENAME.**
1ce0: 0a 2a 2a 20 54 75 72 6e 20 49 2f 4f 20 74 72 61  .** Turn I/O tra
1cf0: 63 69 6e 67 20 6f 6e 20 6f 72 20 6f 66 66 2e 20  cing on or off. 
1d00: 20 49 66 20 46 49 4c 45 4e 41 4d 45 20 69 73 20   If FILENAME is 
1d10: 6e 6f 74 20 61 6e 20 65 6d 70 74 79 20 73 74 72  not an empty str
1d20: 69 6e 67 2c 0a 2a 2a 20 49 2f 4f 20 74 72 61 63  ing,.** I/O trac
1d30: 69 6e 67 20 62 65 67 69 6e 73 20 67 6f 69 6e 67  ing begins going
1d40: 20 69 6e 74 6f 20 46 49 4c 45 4e 41 4d 45 2e 20   into FILENAME. 
1d50: 49 66 20 46 49 4c 45 4e 41 4d 45 20 69 73 20 61  If FILENAME is a
1d60: 6e 20 65 6d 70 74 79 0a 2a 2a 20 73 74 72 69 6e  n empty.** strin
1d70: 67 2c 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 69  g, I/O tracing i
1d80: 73 20 74 75 72 6e 65 64 20 6f 66 66 2e 0a 2a 2f  s turned off..*/
1d90: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
1da0: 5f 69 6f 5f 74 72 61 63 65 28 0a 20 20 76 6f 69  _io_trace(.  voi
1db0: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
1dc0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
1dd0: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
1de0: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
1df0: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
1e00: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
1e10: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
1e20: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
1e30: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
1e40: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
1e50: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
1e60: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
1e70: 0a 29 7b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  .){.  if( argc!=
1e80: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
1e90: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
1ea0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
1eb0: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
1ec0: 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
1ed0: 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22     " FILENAME\""
1ee0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
1ef0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
1f00: 20 20 69 66 28 20 69 6f 74 72 61 63 65 5f 66 69    if( iotrace_fi
1f10: 6c 65 20 29 7b 0a 20 20 20 20 69 66 28 20 69 6f  le ){.    if( io
1f20: 74 72 61 63 65 5f 66 69 6c 65 21 3d 73 74 64 6f  trace_file!=stdo
1f30: 75 74 20 26 26 20 69 6f 74 72 61 63 65 5f 66 69  ut && iotrace_fi
1f40: 6c 65 21 3d 73 74 64 65 72 72 20 29 7b 0a 20 20  le!=stderr ){.  
1f50: 20 20 20 20 66 63 6c 6f 73 65 28 69 6f 74 72 61      fclose(iotra
1f60: 63 65 5f 66 69 6c 65 29 3b 0a 20 20 20 20 7d 0a  ce_file);.    }.
1f70: 20 20 20 20 69 6f 74 72 61 63 65 5f 66 69 6c 65      iotrace_file
1f80: 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
1f90: 33 5f 69 6f 5f 74 72 61 63 65 20 3d 20 30 3b 0a  3_io_trace = 0;.
1fa0: 20 20 7d 0a 20 20 69 66 28 20 61 72 67 76 5b 31    }.  if( argv[1
1fb0: 5d 5b 30 5d 20 29 7b 0a 20 20 20 20 69 66 28 20  ][0] ){.    if( 
1fc0: 73 74 72 63 6d 70 28 61 72 67 76 5b 31 5d 2c 22  strcmp(argv[1],"
1fd0: 73 74 64 6f 75 74 22 29 3d 3d 30 20 29 7b 0a 20  stdout")==0 ){. 
1fe0: 20 20 20 20 20 69 6f 74 72 61 63 65 5f 66 69 6c       iotrace_fil
1ff0: 65 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20 20 20  e = stdout;.    
2000: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
2010: 28 61 72 67 76 5b 31 5d 2c 22 73 74 64 65 72 72  (argv[1],"stderr
2020: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  ")==0 ){.      i
2030: 6f 74 72 61 63 65 5f 66 69 6c 65 20 3d 20 73 74  otrace_file = st
2040: 64 65 72 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  derr;.    }else{
2050: 0a 20 20 20 20 20 20 69 6f 74 72 61 63 65 5f 66  .      iotrace_f
2060: 69 6c 65 20 3d 20 66 6f 70 65 6e 28 61 72 67 76  ile = fopen(argv
2070: 5b 31 5d 2c 20 22 77 22 29 3b 0a 20 20 20 20 7d  [1], "w");.    }
2080: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6f 5f  .    sqlite3_io_
2090: 74 72 61 63 65 20 3d 20 69 6f 5f 74 72 61 63 65  trace = io_trace
20a0: 5f 63 61 6c 6c 62 61 63 6b 3b 0a 20 20 7d 0a 20  _callback;.  }. 
20b0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
20c0: 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  K;.}.../*.** Usa
20d0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 65 78 65  ge:  sqlite3_exe
20e0: 63 5f 70 72 69 6e 74 66 20 20 44 42 20 20 46 4f  c_printf  DB  FO
20f0: 52 4d 41 54 20 20 53 54 52 49 4e 47 0a 2a 2a 0a  RMAT  STRING.**.
2100: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 73 71  ** Invoke the sq
2110: 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74  lite3_exec_print
2120: 66 28 29 20 69 6e 74 65 72 66 61 63 65 20 75 73  f() interface us
2130: 69 6e 67 20 74 68 65 20 6f 70 65 6e 20 64 61 74  ing the open dat
2140: 61 62 61 73 65 0a 2a 2a 20 44 42 2e 20 20 54 68  abase.** DB.  Th
2150: 65 20 53 51 4c 20 69 73 20 74 68 65 20 73 74 72  e SQL is the str
2160: 69 6e 67 20 46 4f 52 4d 41 54 2e 20 20 54 68 65  ing FORMAT.  The
2170: 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 73   format string s
2180: 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 0a 2a 2a  hould contain.**
2190: 20 6f 6e 65 20 25 73 20 6f 72 20 25 71 2e 20 20   one %s or %q.  
21a0: 53 54 52 49 4e 47 20 69 73 20 74 68 65 20 76 61  STRING is the va
21b0: 6c 75 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74  lue inserted int
21c0: 6f 20 25 73 20 6f 72 20 25 71 2e 0a 2a 2f 0a 73  o %s or %q..*/.s
21d0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65  tatic int test_e
21e0: 78 65 63 5f 70 72 69 6e 74 66 28 0a 20 20 76 6f  xec_printf(.  vo
21f0: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
2200: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
2210: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
2220: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
2230: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
2240: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
2250: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
2260: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
2270: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
2280: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
2290: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
22a0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
22b0: 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  /.){.  sqlite3 *
22c0: 64 62 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e  db;.  Tcl_DStrin
22d0: 67 20 73 74 72 3b 0a 20 20 69 6e 74 20 72 63 3b  g str;.  int rc;
22e0: 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d 20  .  char *zErr = 
22f0: 30 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  0;.  char *zSql;
2300: 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d  .  char zBuf[30]
2310: 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34 20  ;.  if( argc!=4 
2320: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
2330: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
2340: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
2350: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
2360: 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22  gv[0], .       "
2370: 20 44 42 20 46 4f 52 4d 41 54 20 53 54 52 49 4e   DB FORMAT STRIN
2380: 47 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  G", 0);.    retu
2390: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
23a0: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
23b0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
23c0: 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
23d0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
23e0: 20 54 63 6c 5f 44 53 74 72 69 6e 67 49 6e 69 74   Tcl_DStringInit
23f0: 28 26 73 74 72 29 3b 0a 20 20 7a 53 71 6c 20 3d  (&str);.  zSql =
2400: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2410: 28 61 72 67 76 5b 32 5d 2c 20 61 72 67 76 5b 33  (argv[2], argv[3
2420: 5d 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ]);.  rc = sqlit
2430: 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
2440: 2c 20 65 78 65 63 5f 70 72 69 6e 74 66 5f 63 62  , exec_printf_cb
2450: 2c 20 26 73 74 72 2c 20 26 7a 45 72 72 29 3b 0a  , &str, &zErr);.
2460: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
2470: 53 71 6c 29 3b 0a 20 20 73 70 72 69 6e 74 66 28  Sql);.  sprintf(
2480: 7a 42 75 66 2c 20 22 25 64 22 2c 20 72 63 29 3b  zBuf, "%d", rc);
2490: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65  .  Tcl_AppendEle
24a0: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  ment(interp, zBu
24b0: 66 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  f);.  Tcl_Append
24c0: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
24d0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 3f 20  rc==SQLITE_OK ? 
24e0: 54 63 6c 5f 44 53 74 72 69 6e 67 56 61 6c 75 65  Tcl_DStringValue
24f0: 28 26 73 74 72 29 20 3a 20 7a 45 72 72 29 3b 0a  (&str) : zErr);.
2500: 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 46 72 65    Tcl_DStringFre
2510: 65 28 26 73 74 72 29 3b 0a 20 20 69 66 28 20 7a  e(&str);.  if( z
2520: 45 72 72 20 29 20 73 71 6c 69 74 65 33 5f 66 72  Err ) sqlite3_fr
2530: 65 65 28 7a 45 72 72 29 3b 0a 20 20 69 66 28 20  ee(zErr);.  if( 
2540: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
2550: 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
2560: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
2570: 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20  ERROR;.  return 
2580: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
2590: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
25a0: 5f 65 78 65 63 20 20 44 42 20 20 53 51 4c 0a 2a  _exec  DB  SQL.*
25b0: 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20  *.** Invoke the 
25c0: 73 71 6c 69 74 65 33 5f 65 78 65 63 20 69 6e 74  sqlite3_exec int
25d0: 65 72 66 61 63 65 20 75 73 69 6e 67 20 74 68 65  erface using the
25e0: 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20 44   open database D
25f0: 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  B.*/.static int 
2600: 74 65 73 74 5f 65 78 65 63 28 0a 20 20 76 6f 69  test_exec(.  voi
2610: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
2620: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
2630: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
2640: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
2650: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
2660: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
2670: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
2680: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
2690: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
26a0: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
26b0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
26c0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
26d0: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
26e0: 62 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  b;.  Tcl_DString
26f0: 20 73 74 72 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   str;.  int rc;.
2700: 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d 20 30    char *zErr = 0
2710: 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a  ;.  char *zSql;.
2720: 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20 20 63 68    int i, j;.  ch
2730: 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 69  ar zBuf[30];.  i
2740: 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  f( argc!=3 ){.  
2750: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
2760: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
2770: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
2780: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
2790: 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 20 53  , .       " DB S
27a0: 51 4c 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  QL", 0);.    ret
27b0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
27c0: 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
27d0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
27e0: 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
27f0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
2800: 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 49 6e 69    Tcl_DStringIni
2810: 74 28 26 73 74 72 29 3b 0a 20 20 7a 53 71 6c 20  t(&str);.  zSql 
2820: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
2830: 66 28 22 25 73 22 2c 20 61 72 67 76 5b 32 5d 29  f("%s", argv[2])
2840: 3b 0a 20 20 66 6f 72 28 69 3d 6a 3d 30 3b 20 7a  ;.  for(i=j=0; z
2850: 53 71 6c 5b 69 5d 3b 29 7b 0a 20 20 20 20 69 66  Sql[i];){.    if
2860: 28 20 7a 53 71 6c 5b 69 5d 3d 3d 27 25 27 20 29  ( zSql[i]=='%' )
2870: 7b 0a 20 20 20 20 20 20 7a 53 71 6c 5b 6a 2b 2b  {.      zSql[j++
2880: 5d 20 3d 20 28 74 65 73 74 48 65 78 54 6f 49 6e  ] = (testHexToIn
2890: 74 28 7a 53 71 6c 5b 69 2b 31 5d 29 3c 3c 34 29  t(zSql[i+1])<<4)
28a0: 20 2b 20 74 65 73 74 48 65 78 54 6f 49 6e 74 28   + testHexToInt(
28b0: 7a 53 71 6c 5b 69 2b 32 5d 29 3b 0a 20 20 20 20  zSql[i+2]);.    
28c0: 20 20 69 20 2b 3d 20 33 3b 0a 20 20 20 20 7d 65    i += 3;.    }e
28d0: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 53 71 6c 5b  lse{.      zSql[
28e0: 6a 2b 2b 5d 20 3d 20 7a 53 71 6c 5b 69 2b 2b 5d  j++] = zSql[i++]
28f0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 7a 53  ;.    }.  }.  zS
2900: 71 6c 5b 6a 5d 20 3d 20 30 3b 0a 20 20 72 63 20  ql[j] = 0;.  rc 
2910: 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
2920: 62 2c 20 7a 53 71 6c 2c 20 65 78 65 63 5f 70 72  b, zSql, exec_pr
2930: 69 6e 74 66 5f 63 62 2c 20 26 73 74 72 2c 20 26  intf_cb, &str, &
2940: 7a 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  zErr);.  sqlite3
2950: 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 73  _free(zSql);.  s
2960: 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64  printf(zBuf, "%d
2970: 22 2c 20 72 63 29 3b 0a 20 20 54 63 6c 5f 41 70  ", rc);.  Tcl_Ap
2980: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
2990: 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20 54 63 6c  rp, zBuf);.  Tcl
29a0: 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  _AppendElement(i
29b0: 6e 74 65 72 70 2c 20 72 63 3d 3d 53 51 4c 49 54  nterp, rc==SQLIT
29c0: 45 5f 4f 4b 20 3f 20 54 63 6c 5f 44 53 74 72 69  E_OK ? Tcl_DStri
29d0: 6e 67 56 61 6c 75 65 28 26 73 74 72 29 20 3a 20  ngValue(&str) : 
29e0: 7a 45 72 72 29 3b 0a 20 20 54 63 6c 5f 44 53 74  zErr);.  Tcl_DSt
29f0: 72 69 6e 67 46 72 65 65 28 26 73 74 72 29 3b 0a  ringFree(&str);.
2a00: 20 20 69 66 28 20 7a 45 72 72 20 29 20 73 71 6c    if( zErr ) sql
2a10: 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b  ite3_free(zErr);
2a20: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
2a30: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
2a40: 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
2a50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
2a60: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
2a70: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
2a80: 73 71 6c 69 74 65 33 5f 65 78 65 63 5f 6e 72 20  sqlite3_exec_nr 
2a90: 20 44 42 20 20 53 51 4c 0a 2a 2a 0a 2a 2a 20 49   DB  SQL.**.** I
2aa0: 6e 76 6f 6b 65 20 74 68 65 20 73 71 6c 69 74 65  nvoke the sqlite
2ab0: 33 5f 65 78 65 63 20 69 6e 74 65 72 66 61 63 65  3_exec interface
2ac0: 20 75 73 69 6e 67 20 74 68 65 20 6f 70 65 6e 20   using the open 
2ad0: 64 61 74 61 62 61 73 65 20 44 42 2e 20 20 44 69  database DB.  Di
2ae0: 73 63 61 72 64 0a 2a 2a 20 61 6c 6c 20 72 65 73  scard.** all res
2af0: 75 6c 74 73 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ults.*/.static i
2b00: 6e 74 20 74 65 73 74 5f 65 78 65 63 5f 6e 72 28  nt test_exec_nr(
2b10: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
2b20: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
2b30: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
2b40: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
2b50: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
2b60: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
2b70: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
2b80: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
2b90: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
2ba0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
2bb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
2bc0: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
2bd0: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  ent */.){.  sqli
2be0: 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  te3 *db;.  int r
2bf0: 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20  c;.  char *zErr 
2c00: 3d 20 30 3b 0a 20 20 69 66 28 20 61 72 67 63 21  = 0;.  if( argc!
2c10: 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
2c20: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
2c30: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
2c40: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
2c50: 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
2c60: 20 20 22 20 44 42 20 53 51 4c 22 2c 20 30 29 3b    " DB SQL", 0);
2c70: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
2c80: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
2c90: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
2ca0: 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
2cb0: 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
2cc0: 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73  _ERROR;.  rc = s
2cd0: 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20  qlite3_exec(db, 
2ce0: 61 72 67 76 5b 32 5d 2c 20 30 2c 20 30 2c 20 26  argv[2], 0, 0, &
2cf0: 7a 45 72 72 29 3b 0a 20 20 69 66 28 20 73 71 6c  zErr);.  if( sql
2d00: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
2d10: 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20  interp, db, rc) 
2d20: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
2d30: 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  OR;.  return TCL
2d40: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
2d50: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
2d60: 72 69 6e 74 66 5f 7a 5f 74 65 73 74 20 20 53 45  rintf_z_test  SE
2d70: 50 41 52 41 54 4f 52 20 20 41 52 47 30 20 20 41  PARATOR  ARG0  A
2d80: 52 47 31 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 54 65  RG1 ....**.** Te
2d90: 73 74 20 74 68 65 20 25 7a 20 66 6f 72 6d 61 74  st the %z format
2da0: 20 6f 66 20 73 71 6c 69 74 65 4d 50 72 69 6e 74   of sqliteMPrint
2db0: 66 28 29 2e 20 20 55 73 65 20 6d 75 6c 74 69 70  f().  Use multip
2dc0: 6c 65 20 6d 70 72 69 6e 74 66 28 29 20 63 61 6c  le mprintf() cal
2dd0: 6c 73 20 74 6f 20 0a 2a 2a 20 63 6f 6e 63 61 74  ls to .** concat
2de0: 65 6e 61 74 65 20 61 72 67 30 20 74 68 72 6f 75  enate arg0 throu
2df0: 67 68 20 61 72 67 6e 20 75 73 69 6e 67 20 73 65  gh argn using se
2e00: 70 61 72 61 74 6f 72 20 61 73 20 74 68 65 20 73  parator as the s
2e10: 65 70 61 72 61 74 6f 72 2e 0a 2a 2a 20 52 65 74  eparator..** Ret
2e20: 75 72 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 0a  urn the result..
2e30: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
2e40: 73 74 5f 6d 70 72 69 6e 74 66 5f 7a 28 0a 20 20  st_mprintf_z(.  
2e50: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
2e60: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
2e70: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
2e80: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
2e90: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
2ea0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
2eb0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
2ec0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2ed0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
2ee0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
2ef0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
2f00: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
2f10: 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a   */.){.  char *z
2f20: 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 69 6e  Result = 0;.  in
2f30: 74 20 69 3b 0a 0a 20 20 66 6f 72 28 69 3d 32 3b  t i;..  for(i=2;
2f40: 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20   i<argc; i++){. 
2f50: 20 20 20 7a 52 65 73 75 6c 74 20 3d 20 73 71 6c     zResult = sql
2f60: 69 74 65 33 4d 50 72 69 6e 74 66 28 22 25 7a 25  ite3MPrintf("%z%
2f70: 73 25 73 22 2c 20 7a 52 65 73 75 6c 74 2c 20 61  s%s", zResult, a
2f80: 72 67 76 5b 31 5d 2c 20 61 72 67 76 5b 69 5d 29  rgv[1], argv[i])
2f90: 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65  ;.  }.  Tcl_Appe
2fa0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
2fb0: 20 7a 52 65 73 75 6c 74 2c 20 30 29 3b 0a 20 20   zResult, 0);.  
2fc0: 73 71 6c 69 74 65 46 72 65 65 28 7a 52 65 73 75  sqliteFree(zResu
2fd0: 6c 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  lt);.  return TC
2fe0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
2ff0: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d  sage:  sqlite3_m
3000: 70 72 69 6e 74 66 5f 6e 5f 74 65 73 74 20 20 53  printf_n_test  S
3010: 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 54 65 73 74  TRING.**.** Test
3020: 20 74 68 65 20 25 6e 20 66 6f 72 6d 61 74 20 6f   the %n format o
3030: 66 20 73 71 6c 69 74 65 4d 50 72 69 6e 74 66 28  f sqliteMPrintf(
3040: 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 6c  ).  Return the l
3050: 65 6e 67 74 68 20 6f 66 20 74 68 65 0a 2a 2a 20  ength of the.** 
3060: 69 6e 70 75 74 20 73 74 72 69 6e 67 2e 0a 2a 2f  input string..*/
3070: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
3080: 5f 6d 70 72 69 6e 74 66 5f 6e 28 0a 20 20 76 6f  _mprintf_n(.  vo
3090: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
30a0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
30b0: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
30c0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
30d0: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
30e0: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
30f0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
3100: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
3110: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
3120: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
3130: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
3140: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
3150: 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 53 74  /.){.  char *zSt
3160: 72 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a  r;.  int n = 0;.
3170: 20 20 7a 53 74 72 20 3d 20 73 71 6c 69 74 65 33    zStr = sqlite3
3180: 4d 50 72 69 6e 74 66 28 22 25 73 25 6e 22 2c 20  MPrintf("%s%n", 
3190: 61 72 67 76 5b 31 5d 2c 20 26 6e 29 3b 0a 20 20  argv[1], &n);.  
31a0: 73 71 6c 69 74 65 46 72 65 65 28 7a 53 74 72 29  sqliteFree(zStr)
31b0: 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
31c0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
31d0: 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e 29 29 3b 0a  _NewIntObj(n));.
31e0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
31f0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
3200: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3210: 74 66 5f 69 6e 74 20 20 53 49 5a 45 20 46 4f 52  tf_int  SIZE FOR
3220: 4d 41 54 20 20 49 4e 54 0a 2a 2a 0a 2a 2a 20 54  MAT  INT.**.** T
3230: 65 73 74 20 74 68 65 20 6f 66 20 73 71 6c 69 74  est the of sqlit
3240: 65 33 5f 73 6e 70 72 69 6e 74 66 28 29 20 72 6f  e3_snprintf() ro
3250: 75 74 69 6e 65 2e 20 20 53 49 5a 45 20 69 73 20  utine.  SIZE is 
3260: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 0a  the size of the.
3270: 2a 2a 20 6f 75 74 70 75 74 20 62 75 66 66 65 72  ** output buffer
3280: 20 69 6e 20 62 79 74 65 73 2e 20 20 54 68 65 20   in bytes.  The 
3290: 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 69 73 20  maximum size is 
32a0: 31 30 30 2e 20 20 46 4f 52 4d 41 54 20 69 73 20  100.  FORMAT is 
32b0: 74 68 65 0a 2a 2a 20 66 6f 72 6d 61 74 20 73 74  the.** format st
32c0: 72 69 6e 67 2e 20 20 49 4e 54 20 69 73 20 61 20  ring.  INT is a 
32d0: 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 61  single integer a
32e0: 72 67 75 6d 65 6e 74 2e 20 20 54 68 65 20 46 4f  rgument.  The FO
32f0: 52 4d 41 54 0a 2a 2a 20 73 74 72 69 6e 67 20 6d  RMAT.** string m
3300: 75 73 74 20 72 65 71 75 69 72 65 20 6e 6f 20 6d  ust require no m
3310: 6f 72 65 20 74 68 61 6e 20 74 68 69 73 20 6f 6e  ore than this on
3320: 65 20 69 6e 74 65 67 65 72 20 61 72 67 75 6d 65  e integer argume
3330: 6e 74 2e 20 20 49 66 0a 2a 2a 20 59 6f 75 20 70  nt.  If.** You p
3340: 61 73 73 20 69 6e 20 61 20 66 6f 72 6d 61 74 20  ass in a format 
3350: 73 74 72 69 6e 67 20 74 68 61 74 20 72 65 71 75  string that requ
3360: 69 72 65 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f  ires more than o
3370: 6e 65 20 61 72 67 75 6d 65 6e 74 2c 0a 2a 2a 20  ne argument,.** 
3380: 62 61 64 20 74 68 69 6e 67 73 20 77 69 6c 6c 20  bad things will 
3390: 68 61 70 70 65 6e 2e 0a 2a 2f 0a 73 74 61 74 69  happen..*/.stati
33a0: 63 20 69 6e 74 20 74 65 73 74 5f 73 6e 70 72 69  c int test_snpri
33b0: 6e 74 66 5f 69 6e 74 28 0a 20 20 76 6f 69 64 20  ntf_int(.  void 
33c0: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
33d0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
33e0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
33f0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
3400: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
3410: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
3420: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
3430: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
3440: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
3450: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
3460: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
3470: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
3480: 7b 0a 20 20 63 68 61 72 20 7a 53 74 72 5b 31 30  {.  char zStr[10
3490: 30 5d 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 61 74  0];.  int n = at
34a0: 6f 69 28 61 72 67 76 5b 31 5d 29 3b 0a 20 20 69  oi(argv[1]);.  i
34b0: 66 28 20 6e 3e 73 69 7a 65 6f 66 28 7a 53 74 72  f( n>sizeof(zStr
34c0: 29 20 29 20 6e 20 3d 20 73 69 7a 65 6f 66 28 7a  ) ) n = sizeof(z
34d0: 53 74 72 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68  Str);.  const ch
34e0: 61 72 20 2a 7a 46 6f 72 6d 61 74 20 3d 20 61 72  ar *zFormat = ar
34f0: 67 76 5b 32 5d 3b 0a 20 20 69 6e 74 20 61 31 20  gv[2];.  int a1 
3500: 3d 20 61 74 6f 69 28 61 72 67 76 5b 33 5d 29 3b  = atoi(argv[3]);
3510: 0a 20 20 73 74 72 63 70 79 28 7a 53 74 72 2c 20  .  strcpy(zStr, 
3520: 22 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f  "abcdefghijklmno
3530: 70 71 72 73 74 75 76 77 78 79 7a 22 29 3b 0a 20  pqrstuvwxyz");. 
3540: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3550: 66 28 6e 2c 20 7a 53 74 72 2c 20 7a 46 6f 72 6d  f(n, zStr, zForm
3560: 61 74 2c 20 61 31 29 3b 0a 20 20 54 63 6c 5f 41  at, a1);.  Tcl_A
3570: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
3580: 72 70 2c 20 7a 53 74 72 2c 20 30 29 3b 0a 20 20  rp, zStr, 0);.  
3590: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
35a0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
35b0: 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c  sqlite3_get_tabl
35c0: 65 5f 70 72 69 6e 74 66 20 20 44 42 20 20 46 4f  e_printf  DB  FO
35d0: 52 4d 41 54 20 20 53 54 52 49 4e 47 0a 2a 2a 0a  RMAT  STRING.**.
35e0: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 73 71  ** Invoke the sq
35f0: 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f  lite3_get_table_
3600: 70 72 69 6e 74 66 28 29 20 69 6e 74 65 72 66 61  printf() interfa
3610: 63 65 20 75 73 69 6e 67 20 74 68 65 20 6f 70 65  ce using the ope
3620: 6e 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 44 42  n database.** DB
3630: 2e 20 20 54 68 65 20 53 51 4c 20 69 73 20 74 68  .  The SQL is th
3640: 65 20 73 74 72 69 6e 67 20 46 4f 52 4d 41 54 2e  e string FORMAT.
3650: 20 20 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72    The format str
3660: 69 6e 67 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61  ing should conta
3670: 69 6e 0a 2a 2a 20 6f 6e 65 20 25 73 20 6f 72 20  in.** one %s or 
3680: 25 71 2e 20 20 53 54 52 49 4e 47 20 69 73 20 74  %q.  STRING is t
3690: 68 65 20 76 61 6c 75 65 20 69 6e 73 65 72 74 65  he value inserte
36a0: 64 20 69 6e 74 6f 20 25 73 20 6f 72 20 25 71 2e  d into %s or %q.
36b0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
36c0: 65 73 74 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72  est_get_table_pr
36d0: 69 6e 74 66 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  intf(.  void *No
36e0: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
36f0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
3700: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
3710: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
3720: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
3730: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
3740: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3750: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
3760: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
3770: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
3780: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
3790: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
37a0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
37b0: 54 63 6c 5f 44 53 74 72 69 6e 67 20 73 74 72 3b  Tcl_DString str;
37c0: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61  .  int rc;.  cha
37d0: 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 69  r *zErr = 0;.  i
37e0: 6e 74 20 6e 52 6f 77 2c 20 6e 43 6f 6c 3b 0a 20  nt nRow, nCol;. 
37f0: 20 63 68 61 72 20 2a 2a 61 52 65 73 75 6c 74 3b   char **aResult;
3800: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 68 61 72  .  int i;.  char
3810: 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 63 68 61   zBuf[30];.  cha
3820: 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 66 28 20 61  r *zSql;.  if( a
3830: 72 67 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63  rgc!=4 ){.    Tc
3840: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
3850: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
3860: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
3870: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20  \"", argv[0], . 
3880: 20 20 20 20 20 20 22 20 44 42 20 46 4f 52 4d 41        " DB FORMA
3890: 54 20 53 54 52 49 4e 47 22 2c 20 30 29 3b 0a 20  T STRING", 0);. 
38a0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
38b0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
38c0: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
38d0: 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62  rp, argv[1], &db
38e0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
38f0: 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 44 53 74 72  RROR;.  Tcl_DStr
3900: 69 6e 67 49 6e 69 74 28 26 73 74 72 29 3b 0a 20  ingInit(&str);. 
3910: 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f   zSql = sqlite3_
3920: 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 32 5d 2c  mprintf(argv[2],
3930: 61 72 67 76 5b 33 5d 29 3b 0a 20 20 72 63 20 3d  argv[3]);.  rc =
3940: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62   sqlite3_get_tab
3950: 6c 65 28 64 62 2c 20 7a 53 71 6c 2c 20 26 61 52  le(db, zSql, &aR
3960: 65 73 75 6c 74 2c 20 26 6e 52 6f 77 2c 20 26 6e  esult, &nRow, &n
3970: 43 6f 6c 2c 20 26 7a 45 72 72 29 3b 0a 20 20 73  Col, &zErr);.  s
3980: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71 6c  qlite3_free(zSql
3990: 29 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75  );.  sprintf(zBu
39a0: 66 2c 20 22 25 64 22 2c 20 72 63 29 3b 0a 20 20  f, "%d", rc);.  
39b0: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
39c0: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b  t(interp, zBuf);
39d0: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
39e0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 70 72 69  E_OK ){.    spri
39f0: 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20  ntf(zBuf, "%d", 
3a00: 6e 52 6f 77 29 3b 0a 20 20 20 20 54 63 6c 5f 41  nRow);.    Tcl_A
3a10: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
3a20: 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20  erp, zBuf);.    
3a30: 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25  sprintf(zBuf, "%
3a40: 64 22 2c 20 6e 43 6f 6c 29 3b 0a 20 20 20 20 54  d", nCol);.    T
3a50: 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  cl_AppendElement
3a60: 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a  (interp, zBuf);.
3a70: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 28      for(i=0; i<(
3a80: 6e 52 6f 77 2b 31 29 2a 6e 43 6f 6c 3b 20 69 2b  nRow+1)*nCol; i+
3a90: 2b 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41 70  +){.      Tcl_Ap
3aa0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
3ab0: 72 70 2c 20 61 52 65 73 75 6c 74 5b 69 5d 20 3f  rp, aResult[i] ?
3ac0: 20 61 52 65 73 75 6c 74 5b 69 5d 20 3a 20 22 4e   aResult[i] : "N
3ad0: 55 4c 4c 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  ULL");.    }.  }
3ae0: 65 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70  else{.    Tcl_Ap
3af0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
3b00: 72 70 2c 20 7a 45 72 72 29 3b 0a 20 20 7d 0a 20  rp, zErr);.  }. 
3b10: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 5f 74 61   sqlite3_free_ta
3b20: 62 6c 65 28 61 52 65 73 75 6c 74 29 3b 0a 20 20  ble(aResult);.  
3b30: 69 66 28 20 7a 45 72 72 20 29 20 73 71 6c 69 74  if( zErr ) sqlit
3b40: 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 20  e3_free(zErr);. 
3b50: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
3b60: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
3b70: 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
3b80: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65   TCL_ERROR;.  re
3b90: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
3ba0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
3bb0: 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
3bc0: 72 74 5f 72 6f 77 69 64 20 44 42 0a 2a 2a 0a 2a  rt_rowid DB.**.*
3bd0: 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 69 6e  * Returns the in
3be0: 74 65 67 65 72 20 52 4f 57 49 44 20 6f 66 20 74  teger ROWID of t
3bf0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69  he most recent i
3c00: 6e 73 65 72 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  nsert..*/.static
3c10: 20 69 6e 74 20 74 65 73 74 5f 6c 61 73 74 5f 72   int test_last_r
3c20: 6f 77 69 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  owid(.  void *No
3c30: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
3c40: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
3c50: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
3c60: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
3c70: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
3c80: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3ca0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
3cb0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
3cc0: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
3cd0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
3ce0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
3cf0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
3d00: 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 0a  char zBuf[30];..
3d10: 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b    if( argc!=2 ){
3d20: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
3d30: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
3d40: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
3d50: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
3d60: 5b 30 5d 2c 20 22 20 44 42 5c 22 22 2c 20 30 29  [0], " DB\"", 0)
3d70: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
3d80: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
3d90: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
3da0: 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
3db0: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
3dc0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 70 72 69 6e  L_ERROR;.  sprin
3dd0: 74 66 28 7a 42 75 66 2c 20 22 25 6c 6c 64 22 2c  tf(zBuf, "%lld",
3de0: 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
3df0: 73 65 72 74 5f 72 6f 77 69 64 28 64 62 29 29 3b  sert_rowid(db));
3e00: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
3e10: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
3e20: 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 53  , 0);.  return S
3e30: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  QLITE_OK;.}../*.
3e40: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
3e50: 65 33 5f 6b 65 79 20 44 42 20 4b 45 59 0a 2a 2a  e3_key DB KEY.**
3e60: 0a 2a 2a 20 53 65 74 20 74 68 65 20 63 6f 64 65  .** Set the code
3e70: 63 20 6b 65 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  c key..*/.static
3e80: 20 69 6e 74 20 74 65 73 74 5f 6b 65 79 28 0a 20   int test_key(. 
3e90: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
3ea0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
3eb0: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
3ec0: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
3ed0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
3ee0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
3ef0: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
3f00: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
3f10: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
3f20: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
3f30: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
3f40: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
3f50: 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  t */.){.  sqlite
3f60: 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63  3 *db;.  const c
3f70: 68 61 72 20 2a 7a 4b 65 79 3b 0a 20 20 69 6e 74  har *zKey;.  int
3f80: 20 6e 4b 65 79 3b 0a 20 20 69 66 28 20 61 72 67   nKey;.  if( arg
3f90: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
3fa0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
3fb0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
3fc0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
3fd0: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
3fe0: 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22     " FILENAME\""
3ff0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
4000: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
4010: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
4020: 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
4030: 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
4040: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a  n TCL_ERROR;.  z
4050: 4b 65 79 20 3d 20 61 72 67 76 5b 32 5d 3b 0a 20  Key = argv[2];. 
4060: 20 6e 4b 65 79 20 3d 20 73 74 72 6c 65 6e 28 7a   nKey = strlen(z
4070: 4b 65 79 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  Key);.#ifdef SQL
4080: 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20  ITE_HAS_CODEC.  
4090: 73 71 6c 69 74 65 33 5f 6b 65 79 28 64 62 2c 20  sqlite3_key(db, 
40a0: 7a 4b 65 79 2c 20 6e 4b 65 79 29 3b 0a 23 65 6e  zKey, nKey);.#en
40b0: 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  dif.  return TCL
40c0: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
40d0: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 72 65  age:  sqlite3_re
40e0: 6b 65 79 20 44 42 20 4b 45 59 0a 2a 2a 0a 2a 2a  key DB KEY.**.**
40f0: 20 43 68 61 6e 67 65 20 74 68 65 20 63 6f 64 65   Change the code
4100: 63 20 6b 65 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  c key..*/.static
4110: 20 69 6e 74 20 74 65 73 74 5f 72 65 6b 65 79 28   int test_rekey(
4120: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
4130: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
4140: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
4150: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
4160: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
4170: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
4180: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
4190: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
41a0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
41b0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
41c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
41d0: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
41e0: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  ent */.){.  sqli
41f0: 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74  te3 *db;.  const
4200: 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 20 20 69   char *zKey;.  i
4210: 6e 74 20 6e 4b 65 79 3b 0a 20 20 69 66 28 20 61  nt nKey;.  if( a
4220: 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  rgc!=3 ){.    Tc
4230: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
4240: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
4250: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
4260: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
4270: 20 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c       " FILENAME\
4280: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
4290: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
42a0: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
42b0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
42c0: 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
42d0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
42e0: 20 7a 4b 65 79 20 3d 20 61 72 67 76 5b 32 5d 3b   zKey = argv[2];
42f0: 0a 20 20 6e 4b 65 79 20 3d 20 73 74 72 6c 65 6e  .  nKey = strlen
4300: 28 7a 4b 65 79 29 3b 0a 23 69 66 64 65 66 20 53  (zKey);.#ifdef S
4310: 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a  QLITE_HAS_CODEC.
4320: 20 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 28    sqlite3_rekey(
4330: 64 62 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 29 3b  db, zKey, nKey);
4340: 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e  .#endif.  return
4350: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
4360: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
4370: 33 5f 63 6c 6f 73 65 20 44 42 0a 2a 2a 0a 2a 2a  3_close DB.**.**
4380: 20 43 6c 6f 73 65 73 20 74 68 65 20 64 61 74 61   Closes the data
4390: 62 61 73 65 20 6f 70 65 6e 65 64 20 62 79 20 73  base opened by s
43a0: 71 6c 69 74 65 33 5f 6f 70 65 6e 2e 0a 2a 2f 0a  qlite3_open..*/.
43b0: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
43c0: 65 5f 74 65 73 74 5f 63 6c 6f 73 65 28 0a 20 20  e_test_close(.  
43d0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
43e0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
43f0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
4400: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
4410: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
4420: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
4430: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
4440: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4450: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
4460: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
4470: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
4480: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
4490: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
44a0: 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   *db;.  int rc;.
44b0: 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b    if( argc!=2 ){
44c0: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
44d0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
44e0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
44f0: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
4500: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 49  [0],.       " FI
4510: 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20  LENAME\"", 0);. 
4520: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
4530: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
4540: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
4550: 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62  rp, argv[1], &db
4560: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
4570: 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c  RROR;.  rc = sql
4580: 69 74 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b 0a  ite3_close(db);.
4590: 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
45a0: 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29  interp, (char *)
45b0: 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  t1ErrorName(rc),
45c0: 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20   TCL_STATIC);.  
45d0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
45e0: 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e  ../*.** Implemen
45f0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 78 5f  tation of the x_
4600: 63 6f 61 6c 65 73 63 65 28 29 20 66 75 6e 63 74  coalesce() funct
4610: 69 6f 6e 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ion..** Return t
4620: 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
4630: 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72 67 75 6d  t non-NULL argum
4640: 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ent..*/.static v
4650: 6f 69 64 20 74 31 5f 69 66 6e 75 6c 6c 46 75 6e  oid t1_ifnullFun
4660: 63 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  c(.  sqlite3_con
4670: 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0a 20  text *context,. 
4680: 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 73 71 6c   int argc,.  sql
4690: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67  ite3_value **arg
46a0: 76 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  v.){.  int i;.  
46b0: 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b  for(i=0; i<argc;
46c0: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 53   i++){.    if( S
46d0: 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d 73 71 6c 69  QLITE_NULL!=sqli
46e0: 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 61  te3_value_type(a
46f0: 72 67 76 5b 69 5d 29 20 29 7b 0a 20 20 20 20 20  rgv[i]) ){.     
4700: 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69 74 65 33   int n = sqlite3
4710: 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 61 72 67  _value_bytes(arg
4720: 76 5b 69 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c  v[i]);.      sql
4730: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
4740: 28 63 6f 6e 74 65 78 74 2c 20 28 63 68 61 72 2a  (context, (char*
4750: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
4760: 65 78 74 28 61 72 67 76 5b 69 5d 29 2c 0a 20 20  ext(argv[i]),.  
4770: 20 20 20 20 20 20 20 20 6e 2c 20 53 51 4c 49 54          n, SQLIT
4780: 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  E_TRANSIENT);.  
4790: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
47a0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  .  }.}../*.** Th
47b0: 65 73 65 20 61 72 65 20 74 65 73 74 20 66 75 6e  ese are test fun
47c0: 63 74 69 6f 6e 73 2e 20 20 20 20 68 65 78 38 28  ctions.    hex8(
47d0: 29 20 69 6e 74 65 72 70 72 65 74 73 20 69 74 73  ) interprets its
47e0: 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20   argument as.** 
47f0: 55 54 46 38 20 61 6e 64 20 72 65 74 75 72 6e 73  UTF8 and returns
4800: 20 61 20 68 65 78 20 65 6e 63 6f 64 69 6e 67 2e   a hex encoding.
4810: 20 20 68 65 78 31 36 6c 65 28 29 20 69 6e 74 65    hex16le() inte
4820: 72 70 72 65 74 73 20 69 74 73 20 61 72 67 75 6d  rprets its argum
4830: 65 6e 74 0a 2a 2a 20 61 73 20 55 54 46 31 36 6c  ent.** as UTF16l
4840: 65 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20  e and returns a 
4850: 68 65 78 20 65 6e 63 6f 64 69 6e 67 2e 0a 2a 2f  hex encoding..*/
4860: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 68 65 78  .static void hex
4870: 38 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f  8Func(sqlite3_co
4880: 6e 74 65 78 74 20 2a 70 2c 20 69 6e 74 20 61 72  ntext *p, int ar
4890: 67 63 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  gc, sqlite3_valu
48a0: 65 20 2a 2a 61 72 67 76 29 7b 0a 20 20 63 6f 6e  e **argv){.  con
48b0: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
48c0: 20 2a 7a 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20   *z;.  int i;.  
48d0: 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a  char zBuf[200];.
48e0: 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76 61    z = sqlite3_va
48f0: 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d  lue_text(argv[0]
4900: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
4910: 73 69 7a 65 6f 66 28 7a 42 75 66 29 2f 32 20 2d  sizeof(zBuf)/2 -
4920: 20 32 20 26 26 20 7a 5b 69 5d 3b 20 69 2b 2b 29   2 && z[i]; i++)
4930: 7b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 26 7a  {.    sprintf(&z
4940: 42 75 66 5b 69 2a 32 5d 2c 20 22 25 30 32 78 22  Buf[i*2], "%02x"
4950: 2c 20 7a 5b 69 5d 26 30 78 66 66 29 3b 0a 20 20  , z[i]&0xff);.  
4960: 7d 0a 20 20 7a 42 75 66 5b 69 2a 32 5d 20 3d 20  }.  zBuf[i*2] = 
4970: 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73  0;.  sqlite3_res
4980: 75 6c 74 5f 74 65 78 74 28 70 2c 20 28 63 68 61  ult_text(p, (cha
4990: 72 2a 29 7a 42 75 66 2c 20 2d 31 2c 20 53 51 4c  r*)zBuf, -1, SQL
49a0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
49b0: 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  }.#ifndef SQLITE
49c0: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 73 74 61 74  _OMIT_UTF16.stat
49d0: 69 63 20 76 6f 69 64 20 68 65 78 31 36 46 75 6e  ic void hex16Fun
49e0: 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  c(sqlite3_contex
49f0: 74 20 2a 70 2c 20 69 6e 74 20 61 72 67 63 2c 20  t *p, int argc, 
4a00: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
4a10: 61 72 67 76 29 7b 0a 20 20 63 6f 6e 73 74 20 75  argv){.  const u
4a20: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e  nsigned short in
4a30: 74 20 2a 7a 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  t *z;.  int i;. 
4a40: 20 63 68 61 72 20 7a 42 75 66 5b 34 30 30 5d 3b   char zBuf[400];
4a50: 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 76  .  z = sqlite3_v
4a60: 61 6c 75 65 5f 74 65 78 74 31 36 28 61 72 67 76  alue_text16(argv
4a70: 5b 30 5d 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  [0]);.  for(i=0;
4a80: 20 69 3c 73 69 7a 65 6f 66 28 7a 42 75 66 29 2f   i<sizeof(zBuf)/
4a90: 34 20 2d 20 34 20 26 26 20 7a 5b 69 5d 3b 20 69  4 - 4 && z[i]; i
4aa0: 2b 2b 29 7b 0a 20 20 20 20 73 70 72 69 6e 74 66  ++){.    sprintf
4ab0: 28 26 7a 42 75 66 5b 69 2a 34 5d 2c 20 22 25 30  (&zBuf[i*4], "%0
4ac0: 34 78 22 2c 20 7a 5b 69 5d 26 30 78 66 66 29 3b  4x", z[i]&0xff);
4ad0: 0a 20 20 7d 0a 20 20 7a 42 75 66 5b 69 2a 34 5d  .  }.  zBuf[i*4]
4ae0: 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = 0;.  sqlite3_
4af0: 72 65 73 75 6c 74 5f 74 65 78 74 28 70 2c 20 28  result_text(p, (
4b00: 63 68 61 72 2a 29 7a 42 75 66 2c 20 2d 31 2c 20  char*)zBuf, -1, 
4b10: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
4b20: 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
4b30: 2a 2a 20 41 20 73 74 72 75 63 74 75 72 65 20 69  ** A structure i
4b40: 6e 74 6f 20 77 68 69 63 68 20 74 6f 20 61 63 63  nto which to acc
4b50: 75 6d 75 6c 61 74 65 20 74 65 78 74 2e 0a 2a 2f  umulate text..*/
4b60: 0a 73 74 72 75 63 74 20 64 73 74 72 20 7b 0a 20  .struct dstr {. 
4b70: 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 2f 2a   int nAlloc;  /*
4b80: 20 53 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   Space allocated
4b90: 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b   */.  int nUsed;
4ba0: 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
4bb0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20   */.  char *z;  
4bc0: 20 20 20 2f 2a 20 54 68 65 20 73 70 61 63 65 20     /* The space 
4bd0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 70 70  */.};../*.** App
4be0: 65 6e 64 20 74 65 78 74 20 74 6f 20 61 20 64 73  end text to a ds
4bf0: 74 72 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  tr.*/.static voi
4c00: 64 20 64 73 74 72 41 70 70 65 6e 64 28 73 74 72  d dstrAppend(str
4c10: 75 63 74 20 64 73 74 72 20 2a 70 2c 20 63 6f 6e  uct dstr *p, con
4c20: 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
4c30: 64 69 76 69 64 65 72 29 7b 0a 20 20 69 6e 74 20  divider){.  int 
4c40: 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20  n = strlen(z);. 
4c50: 20 69 66 28 20 70 2d 3e 6e 55 73 65 64 20 2b 20   if( p->nUsed + 
4c60: 6e 20 2b 20 32 20 3e 20 70 2d 3e 6e 41 6c 6c 6f  n + 2 > p->nAllo
4c70: 63 20 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  c ){.    char *z
4c80: 4e 65 77 3b 0a 20 20 20 20 70 2d 3e 6e 41 6c 6c  New;.    p->nAll
4c90: 6f 63 20 3d 20 70 2d 3e 6e 41 6c 6c 6f 63 2a 32  oc = p->nAlloc*2
4ca0: 20 2b 20 6e 20 2b 20 32 30 30 3b 0a 20 20 20 20   + n + 200;.    
4cb0: 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65 52 65 61  zNew = sqliteRea
4cc0: 6c 6c 6f 63 28 70 2d 3e 7a 2c 20 70 2d 3e 6e 41  lloc(p->z, p->nA
4cd0: 6c 6c 6f 63 29 3b 0a 20 20 20 20 69 66 28 20 7a  lloc);.    if( z
4ce0: 4e 65 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  New==0 ){.      
4cf0: 73 71 6c 69 74 65 46 72 65 65 28 70 2d 3e 7a 29  sqliteFree(p->z)
4d00: 3b 0a 20 20 20 20 20 20 6d 65 6d 73 65 74 28 70  ;.      memset(p
4d10: 2c 20 30 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29  , 0, sizeof(*p))
4d20: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a  ;.      return;.
4d30: 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 7a 20 3d      }.    p->z =
4d40: 20 7a 4e 65 77 3b 0a 20 20 7d 0a 20 20 69 66 28   zNew;.  }.  if(
4d50: 20 64 69 76 69 64 65 72 20 26 26 20 70 2d 3e 6e   divider && p->n
4d60: 55 73 65 64 3e 30 20 29 7b 0a 20 20 20 20 70 2d  Used>0 ){.    p-
4d70: 3e 7a 5b 70 2d 3e 6e 55 73 65 64 2b 2b 5d 20 3d  >z[p->nUsed++] =
4d80: 20 64 69 76 69 64 65 72 3b 0a 20 20 7d 0a 20 20   divider;.  }.  
4d90: 6d 65 6d 63 70 79 28 26 70 2d 3e 7a 5b 70 2d 3e  memcpy(&p->z[p->
4da0: 6e 55 73 65 64 5d 2c 20 7a 2c 20 6e 2b 31 29 3b  nUsed], z, n+1);
4db0: 0a 20 20 70 2d 3e 6e 55 73 65 64 20 2b 3d 20 6e  .  p->nUsed += n
4dc0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b  ;.}../*.** Invok
4dd0: 65 64 20 66 6f 72 20 65 61 63 68 20 63 61 6c 6c  ed for each call
4de0: 62 61 63 6b 20 66 72 6f 6d 20 73 71 6c 69 74 65  back from sqlite
4df0: 33 45 78 65 63 46 75 6e 63 0a 2a 2f 0a 73 74 61  3ExecFunc.*/.sta
4e00: 74 69 63 20 69 6e 74 20 65 78 65 63 46 75 6e 63  tic int execFunc
4e10: 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 20 2a 70  Callback(void *p
4e20: 44 61 74 61 2c 20 69 6e 74 20 61 72 67 63 2c 20  Data, int argc, 
4e30: 63 68 61 72 20 2a 2a 61 72 67 76 2c 20 63 68 61  char **argv, cha
4e40: 72 20 2a 2a 4e 6f 74 55 73 65 64 29 7b 0a 20 20  r **NotUsed){.  
4e50: 73 74 72 75 63 74 20 64 73 74 72 20 2a 70 20 3d  struct dstr *p =
4e60: 20 28 73 74 72 75 63 74 20 64 73 74 72 2a 29 70   (struct dstr*)p
4e70: 44 61 74 61 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  Data;.  int i;. 
4e80: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63   for(i=0; i<argc
4e90: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
4ea0: 61 72 67 76 5b 69 5d 3d 3d 30 20 29 7b 0a 20 20  argv[i]==0 ){.  
4eb0: 20 20 20 20 64 73 74 72 41 70 70 65 6e 64 28 70      dstrAppend(p
4ec0: 2c 20 22 4e 55 4c 4c 22 2c 20 27 20 27 29 3b 0a  , "NULL", ' ');.
4ed0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4ee0: 20 64 73 74 72 41 70 70 65 6e 64 28 70 2c 20 61   dstrAppend(p, a
4ef0: 72 67 76 5b 69 5d 2c 20 27 20 27 29 3b 0a 20 20  rgv[i], ' ');.  
4f00: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
4f10: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70   0;.}../*.** Imp
4f20: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
4f30: 68 65 20 78 5f 73 71 6c 69 74 65 5f 65 78 65 63  he x_sqlite_exec
4f40: 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  () function.  Th
4f50: 69 73 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65  is function take
4f60: 73 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 61 72  s.** a single ar
4f70: 67 75 6d 65 6e 74 20 61 6e 64 20 61 74 74 65 6d  gument and attem
4f80: 70 74 73 20 74 6f 20 65 78 65 63 75 74 65 20 74  pts to execute t
4f90: 68 61 74 20 61 72 67 75 6d 65 6e 74 20 61 73 20  hat argument as 
4fa0: 53 51 4c 20 63 6f 64 65 2e 0a 2a 2a 20 54 68 69  SQL code..** Thi
4fb0: 73 20 69 73 20 69 6c 6c 65 67 61 6c 20 61 6e 64  s is illegal and
4fc0: 20 73 68 6f 75 6c 64 20 73 65 74 20 74 68 65 20   should set the 
4fd0: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 66 6c  SQLITE_MISUSE fl
4fe0: 61 67 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ag on the databa
4ff0: 73 65 2e 0a 2a 2a 0a 2a 2a 20 32 30 30 34 2d 4a  se..**.** 2004-J
5000: 61 6e 2d 30 37 3a 20 20 57 65 20 68 61 76 65 20  an-07:  We have 
5010: 63 68 61 6e 67 65 64 20 74 68 69 73 20 74 6f 20  changed this to 
5020: 6d 61 6b 65 20 69 74 20 6c 65 67 61 6c 20 74 6f  make it legal to
5030: 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 78   call sqlite3_ex
5040: 65 63 28 29 0a 2a 2a 20 66 72 6f 6d 20 77 69 74  ec().** from wit
5050: 68 69 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 63  hin a function c
5060: 61 6c 6c 2e 20 20 0a 2a 2a 20 0a 2a 2a 20 54 68  all.  .** .** Th
5070: 69 73 20 72 6f 75 74 69 6e 65 20 73 69 6d 75 6c  is routine simul
5080: 61 74 65 73 20 74 68 65 20 65 66 66 65 63 74 20  ates the effect 
5090: 6f 66 20 68 61 76 69 6e 67 20 74 77 6f 20 74 68  of having two th
50a0: 72 65 61 64 73 20 61 74 74 65 6d 70 74 20 74 6f  reads attempt to
50b0: 0a 2a 2a 20 75 73 65 20 74 68 65 20 73 61 6d 65  .** use the same
50c0: 20 64 61 74 61 62 61 73 65 20 61 74 20 74 68 65   database at the
50d0: 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2f 0a 73   same time..*/.s
50e0: 74 61 74 69 63 20 76 6f 69 64 20 73 71 6c 69 74  tatic void sqlit
50f0: 65 33 45 78 65 63 46 75 6e 63 28 0a 20 20 73 71  e3ExecFunc(.  sq
5100: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
5110: 6f 6e 74 65 78 74 2c 20 0a 20 20 69 6e 74 20 61  ontext, .  int a
5120: 72 67 63 2c 20 20 0a 20 20 73 71 6c 69 74 65 33  rgc,  .  sqlite3
5130: 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b  _value **argv.){
5140: 0a 20 20 73 74 72 75 63 74 20 64 73 74 72 20 78  .  struct dstr x
5150: 3b 0a 20 20 6d 65 6d 73 65 74 28 26 78 2c 20 30  ;.  memset(&x, 0
5160: 2c 20 73 69 7a 65 6f 66 28 78 29 29 3b 0a 20 20  , sizeof(x));.  
5170: 28 76 6f 69 64 29 73 71 6c 69 74 65 33 5f 65 78  (void)sqlite3_ex
5180: 65 63 28 28 73 71 6c 69 74 65 33 2a 29 73 71 6c  ec((sqlite3*)sql
5190: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 63  ite3_user_data(c
51a0: 6f 6e 74 65 78 74 29 2c 0a 20 20 20 20 20 20 28  ontext),.      (
51b0: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
51c0: 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d  lue_text(argv[0]
51d0: 29 2c 0a 20 20 20 20 20 20 65 78 65 63 46 75 6e  ),.      execFun
51e0: 63 43 61 6c 6c 62 61 63 6b 2c 20 26 78 2c 20 30  cCallback, &x, 0
51f0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73  );.  sqlite3_res
5200: 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74  ult_text(context
5210: 2c 20 78 2e 7a 2c 20 78 2e 6e 55 73 65 64 2c 20  , x.z, x.nUsed, 
5220: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
5230: 29 3b 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28  );.  sqliteFree(
5240: 78 2e 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  x.z);.}../*.** I
5250: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
5260: 20 74 6b 74 32 32 31 33 66 75 6e 63 28 29 2c 20   tkt2213func(), 
5270: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
5280: 6e 20 74 68 61 74 20 74 61 6b 65 73 20 65 78 61  n that takes exa
5290: 63 74 6c 79 0a 2a 2a 20 6f 6e 65 20 61 72 67 75  ctly.** one argu
52a0: 6d 65 6e 74 2e 20 49 74 20 68 61 73 20 74 77 6f  ment. It has two
52b0: 20 69 6e 74 65 72 65 73 74 69 6e 67 20 66 65 61   interesting fea
52c0: 74 75 72 65 73 3a 0a 2a 2a 0a 2a 2a 20 2a 20 49  tures:.**.** * I
52d0: 74 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 5f  t calls sqlite3_
52e0: 76 61 6c 75 65 5f 74 65 78 74 28 29 20 33 20 74  value_text() 3 t
52f0: 69 6d 65 73 20 6f 6e 20 74 68 65 20 61 72 67 75  imes on the argu
5300: 6d 65 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c  ment sqlite3_val
5310: 75 65 2a 2e 0a 2a 2a 20 20 20 49 66 20 74 68 65  ue*..**   If the
5320: 20 74 68 72 65 65 20 70 6f 69 6e 74 65 72 73 20   three pointers 
5330: 72 65 74 75 72 6e 65 64 20 61 72 65 20 6e 6f 74  returned are not
5340: 20 74 68 65 20 73 61 6d 65 20 61 6e 20 53 51 4c   the same an SQL
5350: 20 65 72 72 6f 72 20 69 73 20 72 61 69 73 65 64   error is raised
5360: 2e 0a 2a 2a 0a 2a 2a 20 2a 20 4f 74 68 65 72 77  ..**.** * Otherw
5370: 69 73 65 20 69 74 20 72 65 74 75 72 6e 73 20 61  ise it returns a
5380: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 74 65 78   copy of the tex
5390: 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  t representation
53a0: 20 6f 66 20 69 74 27 73 20 0a 2a 2a 20 20 20 61   of it's .**   a
53b0: 72 67 75 6d 65 6e 74 20 69 6e 20 73 75 63 68 20  rgument in such 
53c0: 61 20 77 61 79 20 61 73 20 74 68 65 20 56 44 42  a way as the VDB
53d0: 45 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  E representation
53e0: 20 69 73 20 61 20 4d 65 6d 2a 20 63 65 6c 6c 20   is a Mem* cell 
53f0: 0a 2a 2a 20 20 20 77 69 74 68 20 74 68 65 20 4d  .**   with the M
5400: 45 4d 5f 54 65 72 6d 20 66 6c 61 67 20 63 6c 65  EM_Term flag cle
5410: 61 72 2e 20 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65  ar. .**.** Ticke
5420: 74 20 23 32 32 31 33 20 63 61 6e 20 74 68 65 72  t #2213 can ther
5430: 65 66 6f 72 65 20 62 65 20 74 65 73 74 65 64 20  efore be tested 
5440: 62 79 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  by evaluating th
5450: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 53  e following.** S
5460: 51 4c 20 65 78 70 72 65 73 73 69 6f 6e 3a 0a 2a  QL expression:.*
5470: 2a 0a 2a 2a 20 20 20 74 6b 74 32 32 31 33 66 75  *.**   tkt2213fu
5480: 6e 63 28 74 6b 74 32 32 31 33 66 75 6e 63 28 27  nc(tkt2213func('
5490: 61 20 73 74 72 69 6e 67 27 29 29 3b 0a 2a 2f 0a  a string'));.*/.
54a0: 73 74 61 74 69 63 20 76 6f 69 64 20 74 6b 74 32  static void tkt2
54b0: 32 31 33 46 75 6e 63 74 69 6f 6e 28 0a 20 20 73  213Function(.  s
54c0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
54d0: 63 6f 6e 74 65 78 74 2c 20 0a 20 20 69 6e 74 20  context, .  int 
54e0: 61 72 67 63 2c 20 20 0a 20 20 73 71 6c 69 74 65  argc,  .  sqlite
54f0: 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29  3_value **argv.)
5500: 7b 0a 20 20 69 6e 74 20 6e 54 65 78 74 3b 0a 20  {.  int nText;. 
5510: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63   unsigned char c
5520: 6f 6e 73 74 20 2a 7a 54 65 78 74 31 3b 0a 20 20  onst *zText1;.  
5530: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 6f  unsigned char co
5540: 6e 73 74 20 2a 7a 54 65 78 74 32 3b 0a 20 20 75  nst *zText2;.  u
5550: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 6f 6e  nsigned char con
5560: 73 74 20 2a 7a 54 65 78 74 33 3b 0a 0a 20 20 6e  st *zText3;..  n
5570: 54 65 78 74 20 3d 20 73 71 6c 69 74 65 33 5f 76  Text = sqlite3_v
5580: 61 6c 75 65 5f 62 79 74 65 73 28 61 72 67 76 5b  alue_bytes(argv[
5590: 30 5d 29 3b 0a 20 20 7a 54 65 78 74 31 20 3d 20  0]);.  zText1 = 
55a0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
55b0: 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 7a  xt(argv[0]);.  z
55c0: 54 65 78 74 32 20 3d 20 73 71 6c 69 74 65 33 5f  Text2 = sqlite3_
55d0: 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b  value_text(argv[
55e0: 30 5d 29 3b 0a 20 20 7a 54 65 78 74 33 20 3d 20  0]);.  zText3 = 
55f0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
5600: 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a 0a 20 20  xt(argv[0]);..  
5610: 69 66 28 20 7a 54 65 78 74 31 21 3d 7a 54 65 78  if( zText1!=zTex
5620: 74 32 20 7c 7c 20 7a 54 65 78 74 32 21 3d 7a 54  t2 || zText2!=zT
5630: 65 78 74 33 20 29 7b 0a 20 20 20 20 73 71 6c 69  ext3 ){.    sqli
5640: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
5650: 28 63 6f 6e 74 65 78 74 2c 20 22 74 6b 74 32 32  (context, "tkt22
5660: 31 33 20 69 73 20 6e 6f 74 20 66 69 78 65 64 22  13 is not fixed"
5670: 2c 20 2d 31 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  , -1);.  }else{.
5680: 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 70 79 20      char *zCopy 
5690: 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65  = (char *)sqlite
56a0: 33 5f 6d 61 6c 6c 6f 63 28 6e 54 65 78 74 29 3b  3_malloc(nText);
56b0: 0a 20 20 20 20 6d 65 6d 63 70 79 28 7a 43 6f 70  .    memcpy(zCop
56c0: 79 2c 20 7a 54 65 78 74 31 2c 20 6e 54 65 78 74  y, zText1, nText
56d0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72  );.    sqlite3_r
56e0: 65 73 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65  esult_text(conte
56f0: 78 74 2c 20 7a 43 6f 70 79 2c 20 6e 54 65 78 74  xt, zCopy, nText
5700: 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b  , sqlite3_free);
5710: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  .  }.}../*.** Th
5720: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c 20  e following SQL 
5730: 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 34  function takes 4
5740: 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65   arguments.  The
5750: 20 32 6e 64 20 61 6e 64 0a 2a 2a 20 34 74 68 20   2nd and.** 4th 
5760: 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65  argument must be
5770: 20 6f 6e 65 20 6f 66 20 74 68 65 73 65 20 73 74   one of these st
5780: 72 69 6e 67 73 3a 20 20 27 74 65 78 74 27 2c 20  rings:  'text', 
5790: 27 74 65 78 74 31 36 27 2c 0a 2a 2a 20 6f 72 20  'text16',.** or 
57a0: 27 62 6c 6f 62 27 20 63 6f 72 72 65 73 70 6f 6e  'blob' correspon
57b0: 64 69 6e 67 20 74 6f 20 41 50 49 20 66 75 6e 63  ding to API func
57c0: 74 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20 20 20 20  tions.**.**     
57d0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
57e0: 65 78 74 28 29 0a 2a 2a 20 20 20 20 20 20 73 71  ext().**      sq
57f0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
5800: 31 36 28 29 0a 2a 2a 20 20 20 20 20 20 73 71 6c  16().**      sql
5810: 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28  ite3_value_blob(
5820: 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 68 69 72  ).**.** The thir
5830: 64 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20  d argument is a 
5840: 73 74 72 69 6e 67 2c 20 65 69 74 68 65 72 20 27  string, either '
5850: 62 79 74 65 73 27 20 6f 72 20 27 62 79 74 65 73  bytes' or 'bytes
5860: 31 36 27 20 6f 72 20 27 6e 6f 6f 70 27 2c 0a 2a  16' or 'noop',.*
5870: 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
5880: 74 6f 20 41 50 49 73 3a 0a 2a 2a 0a 2a 2a 20 20  to APIs:.**.**  
5890: 20 20 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75      sqlite3_valu
58a0: 65 5f 62 79 74 65 73 28 29 0a 2a 2a 20 20 20 20  e_bytes().**    
58b0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f    sqlite3_value_
58c0: 62 79 74 65 73 31 36 28 29 0a 2a 2a 20 20 20 20  bytes16().**    
58d0: 20 20 6e 6f 6f 70 0a 2a 2a 0a 2a 2a 20 54 68 65    noop.**.** The
58e0: 20 41 50 49 73 20 64 65 73 69 67 6e 61 74 65 64   APIs designated
58f0: 20 62 79 20 74 68 65 20 32 6e 64 20 74 68 72 6f   by the 2nd thro
5900: 75 67 68 20 34 74 68 20 61 72 67 75 6d 65 6e 74  ugh 4th argument
5910: 73 20 61 72 65 20 61 70 70 6c 69 65 64 0a 2a 2a  s are applied.**
5920: 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 61 72   to the first ar
5930: 67 75 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 2e  gument in order.
5940: 20 20 49 66 20 74 68 65 20 70 6f 69 6e 74 65 72    If the pointer
5950: 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  s returned by th
5960: 65 0a 2a 2a 20 73 65 63 6f 6e 64 20 61 6e 64 20  e.** second and 
5970: 66 6f 75 72 74 68 20 61 72 65 20 64 69 66 66 65  fourth are diffe
5980: 72 65 6e 74 2c 20 74 68 69 73 20 72 6f 75 74 69  rent, this routi
5990: 6e 65 20 72 65 74 75 72 6e 73 20 31 2e 20 20 4f  ne returns 1.  O
59a0: 74 68 65 72 77 69 73 65 2c 0a 2a 2a 20 74 68 69  therwise,.** thi
59b0: 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72 6e  s routine return
59c0: 73 20 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  s 0..**.** This 
59d0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
59e0: 20 74 6f 20 74 65 73 74 20 74 6f 20 73 65 65 20   to test to see 
59f0: 77 68 65 6e 20 72 65 74 75 72 6e 65 64 20 70 6f  when returned po
5a00: 69 6e 74 65 72 73 20 66 72 6f 6d 0a 2a 2a 20 74  inters from.** t
5a10: 68 65 20 5f 74 65 78 74 28 29 2c 20 5f 74 65 78  he _text(), _tex
5a20: 74 31 36 28 29 20 61 6e 64 20 5f 62 6c 6f 62 28  t16() and _blob(
5a30: 29 20 41 50 49 73 20 62 65 63 6f 6d 65 20 69 6e  ) APIs become in
5a40: 76 61 6c 69 64 61 74 65 64 2e 0a 2a 2f 0a 73 74  validated..*/.st
5a50: 61 74 69 63 20 76 6f 69 64 20 70 74 72 43 68 6e  atic void ptrChn
5a60: 67 46 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c  gFunction(.  sql
5a70: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f  ite3_context *co
5a80: 6e 74 65 78 74 2c 20 0a 20 20 69 6e 74 20 61 72  ntext, .  int ar
5a90: 67 63 2c 20 20 0a 20 20 73 71 6c 69 74 65 33 5f  gc,  .  sqlite3_
5aa0: 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a  value **argv.){.
5ab0: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 31    const void *p1
5ac0: 2c 20 2a 70 32 3b 0a 20 20 63 6f 6e 73 74 20 63  , *p2;.  const c
5ad0: 68 61 72 20 2a 7a 43 6d 64 3b 0a 20 20 69 66 28  har *zCmd;.  if(
5ae0: 20 61 72 67 63 21 3d 34 20 29 20 72 65 74 75 72   argc!=4 ) retur
5af0: 6e 3b 0a 20 20 7a 43 6d 64 20 3d 20 28 63 6f 6e  n;.  zCmd = (con
5b00: 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
5b10: 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76  _value_text(argv
5b20: 5b 31 5d 29 3b 0a 20 20 69 66 28 20 7a 43 6d 64  [1]);.  if( zCmd
5b30: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
5b40: 69 66 28 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c  if( strcmp(zCmd,
5b50: 22 74 65 78 74 22 29 3d 3d 30 20 29 7b 0a 20 20  "text")==0 ){.  
5b60: 20 20 70 31 20 3d 20 28 63 6f 6e 73 74 20 76 6f    p1 = (const vo
5b70: 69 64 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  id*)sqlite3_valu
5b80: 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b  e_text(argv[0]);
5b90: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5ba0: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 7d 65 6c  OMIT_UTF16.  }el
5bb0: 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 43  se if( strcmp(zC
5bc0: 6d 64 2c 20 22 74 65 78 74 31 36 22 29 3d 3d 30  md, "text16")==0
5bd0: 20 29 7b 0a 20 20 20 20 70 31 20 3d 20 28 63 6f   ){.    p1 = (co
5be0: 6e 73 74 20 76 6f 69 64 2a 29 73 71 6c 69 74 65  nst void*)sqlite
5bf0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28 61  3_value_text16(a
5c00: 72 67 76 5b 30 5d 29 3b 0a 23 65 6e 64 69 66 0a  rgv[0]);.#endif.
5c10: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
5c20: 6d 70 28 7a 43 6d 64 2c 20 22 62 6c 6f 62 22 29  mp(zCmd, "blob")
5c30: 3d 3d 30 20 29 7b 0a 20 20 20 20 70 31 20 3d 20  ==0 ){.    p1 = 
5c40: 28 63 6f 6e 73 74 20 76 6f 69 64 2a 29 73 71 6c  (const void*)sql
5c50: 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28  ite3_value_blob(
5c60: 61 72 67 76 5b 30 5d 29 3b 0a 20 20 7d 65 6c 73  argv[0]);.  }els
5c70: 65 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20  e{.    return;. 
5c80: 20 7d 0a 20 20 7a 43 6d 64 20 3d 20 28 63 6f 6e   }.  zCmd = (con
5c90: 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
5ca0: 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76  _value_text(argv
5cb0: 5b 32 5d 29 3b 0a 20 20 69 66 28 20 7a 43 6d 64  [2]);.  if( zCmd
5cc0: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
5cd0: 69 66 28 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c  if( strcmp(zCmd,
5ce0: 22 62 79 74 65 73 22 29 3d 3d 30 20 29 7b 0a 20  "bytes")==0 ){. 
5cf0: 20 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65     sqlite3_value
5d00: 5f 62 79 74 65 73 28 61 72 67 76 5b 30 5d 29 3b  _bytes(argv[0]);
5d10: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5d20: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 7d 65 6c  OMIT_UTF16.  }el
5d30: 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 43  se if( strcmp(zC
5d40: 6d 64 2c 20 22 62 79 74 65 73 31 36 22 29 3d 3d  md, "bytes16")==
5d50: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
5d60: 5f 76 61 6c 75 65 5f 62 79 74 65 73 31 36 28 61  _value_bytes16(a
5d70: 72 67 76 5b 30 5d 29 3b 0a 23 65 6e 64 69 66 0a  rgv[0]);.#endif.
5d80: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
5d90: 6d 70 28 7a 43 6d 64 2c 20 22 6e 6f 6f 70 22 29  mp(zCmd, "noop")
5da0: 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 64 6f  ==0 ){.    /* do
5db0: 20 6e 6f 74 68 69 6e 67 20 2a 2f 0a 20 20 7d 65   nothing */.  }e
5dc0: 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b  lse{.    return;
5dd0: 0a 20 20 7d 0a 20 20 7a 43 6d 64 20 3d 20 28 63  .  }.  zCmd = (c
5de0: 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
5df0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72  e3_value_text(ar
5e00: 67 76 5b 33 5d 29 3b 0a 20 20 69 66 28 20 7a 43  gv[3]);.  if( zC
5e10: 6d 64 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a  md==0 ) return;.
5e20: 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 43 6d    if( strcmp(zCm
5e30: 64 2c 22 74 65 78 74 22 29 3d 3d 30 20 29 7b 0a  d,"text")==0 ){.
5e40: 20 20 20 20 70 32 20 3d 20 28 63 6f 6e 73 74 20      p2 = (const 
5e50: 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 76 61  void*)sqlite3_va
5e60: 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d  lue_text(argv[0]
5e70: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
5e80: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 7d  E_OMIT_UTF16.  }
5e90: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
5ea0: 7a 43 6d 64 2c 20 22 74 65 78 74 31 36 22 29 3d  zCmd, "text16")=
5eb0: 3d 30 20 29 7b 0a 20 20 20 20 70 32 20 3d 20 28  =0 ){.    p2 = (
5ec0: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 73 71 6c 69  const void*)sqli
5ed0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36  te3_value_text16
5ee0: 28 61 72 67 76 5b 30 5d 29 3b 0a 23 65 6e 64 69  (argv[0]);.#endi
5ef0: 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  f.  }else if( st
5f00: 72 63 6d 70 28 7a 43 6d 64 2c 20 22 62 6c 6f 62  rcmp(zCmd, "blob
5f10: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 32 20  ")==0 ){.    p2 
5f20: 3d 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 29 73  = (const void*)s
5f30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f  qlite3_value_blo
5f40: 62 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 7d 65  b(argv[0]);.  }e
5f50: 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b  lse{.    return;
5f60: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 72  .  }.  sqlite3_r
5f70: 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78  esult_int(contex
5f80: 74 2c 20 70 31 21 3d 70 32 29 3b 0a 7d 0a 0a 0a  t, p1!=p2);.}...
5f90: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
5fa0: 6c 69 74 65 5f 74 65 73 74 5f 63 72 65 61 74 65  lite_test_create
5fb0: 5f 66 75 6e 63 74 69 6f 6e 20 44 42 0a 2a 2a 0a  _function DB.**.
5fc0: 2a 2a 20 43 61 6c 6c 20 74 68 65 20 73 71 6c 69  ** Call the sqli
5fd0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
5fe0: 69 6f 6e 20 41 50 49 20 6f 6e 20 74 68 65 20 67  ion API on the g
5ff0: 69 76 65 6e 20 64 61 74 61 62 61 73 65 20 69 6e  iven database in
6000: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 63 72 65   order.** to cre
6010: 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 6e  ate a function n
6020: 61 6d 65 64 20 22 78 5f 63 6f 61 6c 65 73 63 65  amed "x_coalesce
6030: 22 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f  ".  This functio
6040: 6e 20 64 6f 65 73 20 74 68 65 20 73 61 6d 65 20  n does the same 
6050: 74 68 69 6e 67 0a 2a 2a 20 61 73 20 74 68 65 20  thing.** as the 
6060: 22 63 6f 61 6c 65 73 63 65 22 20 66 75 6e 63 74  "coalesce" funct
6070: 69 6f 6e 2e 20 20 54 68 69 73 20 66 75 6e 63 74  ion.  This funct
6080: 69 6f 6e 20 61 6c 73 6f 20 72 65 67 69 73 74 65  ion also registe
6090: 72 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  rs an SQL functi
60a0: 6f 6e 0a 2a 2a 20 6e 61 6d 65 64 20 22 78 5f 73  on.** named "x_s
60b0: 71 6c 69 74 65 5f 65 78 65 63 22 20 74 68 61 74  qlite_exec" that
60c0: 20 69 6e 76 6f 6b 65 73 20 73 71 6c 69 74 65 33   invokes sqlite3
60d0: 5f 65 78 65 63 28 29 2e 20 20 49 6e 76 6f 6b 69  _exec().  Invoki
60e0: 6e 67 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  ng sqlite3_exec(
60f0: 29 0a 2a 2a 20 69 6e 20 74 68 69 73 20 77 61 79  ).** in this way
6100: 20 69 73 20 69 6c 6c 65 67 61 6c 20 72 65 63 75   is illegal recu
6110: 72 73 69 6f 6e 20 61 6e 64 20 73 68 6f 75 6c 64  rsion and should
6120: 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
6130: 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 2e 0a 2a  _MISUSE error..*
6140: 2a 20 54 68 65 20 65 66 66 65 63 74 20 69 73 20  * The effect is 
6150: 73 69 6d 69 6c 61 72 20 74 6f 20 74 72 79 69 6e  similar to tryin
6160: 67 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d  g to use the sam
6170: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
6180: 63 74 69 6f 6e 20 66 72 6f 6d 0a 2a 2a 20 74 77  ction from.** tw
6190: 6f 20 74 68 72 65 61 64 73 20 61 74 20 74 68 65  o threads at the
61a0: 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a   same time..**.*
61b0: 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d  * The original m
61c0: 6f 74 69 76 61 74 69 6f 6e 20 66 6f 72 20 74 68  otivation for th
61d0: 69 73 20 72 6f 75 74 69 6e 65 20 77 61 73 20 74  is routine was t
61e0: 6f 20 62 65 20 61 62 6c 65 20 74 6f 20 63 61 6c  o be able to cal
61f0: 6c 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  l the.** sqlite3
6200: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
6210: 20 66 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20   function while 
6220: 61 20 71 75 65 72 79 20 69 73 20 69 6e 20 70 72  a query is in pr
6230: 6f 67 72 65 73 73 20 69 6e 20 6f 72 64 65 72 0a  ogress in order.
6240: 2a 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20 53  ** to test the S
6250: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 64 65 74  QLITE_MISUSE det
6260: 65 63 74 69 6f 6e 20 6c 6f 67 69 63 2e 0a 2a 2f  ection logic..*/
6270: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
6280: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
6290: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
62a0: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
62b0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
62c0: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
62d0: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
62e0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
62f0: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
6300: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
6310: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
6320: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
6330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
6340: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
6350: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ment */.){.  int
6360: 20 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a   rc;.  sqlite3 *
6370: 64 62 3b 0a 20 20 65 78 74 65 72 6e 20 76 6f 69  db;.  extern voi
6380: 64 20 4d 64 35 5f 52 65 67 69 73 74 65 72 28 73  d Md5_Register(s
6390: 71 6c 69 74 65 33 2a 29 3b 0a 0a 20 20 69 66 28  qlite3*);..  if(
63a0: 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20   argc!=2 ){.    
63b0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
63c0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
63d0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
63e0: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a  e \"", argv[0],.
63f0: 20 20 20 20 20 20 20 22 20 44 42 5c 22 22 2c 20         " DB\"", 
6400: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
6410: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
6420: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
6430: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
6440: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
6450: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
6460: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
6470: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78  _function(db, "x
6480: 5f 63 6f 61 6c 65 73 63 65 22 2c 20 2d 31 2c 20  _coalesce", -1, 
6490: 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c 20 0a  SQLITE_ANY, 0, .
64a0: 20 20 20 20 20 20 20 20 74 31 5f 69 66 6e 75 6c          t1_ifnul
64b0: 6c 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20  lFunc, 0, 0);.  
64c0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
64d0: 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
64e0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
64f0: 63 74 69 6f 6e 28 64 62 2c 20 22 68 65 78 38 22  ction(db, "hex8"
6500: 2c 20 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c  , 1, SQLITE_ANY,
6510: 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 68   0, .          h
6520: 65 78 38 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a  ex8Func, 0, 0);.
6530: 20 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c 49    }.#ifndef SQLI
6540: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
6550: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
6560: 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
6570: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
6580: 63 74 69 6f 6e 28 64 62 2c 20 22 68 65 78 31 36  ction(db, "hex16
6590: 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59  ", 1, SQLITE_ANY
65a0: 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20  , 0, .          
65b0: 68 65 78 31 36 46 75 6e 63 2c 20 30 2c 20 30 29  hex16Func, 0, 0)
65c0: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69  ;.  }.#endif.  i
65d0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
65e0: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
65f0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
6600: 74 69 6f 6e 28 64 62 2c 20 22 74 6b 74 32 32 31  tion(db, "tkt221
6610: 33 66 75 6e 63 22 2c 20 31 2c 20 53 51 4c 49 54  3func", 1, SQLIT
6620: 45 5f 41 4e 59 2c 20 30 2c 20 0a 20 20 20 20 20  E_ANY, 0, .     
6630: 20 20 20 20 20 74 6b 74 32 32 31 33 46 75 6e 63       tkt2213Func
6640: 74 69 6f 6e 2c 20 30 2c 20 30 29 3b 0a 20 20 7d  tion, 0, 0);.  }
6650: 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
6660: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d  E_OK ){.    rc =
6670: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
6680: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 70 6f  function(db, "po
6690: 69 6e 74 65 72 5f 63 68 61 6e 67 65 22 2c 20 34  inter_change", 4
66a0: 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c  , SQLITE_ANY, 0,
66b0: 20 0a 20 20 20 20 20 20 20 20 20 20 70 74 72 43   .          ptrC
66c0: 68 6e 67 46 75 6e 63 74 69 6f 6e 2c 20 30 2c 20  hngFunction, 0, 
66d0: 30 29 3b 0a 20 20 7d 0a 0a 23 69 66 6e 64 65 66  0);.  }..#ifndef
66e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
66f0: 31 36 0a 20 20 2f 2a 20 55 73 65 20 74 68 65 20  16.  /* Use the 
6700: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
6710: 75 6e 63 74 69 6f 6e 31 36 28 29 20 41 50 49 20  unction16() API 
6720: 68 65 72 65 2e 20 4d 61 69 6e 6c 79 20 66 6f 72  here. Mainly for
6730: 20 66 75 6e 2c 20 62 75 74 20 61 6c 73 6f 20 0a   fun, but also .
6740: 20 20 2a 2a 20 62 65 63 61 75 73 65 20 69 74 20    ** because it 
6750: 69 73 20 6e 6f 74 20 74 65 73 74 65 64 20 61 6e  is not tested an
6760: 79 77 68 65 72 65 20 65 6c 73 65 2e 20 2a 2f 0a  ywhere else. */.
6770: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
6780: 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  _OK ){.    sqlit
6790: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a  e3_value *pVal;.
67a0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
67b0: 4d 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 73  MDEBUG.    if( s
67c0: 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61  qlite3_iMallocFa
67d0: 69 6c 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  il>0 ){.      sq
67e0: 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69  lite3_iMallocFai
67f0: 6c 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  l++;.    }.#endi
6800: 66 20 0a 20 20 20 20 70 56 61 6c 20 3d 20 73 71  f .    pVal = sq
6810: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 29 3b  lite3ValueNew();
6820: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75  .    sqlite3Valu
6830: 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31  eSetStr(pVal, -1
6840: 2c 20 22 78 5f 73 71 6c 69 74 65 5f 65 78 65 63  , "x_sqlite_exec
6850: 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  ", SQLITE_UTF8, 
6860: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
6870: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
6880: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
6890: 31 36 28 64 62 2c 20 0a 20 20 20 20 20 20 20 20  16(db, .        
68a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c        sqlite3Val
68b0: 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c  ueText(pVal, SQL
68c0: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 29  ITE_UTF16NATIVE)
68d0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
68e0: 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 2c  1, SQLITE_UTF16,
68f0: 20 64 62 2c 20 73 71 6c 69 74 65 33 45 78 65 63   db, sqlite3Exec
6900: 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20 20  Func, 0, 0);.   
6910: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
6920: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 23 65 6e  e(pVal);.  }.#en
6930: 64 69 66 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  dif..  if( sqlit
6940: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
6950: 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20  terp, db, rc) ) 
6960: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
6970: 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c  ;.  Tcl_SetResul
6980: 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
6990: 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63  *)t1ErrorName(rc
69a0: 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  ), 0);.  return 
69b0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
69c0: 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 69 6d 70   Routines to imp
69d0: 6c 65 6d 65 6e 74 20 74 68 65 20 78 5f 63 6f 75  lement the x_cou
69e0: 6e 74 28 29 20 61 67 67 72 65 67 61 74 65 20 66  nt() aggregate f
69f0: 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 78  unction..**.** x
6a00: 5f 63 6f 75 6e 74 28 29 20 63 6f 75 6e 74 73 20  _count() counts 
6a10: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  the number of no
6a20: 6e 2d 6e 75 6c 6c 20 61 72 67 75 6d 65 6e 74 73  n-null arguments
6a30: 2e 20 20 42 75 74 20 74 68 65 72 65 20 61 72 65  .  But there are
6a40: 0a 2a 2a 20 73 6f 6d 65 20 74 77 69 73 74 73 20  .** some twists 
6a50: 66 6f 72 20 74 65 73 74 69 6e 67 20 70 75 72 70  for testing purp
6a60: 6f 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  oses..**.** If t
6a70: 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  he argument to x
6a80: 5f 63 6f 75 6e 74 28 29 20 69 73 20 34 30 20 74  _count() is 40 t
6a90: 68 65 6e 20 61 20 55 54 46 2d 38 20 65 72 72 6f  hen a UTF-8 erro
6aa0: 72 20 69 73 20 72 65 70 6f 72 74 65 64 0a 2a 2a  r is reported.**
6ab0: 20 6f 6e 20 74 68 65 20 73 74 65 70 20 66 75 6e   on the step fun
6ac0: 63 74 69 6f 6e 2e 20 20 49 66 20 78 5f 63 6f 75  ction.  If x_cou
6ad0: 6e 74 28 34 31 29 20 69 73 20 73 65 65 6e 2c 20  nt(41) is seen, 
6ae0: 74 68 65 6e 20 61 20 55 54 46 2d 31 36 20 65 72  then a UTF-16 er
6af0: 72 6f 72 0a 2a 2a 20 69 73 20 72 65 70 6f 72 74  ror.** is report
6b00: 65 64 20 6f 6e 20 74 68 65 20 73 74 65 70 20 66  ed on the step f
6b10: 75 6e 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  unction.  If the
6b20: 20 74 6f 74 61 6c 20 63 6f 75 6e 74 20 69 73 20   total count is 
6b30: 34 32 2c 20 74 68 65 6e 0a 2a 2a 20 61 20 55 54  42, then.** a UT
6b40: 46 2d 38 20 65 72 72 6f 72 20 69 73 20 72 65 70  F-8 error is rep
6b50: 6f 72 74 65 64 20 6f 6e 20 74 68 65 20 66 69 6e  orted on the fin
6b60: 61 6c 69 7a 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  alize function..
6b70: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
6b80: 74 20 74 31 43 6f 75 6e 74 43 74 78 20 74 31 43  t t1CountCtx t1C
6b90: 6f 75 6e 74 43 74 78 3b 0a 73 74 72 75 63 74 20  ountCtx;.struct 
6ba0: 74 31 43 6f 75 6e 74 43 74 78 20 7b 0a 20 20 69  t1CountCtx {.  i
6bb0: 6e 74 20 6e 3b 0a 7d 3b 0a 73 74 61 74 69 63 20  nt n;.};.static 
6bc0: 76 6f 69 64 20 74 31 43 6f 75 6e 74 53 74 65 70  void t1CountStep
6bd0: 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (.  sqlite3_cont
6be0: 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0a 20 20  ext *context,.  
6bf0: 69 6e 74 20 61 72 67 63 2c 0a 20 20 73 71 6c 69  int argc,.  sqli
6c00: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76  te3_value **argv
6c10: 0a 29 7b 0a 20 20 74 31 43 6f 75 6e 74 43 74 78  .){.  t1CountCtx
6c20: 20 2a 70 3b 0a 20 20 70 20 3d 20 73 71 6c 69 74   *p;.  p = sqlit
6c30: 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e  e3_aggregate_con
6c40: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 73 69  text(context, si
6c50: 7a 65 6f 66 28 2a 70 29 29 3b 0a 20 20 69 66 28  zeof(*p));.  if(
6c60: 20 28 61 72 67 63 3d 3d 30 20 7c 7c 20 53 51 4c   (argc==0 || SQL
6c70: 49 54 45 5f 4e 55 4c 4c 21 3d 73 71 6c 69 74 65  ITE_NULL!=sqlite
6c80: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 61 72 67  3_value_type(arg
6c90: 76 5b 30 5d 29 20 29 20 26 26 20 70 20 29 7b 0a  v[0]) ) && p ){.
6ca0: 20 20 20 20 70 2d 3e 6e 2b 2b 3b 0a 20 20 7d 0a      p->n++;.  }.
6cb0: 20 20 69 66 28 20 61 72 67 63 3e 30 20 29 7b 0a    if( argc>0 ){.
6cc0: 20 20 20 20 69 6e 74 20 76 20 3d 20 73 71 6c 69      int v = sqli
6cd0: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72  te3_value_int(ar
6ce0: 67 76 5b 30 5d 29 3b 0a 20 20 20 20 69 66 28 20  gv[0]);.    if( 
6cf0: 76 3d 3d 34 30 20 29 7b 0a 20 20 20 20 20 20 73  v==40 ){.      s
6d00: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72  qlite3_result_er
6d10: 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 22 76 61  ror(context, "va
6d20: 6c 75 65 20 6f 66 20 34 30 20 68 61 6e 64 65 64  lue of 40 handed
6d30: 20 74 6f 20 78 5f 63 6f 75 6e 74 22 2c 20 2d 31   to x_count", -1
6d40: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
6d50: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 20  E_OMIT_UTF16.   
6d60: 20 7d 65 6c 73 65 20 69 66 28 20 76 3d 3d 34 31   }else if( v==41
6d70: 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20   ){.      const 
6d80: 63 68 61 72 20 7a 55 74 66 31 36 45 72 72 4d 73  char zUtf16ErrMs
6d90: 67 5b 5d 20 3d 20 7b 20 30 2c 20 30 78 36 31 2c  g[] = { 0, 0x61,
6da0: 20 30 2c 20 30 78 36 32 2c 20 30 2c 20 30 78 36   0, 0x62, 0, 0x6
6db0: 33 2c 20 30 2c 20 30 2c 20 30 7d 3b 0a 20 20 20  3, 0, 0, 0};.   
6dc0: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
6dd0: 74 5f 65 72 72 6f 72 31 36 28 63 6f 6e 74 65 78  t_error16(contex
6de0: 74 2c 20 26 7a 55 74 66 31 36 45 72 72 4d 73 67  t, &zUtf16ErrMsg
6df0: 5b 31 2d 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  [1-SQLITE_BIGEND
6e00: 49 41 4e 5d 2c 20 2d 31 29 3b 0a 23 65 6e 64 69  IAN], -1);.#endi
6e10: 66 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 20 20 20  f.    }.  }.}   
6e20: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74 31 43  .static void t1C
6e30: 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 28 73 71 6c  ountFinalize(sql
6e40: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f  ite3_context *co
6e50: 6e 74 65 78 74 29 7b 0a 20 20 74 31 43 6f 75 6e  ntext){.  t1Coun
6e60: 74 43 74 78 20 2a 70 3b 0a 20 20 70 20 3d 20 73  tCtx *p;.  p = s
6e70: 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65  qlite3_aggregate
6e80: 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74  _context(context
6e90: 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 20  , sizeof(*p));. 
6ea0: 20 69 66 28 20 70 20 29 7b 0a 20 20 20 20 69 66   if( p ){.    if
6eb0: 28 20 70 2d 3e 6e 3d 3d 34 32 20 29 7b 0a 20 20  ( p->n==42 ){.  
6ec0: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
6ed0: 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74  lt_error(context
6ee0: 2c 20 22 78 5f 63 6f 75 6e 74 20 74 6f 74 61 6c  , "x_count total
6ef0: 73 20 74 6f 20 34 32 22 2c 20 2d 31 29 3b 0a 20  s to 42", -1);. 
6f00: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
6f10: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69  sqlite3_result_i
6f20: 6e 74 28 63 6f 6e 74 65 78 74 2c 20 70 20 3f 20  nt(context, p ? 
6f30: 70 2d 3e 6e 20 3a 20 30 29 3b 0a 20 20 20 20 7d  p->n : 0);.    }
6f40: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  .  }.}../*.** Us
6f50: 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 74 65 73  age:  sqlite_tes
6f60: 74 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61  t_create_aggrega
6f70: 74 65 20 44 42 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c  te DB.**.** Call
6f80: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72 65   the sqlite3_cre
6f90: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 41 50 49  ate_function API
6fa0: 20 6f 6e 20 74 68 65 20 67 69 76 65 6e 20 64 61   on the given da
6fb0: 74 61 62 61 73 65 20 69 6e 20 6f 72 64 65 72 0a  tabase in order.
6fc0: 2a 2a 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ** to create a f
6fd0: 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22 78  unction named "x
6fe0: 5f 63 6f 75 6e 74 22 2e 20 20 54 68 69 73 20 66  _count".  This f
6ff0: 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 74 68 65  unction does the
7000: 20 73 61 6d 65 20 74 68 69 6e 67 0a 2a 2a 20 61   same thing.** a
7010: 73 20 74 68 65 20 22 6d 64 35 73 75 6d 22 20 66  s the "md5sum" f
7020: 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  unction..**.** T
7030: 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f 74 69  he original moti
7040: 76 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  vation for this 
7050: 72 6f 75 74 69 6e 65 20 77 61 73 20 74 6f 20 62  routine was to b
7060: 65 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c 20 74  e able to call t
7070: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 72  he.** sqlite3_cr
7080: 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 20 66  eate_aggregate f
7090: 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20 61 20  unction while a 
70a0: 71 75 65 72 79 20 69 73 20 69 6e 20 70 72 6f 67  query is in prog
70b0: 72 65 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  ress in order.**
70c0: 20 74 6f 20 74 65 73 74 20 74 68 65 20 53 51 4c   to test the SQL
70d0: 49 54 45 5f 4d 49 53 55 53 45 20 64 65 74 65 63  ITE_MISUSE detec
70e0: 74 69 6f 6e 20 6c 6f 67 69 63 2e 20 20 53 65 65  tion logic.  See
70f0: 20 6d 69 73 75 73 65 2e 74 65 73 74 2e 0a 2a 2a   misuse.test..**
7100: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
7110: 20 77 61 73 20 6c 61 74 65 72 20 65 78 74 65 6e   was later exten
7120: 64 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20  ded to test the 
7130: 75 73 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 72  use of sqlite3_r
7140: 65 73 75 6c 74 5f 65 72 72 6f 72 28 29 0a 2a 2a  esult_error().**
7150: 20 77 69 74 68 69 6e 20 61 67 67 72 65 67 61 74   within aggregat
7160: 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a  e functions..*/.
7170: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
7180: 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65  create_aggregate
7190: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
71a0: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
71b0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
71c0: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
71d0: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
71e0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
71f0: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
7200: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
7210: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
7220: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
7230: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
7240: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
7250: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  ment */.){.  sql
7260: 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
7270: 72 63 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  rc;.  if( argc!=
7280: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
7290: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
72a0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
72b0: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
72c0: 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
72d0: 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30  " FILENAME\"", 0
72e0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
72f0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
7300: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
7310: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
7320: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
7330: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
7340: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
7350: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78 5f  function(db, "x_
7360: 63 6f 75 6e 74 22 2c 20 30 2c 20 53 51 4c 49 54  count", 0, SQLIT
7370: 45 5f 55 54 46 38 2c 20 30 2c 20 30 2c 0a 20 20  E_UTF8, 0, 0,.  
7380: 20 20 20 20 74 31 43 6f 75 6e 74 53 74 65 70 2c      t1CountStep,
7390: 74 31 43 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 29  t1CountFinalize)
73a0: 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
73b0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 73 71 6c  TE_OK ){.    sql
73c0: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
73d0: 74 69 6f 6e 28 64 62 2c 20 22 78 5f 63 6f 75 6e  tion(db, "x_coun
73e0: 74 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54  t", 1, SQLITE_UT
73f0: 46 38 2c 20 30 2c 20 30 2c 0a 20 20 20 20 20 20  F8, 0, 0,.      
7400: 20 20 74 31 43 6f 75 6e 74 53 74 65 70 2c 74 31    t1CountStep,t1
7410: 43 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 29 3b 0a  CountFinalize);.
7420: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
7430: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
7440: 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72  erp, db, rc) ) r
7450: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7460: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
7470: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  ;.}.../*.** Usag
7480: 65 3a 20 20 70 72 69 6e 74 66 20 54 45 58 54 0a  e:  printf TEXT.
7490: 2a 2a 0a 2a 2a 20 53 65 6e 64 20 6f 75 74 70 75  **.** Send outpu
74a0: 74 20 74 6f 20 70 72 69 6e 74 66 2e 20 20 55 73  t to printf.  Us
74b0: 65 20 74 68 69 73 20 72 61 74 68 65 72 20 74 68  e this rather th
74c0: 61 6e 20 70 75 74 73 20 74 6f 20 6d 65 72 67 65  an puts to merge
74d0: 20 74 68 65 20 6f 75 74 70 75 74 0a 2a 2a 20 69   the output.** i
74e0: 6e 20 74 68 65 20 63 6f 72 72 65 63 74 20 73 65  n the correct se
74f0: 71 75 65 6e 63 65 20 77 69 74 68 20 64 65 62 75  quence with debu
7500: 67 67 69 6e 67 20 70 72 69 6e 74 66 73 20 69 6e  gging printfs in
7510: 73 65 72 74 65 64 20 69 6e 74 6f 20 43 20 63 6f  serted into C co
7520: 64 65 2e 0a 2a 2a 20 50 75 74 73 20 75 73 65 73  de..** Puts uses
7530: 20 61 20 73 65 70 61 72 61 74 65 20 62 75 66 66   a separate buff
7540: 65 72 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67  er and debugging
7550: 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c   statements will
7560: 20 62 65 20 6f 75 74 20 6f 66 0a 2a 2a 20 73 65   be out of.** se
7570: 71 75 65 6e 63 65 20 69 66 20 69 74 20 69 73 20  quence if it is 
7580: 75 73 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  used..*/.static 
7590: 69 6e 74 20 74 65 73 74 5f 70 72 69 6e 74 66 28  int test_printf(
75a0: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
75b0: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
75c0: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
75d0: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
75e0: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
75f0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
7600: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
7610: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
7620: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
7630: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
7640: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
7650: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
7660: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20  ent */.){.  if( 
7670: 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  argc!=2 ){.    T
7680: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
7690: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
76a0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
76b0: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
76c0: 20 20 20 20 20 20 22 20 54 45 58 54 5c 22 22 2c        " TEXT\"",
76d0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
76e0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
76f0: 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20   printf("%s\n", 
7700: 61 72 67 76 5b 31 5d 29 3b 0a 20 20 72 65 74 75  argv[1]);.  retu
7710: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 0a  rn TCL_OK;.}....
7720: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
7730: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
7740: 74 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52  t FORMAT INTEGER
7750: 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52   INTEGER INTEGER
7760: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
7770: 6e 74 66 20 77 69 74 68 20 74 68 72 65 65 20 69  ntf with three i
7780: 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73  nteger arguments
7790: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
77a0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69  qlite3_mprintf_i
77b0: 6e 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  nt(.  void *NotU
77c0: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
77d0: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
77e0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
77f0: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
7800: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
7810: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
7820: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
7830: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
7840: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
7850: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
7860: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
7870: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69  gument */.){.  i
7880: 6e 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 63 68  nt a[3], i;.  ch
7890: 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67  ar *z;.  if( arg
78a0: 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=5 ){.    Tcl_
78b0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
78c0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
78d0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
78e0: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
78f0: 20 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20     " FORMAT INT 
7900: 49 4e 54 20 49 4e 54 5c 22 22 2c 20 30 29 3b 0a  INT INT\"", 0);.
7910: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
7920: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28  RROR;.  }.  for(
7930: 69 3d 32 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a  i=2; i<5; i++){.
7940: 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49      if( Tcl_GetI
7950: 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  nt(interp, argv[
7960: 69 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72  i], &a[i-2]) ) r
7970: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7980: 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74  .  }.  z = sqlit
7990: 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b  e3_mprintf(argv[
79a0: 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20  1], a[0], a[1], 
79b0: 61 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70  a[2]);.  Tcl_App
79c0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
79d0: 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  , z, 0);.  sqlit
79e0: 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65  e3_free(z);.  re
79f0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
7a00: 2f 2a 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72 65  /*.** If zNum re
7a10: 70 72 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65  presents an inte
7a20: 67 65 72 20 74 68 61 74 20 77 69 6c 6c 20 66 69  ger that will fi
7a30: 74 20 69 6e 20 36 34 2d 62 69 74 73 2c 20 74 68  t in 64-bits, th
7a40: 65 6e 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c 75  en set.** *pValu
7a50: 65 20 74 6f 20 74 68 61 74 20 69 6e 74 65 67 65  e to that intege
7a60: 72 20 61 6e 64 20 72 65 74 75 72 6e 20 74 72 75  r and return tru
7a70: 65 2e 20 20 4f 74 68 65 72 77 69 73 65 20 72 65  e.  Otherwise re
7a80: 74 75 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f 0a 73  turn false..*/.s
7a90: 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65  tatic int sqlite
7aa0: 33 47 65 74 49 6e 74 36 34 28 63 6f 6e 73 74 20  3GetInt64(const 
7ab0: 63 68 61 72 20 2a 7a 4e 75 6d 2c 20 69 36 34 20  char *zNum, i64 
7ac0: 2a 70 56 61 6c 75 65 29 7b 0a 20 20 69 66 28 20  *pValue){.  if( 
7ad0: 73 71 6c 69 74 65 33 46 69 74 73 49 6e 36 34 42  sqlite3FitsIn64B
7ae0: 69 74 73 28 7a 4e 75 6d 29 20 29 7b 0a 20 20 20  its(zNum) ){.   
7af0: 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 7a   sqlite3Atoi64(z
7b00: 4e 75 6d 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20  Num, pValue);.  
7b10: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a    return 1;.  }.
7b20: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
7b30: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
7b40: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74  ite3_mprintf_int
7b50: 36 34 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45  64 FORMAT INTEGE
7b60: 52 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45  R INTEGER INTEGE
7b70: 52 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72  R.**.** Call mpr
7b80: 69 6e 74 66 20 77 69 74 68 20 74 68 72 65 65 20  intf with three 
7b90: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 61  64-bit integer a
7ba0: 72 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61 74  rguments.*/.stat
7bb0: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d  ic int sqlite3_m
7bc0: 70 72 69 6e 74 66 5f 69 6e 74 36 34 28 0a 20 20  printf_int64(.  
7bd0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
7be0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
7bf0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
7c00: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
7c10: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
7c20: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
7c30: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
7c40: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7c50: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
7c60: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
7c70: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
7c80: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
7c90: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a   */.){.  int i;.
7ca0: 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 61    sqlite_int64 a
7cb0: 5b 33 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  [3];.  char *z;.
7cc0: 20 20 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b    if( argc!=5 ){
7cd0: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
7ce0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
7cf0: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
7d00: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
7d10: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f  [0],.       " FO
7d20: 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 49 4e 54  RMAT INT INT INT
7d30: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
7d40: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
7d50: 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c   }.  for(i=2; i<
7d60: 35 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  5; i++){.    if(
7d70: 20 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74 36   !sqlite3GetInt6
7d80: 34 28 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d  4(argv[i], &a[i-
7d90: 32 5d 29 20 29 7b 0a 20 20 20 20 20 20 54 63 6c  2]) ){.      Tcl
7da0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
7db0: 74 65 72 70 2c 20 22 61 72 67 75 6d 65 6e 74 20  terp, "argument 
7dc0: 69 73 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 36  is not a valid 6
7dd0: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 22 2c 20  4-bit integer", 
7de0: 30 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  0);.      return
7df0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20   TCL_ERROR;.    
7e00: 7d 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69  }.  }.  z = sqli
7e10: 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76  te3_mprintf(argv
7e20: 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c  [1], a[0], a[1],
7e30: 20 61 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70   a[2]);.  Tcl_Ap
7e40: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
7e50: 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69  p, z, 0);.  sqli
7e60: 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72  te3_free(z);.  r
7e70: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
7e80: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
7e90: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73  qlite3_mprintf_s
7ea0: 74 72 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45  tr FORMAT INTEGE
7eb0: 52 20 49 4e 54 45 47 45 52 20 53 54 52 49 4e 47  R INTEGER STRING
7ec0: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
7ed0: 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e 74  ntf with two int
7ee0: 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20 61  eger arguments a
7ef0: 6e 64 20 6f 6e 65 20 73 74 72 69 6e 67 20 61 72  nd one string ar
7f00: 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63  gument.*/.static
7f10: 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72   int sqlite3_mpr
7f20: 69 6e 74 66 5f 73 74 72 28 0a 20 20 76 6f 69 64  intf_str(.  void
7f30: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
7f40: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
7f50: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
7f60: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
7f70: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
7f80: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
7f90: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
7fa0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
7fb0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
7fc0: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
7fd0: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
7fe0: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
7ff0: 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69  ){.  int a[3], i
8000: 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  ;.  char *z;.  i
8010: 66 28 20 61 72 67 63 3c 34 20 7c 7c 20 61 72 67  f( argc<4 || arg
8020: 63 3e 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  c>5 ){.    Tcl_A
8030: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
8040: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
8050: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
8060: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
8070: 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49    " FORMAT INT I
8080: 4e 54 20 3f 53 54 52 49 4e 47 3f 5c 22 22 2c 20  NT ?STRING?\"", 
8090: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
80a0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
80b0: 66 6f 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b  for(i=2; i<4; i+
80c0: 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f  +){.    if( Tcl_
80d0: 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61  GetInt(interp, a
80e0: 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29  rgv[i], &a[i-2])
80f0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
8100: 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73  ROR;.  }.  z = s
8110: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61  qlite3_mprintf(a
8120: 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b  rgv[1], a[0], a[
8130: 31 5d 2c 20 61 72 67 63 3e 34 20 3f 20 61 72 67  1], argc>4 ? arg
8140: 76 5b 34 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 20 20  v[4] : NULL);.  
8150: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
8160: 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a  (interp, z, 0);.
8170: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
8180: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
8190: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
81a0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  ge:  sqlite3_snp
81b0: 72 69 6e 74 66 5f 73 74 72 20 49 4e 54 45 47 45  rintf_str INTEGE
81c0: 52 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52  R FORMAT INTEGER
81d0: 20 49 4e 54 45 47 45 52 20 53 54 52 49 4e 47 0a   INTEGER STRING.
81e0: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
81f0: 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e 74 65  tf with two inte
8200: 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  ger arguments an
8210: 64 20 6f 6e 65 20 73 74 72 69 6e 67 20 61 72 67  d one string arg
8220: 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63 20  ument.*/.static 
8230: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  int sqlite3_snpr
8240: 69 6e 74 66 5f 73 74 72 28 0a 20 20 76 6f 69 64  intf_str(.  void
8250: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
8260: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
8270: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
8280: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
8290: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
82a0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
82b0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
82c0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
82d0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
82e0: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
82f0: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
8300: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
8310: 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69  ){.  int a[3], i
8320: 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 63 68 61  ;.  int n;.  cha
8330: 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63  r *z;.  if( argc
8340: 3c 35 20 7c 7c 20 61 72 67 63 3e 36 20 29 7b 0a  <5 || argc>6 ){.
8350: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
8360: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
8370: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
8380: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
8390: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 49 4e 54  0],.       " INT
83a0: 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54 20   FORMAT INT INT 
83b0: 3f 53 54 52 49 4e 47 3f 5c 22 22 2c 20 30 29 3b  ?STRING?\"", 0);
83c0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
83d0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
83e0: 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65   Tcl_GetInt(inte
83f0: 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 6e 29  rp, argv[1], &n)
8400: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
8410: 52 4f 52 3b 0a 20 20 69 66 28 20 6e 3c 30 20 29  ROR;.  if( n<0 )
8420: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
8430: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
8440: 4e 20 6d 75 73 74 20 62 65 20 6e 6f 6e 2d 6e 65  N must be non-ne
8450: 67 61 74 69 76 65 22 2c 20 30 29 3b 0a 20 20 20  gative", 0);.   
8460: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
8470: 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 33  R;.  }.  for(i=3
8480: 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<5; i++){.   
8490: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28   if( Tcl_GetInt(
84a0: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c  interp, argv[i],
84b0: 20 26 61 5b 69 2d 33 5d 29 20 29 20 72 65 74 75   &a[i-3]) ) retu
84c0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
84d0: 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f  }.  z = sqlite3_
84e0: 6d 61 6c 6c 6f 63 28 20 6e 2b 31 20 29 3b 0a 20  malloc( n+1 );. 
84f0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
8500: 66 28 6e 2c 20 7a 2c 20 61 72 67 76 5b 32 5d 2c  f(n, z, argv[2],
8510: 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 72 67   a[0], a[1], arg
8520: 63 3e 34 20 3f 20 61 72 67 76 5b 35 5d 20 3a 20  c>4 ? argv[5] : 
8530: 4e 55 4c 4c 29 3b 0a 20 20 54 63 6c 5f 41 70 70  NULL);.  Tcl_App
8540: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
8550: 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  , z, 0);.  sqlit
8560: 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65  e3_free(z);.  re
8570: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
8580: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
8590: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f  lite3_mprintf_do
85a0: 75 62 6c 65 20 46 4f 52 4d 41 54 20 49 4e 54 45  uble FORMAT INTE
85b0: 47 45 52 20 49 4e 54 45 47 45 52 20 44 4f 55 42  GER INTEGER DOUB
85c0: 4c 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70  LE.**.** Call mp
85d0: 72 69 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69  rintf with two i
85e0: 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73  nteger arguments
85f0: 20 61 6e 64 20 6f 6e 65 20 64 6f 75 62 6c 65 20   and one double 
8600: 61 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74  argument.*/.stat
8610: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d  ic int sqlite3_m
8620: 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 28 0a 20  printf_double(. 
8630: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
8640: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
8650: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
8660: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
8670: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
8680: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
8690: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
86a0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
86b0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
86c0: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
86d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
86e0: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
86f0: 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b  t */.){.  int a[
8700: 33 5d 2c 20 69 3b 0a 20 20 64 6f 75 62 6c 65 20  3], i;.  double 
8710: 72 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20  r;.  char *z;.  
8720: 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20  if( argc!=5 ){. 
8730: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
8740: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
8750: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
8760: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
8770: 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d  ],.       " FORM
8780: 41 54 20 49 4e 54 20 49 4e 54 20 44 4f 55 42 4c  AT INT INT DOUBL
8790: 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  E\"", 0);.    re
87a0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
87b0: 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69    }.  for(i=2; i
87c0: 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  <4; i++){.    if
87d0: 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74  ( Tcl_GetInt(int
87e0: 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26 61  erp, argv[i], &a
87f0: 5b 69 2d 32 5d 29 20 29 20 72 65 74 75 72 6e 20  [i-2]) ) return 
8800: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
8810: 20 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62   if( Tcl_GetDoub
8820: 6c 65 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  le(interp, argv[
8830: 34 5d 2c 20 26 72 29 20 29 20 72 65 74 75 72 6e  4], &r) ) return
8840: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 20   TCL_ERROR;.  z 
8850: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
8860: 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c  f(argv[1], a[0],
8870: 20 61 5b 31 5d 2c 20 72 29 3b 0a 20 20 54 63 6c   a[1], r);.  Tcl
8880: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
8890: 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73  terp, z, 0);.  s
88a0: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a  qlite3_free(z);.
88b0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
88c0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
88d0: 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74    sqlite3_mprint
88e0: 66 5f 73 63 61 6c 65 64 20 46 4f 52 4d 41 54 20  f_scaled FORMAT 
88f0: 44 4f 55 42 4c 45 20 44 4f 55 42 4c 45 0a 2a 2a  DOUBLE DOUBLE.**
8900: 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66  .** Call mprintf
8910: 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64   with a single d
8920: 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77  ouble argument w
8930: 68 69 63 68 20 69 73 20 74 68 65 20 70 72 6f 64  hich is the prod
8940: 75 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77  uct of the.** tw
8950: 6f 20 61 72 67 75 6d 65 6e 74 73 20 67 69 76 65  o arguments give
8960: 6e 20 61 62 6f 76 65 2e 20 20 54 68 69 73 20 69  n above.  This i
8970: 73 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  s used to genera
8980: 74 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20  te overflow and 
8990: 75 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75  underflow.** dou
89a0: 62 6c 65 73 20 74 6f 20 74 65 73 74 20 74 68 61  bles to test tha
89b0: 74 20 74 68 65 79 20 61 72 65 20 63 6f 6e 76 65  t they are conve
89c0: 72 74 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a  rted properly..*
89d0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
89e0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61  ite3_mprintf_sca
89f0: 6c 65 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  led(.  void *Not
8a00: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
8a10: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
8a20: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
8a30: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
8a40: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
8a50: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
8a60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
8a70: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
8a80: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
8a90: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
8aa0: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
8ab0: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
8ac0: 69 6e 74 20 69 3b 0a 20 20 64 6f 75 62 6c 65 20  int i;.  double 
8ad0: 72 5b 32 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b  r[2];.  char *z;
8ae0: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34 20 29  .  if( argc!=4 )
8af0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
8b00: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
8b10: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
8b20: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
8b30: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
8b40: 4f 52 4d 41 54 20 44 4f 55 42 4c 45 20 44 4f 55  ORMAT DOUBLE DOU
8b50: 42 4c 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  BLE\"", 0);.    
8b60: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
8b70: 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b  ;.  }.  for(i=2;
8b80: 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<4; i++){.    
8b90: 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c  if( Tcl_GetDoubl
8ba0: 65 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69  e(interp, argv[i
8bb0: 5d 2c 20 26 72 5b 69 2d 32 5d 29 20 29 20 72 65  ], &r[i-2]) ) re
8bc0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
8bd0: 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65    }.  z = sqlite
8be0: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31  3_mprintf(argv[1
8bf0: 5d 2c 20 72 5b 30 5d 2a 72 5b 31 5d 29 3b 0a 20  ], r[0]*r[1]);. 
8c00: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
8c10: 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b  t(interp, z, 0);
8c20: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
8c30: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  z);.  return TCL
8c40: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
8c50: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
8c60: 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 20 46 4f  rintf_stronly FO
8c70: 52 4d 41 54 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a  RMAT STRING.**.*
8c80: 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77  * Call mprintf w
8c90: 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f 75  ith a single dou
8ca0: 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69  ble argument whi
8cb0: 63 68 20 69 73 20 74 68 65 20 70 72 6f 64 75 63  ch is the produc
8cc0: 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77 6f 20  t of the.** two 
8cd0: 61 72 67 75 6d 65 6e 74 73 20 67 69 76 65 6e 20  arguments given 
8ce0: 61 62 6f 76 65 2e 20 20 54 68 69 73 20 69 73 20  above.  This is 
8cf0: 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
8d00: 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20 75 6e   overflow and un
8d10: 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75 62 6c  derflow.** doubl
8d20: 65 73 20 74 6f 20 74 65 73 74 20 74 68 61 74 20  es to test that 
8d30: 74 68 65 79 20 61 72 65 20 63 6f 6e 76 65 72 74  they are convert
8d40: 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a 2f 0a  ed properly..*/.
8d50: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
8d60: 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e  e3_mprintf_stron
8d70: 6c 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  ly(.  void *NotU
8d80: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
8d90: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
8da0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
8db0: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
8dc0: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
8dd0: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
8de0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
8df0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
8e00: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
8e10: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
8e20: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
8e30: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63  gument */.){.  c
8e40: 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72  har *z;.  if( ar
8e50: 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
8e60: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
8e70: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
8e80: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
8e90: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
8ea0: 20 20 20 20 22 20 46 4f 52 4d 41 54 20 53 54 52      " FORMAT STR
8eb0: 49 4e 47 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  ING\"", 0);.    
8ec0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
8ed0: 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69  ;.  }.  z = sqli
8ee0: 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76  te3_mprintf(argv
8ef0: 5b 31 5d 2c 20 61 72 67 76 5b 32 5d 29 3b 0a 20  [1], argv[2]);. 
8f00: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
8f10: 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b  t(interp, z, 0);
8f20: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
8f30: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  z);.  return TCL
8f40: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
8f50: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
8f60: 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65 20  rintf_hexdouble 
8f70: 46 4f 52 4d 41 54 20 48 45 58 0a 2a 2a 0a 2a 2a  FORMAT HEX.**.**
8f80: 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69   Call mprintf wi
8f90: 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f 75 62  th a single doub
8fa0: 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63  le argument whic
8fb0: 68 20 69 73 20 64 65 72 69 76 65 64 20 66 72 6f  h is derived fro
8fc0: 6d 20 74 68 65 0a 2a 2a 20 68 65 78 61 64 65 63  m the.** hexadec
8fd0: 69 6d 61 6c 20 65 6e 63 6f 64 69 6e 67 20 6f 66  imal encoding of
8fe0: 20 61 6e 20 49 45 45 45 20 64 6f 75 62 6c 65 2e   an IEEE double.
8ff0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
9000: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68  qlite3_mprintf_h
9010: 65 78 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64  exdouble(.  void
9020: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
9030: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
9040: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
9050: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
9060: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
9070: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
9080: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
9090: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
90a0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
90b0: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
90c0: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
90d0: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
90e0: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20  ){.  char *z;.  
90f0: 64 6f 75 62 6c 65 20 72 3b 0a 20 20 75 6e 73 69  double r;.  unsi
9100: 67 6e 65 64 20 20 78 31 2c 20 78 32 3b 0a 20 20  gned  x1, x2;.  
9110: 6c 6f 6e 67 20 6c 6f 6e 67 20 75 6e 73 69 67 6e  long long unsign
9120: 65 64 20 64 3b 0a 20 20 69 66 28 20 61 72 67 63  ed d;.  if( argc
9130: 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
9140: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
9150: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
9160: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
9170: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
9180: 20 20 22 20 46 4f 52 4d 41 54 20 53 54 52 49 4e    " FORMAT STRIN
9190: 47 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  G\"", 0);.    re
91a0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
91b0: 20 20 7d 0a 20 20 69 66 28 20 73 73 63 61 6e 66    }.  if( sscanf
91c0: 28 61 72 67 76 5b 32 5d 2c 20 22 25 30 38 78 25  (argv[2], "%08x%
91d0: 30 38 78 22 2c 20 26 78 32 2c 20 26 78 31 29 21  08x", &x2, &x1)!
91e0: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
91f0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
9200: 70 2c 20 22 32 6e 64 20 61 72 67 75 6d 65 6e 74  p, "2nd argument
9210: 20 73 68 6f 75 6c 64 20 62 65 20 31 36 2d 63 68   should be 16-ch
9220: 61 72 61 63 74 65 72 73 20 6f 66 20 68 65 78 22  aracters of hex"
9230: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
9240: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
9250: 20 20 64 20 3d 20 78 32 3b 0a 20 20 64 20 3d 20    d = x2;.  d = 
9260: 28 64 3c 3c 33 32 29 20 2b 20 78 31 3b 0a 20 20  (d<<32) + x1;.  
9270: 6d 65 6d 63 70 79 28 26 72 2c 20 26 64 2c 20 73  memcpy(&r, &d, s
9280: 69 7a 65 6f 66 28 72 29 29 3b 0a 20 20 7a 20 3d  izeof(r));.  z =
9290: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
92a0: 28 61 72 67 76 5b 31 5d 2c 20 72 29 3b 0a 20 20  (argv[1], r);.  
92b0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
92c0: 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a  (interp, z, 0);.
92d0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
92e0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
92f0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
9300: 67 65 3a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f  ge: sqlite_mallo
9310: 63 5f 66 61 69 6c 20 4e 20 20 3f 52 45 50 45 41  c_fail N  ?REPEA
9320: 54 2d 49 4e 54 45 52 56 41 4c 3f 0a 2a 2a 0a 2a  T-INTERVAL?.**.*
9330: 2a 20 52 69 67 20 73 71 6c 69 74 65 4d 61 6c 6c  * Rig sqliteMall
9340: 6f 63 28 29 20 74 6f 20 66 61 69 6c 20 6f 6e 20  oc() to fail on 
9350: 74 68 65 20 4e 2d 74 68 20 63 61 6c 6c 20 61 6e  the N-th call an
9360: 64 20 65 76 65 72 79 20 52 45 50 45 41 54 2d 49  d every REPEAT-I
9370: 4e 54 45 52 56 41 4c 20 63 61 6c 6c 0a 2a 2a 20  NTERVAL call.** 
9380: 61 66 74 65 72 20 74 68 61 74 2e 20 20 49 66 20  after that.  If 
9390: 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20  REPEAT-INTERVAL 
93a0: 69 73 20 30 20 6f 72 20 69 73 20 6f 6d 69 74 74  is 0 or is omitt
93b0: 65 64 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 61 20  ed, then only a 
93c0: 73 69 6e 67 6c 65 0a 2a 2a 20 6d 61 6c 6c 6f 63  single.** malloc
93d0: 20 77 69 6c 6c 20 66 61 69 6c 2e 20 20 49 66 20   will fail.  If 
93e0: 52 45 50 45 41 54 2d 49 4e 54 45 52 56 41 4c 20  REPEAT-INTERVAL 
93f0: 69 73 20 31 20 74 68 65 6e 20 61 6c 6c 20 6d 61  is 1 then all ma
9400: 6c 6c 6f 63 73 20 61 66 74 65 72 20 74 68 65 0a  llocs after the.
9410: 2a 2a 20 66 69 72 73 74 20 66 61 69 6c 75 72 65  ** first failure
9420: 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74   will continue t
9430: 6f 20 66 61 69 6c 20 6f 6e 20 65 76 65 72 79 20  o fail on every 
9440: 63 61 6c 6c 2e 20 20 49 66 20 52 45 50 45 41 54  call.  If REPEAT
9450: 2d 49 4e 54 45 52 56 41 4c 20 69 73 0a 2a 2a 20  -INTERVAL is.** 
9460: 32 20 74 68 65 6e 20 65 76 65 72 79 20 6f 74 68  2 then every oth
9470: 65 72 20 6d 61 6c 6c 6f 63 20 77 69 6c 6c 20 66  er malloc will f
9480: 61 69 6c 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72  ail.  And so for
9490: 74 68 2e 0a 2a 2a 0a 2a 2a 20 54 75 72 6e 20 6f  th..**.** Turn o
94a0: 66 66 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73  ff this mechanis
94b0: 6d 20 61 6e 64 20 72 65 73 65 74 20 74 68 65 20  m and reset the 
94c0: 73 71 6c 69 74 65 33 54 68 72 65 61 64 44 61 74  sqlite3ThreadDat
94d0: 61 28 29 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  a()->mallocFaile
94e0: 64 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 69  d .** variable i
94f0: 66 20 4e 3d 3d 30 2e 0a 2a 2f 0a 23 69 66 64 65  f N==0..*/.#ifde
9500: 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
9510: 47 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  G.static int sql
9520: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 28  ite_malloc_fail(
9530: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
9540: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
9550: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
9560: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
9570: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
9580: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
9590: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
95a0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
95b0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
95c0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
95d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
95e0: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
95f0: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ent */.){.  int 
9600: 6e 3b 0a 20 20 69 6e 74 20 72 65 70 3b 0a 20 20  n;.  int rep;.  
9610: 69 66 28 20 61 72 67 63 21 3d 32 20 26 26 20 61  if( argc!=2 && a
9620: 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  rgc!=3 ){.    Tc
9630: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
9640: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
9650: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
9660: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20  \"", argv[0], " 
9670: 4e 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  N\"", 0);.    re
9680: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
9690: 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47 65    }.  if( Tcl_Ge
96a0: 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67  tInt(interp, arg
96b0: 76 5b 31 5d 2c 20 26 6e 29 20 29 20 72 65 74 75  v[1], &n) ) retu
96c0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
96d0: 69 66 28 20 61 72 67 63 3d 3d 33 20 29 7b 0a 20  if( argc==3 ){. 
96e0: 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e     if( Tcl_GetIn
96f0: 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32  t(interp, argv[2
9700: 5d 2c 20 26 72 65 70 29 20 29 20 72 65 74 75 72  ], &rep) ) retur
9710: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
9720: 65 6c 73 65 7b 0a 20 20 20 20 72 65 70 20 3d 20  else{.    rep = 
9730: 30 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  0;.  }.  sqlite3
9740: 5f 69 4d 61 6c 6c 6f 63 46 61 69 6c 20 3d 20 6e  _iMallocFail = n
9750: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c  ;.  sqlite3_iMal
9760: 6c 6f 63 52 65 73 65 74 20 3d 20 72 65 70 3b 0a  locReset = rep;.
9770: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
9780: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  .}.#endif../*.**
9790: 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f 6d   Usage: sqlite_m
97a0: 61 6c 6c 6f 63 5f 73 74 61 74 0a 2a 2a 0a 2a 2a  alloc_stat.**.**
97b0: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
97c0: 65 72 20 6f 66 20 70 72 69 6f 72 20 63 61 6c 6c  er of prior call
97d0: 73 20 74 6f 20 73 71 6c 69 74 65 4d 61 6c 6c 6f  s to sqliteMallo
97e0: 63 28 29 20 61 6e 64 20 73 71 6c 69 74 65 46 72  c() and sqliteFr
97f0: 65 65 28 29 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ee()..*/.#ifdef 
9800: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
9810: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
9820: 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 28 0a 20  e_malloc_stat(. 
9830: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
9840: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
9850: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
9860: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
9870: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
9880: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
9890: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
98a0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
98b0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
98c0: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
98d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
98e0: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
98f0: 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 7a  t */.){.  char z
9900: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 73 70 72 69  Buf[200];.  spri
9910: 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 20 25 64  ntf(zBuf, "%d %d
9920: 20 25 64 22 2c 20 73 71 6c 69 74 65 33 5f 6e 4d   %d", sqlite3_nM
9930: 61 6c 6c 6f 63 2c 73 71 6c 69 74 65 33 5f 6e 46  alloc,sqlite3_nF
9940: 72 65 65 2c 73 71 6c 69 74 65 33 5f 69 4d 61 6c  ree,sqlite3_iMal
9950: 6c 6f 63 46 61 69 6c 29 3b 0a 20 20 54 63 6c 5f  locFail);.  Tcl_
9960: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
9970: 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20  erp, zBuf, 0);. 
9980: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
9990: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75  }../*.** This fu
99a0: 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  nction implement
99b0: 73 20 61 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 20  s a Tcl command 
99c0: 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e 76 6f  that may be invo
99d0: 6b 65 64 20 75 73 69 6e 67 20 61 6e 79 20 6f 66  ked using any of
99e0: 0a 2a 2a 20 74 68 65 20 66 6f 75 72 20 66 6f 72  .** the four for
99f0: 6d 73 20 65 6e 75 6d 65 72 61 74 65 64 20 62 65  ms enumerated be
9a00: 6c 6f 77 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  low..**.** sqlit
9a10: 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e  e_malloc_outstan
9a20: 64 69 6e 67 0a 2a 2a 20 20 20 20 20 52 65 74 75  ding.**     Retu
9a30: 72 6e 20 61 20 73 75 6d 6d 61 72 79 20 6f 66 20  rn a summary of 
9a40: 61 6c 6c 20 75 6e 66 72 65 65 64 20 62 6c 6f 63  all unfreed bloc
9a50: 6b 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c  ks of memory all
9a60: 6f 63 61 74 65 64 20 62 79 20 74 68 65 0a 2a 2a  ocated by the.**
9a70: 20 20 20 20 20 63 75 72 72 65 6e 74 20 74 68 72       current thr
9a80: 65 61 64 2e 20 53 65 65 20 63 6f 6d 6d 65 6e 74  ead. See comment
9a90: 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e  s above function
9aa0: 20 73 71 6c 69 74 65 33 4f 75 74 73 74 61 6e 64   sqlite3Outstand
9ab0: 69 6e 67 4d 61 6c 6c 6f 63 73 28 29 20 0a 2a 2a  ingMallocs() .**
9ac0: 20 20 20 20 20 69 6e 20 75 74 69 6c 2e 63 20 66       in util.c f
9ad0: 6f 72 20 61 20 64 65 73 63 72 69 70 74 69 6f 6e  or a description
9ae0: 20 6f 66 20 74 68 65 20 72 65 74 75 72 6e 65 64   of the returned
9af0: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 73 71   value..**.** sq
9b00: 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73  lite_malloc_outs
9b10: 74 61 6e 64 69 6e 67 20 2d 62 79 74 65 73 0a 2a  tanding -bytes.*
9b20: 2a 20 20 20 20 20 52 65 74 75 72 6e 20 74 68 65  *     Return the
9b30: 20 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66   total amount of
9b40: 20 75 6e 66 72 65 65 64 20 6d 65 6d 6f 72 79 20   unfreed memory 
9b50: 28 69 6e 20 62 79 74 65 73 29 20 61 6c 6c 6f 63  (in bytes) alloc
9b60: 61 74 65 64 20 62 79 20 0a 2a 2a 20 20 20 20 20  ated by .**     
9b70: 74 68 69 73 20 74 68 72 65 61 64 2e 0a 2a 2a 0a  this thread..**.
9b80: 2a 2a 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63  ** sqlite_malloc
9b90: 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20 2d 6d 61  _outstanding -ma
9ba0: 78 62 79 74 65 73 0a 2a 2a 20 20 20 20 20 52 65  xbytes.**     Re
9bb0: 74 75 72 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d  turn the maximum
9bc0: 20 61 6d 6f 75 6e 74 20 6f 66 20 64 79 6e 61 6d   amount of dynam
9bd0: 69 63 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65  ic memory in use
9be0: 20 61 74 20 6f 6e 65 20 74 69 6d 65 20 0a 2a 2a   at one time .**
9bf0: 20 20 20 20 20 62 79 20 74 68 69 73 20 74 68 72       by this thr
9c00: 65 61 64 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  ead..**.** sqlit
9c10: 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e  e_malloc_outstan
9c20: 64 69 6e 67 20 2d 63 6c 65 61 72 6d 61 78 62 79  ding -clearmaxby
9c30: 74 65 73 0a 2a 2a 20 20 20 20 20 53 65 74 20 74  tes.**     Set t
9c40: 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
9c50: 64 20 62 79 20 5b 73 71 6c 69 74 65 5f 6d 61 6c  d by [sqlite_mal
9c60: 6c 6f 63 5f 6f 75 74 73 74 61 6e 64 69 6e 67 20  loc_outstanding 
9c70: 2d 6d 61 78 62 79 74 65 73 5d 0a 2a 2a 20 20 20  -maxbytes].**   
9c80: 20 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74    to the current
9c90: 20 76 61 6c 75 65 20 6f 66 20 5b 73 71 6c 69 74   value of [sqlit
9ca0: 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61 6e  e_malloc_outstan
9cb0: 64 69 6e 67 20 2d 62 79 74 65 73 5d 2e 20 0a 2a  ding -bytes]. .*
9cc0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
9cd0: 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74  ite_malloc_outst
9ce0: 61 6e 64 69 6e 67 28 0a 20 20 43 6c 69 65 6e 74  anding(.  Client
9cf0: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c  Data clientData,
9d00: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
9d10: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
9d20: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
9d30: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
9d40: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
9d50: 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
9d60: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
9d70: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
9d80: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
9d90: 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
9da0: 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
9db0: 2f 0a 29 7b 0a 20 20 65 78 74 65 72 6e 20 69 6e  /.){.  extern in
9dc0: 74 20 73 71 6c 69 74 65 33 4f 75 74 73 74 61 6e  t sqlite3Outstan
9dd0: 64 69 6e 67 4d 61 6c 6c 6f 63 73 28 54 63 6c 5f  dingMallocs(Tcl_
9de0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 29 3b  Interp *interp);
9df0: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
9e00: 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 64  LITE_DEBUG) && d
9e10: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45  efined(SQLITE_ME
9e20: 4d 44 45 42 55 47 29 20 26 26 20 53 51 4c 49 54  MDEBUG) && SQLIT
9e30: 45 5f 4d 45 4d 44 45 42 55 47 3e 31 0a 20 20 69  E_MEMDEBUG>1.  i
9e40: 66 28 20 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20 20  f( objc==2 ){.  
9e50: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
9e60: 72 67 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  rg = Tcl_GetStri
9e70: 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 23 69 66  ng(objv[1]);.#if
9e80: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
9e90: 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d  E_MEMORY_MANAGEM
9ea0: 45 4e 54 0a 20 20 20 20 54 68 72 65 61 64 44 61  ENT.    ThreadDa
9eb0: 74 61 20 63 6f 6e 73 74 20 2a 70 54 64 20 3d 20  ta const *pTd = 
9ec0: 73 71 6c 69 74 65 33 54 68 72 65 61 64 44 61 74  sqlite3ThreadDat
9ed0: 61 52 65 61 64 4f 6e 6c 79 28 29 3b 0a 20 20 20  aReadOnly();.   
9ee0: 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70 28 7a   if( 0==strcmp(z
9ef0: 41 72 67 2c 20 22 2d 62 79 74 65 73 22 29 20 29  Arg, "-bytes") )
9f00: 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 4f  {.      Tcl_SetO
9f10: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
9f20: 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 70   Tcl_NewIntObj(p
9f30: 54 64 2d 3e 6e 41 6c 6c 6f 63 29 29 3b 0a 20 20  Td->nAlloc));.  
9f40: 20 20 7d 65 6c 73 65 20 69 66 28 20 30 3d 3d 73    }else if( 0==s
9f50: 74 72 63 6d 70 28 7a 41 72 67 2c 20 22 2d 63 6c  trcmp(zArg, "-cl
9f60: 65 61 72 6d 61 78 62 79 74 65 73 22 29 20 29 7b  earmaxbytes") ){
9f70: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6e  .      sqlite3_n
9f80: 4d 61 78 41 6c 6c 6f 63 20 3d 20 70 54 64 2d 3e  MaxAlloc = pTd->
9f90: 6e 41 6c 6c 6f 63 3b 0a 20 20 20 20 7d 65 6c 73  nAlloc;.    }els
9fa0: 65 20 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66  e .#endif.    if
9fb0: 28 20 30 3d 3d 73 74 72 63 6d 70 28 7a 41 72 67  ( 0==strcmp(zArg
9fc0: 2c 20 22 2d 6d 61 78 62 79 74 65 73 22 29 20 29  , "-maxbytes") )
9fd0: 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 4f  {.      Tcl_SetO
9fe0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
9ff0: 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74 4f   Tcl_NewWideIntO
a000: 62 6a 28 73 71 6c 69 74 65 33 5f 6e 4d 61 78 41  bj(sqlite3_nMaxA
a010: 6c 6c 6f 63 29 29 3b 0a 20 20 20 20 7d 65 6c 73  lloc));.    }els
a020: 65 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41 70 70  e{.      Tcl_App
a030: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
a040: 2c 20 22 62 61 64 20 6f 70 74 69 6f 6e 20 5c 22  , "bad option \"
a050: 22 2c 20 7a 41 72 67 2c 20 0a 20 20 20 20 20 20  ", zArg, .      
a060: 20 20 22 5c 22 3a 20 6d 75 73 74 20 62 65 20 2d    "\": must be -
a070: 62 79 74 65 73 2c 20 2d 6d 61 78 62 79 74 65 73  bytes, -maxbytes
a080: 20 6f 72 20 2d 63 6c 65 61 72 6d 61 78 62 79 74   or -clearmaxbyt
a090: 65 73 22 2c 20 30 0a 20 20 20 20 20 20 29 3b 0a  es", 0.      );.
a0a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c        return TCL
a0b0: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 0a 20  _ERROR;.    }.. 
a0c0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b     return TCL_OK
a0d0: 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 6f 62 6a  ;.  }..  if( obj
a0e0: 63 21 3d 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=1 ){.    Tcl_
a0f0: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
a100: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f  erp, 1, objv, "?
a110: 2d 62 79 74 65 73 3f 22 29 3b 0a 20 20 20 20 72  -bytes?");.    r
a120: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
a130: 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 73  .  }..  return s
a140: 71 6c 69 74 65 33 4f 75 74 73 74 61 6e 64 69 6e  qlite3Outstandin
a150: 67 4d 61 6c 6c 6f 63 73 28 69 6e 74 65 72 70 29  gMallocs(interp)
a160: 3b 0a 23 65 6c 73 65 0a 20 20 72 65 74 75 72 6e  ;.#else.  return
a170: 20 54 43 4c 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a   TCL_OK;.#endif.
a180: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
a190: 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 65  Usage: sqlite3_e
a1a0: 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63  nable_shared_cac
a1b0: 68 65 20 20 20 20 20 20 42 4f 4f 4c 45 41 4e 0a  he      BOOLEAN.
a1c0: 2a 2a 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  **.*/.#if !defin
a1d0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ed(SQLITE_OMIT_S
a1e0: 48 41 52 45 44 5f 43 41 43 48 45 29 0a 73 74 61  HARED_CACHE).sta
a1f0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65 6e 61  tic int test_ena
a200: 62 6c 65 5f 73 68 61 72 65 64 28 0a 20 20 43 6c  ble_shared(.  Cl
a210: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
a220: 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20  ata, /* Pointer 
a230: 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  to sqlite3_enabl
a240: 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a  e_XXX function *
a250: 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
a260: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
a270: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
a280: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
a290: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
a2a0: 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20   int objc,      
a2b0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
a2c0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
a2d0: 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  /.  Tcl_Obj *CON
a2e0: 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f  ST objv[]  /* Co
a2f0: 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20  mmand arguments 
a300: 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  */.){.  int rc;.
a310: 20 20 69 6e 74 20 65 6e 61 62 6c 65 3b 0a 20 20    int enable;.  
a320: 69 6e 74 20 72 65 74 20 3d 20 30 3b 0a 0a 20 20  int ret = 0;..  
a330: 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
a340: 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
a350: 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
a360: 62 6a 76 2c 20 22 42 4f 4f 4c 45 41 4e 22 29 3b  bjv, "BOOLEAN");
a370: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
a380: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
a390: 20 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46   Tcl_GetBooleanF
a3a0: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
a3b0: 62 6a 76 5b 31 5d 2c 20 26 65 6e 61 62 6c 65 29  bjv[1], &enable)
a3c0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
a3d0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
a3e0: 72 65 74 20 3d 20 73 71 6c 69 74 65 33 54 68 72  ret = sqlite3Thr
a3f0: 65 61 64 44 61 74 61 52 65 61 64 4f 6e 6c 79 28  eadDataReadOnly(
a400: 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  )->useSharedData
a410: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
a420: 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63  _enable_shared_c
a430: 61 63 68 65 28 65 6e 61 62 6c 65 29 3b 0a 20 20  ache(enable);.  
a440: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
a450: 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  K ){.    Tcl_Set
a460: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
a470: 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72  char *)sqlite3Er
a480: 72 53 74 72 28 72 63 29 2c 20 54 43 4c 5f 53 54  rStr(rc), TCL_ST
a490: 41 54 49 43 29 3b 0a 20 20 20 20 72 65 74 75 72  ATIC);.    retur
a4a0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
a4b0: 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
a4c0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
a4d0: 4e 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 72 65  NewBooleanObj(re
a4e0: 74 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  t));.  return TC
a4f0: 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  L_OK;.}.#endif..
a500: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
a510: 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
a520: 72 65 73 75 6c 74 5f 63 6f 64 65 73 20 20 20 44  result_codes   D
a530: 42 20 20 20 20 42 4f 4f 4c 45 41 4e 0a 2a 2a 0a  B    BOOLEAN.**.
a540: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
a550: 73 74 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75  st_extended_resu
a560: 6c 74 5f 63 6f 64 65 73 28 0a 20 20 43 6c 69 65  lt_codes(.  Clie
a570: 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74  ntData clientDat
a580: 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  a, /* Pointer to
a590: 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f   sqlite3_enable_
a5a0: 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  XXX function */.
a5b0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
a5c0: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
a5d0: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
a5e0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
a5f0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
a600: 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20  nt objc,        
a610: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
a620: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
a630: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
a640: 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d   objv[]  /* Comm
a650: 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f  and arguments */
a660: 0a 29 7b 0a 20 20 69 6e 74 20 65 6e 61 62 6c 65  .){.  int enable
a670: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  ;.  sqlite3 *db;
a680: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
a690: 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
a6a0: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
a6b0: 31 2c 20 6f 62 6a 76 2c 20 22 44 42 20 42 4f 4f  1, objv, "DB BOO
a6c0: 4c 45 41 4e 22 29 3b 0a 20 20 20 20 72 65 74 75  LEAN");.    retu
a6d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
a6e0: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
a6f0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
a700: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
a710: 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
a720: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
a730: 69 66 28 20 54 63 6c 5f 47 65 74 42 6f 6f 6c 65  if( Tcl_GetBoole
a740: 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  anFromObj(interp
a750: 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 65 6e 61 62  , objv[2], &enab
a760: 6c 65 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  le) ) return TCL
a770: 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c 69 74 65  _ERROR;.  sqlite
a780: 33 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c  3_extended_resul
a790: 74 5f 63 6f 64 65 73 28 64 62 2c 20 65 6e 61 62  t_codes(db, enab
a7a0: 6c 65 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  le);.  return TC
a7b0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
a7c0: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 6c 69  sage: sqlite3_li
a7d0: 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 0a  bversion_number.
a7e0: 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  **.*/.static int
a7f0: 20 74 65 73 74 5f 6c 69 62 76 65 72 73 69 6f 6e   test_libversion
a800: 5f 6e 75 6d 62 65 72 28 0a 20 20 43 6c 69 65 6e  _number(.  Clien
a810: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
a820: 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20  , /* Pointer to 
a830: 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58  sqlite3_enable_X
a840: 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  XX function */. 
a850: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
a860: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
a870: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
a880: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
a890: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
a8a0: 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20  t objc,         
a8b0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a8c0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
a8d0: 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
a8e0: 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61  objv[]  /* Comma
a8f0: 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  nd arguments */.
a900: 29 7b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  ){.  Tcl_SetObjR
a910: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
a920: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69  l_NewIntObj(sqli
a930: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e  te3_libversion_n
a940: 75 6d 62 65 72 28 29 29 29 3b 0a 20 20 72 65 74  umber()));.  ret
a950: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
a960: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
a970: 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
a980: 5f 6d 65 74 61 64 61 74 61 20 44 42 20 64 62 6e  _metadata DB dbn
a990: 61 6d 65 20 74 62 6c 6e 61 6d 65 20 63 6f 6c 6e  ame tblname coln
a9a0: 61 6d 65 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66  ame.**.*/.#ifdef
a9b0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
a9c0: 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 73  OLUMN_METADATA.s
a9d0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 74  tatic int test_t
a9e0: 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61  able_column_meta
a9f0: 64 61 74 61 28 0a 20 20 43 6c 69 65 6e 74 44 61  data(.  ClientDa
aa00: 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f  ta clientData, /
aa10: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c  * Pointer to sql
aa20: 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20  ite3_enable_XXX 
aa30: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63  function */.  Tc
aa40: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
aa50: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
aa60: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
aa70: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
aa80: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f  mmand */.  int o
aa90: 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  bjc,            
aaa0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
aab0: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63  rguments */.  Tc
aac0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
aad0: 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20  v[]  /* Command 
aae0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a  arguments */.){.
aaf0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
ab00: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
ab10: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
ab20: 7a 54 62 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68  zTbl;.  const ch
ab30: 61 72 20 2a 7a 43 6f 6c 3b 0a 20 20 69 6e 74 20  ar *zCol;.  int 
ab40: 72 63 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  rc;.  Tcl_Obj *p
ab50: 52 65 74 3b 0a 0a 20 20 63 6f 6e 73 74 20 63 68  Ret;..  const ch
ab60: 61 72 20 2a 7a 44 61 74 61 74 79 70 65 3b 0a 20  ar *zDatatype;. 
ab70: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f   const char *zCo
ab80: 6c 6c 73 65 71 3b 0a 20 20 69 6e 74 20 6e 6f 74  llseq;.  int not
ab90: 6e 75 6c 6c 3b 0a 20 20 69 6e 74 20 70 72 69 6d  null;.  int prim
aba0: 61 72 79 6b 65 79 3b 0a 20 20 69 6e 74 20 61 75  arykey;.  int au
abb0: 74 6f 69 6e 63 72 65 6d 65 6e 74 3b 0a 0a 20 20  toincrement;..  
abc0: 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20  if( objc!=5 ){. 
abd0: 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
abe0: 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
abf0: 62 6a 76 2c 20 22 44 42 20 64 62 6e 61 6d 65 20  bjv, "DB dbname 
ac00: 74 62 6c 6e 61 6d 65 20 63 6f 6c 6e 61 6d 65 22  tblname colname"
ac10: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
ac20: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
ac30: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
ac40: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
ac50: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
ac60: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
ac70: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 44 62 20 3d  L_ERROR;.  zDb =
ac80: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
ac90: 62 6a 76 5b 32 5d 29 3b 0a 20 20 7a 54 62 6c 20  bjv[2]);.  zTbl 
aca0: 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  = Tcl_GetString(
acb0: 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 7a 43 6f 6c  objv[3]);.  zCol
acc0: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
acd0: 28 6f 62 6a 76 5b 34 5d 29 3b 0a 0a 20 20 69 66  (objv[4]);..  if
ace0: 28 20 73 74 72 6c 65 6e 28 7a 44 62 29 3d 3d 30  ( strlen(zDb)==0
acf0: 20 29 20 7a 44 62 20 3d 20 30 3b 0a 0a 20 20 72   ) zDb = 0;..  r
ad00: 63 20 3d 20 73 71 6c 69 74 65 33 5f 74 61 62 6c  c = sqlite3_tabl
ad10: 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74  e_column_metadat
ad20: 61 28 64 62 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c  a(db, zDb, zTbl,
ad30: 20 7a 43 6f 6c 2c 20 0a 20 20 20 20 20 20 26 7a   zCol, .      &z
ad40: 44 61 74 61 74 79 70 65 2c 20 26 7a 43 6f 6c 6c  Datatype, &zColl
ad50: 73 65 71 2c 20 26 6e 6f 74 6e 75 6c 6c 2c 20 26  seq, &notnull, &
ad60: 70 72 69 6d 61 72 79 6b 65 79 2c 20 26 61 75 74  primarykey, &aut
ad70: 6f 69 6e 63 72 65 6d 65 6e 74 29 3b 0a 0a 20 20  oincrement);..  
ad80: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
ad90: 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  K ){.    Tcl_App
ada0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
adb0: 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
adc0: 28 64 62 29 2c 20 30 29 3b 0a 20 20 20 20 72 65  (db), 0);.    re
add0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
ade0: 20 20 7d 0a 0a 20 20 70 52 65 74 20 3d 20 54 63    }..  pRet = Tc
adf0: 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a 20 20 54 63  l_NewObj();.  Tc
ae00: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
ae10: 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20  lement(0, pRet, 
ae20: 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
ae30: 28 7a 44 61 74 61 74 79 70 65 2c 20 2d 31 29 29  (zDatatype, -1))
ae40: 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
ae50: 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20  ppendElement(0, 
ae60: 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72  pRet, Tcl_NewStr
ae70: 69 6e 67 4f 62 6a 28 7a 43 6f 6c 6c 73 65 71 2c  ingObj(zCollseq,
ae80: 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73   -1));.  Tcl_Lis
ae90: 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
aea0: 74 28 30 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e  t(0, pRet, Tcl_N
aeb0: 65 77 49 6e 74 4f 62 6a 28 6e 6f 74 6e 75 6c 6c  ewIntObj(notnull
aec0: 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
aed0: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30  jAppendElement(0
aee0: 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 49  , pRet, Tcl_NewI
aef0: 6e 74 4f 62 6a 28 70 72 69 6d 61 72 79 6b 65 79  ntObj(primarykey
af00: 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
af10: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30  jAppendElement(0
af20: 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 49  , pRet, Tcl_NewI
af30: 6e 74 4f 62 6a 28 61 75 74 6f 69 6e 63 72 65 6d  ntObj(autoincrem
af40: 65 6e 74 29 29 3b 0a 20 20 54 63 6c 5f 53 65 74  ent));.  Tcl_Set
af50: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
af60: 2c 20 70 52 65 74 29 3b 0a 0a 20 20 72 65 74 75  , pRet);..  retu
af70: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e  rn TCL_OK;.}.#en
af80: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
af90: 49 54 45 5f 4f 4d 49 54 5f 49 4e 43 52 42 4c 4f  ITE_OMIT_INCRBLO
afa0: 42 0a 0a 2f 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  B../*.** sqlite3
afb0: 5f 62 6c 6f 62 5f 72 65 61 64 20 20 43 48 41 4e  _blob_read  CHAN
afc0: 4e 45 4c 20 4f 46 46 53 45 54 20 4e 0a 2a 2a 0a  NEL OFFSET N.**.
afd0: 2a 2a 20 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e  **   This comman
afe0: 64 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73  d is used to tes
aff0: 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 6c  t the sqlite3_bl
b000: 6f 62 5f 72 65 61 64 28 29 20 69 6e 20 77 61 79  ob_read() in way
b010: 73 20 74 68 61 74 0a 2a 2a 20 20 20 74 68 65 20  s that.**   the 
b020: 54 63 6c 20 63 68 61 6e 6e 65 6c 20 69 6e 74 65  Tcl channel inte
b030: 72 66 61 63 65 20 64 6f 65 73 20 6e 6f 74 2e 20  rface does not. 
b040: 54 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  The first argume
b050: 6e 74 20 73 68 6f 75 6c 64 0a 2a 2a 20 20 20 62  nt should.**   b
b060: 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  e the name of a 
b070: 76 61 6c 69 64 20 63 68 61 6e 6e 65 6c 20 63 72  valid channel cr
b080: 65 61 74 65 64 20 62 79 20 74 68 65 20 5b 69 6e  eated by the [in
b090: 63 72 62 6c 6f 62 5d 20 6d 65 74 68 6f 64 0a 2a  crblob] method.*
b0a0: 2a 20 20 20 6f 66 20 61 20 64 61 74 61 62 61 73  *   of a databas
b0b0: 65 20 68 61 6e 64 6c 65 2e 20 54 68 69 73 20 66  e handle. This f
b0c0: 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 73 20 73 71  unction calls sq
b0d0: 6c 69 74 65 33 5f 62 6c 6f 62 5f 72 65 61 64 28  lite3_blob_read(
b0e0: 29 0a 2a 2a 20 20 20 74 6f 20 72 65 61 64 20 4e  ).**   to read N
b0f0: 20 62 79 74 65 73 20 66 72 6f 6d 20 6f 66 66 73   bytes from offs
b100: 65 74 20 4f 46 46 53 45 54 20 66 72 6f 6d 20 74  et OFFSET from t
b110: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 53 51  he underlying SQ
b120: 4c 69 74 65 0a 2a 2a 20 20 20 62 6c 6f 62 20 68  Lite.**   blob h
b130: 61 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 4f  andle..**.**   O
b140: 6e 20 73 75 63 63 65 73 73 2c 20 61 20 62 79 74  n success, a byt
b150: 65 2d 61 72 72 61 79 20 6f 62 6a 65 63 74 20 63  e-array object c
b160: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
b170: 61 64 20 64 61 74 61 20 69 73 20 0a 2a 2a 20 20  ad data is .**  
b180: 20 72 65 74 75 72 6e 65 64 2e 20 4f 6e 20 66 61   returned. On fa
b190: 69 6c 75 72 65 2c 20 74 68 65 20 69 6e 74 65 72  ilure, the inter
b1a0: 70 72 65 74 65 72 20 72 65 73 75 6c 74 20 69 73  preter result is
b1b0: 20 73 65 74 20 74 6f 20 74 68 65 0a 2a 2a 20 20   set to the.**  
b1c0: 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74 61   text representa
b1d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65 74 75  tion of the retu
b1e0: 72 6e 65 64 20 65 72 72 6f 72 20 63 6f 64 65 20  rned error code 
b1f0: 28 69 2e 65 2e 20 22 53 51 4c 49 54 45 5f 4e 4f  (i.e. "SQLITE_NO
b200: 4d 45 4d 22 29 0a 2a 2a 20 20 20 61 6e 64 20 61  MEM").**   and a
b210: 20 54 63 6c 20 65 78 63 65 70 74 69 6f 6e 20 69   Tcl exception i
b220: 73 20 74 68 72 6f 77 6e 2e 0a 2a 2f 0a 73 74 61  s thrown..*/.sta
b230: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 6c 6f  tic int test_blo
b240: 62 5f 72 65 61 64 28 0a 20 20 43 6c 69 65 6e 74  b_read(.  Client
b250: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c  Data clientData,
b260: 20 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f 0a   /* Not used */.
b270: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
b280: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
b290: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
b2a0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
b2b0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
b2c0: 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20  nt objc,        
b2d0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
b2e0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
b2f0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
b300: 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d   objv[]  /* Comm
b310: 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f  and arguments */
b320: 0a 29 7b 0a 20 20 54 63 6c 5f 43 68 61 6e 6e 65  .){.  Tcl_Channe
b330: 6c 20 63 68 61 6e 6e 65 6c 3b 0a 20 20 43 6c 69  l channel;.  Cli
b340: 65 6e 74 44 61 74 61 20 69 6e 73 74 61 6e 63 65  entData instance
b350: 44 61 74 61 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Data;.  sqlite3_
b360: 62 6c 6f 62 20 2a 70 42 6c 6f 62 3b 0a 20 20 69  blob *pBlob;.  i
b370: 6e 74 20 6e 6f 74 55 73 65 64 3b 0a 20 20 69 6e  nt notUsed;.  in
b380: 74 20 6e 42 79 74 65 3b 0a 20 20 69 6e 74 20 69  t nByte;.  int i
b390: 4f 66 66 73 65 74 3b 0a 20 20 75 6e 73 69 67 6e  Offset;.  unsign
b3a0: 65 64 20 63 68 61 72 20 2a 7a 42 75 66 3b 0a 20  ed char *zBuf;. 
b3b0: 20 69 6e 74 20 72 63 3b 0a 20 20 0a 20 20 69 66   int rc;.  .  if
b3c0: 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20  ( objc!=4 ){.   
b3d0: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
b3e0: 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
b3f0: 76 2c 20 22 43 48 41 4e 4e 45 4c 20 4f 46 46 53  v, "CHANNEL OFFS
b400: 45 54 20 4e 22 29 3b 0a 20 20 20 20 72 65 74 75  ET N");.    retu
b410: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
b420: 7d 0a 0a 20 20 63 68 61 6e 6e 65 6c 20 3d 20 54  }..  channel = T
b430: 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 28 69 6e  cl_GetChannel(in
b440: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
b450: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 6e  ing(objv[1]), &n
b460: 6f 74 55 73 65 64 29 3b 0a 20 20 69 66 28 20 21  otUsed);.  if( !
b470: 63 68 61 6e 6e 65 6c 0a 20 20 20 7c 7c 20 54 43  channel.   || TC
b480: 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 49 6e 74  L_OK!=Tcl_GetInt
b490: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
b4a0: 6f 62 6a 76 5b 32 5d 2c 20 26 69 4f 66 66 73 65  objv[2], &iOffse
b4b0: 74 29 0a 20 20 20 7c 7c 20 54 43 4c 5f 4f 4b 21  t).   || TCL_OK!
b4c0: 3d 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f  =Tcl_GetIntFromO
b4d0: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
b4e0: 33 5d 2c 20 26 6e 42 79 74 65 29 0a 20 20 20 7c  3], &nByte).   |
b4f0: 7c 20 6e 42 79 74 65 3c 30 20 7c 7c 20 69 4f 66  | nByte<0 || iOf
b500: 66 73 65 74 3c 30 0a 20 20 29 7b 20 0a 20 20 20  fset<0.  ){ .   
b510: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
b520: 52 3b 0a 20 20 7d 0a 0a 20 20 69 6e 73 74 61 6e  R;.  }..  instan
b530: 63 65 44 61 74 61 20 3d 20 54 63 6c 5f 47 65 74  ceData = Tcl_Get
b540: 43 68 61 6e 6e 65 6c 49 6e 73 74 61 6e 63 65 44  ChannelInstanceD
b550: 61 74 61 28 63 68 61 6e 6e 65 6c 29 3b 0a 20 20  ata(channel);.  
b560: 70 42 6c 6f 62 20 3d 20 2a 28 28 73 71 6c 69 74  pBlob = *((sqlit
b570: 65 33 5f 62 6c 6f 62 20 2a 2a 29 69 6e 73 74 61  e3_blob **)insta
b580: 6e 63 65 44 61 74 61 29 3b 0a 0a 20 20 7a 42 75  nceData);..  zBu
b590: 66 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68  f = (unsigned ch
b5a0: 61 72 20 2a 29 54 63 6c 5f 41 6c 6c 6f 63 28 6e  ar *)Tcl_Alloc(n
b5b0: 42 79 74 65 29 3b 0a 20 20 72 63 20 3d 20 73 71  Byte);.  rc = sq
b5c0: 6c 69 74 65 33 5f 62 6c 6f 62 5f 72 65 61 64 28  lite3_blob_read(
b5d0: 70 42 6c 6f 62 2c 20 7a 42 75 66 2c 20 6e 42 79  pBlob, zBuf, nBy
b5e0: 74 65 2c 20 69 4f 66 66 73 65 74 29 3b 0a 20 20  te, iOffset);.  
b5f0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
b600: 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  K ){.    Tcl_Set
b610: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
b620: 2c 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72  , Tcl_NewByteArr
b630: 61 79 4f 62 6a 28 7a 42 75 66 2c 20 6e 42 79 74  ayObj(zBuf, nByt
b640: 65 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  e));.  }else{.  
b650: 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
b660: 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29  interp, (char *)
b670: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 6f 72  sqlite3TestError
b680: 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 56 4f  Name(rc), TCL_VO
b690: 4c 41 54 49 4c 45 29 3b 0a 20 20 7d 0a 20 20 54  LATILE);.  }.  T
b6a0: 63 6c 5f 46 72 65 65 28 28 63 68 61 72 20 2a 29  cl_Free((char *)
b6b0: 7a 42 75 66 29 3b 0a 0a 20 20 72 65 74 75 72 6e  zBuf);..  return
b6c0: 20 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20   (rc==SQLITE_OK 
b6d0: 3f 20 54 43 4c 5f 4f 4b 20 3a 20 54 43 4c 5f 45  ? TCL_OK : TCL_E
b6e0: 52 52 4f 52 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  RROR);.}../*.** 
b6f0: 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 77 72 69  sqlite3_blob_wri
b700: 74 65 20 43 48 41 4e 4e 45 4c 20 4f 46 46 53 45  te CHANNEL OFFSE
b710: 54 20 44 41 54 41 0a 2a 2a 0a 2a 2a 20 20 20 54  T DATA.**.**   T
b720: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  his command is u
b730: 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20  sed to test the 
b740: 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 77 72 69  sqlite3_blob_wri
b750: 74 65 28 29 20 69 6e 20 77 61 79 73 20 74 68 61  te() in ways tha
b760: 74 0a 2a 2a 20 20 20 74 68 65 20 54 63 6c 20 63  t.**   the Tcl c
b770: 68 61 6e 6e 65 6c 20 69 6e 74 65 72 66 61 63 65  hannel interface
b780: 20 64 6f 65 73 20 6e 6f 74 2e 20 54 68 65 20 66   does not. The f
b790: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 73 68  irst argument sh
b7a0: 6f 75 6c 64 0a 2a 2a 20 20 20 62 65 20 74 68 65  ould.**   be the
b7b0: 20 6e 61 6d 65 20 6f 66 20 61 20 76 61 6c 69 64   name of a valid
b7c0: 20 63 68 61 6e 6e 65 6c 20 63 72 65 61 74 65 64   channel created
b7d0: 20 62 79 20 74 68 65 20 5b 69 6e 63 72 62 6c 6f   by the [incrblo
b7e0: 62 5d 20 6d 65 74 68 6f 64 0a 2a 2a 20 20 20 6f  b] method.**   o
b7f0: 66 20 61 20 64 61 74 61 62 61 73 65 20 68 61 6e  f a database han
b800: 64 6c 65 2e 20 54 68 69 73 20 66 75 6e 63 74 69  dle. This functi
b810: 6f 6e 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33  on calls sqlite3
b820: 5f 62 6c 6f 62 5f 77 72 69 74 65 28 29 0a 2a 2a  _blob_write().**
b830: 20 20 20 74 6f 20 77 72 69 74 65 20 74 68 65 20     to write the 
b840: 44 41 54 41 20 62 79 74 65 2d 61 72 72 61 79 20  DATA byte-array 
b850: 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  to the underlyin
b860: 67 20 53 51 4c 69 74 65 20 62 6c 6f 62 20 68 61  g SQLite blob ha
b870: 6e 64 6c 65 2e 0a 2a 2a 20 20 20 61 74 20 6f 66  ndle..**   at of
b880: 66 73 65 74 20 4f 46 46 53 45 54 2e 0a 2a 2a 0a  fset OFFSET..**.
b890: 2a 2a 20 20 20 4f 6e 20 73 75 63 63 65 73 73 2c  **   On success,
b8a0: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   an empty string
b8b0: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 4f 6e   is returned. On
b8c0: 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 69 6e   failure, the in
b8d0: 74 65 72 70 72 65 74 65 72 0a 2a 2a 20 20 20 72  terpreter.**   r
b8e0: 65 73 75 6c 74 20 69 73 20 73 65 74 20 74 6f 20  esult is set to 
b8f0: 74 68 65 20 74 65 78 74 20 72 65 70 72 65 73 65  the text represe
b900: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 72  ntation of the r
b910: 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 63 6f  eturned error co
b920: 64 65 20 0a 2a 2a 20 20 20 28 69 2e 65 2e 20 22  de .**   (i.e. "
b930: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 22 29 20 61  SQLITE_NOMEM") a
b940: 6e 64 20 61 20 54 63 6c 20 65 78 63 65 70 74 69  nd a Tcl excepti
b950: 6f 6e 20 69 73 20 74 68 72 6f 77 6e 2e 0a 2a 2f  on is thrown..*/
b960: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
b970: 5f 62 6c 6f 62 5f 77 72 69 74 65 28 0a 20 20 43  _blob_write(.  C
b980: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
b990: 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75 73 65  Data, /* Not use
b9a0: 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  d */.  Tcl_Inter
b9b0: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
b9c0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
b9d0: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
b9e0: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
b9f0: 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
ba00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
ba10: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
ba20: 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
ba30: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
ba40: 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
ba50: 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 43  ts */.){.  Tcl_C
ba60: 68 61 6e 6e 65 6c 20 63 68 61 6e 6e 65 6c 3b 0a  hannel channel;.
ba70: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 6e 73    ClientData ins
ba80: 74 61 6e 63 65 44 61 74 61 3b 0a 20 20 73 71 6c  tanceData;.  sql
ba90: 69 74 65 33 5f 62 6c 6f 62 20 2a 70 42 6c 6f 62  ite3_blob *pBlob
baa0: 3b 0a 20 20 69 6e 74 20 6e 6f 74 55 73 65 64 3b  ;.  int notUsed;
bab0: 0a 20 20 69 6e 74 20 69 4f 66 66 73 65 74 3b 0a  .  int iOffset;.
bac0: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 75 6e 73    int rc;..  uns
bad0: 69 67 6e 65 64 20 63 68 61 72 20 2a 7a 42 75 66  igned char *zBuf
bae0: 3b 0a 20 20 69 6e 74 20 6e 42 75 66 3b 0a 20 20  ;.  int nBuf;.  
baf0: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29  .  if( objc!=4 )
bb00: 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
bb10: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
bb20: 2c 20 6f 62 6a 76 2c 20 22 43 48 41 4e 4e 45 4c  , objv, "CHANNEL
bb30: 20 4f 46 46 53 45 54 20 44 41 54 41 22 29 3b 0a   OFFSET DATA");.
bb40: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
bb50: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 63 68 61  RROR;.  }..  cha
bb60: 6e 6e 65 6c 20 3d 20 54 63 6c 5f 47 65 74 43 68  nnel = Tcl_GetCh
bb70: 61 6e 6e 65 6c 28 69 6e 74 65 72 70 2c 20 54 63  annel(interp, Tc
bb80: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
bb90: 5b 31 5d 29 2c 20 26 6e 6f 74 55 73 65 64 29 3b  [1]), &notUsed);
bba0: 0a 20 20 69 66 28 20 21 63 68 61 6e 6e 65 6c 0a  .  if( !channel.
bbb0: 20 20 20 7c 7c 20 54 43 4c 5f 4f 4b 21 3d 54 63     || TCL_OK!=Tc
bbc0: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
bbd0: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
bbe0: 20 26 69 4f 66 66 73 65 74 29 0a 20 20 20 7c 7c   &iOffset).   ||
bbf0: 20 69 4f 66 66 73 65 74 3c 30 0a 20 20 29 7b 20   iOffset<0.  ){ 
bc00: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
bc10: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 6e  ERROR;.  }..  in
bc20: 73 74 61 6e 63 65 44 61 74 61 20 3d 20 54 63 6c  stanceData = Tcl
bc30: 5f 47 65 74 43 68 61 6e 6e 65 6c 49 6e 73 74 61  _GetChannelInsta
bc40: 6e 63 65 44 61 74 61 28 63 68 61 6e 6e 65 6c 29  nceData(channel)
bc50: 3b 0a 20 20 70 42 6c 6f 62 20 3d 20 2a 28 28 73  ;.  pBlob = *((s
bc60: 71 6c 69 74 65 33 5f 62 6c 6f 62 20 2a 2a 29 69  qlite3_blob **)i
bc70: 6e 73 74 61 6e 63 65 44 61 74 61 29 3b 0a 0a 20  nstanceData);.. 
bc80: 20 7a 42 75 66 20 3d 20 54 63 6c 5f 47 65 74 42   zBuf = Tcl_GetB
bc90: 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28  yteArrayFromObj(
bca0: 6f 62 6a 76 5b 33 5d 2c 20 26 6e 42 75 66 29 3b  objv[3], &nBuf);
bcb0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
bcc0: 62 6c 6f 62 5f 77 72 69 74 65 28 70 42 6c 6f 62  blob_write(pBlob
bcd0: 2c 20 7a 42 75 66 2c 20 6e 42 75 66 2c 20 69 4f  , zBuf, nBuf, iO
bce0: 66 66 73 65 74 29 3b 0a 20 20 69 66 28 20 72 63  ffset);.  if( rc
bcf0: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
bd00: 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74     Tcl_SetResult
bd10: 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
bd20: 29 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 6f  )sqlite3TestErro
bd30: 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 56  rName(rc), TCL_V
bd40: 4f 4c 41 54 49 4c 45 29 3b 0a 20 20 7d 0a 0a 20  OLATILE);.  }.. 
bd50: 20 72 65 74 75 72 6e 20 28 72 63 3d 3d 53 51 4c   return (rc==SQL
bd60: 49 54 45 5f 4f 4b 20 3f 20 54 43 4c 5f 4f 4b 20  ITE_OK ? TCL_OK 
bd70: 3a 20 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a  : TCL_ERROR);.}.
bd80: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73  #endif../*.** Us
bd90: 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 72 65  age: sqlite3_cre
bda0: 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 76 32  ate_collation_v2
bdb0: 20 44 42 2d 48 41 4e 44 4c 45 20 4e 41 4d 45 20   DB-HANDLE NAME 
bdc0: 43 4d 50 2d 50 52 4f 43 20 44 45 4c 2d 50 52 4f  CMP-PROC DEL-PRO
bdd0: 43 0a 2a 2a 0a 2a 2a 20 20 20 54 68 69 73 20 54  C.**.**   This T
bde0: 63 6c 20 70 72 6f 63 20 69 73 20 75 73 65 64 20  cl proc is used 
bdf0: 66 6f 72 20 74 65 73 74 69 6e 67 20 74 68 65 20  for testing the 
be00: 65 78 70 65 72 69 6d 65 6e 74 61 6c 0a 2a 2a 20  experimental.** 
be10: 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65    sqlite3_create
be20: 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 76 32 28 29 20  _collation_v2() 
be30: 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 73 74  interface..*/.st
be40: 72 75 63 74 20 54 65 73 74 43 6f 6c 6c 61 74 69  ruct TestCollati
be50: 6f 6e 58 20 7b 0a 20 20 54 63 6c 5f 49 6e 74 65  onX {.  Tcl_Inte
be60: 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63  rp *interp;.  Tc
be70: 6c 5f 4f 62 6a 20 2a 70 43 6d 70 3b 0a 20 20 54  l_Obj *pCmp;.  T
be80: 63 6c 5f 4f 62 6a 20 2a 70 44 65 6c 3b 0a 7d 3b  cl_Obj *pDel;.};
be90: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
bea0: 54 65 73 74 43 6f 6c 6c 61 74 69 6f 6e 58 20 54  TestCollationX T
beb0: 65 73 74 43 6f 6c 6c 61 74 69 6f 6e 58 3b 0a 73  estCollationX;.s
bec0: 74 61 74 69 63 20 76 6f 69 64 20 74 65 73 74 43  tatic void testC
bed0: 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 44 65  reateCollationDe
bee0: 6c 28 76 6f 69 64 20 2a 70 43 74 78 29 7b 0a 20  l(void *pCtx){. 
bef0: 20 54 65 73 74 43 6f 6c 6c 61 74 69 6f 6e 58 20   TestCollationX 
bf00: 2a 70 20 3d 20 28 54 65 73 74 43 6f 6c 6c 61 74  *p = (TestCollat
bf10: 69 6f 6e 58 20 2a 29 70 43 74 78 3b 0a 0a 20 20  ionX *)pCtx;..  
bf20: 69 6e 74 20 72 63 20 3d 20 54 63 6c 5f 45 76 61  int rc = Tcl_Eva
bf30: 6c 4f 62 6a 45 78 28 70 2d 3e 69 6e 74 65 72 70  lObjEx(p->interp
bf40: 2c 20 70 2d 3e 70 44 65 6c 2c 20 54 43 4c 5f 45  , p->pDel, TCL_E
bf50: 56 41 4c 5f 44 49 52 45 43 54 7c 54 43 4c 5f 45  VAL_DIRECT|TCL_E
bf60: 56 41 4c 5f 47 4c 4f 42 41 4c 29 3b 0a 20 20 69  VAL_GLOBAL);.  i
bf70: 66 28 20 72 63 21 3d 54 43 4c 5f 4f 4b 20 29 7b  f( rc!=TCL_OK ){
bf80: 0a 20 20 20 20 54 63 6c 5f 42 61 63 6b 67 72 6f  .    Tcl_Backgro
bf90: 75 6e 64 45 72 72 6f 72 28 70 2d 3e 69 6e 74 65  undError(p->inte
bfa0: 72 70 29 3b 0a 20 20 7d 0a 0a 20 20 54 63 6c 5f  rp);.  }..  Tcl_
bfb0: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 2d 3e  DecrRefCount(p->
bfc0: 70 43 6d 70 29 3b 0a 20 20 54 63 6c 5f 44 65 63  pCmp);.  Tcl_Dec
bfd0: 72 52 65 66 43 6f 75 6e 74 28 70 2d 3e 70 44 65  rRefCount(p->pDe
bfe0: 6c 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72  l);.  sqlite3_fr
bff0: 65 65 28 28 76 6f 69 64 20 2a 29 70 29 3b 0a 7d  ee((void *)p);.}
c000: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
c010: 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 43  CreateCollationC
c020: 6d 70 28 0a 20 20 76 6f 69 64 20 2a 70 43 74 78  mp(.  void *pCtx
c030: 2c 0a 20 20 69 6e 74 20 6e 4c 65 66 74 2c 0a 20  ,.  int nLeft,. 
c040: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 4c 65   const void *zLe
c050: 66 74 2c 0a 20 20 69 6e 74 20 6e 52 69 67 68 74  ft,.  int nRight
c060: 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ,.  const void *
c070: 7a 52 69 67 68 74 0a 29 7b 0a 20 20 54 65 73 74  zRight.){.  Test
c080: 43 6f 6c 6c 61 74 69 6f 6e 58 20 2a 70 20 3d 20  CollationX *p = 
c090: 28 54 65 73 74 43 6f 6c 6c 61 74 69 6f 6e 58 20  (TestCollationX 
c0a0: 2a 29 70 43 74 78 3b 0a 20 20 54 63 6c 5f 4f 62  *)pCtx;.  Tcl_Ob
c0b0: 6a 20 2a 70 53 63 72 69 70 74 20 3d 20 54 63 6c  j *pScript = Tcl
c0c0: 5f 44 75 70 6c 69 63 61 74 65 4f 62 6a 28 70 2d  _DuplicateObj(p-
c0d0: 3e 70 43 6d 70 29 3b 0a 20 20 69 6e 74 20 69 52  >pCmp);.  int iR
c0e0: 65 73 20 3d 20 30 3b 0a 0a 20 20 54 63 6c 5f 49  es = 0;..  Tcl_I
c0f0: 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 53 63 72  ncrRefCount(pScr
c100: 69 70 74 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74  ipt);.  Tcl_List
c110: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
c120: 28 30 2c 20 70 53 63 72 69 70 74 2c 20 54 63 6c  (0, pScript, Tcl
c130: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28 63  _NewStringObj((c
c140: 68 61 72 20 2a 29 7a 4c 65 66 74 2c 20 6e 4c 65  har *)zLeft, nLe
c150: 66 74 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74  ft));.  Tcl_List
c160: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
c170: 28 30 2c 20 70 53 63 72 69 70 74 2c 20 54 63 6c  (0, pScript, Tcl
c180: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28 63  _NewStringObj((c
c190: 68 61 72 20 2a 29 7a 52 69 67 68 74 2c 6e 52 69  har *)zRight,nRi
c1a0: 67 68 74 29 29 3b 0a 0a 20 20 69 66 28 20 54 43  ght));..  if( TC
c1b0: 4c 5f 4f 4b 21 3d 54 63 6c 5f 45 76 61 6c 4f 62  L_OK!=Tcl_EvalOb
c1c0: 6a 45 78 28 70 2d 3e 69 6e 74 65 72 70 2c 20 70  jEx(p->interp, p
c1d0: 53 63 72 69 70 74 2c 20 54 43 4c 5f 45 56 41 4c  Script, TCL_EVAL
c1e0: 5f 44 49 52 45 43 54 7c 54 43 4c 5f 45 56 41 4c  _DIRECT|TCL_EVAL
c1f0: 5f 47 4c 4f 42 41 4c 29 0a 20 20 20 7c 7c 20 54  _GLOBAL).   || T
c200: 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 49 6e  CL_OK!=Tcl_GetIn
c210: 74 46 72 6f 6d 4f 62 6a 28 70 2d 3e 69 6e 74 65  tFromObj(p->inte
c220: 72 70 2c 20 54 63 6c 5f 47 65 74 4f 62 6a 52 65  rp, Tcl_GetObjRe
c230: 73 75 6c 74 28 70 2d 3e 69 6e 74 65 72 70 29 2c  sult(p->interp),
c240: 20 26 69 52 65 73 29 0a 20 20 29 7b 0a 20 20 20   &iRes).  ){.   
c250: 20 54 63 6c 5f 42 61 63 6b 67 72 6f 75 6e 64 45   Tcl_BackgroundE
c260: 72 72 6f 72 28 70 2d 3e 69 6e 74 65 72 70 29 3b  rror(p->interp);
c270: 0a 20 20 7d 0a 20 20 54 63 6c 5f 44 65 63 72 52  .  }.  Tcl_DecrR
c280: 65 66 43 6f 75 6e 74 28 70 53 63 72 69 70 74 29  efCount(pScript)
c290: 3b 0a 0a 20 20 72 65 74 75 72 6e 20 69 52 65 73  ;..  return iRes
c2a0: 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 74  ;.}.static int t
c2b0: 65 73 74 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  est_create_colla
c2c0: 74 69 6f 6e 5f 76 32 28 0a 20 20 43 6c 69 65 6e  tion_v2(.  Clien
c2d0: 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
c2e0: 2c 20 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f  , /* Not used */
c2f0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
c300: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
c310: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
c320: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
c330: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
c340: 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
c350: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c360: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
c370: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
c380: 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
c390: 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
c3a0: 2f 0a 29 7b 0a 20 20 54 65 73 74 43 6f 6c 6c 61  /.){.  TestColla
c3b0: 74 69 6f 6e 58 20 2a 70 3b 0a 20 20 73 71 6c 69  tionX *p;.  sqli
c3c0: 74 65 33 20 2a 64 62 3b 0a 0a 20 20 69 66 28 20  te3 *db;..  if( 
c3d0: 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54  objc!=5 ){.    T
c3e0: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
c3f0: 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
c400: 20 22 44 42 2d 48 41 4e 44 4c 45 20 4e 41 4d 45   "DB-HANDLE NAME
c410: 20 43 4d 50 2d 50 52 4f 43 20 44 45 4c 2d 50 52   CMP-PROC DEL-PR
c420: 4f 43 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  OC");.    return
c430: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
c440: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
c450: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
c460: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
c470: 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ), &db) ) return
c480: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 70   TCL_ERROR;..  p
c490: 20 3d 20 28 54 65 73 74 43 6f 6c 6c 61 74 69 6f   = (TestCollatio
c4a0: 6e 58 20 2a 29 73 71 6c 69 74 65 33 5f 6d 61 6c  nX *)sqlite3_mal
c4b0: 6c 6f 63 28 73 69 7a 65 6f 66 28 54 65 73 74 43  loc(sizeof(TestC
c4c0: 6f 6c 6c 61 74 69 6f 6e 58 29 29 3b 0a 20 20 70  ollationX));.  p
c4d0: 2d 3e 70 43 6d 70 20 3d 20 6f 62 6a 76 5b 33 5d  ->pCmp = objv[3]
c4e0: 3b 0a 20 20 70 2d 3e 70 44 65 6c 20 3d 20 6f 62  ;.  p->pDel = ob
c4f0: 6a 76 5b 34 5d 3b 0a 20 20 70 2d 3e 69 6e 74 65  jv[4];.  p->inte
c500: 72 70 20 3d 20 69 6e 74 65 72 70 3b 0a 20 20 54  rp = interp;.  T
c510: 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28  cl_IncrRefCount(
c520: 70 2d 3e 70 43 6d 70 29 3b 0a 20 20 54 63 6c 5f  p->pCmp);.  Tcl_
c530: 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 2d 3e  IncrRefCount(p->
c540: 70 44 65 6c 29 3b 0a 0a 20 20 73 71 6c 69 74 65  pDel);..  sqlite
c550: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
c560: 6f 6e 5f 76 32 28 64 62 2c 20 54 63 6c 5f 47 65  on_v2(db, Tcl_Ge
c570: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29  tString(objv[2])
c580: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 0a  , SQLITE_UTF8, .
c590: 20 20 20 20 20 20 28 76 6f 69 64 20 2a 29 70 2c        (void *)p,
c5a0: 20 74 65 73 74 43 72 65 61 74 65 43 6f 6c 6c 61   testCreateColla
c5b0: 74 69 6f 6e 43 6d 70 2c 20 74 65 73 74 43 72 65  tionCmp, testCre
c5c0: 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 44 65 6c 0a  ateCollationDel.
c5d0: 20 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43    );.  return TC
c5e0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
c5f0: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 6c 6f  sage: sqlite3_lo
c600: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 44 42 2d  ad_extension DB-
c610: 48 41 4e 44 4c 45 20 46 49 4c 45 20 3f 50 52 4f  HANDLE FILE ?PRO
c620: 43 3f 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  C?.*/.static int
c630: 20 74 65 73 74 5f 6c 6f 61 64 5f 65 78 74 65 6e   test_load_exten
c640: 73 69 6f 6e 28 0a 20 20 43 6c 69 65 6e 74 44 61  sion(.  ClientDa
c650: 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f  ta clientData, /
c660: 2a 20 4e 6f 74 20 75 73 65 64 20 2a 2f 0a 20 20  * Not used */.  
c670: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
c680: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
c690: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
c6a0: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
c6b0: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
c6c0: 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20   objc,          
c6d0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c6e0: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
c6f0: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
c700: 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e  bjv[]  /* Comman
c710: 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29  d arguments */.)
c720: 7b 0a 20 20 54 63 6c 5f 43 6d 64 49 6e 66 6f 20  {.  Tcl_CmdInfo 
c730: 63 6d 64 49 6e 66 6f 3b 0a 20 20 73 71 6c 69 74  cmdInfo;.  sqlit
c740: 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63  e3 *db;.  int rc
c750: 3b 0a 20 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20  ;.  char *zDb;. 
c760: 20 63 68 61 72 20 2a 7a 46 69 6c 65 3b 0a 20 20   char *zFile;.  
c770: 63 68 61 72 20 2a 7a 50 72 6f 63 20 3d 20 30 3b  char *zProc = 0;
c780: 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20 3d 20  .  char *zErr = 
c790: 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  0;..  if( objc!=
c7a0: 34 20 26 26 20 6f 62 6a 63 21 3d 33 20 29 7b 0a  4 && objc!=3 ){.
c7b0: 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
c7c0: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
c7d0: 6f 62 6a 76 2c 20 22 44 42 2d 48 41 4e 44 4c 45  objv, "DB-HANDLE
c7e0: 20 46 49 4c 45 20 3f 50 52 4f 43 3f 22 29 3b 0a   FILE ?PROC?");.
c7f0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
c800: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 44 62 20  RROR;.  }.  zDb 
c810: 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  = Tcl_GetString(
c820: 6f 62 6a 76 5b 31 5d 29 3b 0a 20 20 7a 46 69 6c  objv[1]);.  zFil
c830: 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  e = Tcl_GetStrin
c840: 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20 69 66  g(objv[2]);.  if
c850: 28 20 6f 62 6a 63 3d 3d 34 20 29 7b 0a 20 20 20  ( objc==4 ){.   
c860: 20 7a 50 72 6f 63 20 3d 20 54 63 6c 5f 47 65 74   zProc = Tcl_Get
c870: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b  String(objv[3]);
c880: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61  .  }..  /* Extra
c890: 63 74 20 74 68 65 20 43 20 64 61 74 61 62 61 73  ct the C databas
c8a0: 65 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74 68  e handle from th
c8b0: 65 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 20 6e 61  e Tcl command na
c8c0: 6d 65 20 2a 2f 0a 20 20 69 66 28 20 21 54 63 6c  me */.  if( !Tcl
c8d0: 5f 47 65 74 43 6f 6d 6d 61 6e 64 49 6e 66 6f 28  _GetCommandInfo(
c8e0: 69 6e 74 65 72 70 2c 20 7a 44 62 2c 20 26 63 6d  interp, zDb, &cm
c8f0: 64 49 6e 66 6f 29 20 29 7b 0a 20 20 20 20 54 63  dInfo) ){.    Tc
c900: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
c910: 6e 74 65 72 70 2c 20 22 63 6f 6d 6d 61 6e 64 20  nterp, "command 
c920: 6e 6f 74 20 66 6f 75 6e 64 3a 20 22 2c 20 7a 44  not found: ", zD
c930: 62 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20  b, (char*)0);.  
c940: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
c950: 4f 52 3b 0a 20 20 7d 0a 20 20 64 62 20 3d 20 28  OR;.  }.  db = (
c960: 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 44 62  (struct SqliteDb
c970: 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62 6a 43 6c 69  *)cmdInfo.objCli
c980: 65 6e 74 44 61 74 61 29 2d 3e 64 62 3b 0a 20 20  entData)->db;.  
c990: 61 73 73 65 72 74 28 64 62 29 3b 0a 0a 20 20 2f  assert(db);..  /
c9a0: 2a 20 43 61 6c 6c 20 74 68 65 20 75 6e 64 65 72  * Call the under
c9b0: 6c 79 69 6e 67 20 43 20 66 75 6e 63 74 69 6f 6e  lying C function
c9c0: 2e 20 49 66 20 61 6e 20 65 72 72 6f 72 20 6f 63  . If an error oc
c9d0: 63 75 72 73 2c 20 73 65 74 20 72 63 20 74 6f 20  curs, set rc to 
c9e0: 0a 20 20 2a 2a 20 54 43 4c 5f 45 52 52 4f 52 20  .  ** TCL_ERROR 
c9f0: 61 6e 64 20 6c 6f 61 64 20 61 6e 79 20 65 72 72  and load any err
ca00: 6f 72 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 74  or string into t
ca10: 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 20  he interpreter. 
ca20: 49 66 20 6e 6f 20 0a 20 20 2a 2a 20 65 72 72 6f  If no .  ** erro
ca30: 72 20 6f 63 63 75 72 73 2c 20 73 65 74 20 72 63  r occurs, set rc
ca40: 20 74 6f 20 54 43 4c 5f 4f 4b 2e 0a 20 20 2a 2f   to TCL_OK..  */
ca50: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
ca60: 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
ca70: 4f 4e 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  ON.  rc = SQLITE
ca80: 5f 45 52 52 4f 52 3b 0a 20 20 7a 45 72 72 20 3d  _ERROR;.  zErr =
ca90: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
caa0: 28 22 74 68 69 73 20 62 75 69 6c 64 20 6f 6d 69  ("this build omi
cab0: 74 73 20 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f  ts sqlite3_load_
cac0: 65 78 74 65 6e 73 69 6f 6e 28 29 22 29 3b 0a 23  extension()");.#
cad0: 65 6c 73 65 0a 20 20 72 63 20 3d 20 73 71 6c 69  else.  rc = sqli
cae0: 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  te3_load_extensi
caf0: 6f 6e 28 64 62 2c 20 7a 46 69 6c 65 2c 20 7a 50  on(db, zFile, zP
cb00: 72 6f 63 2c 20 26 7a 45 72 72 29 3b 0a 23 65 6e  roc, &zErr);.#en
cb10: 64 69 66 0a 20 20 69 66 28 20 72 63 21 3d 53 51  dif.  if( rc!=SQ
cb20: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54  LITE_OK ){.    T
cb30: 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
cb40: 65 72 70 2c 20 7a 45 72 72 20 3f 20 7a 45 72 72  erp, zErr ? zErr
cb50: 20 3a 20 22 22 2c 20 54 43 4c 5f 56 4f 4c 41 54   : "", TCL_VOLAT
cb60: 49 4c 45 29 3b 0a 20 20 20 20 72 63 20 3d 20 54  ILE);.    rc = T
cb70: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73  CL_ERROR;.  }els
cb80: 65 7b 0a 20 20 20 20 72 63 20 3d 20 54 43 4c 5f  e{.    rc = TCL_
cb90: 4f 4b 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  OK;.  }.  sqlite
cba0: 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 0a 20  3_free(zErr);.. 
cbb0: 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f   return rc;.}../
cbc0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
cbd0: 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f  te3_enable_load_
cbe0: 65 78 74 65 6e 73 69 6f 6e 20 44 42 2d 48 41 4e  extension DB-HAN
cbf0: 44 4c 45 20 4f 4e 4f 46 46 0a 2a 2f 0a 73 74 61  DLE ONOFF.*/.sta
cc00: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65 6e 61  tic int test_ena
cc10: 62 6c 65 5f 6c 6f 61 64 28 0a 20 20 43 6c 69 65  ble_load(.  Clie
cc20: 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74  ntData clientDat
cc30: 61 2c 20 2f 2a 20 4e 6f 74 20 75 73 65 64 20 2a  a, /* Not used *
cc40: 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
cc50: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
cc60: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
cc70: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
cc80: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
cc90: 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20   int objc,      
cca0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
ccb0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
ccc0: 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  /.  Tcl_Obj *CON
ccd0: 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f  ST objv[]  /* Co
cce0: 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20  mmand arguments 
ccf0: 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 43 6d 64 49  */.){.  Tcl_CmdI
cd00: 6e 66 6f 20 63 6d 64 49 6e 66 6f 3b 0a 20 20 73  nfo cmdInfo;.  s
cd10: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 68  qlite3 *db;.  ch
cd20: 61 72 20 2a 7a 44 62 3b 0a 20 20 69 6e 74 20 6f  ar *zDb;.  int o
cd30: 6e 6f 66 66 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  noff;..  if( obj
cd40: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
cd50: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
cd60: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44  erp, 1, objv, "D
cd70: 42 2d 48 41 4e 44 4c 45 20 4f 4e 4f 46 46 22 29  B-HANDLE ONOFF")
cd80: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
cd90: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 44  _ERROR;.  }.  zD
cda0: 62 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  b = Tcl_GetStrin
cdb0: 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 0a 20 20 2f  g(objv[1]);..  /
cdc0: 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 43 20  * Extract the C 
cdd0: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
cde0: 66 72 6f 6d 20 74 68 65 20 54 63 6c 20 63 6f 6d  from the Tcl com
cdf0: 6d 61 6e 64 20 6e 61 6d 65 20 2a 2f 0a 20 20 69  mand name */.  i
ce00: 66 28 20 21 54 63 6c 5f 47 65 74 43 6f 6d 6d 61  f( !Tcl_GetComma
ce10: 6e 64 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 7a  ndInfo(interp, z
ce20: 44 62 2c 20 26 63 6d 64 49 6e 66 6f 29 20 29 7b  Db, &cmdInfo) ){
ce30: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
ce40: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 63  esult(interp, "c
ce50: 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f 75 6e 64  ommand not found
ce60: 3a 20 22 2c 20 7a 44 62 2c 20 28 63 68 61 72 2a  : ", zDb, (char*
ce70: 29 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  )0);.    return 
ce80: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
ce90: 20 64 62 20 3d 20 28 28 73 74 72 75 63 74 20 53   db = ((struct S
cea0: 71 6c 69 74 65 44 62 2a 29 63 6d 64 49 6e 66 6f  qliteDb*)cmdInfo
ceb0: 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74 61 29 2d  .objClientData)-
cec0: 3e 64 62 3b 0a 20 20 61 73 73 65 72 74 28 64 62  >db;.  assert(db
ced0: 29 3b 0a 0a 20 20 2f 2a 20 47 65 74 20 74 68 65  );..  /* Get the
cee0: 20 6f 6e 6f 66 66 20 70 61 72 61 6d 65 74 65 72   onoff parameter
cef0: 20 2a 2f 0a 20 20 69 66 28 20 54 63 6c 5f 47 65   */.  if( Tcl_Ge
cf00: 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28  tBooleanFromObj(
cf10: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
cf20: 20 26 6f 6e 6f 66 66 29 20 29 7b 0a 20 20 20 20   &onoff) ){.    
cf30: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
cf40: 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51  ;.  }..#ifdef SQ
cf50: 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
cf60: 58 54 45 4e 53 49 4f 4e 0a 20 20 54 63 6c 5f 41  XTENSION.  Tcl_A
cf70: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
cf80: 72 70 2c 20 22 74 68 69 73 20 62 75 69 6c 64 20  rp, "this build 
cf90: 6f 6d 69 74 73 20 73 71 6c 69 74 65 33 5f 6c 6f  omits sqlite3_lo
cfa0: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 22 29  ad_extension()")
cfb0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ;.  return TCL_E
cfc0: 52 52 4f 52 3b 0a 23 65 6c 73 65 0a 20 20 73 71  RROR;.#else.  sq
cfd0: 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61  lite3_enable_loa
cfe0: 64 5f 65 78 74 65 6e 73 69 6f 6e 28 64 62 2c 20  d_extension(db, 
cff0: 6f 6e 6f 66 66 29 3b 0a 20 20 72 65 74 75 72 6e  onoff);.  return
d000: 20 54 43 4c 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a   TCL_OK;.#endif.
d010: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
d020: 20 73 71 6c 69 74 65 5f 61 62 6f 72 74 0a 2a 2a   sqlite_abort.**
d030: 0a 2a 2a 20 53 68 75 74 64 6f 77 6e 20 74 68 65  .** Shutdown the
d040: 20 70 72 6f 63 65 73 73 20 69 6d 6d 65 64 69 61   process immedia
d050: 74 65 6c 79 2e 20 20 54 68 69 73 20 69 73 20 6e  tely.  This is n
d060: 6f 74 20 61 20 63 6c 65 61 6e 20 73 68 75 74 64  ot a clean shutd
d070: 6f 77 6e 2e 0a 2a 2a 20 54 68 69 73 20 63 6f 6d  own..** This com
d080: 6d 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20  mand is used to 
d090: 74 65 73 74 20 74 68 65 20 72 65 63 6f 76 65 72  test the recover
d0a0: 61 62 69 6c 69 74 79 20 6f 66 20 61 20 64 61 74  ability of a dat
d0b0: 61 62 61 73 65 20 69 6e 0a 2a 2a 20 74 68 65 20  abase in.** the 
d0c0: 65 76 65 6e 74 20 6f 66 20 61 20 70 72 6f 67 72  event of a progr
d0d0: 61 6d 20 63 72 61 73 68 2e 0a 2a 2f 0a 73 74 61  am crash..*/.sta
d0e0: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 5f 61  tic int sqlite_a
d0f0: 62 6f 72 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  bort(.  void *No
d100: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
d110: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
d120: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
d130: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
d140: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
d150: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
d160: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d170: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
d180: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
d190: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
d1a0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
d1b0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
d1c0: 20 61 73 73 65 72 74 28 20 69 6e 74 65 72 70 3d   assert( interp=
d1d0: 3d 30 20 29 3b 20 20 20 2f 2a 20 54 68 69 73 20  =0 );   /* This 
d1e0: 77 69 6c 6c 20 61 6c 77 61 79 73 20 66 61 69 6c  will always fail
d1f0: 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   */.  return TCL
d200: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  _OK;.}../*.** Th
d210: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 6f 75 74  e following rout
d220: 69 6e 65 20 69 73 20 61 20 75 73 65 72 2d 64 65  ine is a user-de
d230: 66 69 6e 65 64 20 53 51 4c 20 66 75 6e 63 74 69  fined SQL functi
d240: 6f 6e 20 77 68 6f 73 65 20 70 75 72 70 6f 73 65  on whose purpose
d250: 0a 2a 2a 20 69 73 20 74 6f 20 74 65 73 74 20 74  .** is to test t
d260: 68 65 20 73 71 6c 69 74 65 5f 73 65 74 5f 72 65  he sqlite_set_re
d270: 73 75 6c 74 28 29 20 41 50 49 2e 0a 2a 2f 0a 73  sult() API..*/.s
d280: 74 61 74 69 63 20 76 6f 69 64 20 74 65 73 74 46  tatic void testF
d290: 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  unc(sqlite3_cont
d2a0: 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20 69 6e  ext *context, in
d2b0: 74 20 61 72 67 63 2c 20 73 71 6c 69 74 65 33 5f  t argc, sqlite3_
d2c0: 76 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a 20  value **argv){. 
d2d0: 20 77 68 69 6c 65 28 20 61 72 67 63 3e 3d 32 20   while( argc>=2 
d2e0: 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ){.    const cha
d2f0: 72 20 2a 7a 41 72 67 30 20 3d 20 28 63 68 61 72  r *zArg0 = (char
d300: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
d310: 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20  text(argv[0]);. 
d320: 20 20 20 69 66 28 20 7a 41 72 67 30 20 29 7b 0a     if( zArg0 ){.
d330: 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c        if( 0==sql
d340: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67  ite3StrICmp(zArg
d350: 30 2c 20 22 69 6e 74 22 29 20 29 7b 0a 20 20 20  0, "int") ){.   
d360: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
d370: 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c  ult_int(context,
d380: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69   sqlite3_value_i
d390: 6e 74 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20 20  nt(argv[1]));.  
d3a0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71      }else if( sq
d3b0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72  lite3StrICmp(zAr
d3c0: 67 30 2c 22 69 6e 74 36 34 22 29 3d 3d 30 20 29  g0,"int64")==0 )
d3d0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
d3e0: 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 63  3_result_int64(c
d3f0: 6f 6e 74 65 78 74 2c 20 73 71 6c 69 74 65 33 5f  ontext, sqlite3_
d400: 76 61 6c 75 65 5f 69 6e 74 36 34 28 61 72 67 76  value_int64(argv
d410: 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c  [1]));.      }el
d420: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
d430: 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 73 74 72  rICmp(zArg0,"str
d440: 69 6e 67 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ing")==0 ){.    
d450: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
d460: 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  lt_text(context,
d470: 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f   (char*)sqlite3_
d480: 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b  value_text(argv[
d490: 31 5d 29 2c 20 2d 31 2c 0a 20 20 20 20 20 20 20  1]), -1,.       
d4a0: 20 20 20 20 20 53 51 4c 49 54 45 5f 54 52 41 4e       SQLITE_TRAN
d4b0: 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 7d 65  SIENT);.      }e
d4c0: 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
d4d0: 74 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 64 6f  trICmp(zArg0,"do
d4e0: 75 62 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  uble")==0 ){.   
d4f0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
d500: 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65  ult_double(conte
d510: 78 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  xt, sqlite3_valu
d520: 65 5f 64 6f 75 62 6c 65 28 61 72 67 76 5b 31 5d  e_double(argv[1]
d530: 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  ));.      }else 
d540: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
d550: 6d 70 28 7a 41 72 67 30 2c 22 6e 75 6c 6c 22 29  mp(zArg0,"null")
d560: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
d570: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75  qlite3_result_nu
d580: 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0a 20 20 20  ll(context);.   
d590: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
d5a0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67  ite3StrICmp(zArg
d5b0: 30 2c 22 76 61 6c 75 65 22 29 3d 3d 30 20 29 7b  0,"value")==0 ){
d5c0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
d5d0: 5f 72 65 73 75 6c 74 5f 76 61 6c 75 65 28 63 6f  _result_value(co
d5e0: 6e 74 65 78 74 2c 20 61 72 67 76 5b 73 71 6c 69  ntext, argv[sqli
d5f0: 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72  te3_value_int(ar
d600: 67 76 5b 31 5d 29 5d 29 3b 0a 20 20 20 20 20 20  gv[1])]);.      
d610: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67  }else{.        g
d620: 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b 0a 20  oto error_out;. 
d630: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
d640: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 65 72 72  {.      goto err
d650: 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20  or_out;.    }.  
d660: 20 20 61 72 67 63 20 2d 3d 20 32 3b 0a 20 20 20    argc -= 2;.   
d670: 20 61 72 67 76 20 2b 3d 20 32 3b 0a 20 20 7d 0a   argv += 2;.  }.
d680: 20 20 72 65 74 75 72 6e 3b 0a 0a 65 72 72 6f 72    return;..error
d690: 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65 33 5f  _out:.  sqlite3_
d6a0: 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e  result_error(con
d6b0: 74 65 78 74 2c 22 66 69 72 73 74 20 61 72 67 75  text,"first argu
d6c0: 6d 65 6e 74 20 73 68 6f 75 6c 64 20 62 65 20 6f  ment should be o
d6d0: 6e 65 20 6f 66 3a 20 22 0a 20 20 20 20 20 20 22  ne of: ".      "
d6e0: 69 6e 74 20 69 6e 74 36 34 20 73 74 72 69 6e 67  int int64 string
d6f0: 20 64 6f 75 62 6c 65 20 6e 75 6c 6c 20 76 61 6c   double null val
d700: 75 65 22 2c 20 2d 31 29 3b 0a 7d 0a 0a 2f 2a 0a  ue", -1);.}../*.
d710: 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
d720: 74 65 5f 72 65 67 69 73 74 65 72 5f 74 65 73 74  te_register_test
d730: 5f 66 75 6e 63 74 69 6f 6e 20 20 44 42 20 20 4e  _function  DB  N
d740: 41 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  AME.**.** Regist
d750: 65 72 20 74 68 65 20 74 65 73 74 20 53 51 4c 20  er the test SQL 
d760: 66 75 6e 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20  function on the 
d770: 64 61 74 61 62 61 73 65 20 44 42 20 75 6e 64 65  database DB unde
d780: 72 20 74 68 65 20 6e 61 6d 65 20 4e 41 4d 45 2e  r the name NAME.
d790: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
d7a0: 65 73 74 5f 72 65 67 69 73 74 65 72 5f 66 75 6e  est_register_fun
d7b0: 63 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  c(.  void *NotUs
d7c0: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
d7d0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
d7e0: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
d7f0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
d800: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
d810: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
d820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
d830: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
d840: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
d850: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
d860: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
d870: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
d880: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74  lite3 *db;.  int
d890: 20 72 63 3b 0a 20 20 69 66 28 20 61 72 67 63 21   rc;.  if( argc!
d8a0: 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
d8b0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
d8c0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
d8d0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
d8e0: 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
d8f0: 20 20 22 20 44 42 20 46 55 4e 43 54 49 4f 4e 2d    " DB FUNCTION-
d900: 4e 41 4d 45 22 2c 20 30 29 3b 0a 20 20 20 20 72  NAME", 0);.    r
d910: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
d920: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
d930: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
d940: 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
d950: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
d960: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
d970: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
d980: 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 2d 31  (db, argv[2], -1
d990: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30  , SQLITE_UTF8, 0
d9a0: 2c 20 0a 20 20 20 20 20 20 74 65 73 74 46 75 6e  , .      testFun
d9b0: 63 2c 20 30 2c 20 30 29 3b 0a 20 20 69 66 28 20  c, 0, 0);.  if( 
d9c0: 72 63 21 3d 30 20 29 7b 0a 20 20 20 20 54 63 6c  rc!=0 ){.    Tcl
d9d0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
d9e0: 74 65 72 70 2c 20 73 71 6c 69 74 65 33 45 72 72  terp, sqlite3Err
d9f0: 53 74 72 28 72 63 29 2c 20 30 29 3b 0a 20 20 20  Str(rc), 0);.   
da00: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
da10: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  R;.  }.  if( sql
da20: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
da30: 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20  interp, db, rc) 
da40: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
da50: 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  OR;.  return TCL
da60: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
da70: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 66 69  age:  sqlite3_fi
da80: 6e 61 6c 69 7a 65 20 20 53 54 4d 54 20 0a 2a 2a  nalize  STMT .**
da90: 0a 2a 2a 20 46 69 6e 61 6c 69 7a 65 20 61 20 73  .** Finalize a s
daa0: 74 61 74 65 6d 65 6e 74 20 68 61 6e 64 6c 65 2e  tatement handle.
dab0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
dac0: 65 73 74 5f 66 69 6e 61 6c 69 7a 65 28 0a 20 20  est_finalize(.  
dad0: 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
dae0: 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
daf0: 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
db00: 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
db10: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
db20: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
db30: 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b  pStmt;.  int rc;
db40: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
db50: 20 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21   0;..  if( objc!
db60: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
db70: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
db80: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
db90: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
dba0: 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  .        Tcl_Get
dbb0: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
dbc0: 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54  jv[0], 0), " <ST
dbd0: 4d 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  MT>", 0);.    re
dbe0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
dbf0: 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
dc00: 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
dc10: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
dc20: 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
dc30: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
dc40: 52 52 4f 52 3b 0a 0a 20 20 69 66 28 20 70 53 74  RROR;..  if( pSt
dc50: 6d 74 20 29 7b 0a 20 20 20 20 64 62 20 3d 20 53  mt ){.    db = S
dc60: 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 3b 0a  tmtToDb(pStmt);.
dc70: 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
dc80: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d  e3_finalize(pStm
dc90: 74 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73  t);.  Tcl_SetRes
dca0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
dcb0: 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28  r *)t1ErrorName(
dcc0: 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  rc), TCL_STATIC)
dcd0: 3b 0a 20 20 69 66 28 20 64 62 20 26 26 20 73 71  ;.  if( db && sq
dce0: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
dcf0: 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
dd00: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
dd10: 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  ROR;.  return TC
dd20: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
dd30: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 72  sage:  sqlite3_r
dd40: 65 73 65 74 20 20 53 54 4d 54 20 0a 2a 2a 0a 2a  eset  STMT .**.*
dd50: 2a 20 52 65 73 65 74 20 61 20 73 74 61 74 65 6d  * Reset a statem
dd60: 65 6e 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73  ent handle..*/.s
dd70: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 72  tatic int test_r
dd80: 65 73 65 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  eset(.  void * c
dd90: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
dda0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
ddb0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
ddc0: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
ddd0: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
dde0: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
ddf0: 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
de00: 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
de10: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
de20: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
de30: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
de40: 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
de50: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
de60: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
de70: 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20  " <STMT>", 0);. 
de80: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
de90: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
dea0: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
deb0: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
dec0: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
ded0: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
dee0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63  TCL_ERROR;..  rc
def0: 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74   = sqlite3_reset
df00: 28 70 53 74 6d 74 29 3b 0a 20 20 69 66 28 20 70  (pStmt);.  if( p
df10: 53 74 6d 74 20 26 26 20 73 71 6c 69 74 65 33 54  Stmt && sqlite3T
df20: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
df30: 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
df40: 74 29 2c 20 72 63 29 20 29 7b 0a 20 20 20 20 72  t), rc) ){.    r
df50: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
df60: 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74 52 65  .  }.  Tcl_SetRe
df70: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
df80: 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65  ar *)t1ErrorName
df90: 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43  (rc), TCL_STATIC
dfa0: 29 3b 0a 2f 2a 0a 20 20 69 66 28 20 72 63 20 29  );./*.  if( rc )
dfb0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
dfc0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 2a 2f 0a 20  _ERROR;.  }.*/. 
dfd0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
dfe0: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
dff0: 20 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64   sqlite3_expired
e000: 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74   STMT .**.** Ret
e010: 75 72 6e 20 54 52 55 45 20 69 66 20 61 20 72 65  urn TRUE if a re
e020: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 66 20 74  compilation of t
e030: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  he statement is 
e040: 72 65 63 6f 6d 6d 65 6e 64 65 64 2e 0a 2a 2f 0a  recommended..*/.
e050: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
e060: 65 78 70 69 72 65 64 28 0a 20 20 76 6f 69 64 20  expired(.  void 
e070: 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
e080: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
e090: 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
e0a0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
e0b0: 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
e0c0: 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
e0d0: 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ;.  if( objc!=2 
e0e0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
e0f0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
e100: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
e110: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
e120: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
e130: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
e140: 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54 4d 54 3e  0], 0), " <STMT>
e150: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
e160: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
e170: 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
e180: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
e190: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
e1a0: 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
e1b0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
e1c0: 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
e1d0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
e1e0: 5f 4e 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 73  _NewBooleanObj(s
e1f0: 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64 28 70  qlite3_expired(p
e200: 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72  Stmt)));.  retur
e210: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
e220: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
e230: 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64  e3_transfer_bind
e240: 69 6e 67 73 20 46 52 4f 4d 53 54 4d 54 20 54 4f  ings FROMSTMT TO
e250: 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  STMT.**.** Trans
e260: 66 65 72 20 61 6c 6c 20 62 69 6e 64 69 6e 67 73  fer all bindings
e270: 20 66 72 6f 6d 20 46 52 4f 4d 53 54 4d 54 20 6f   from FROMSTMT o
e280: 76 65 72 20 74 6f 20 54 4f 53 54 4d 54 0a 2a 2f  ver to TOSTMT.*/
e290: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
e2a0: 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 28 0a  _transfer_bind(.
e2b0: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
e2c0: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
e2d0: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
e2e0: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
e2f0: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
e300: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
e310: 20 2a 70 53 74 6d 74 31 2c 20 2a 70 53 74 6d 74   *pStmt1, *pStmt
e320: 32 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  2;.  if( objc!=3
e330: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
e340: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
e350: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
e360: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
e370: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
e380: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
e390: 5b 30 5d 2c 20 30 29 2c 20 22 20 46 52 4f 4d 2d  [0], 0), " FROM-
e3a0: 53 54 4d 54 20 54 4f 2d 53 54 4d 54 22 2c 20 30  STMT TO-STMT", 0
e3b0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
e3c0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
e3d0: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
e3e0: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
e3f0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
e400: 2c 20 26 70 53 74 6d 74 31 29 29 20 72 65 74 75  , &pStmt1)) retu
e410: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
e420: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
e430: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
e440: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d  etString(objv[2]
e450: 29 2c 20 26 70 53 74 6d 74 32 29 29 20 72 65 74  ), &pStmt2)) ret
e460: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
e470: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
e480: 74 28 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20  t(interp, .     
e490: 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71  Tcl_NewIntObj(sq
e4a0: 6c 69 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62  lite3_transfer_b
e4b0: 69 6e 64 69 6e 67 73 28 70 53 74 6d 74 31 2c 70  indings(pStmt1,p
e4c0: 53 74 6d 74 32 29 29 29 3b 0a 20 20 72 65 74 75  Stmt2)));.  retu
e4d0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
e4e0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
e4f0: 74 65 33 5f 63 68 61 6e 67 65 73 20 44 42 0a 2a  te3_changes DB.*
e500: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
e510: 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e 67 65  number of change
e520: 73 20 6d 61 64 65 20 74 6f 20 74 68 65 20 64 61  s made to the da
e530: 74 61 62 61 73 65 20 62 79 20 74 68 65 20 6c 61  tabase by the la
e540: 73 74 20 53 51 4c 0a 2a 2a 20 65 78 65 63 75 74  st SQL.** execut
e550: 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ion..*/.static i
e560: 6e 74 20 74 65 73 74 5f 63 68 61 6e 67 65 73 28  nt test_changes(
e570: 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
e580: 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
e590: 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
e5a0: 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
e5b0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
e5c0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
e5d0: 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ;.  if( objc!=2 
e5e0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
e5f0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
e600: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
e610: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
e620: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
e630: 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44  ng(objv[0]), " D
e640: 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  B", 0);.    retu
e650: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
e660: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
e670: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
e680: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
e690: 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
e6a0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
e6b0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
e6c0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
e6d0: 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63  IntObj(sqlite3_c
e6e0: 68 61 6e 67 65 73 28 64 62 29 29 29 3b 0a 20 20  hanges(db)));.  
e6f0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
e700: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ../*.** This is 
e710: 74 68 65 20 22 73 74 61 74 69 63 5f 62 69 6e 64  the "static_bind
e720: 5f 76 61 6c 75 65 22 20 74 68 61 74 20 76 61 72  _value" that var
e730: 69 61 62 6c 65 73 20 61 72 65 20 62 6f 75 6e 64  iables are bound
e740: 20 74 6f 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20   to when.** the 
e750: 46 4c 41 47 20 6f 70 74 69 6f 6e 20 6f 66 20 73  FLAG option of s
e760: 71 6c 69 74 65 33 5f 62 69 6e 64 20 69 73 20 22  qlite3_bind is "
e770: 73 74 61 74 69 63 22 0a 2a 2f 0a 73 74 61 74 69  static".*/.stati
e780: 63 20 63 68 61 72 20 2a 73 71 6c 69 74 65 5f 73  c char *sqlite_s
e790: 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65  tatic_bind_value
e7a0: 20 3d 20 30 3b 0a 73 74 61 74 69 63 20 69 6e 74   = 0;.static int
e7b0: 20 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62   sqlite_static_b
e7c0: 69 6e 64 5f 6e 62 79 74 65 20 3d 20 30 3b 0a 0a  ind_nbyte = 0;..
e7d0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
e7e0: 6c 69 74 65 33 5f 62 69 6e 64 20 20 56 4d 20 20  lite3_bind  VM  
e7f0: 49 44 58 20 20 56 41 4c 55 45 20 20 46 4c 41 47  IDX  VALUE  FLAG
e800: 53 0a 2a 2a 0a 2a 2a 20 53 65 74 73 20 74 68 65  S.**.** Sets the
e810: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 49 44   value of the ID
e820: 58 2d 74 68 20 6f 63 63 75 72 61 6e 63 65 20 6f  X-th occurance o
e830: 66 20 22 3f 22 20 69 6e 20 74 68 65 20 6f 72 69  f "?" in the ori
e840: 67 69 6e 61 6c 20 53 51 4c 0a 2a 2a 20 73 74 72  ginal SQL.** str
e850: 69 6e 67 2e 20 20 56 41 4c 55 45 20 69 73 20 74  ing.  VALUE is t
e860: 68 65 20 6e 65 77 20 76 61 6c 75 65 2e 20 20 49  he new value.  I
e870: 66 20 46 4c 41 47 53 3d 3d 22 6e 75 6c 6c 22 20  f FLAGS=="null" 
e880: 74 68 65 6e 20 56 41 4c 55 45 20 69 73 0a 2a 2a  then VALUE is.**
e890: 20 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65   ignored and the
e8a0: 20 76 61 6c 75 65 20 69 73 20 73 65 74 20 74 6f   value is set to
e8b0: 20 4e 55 4c 4c 2e 20 20 49 66 20 46 4c 41 47 53   NULL.  If FLAGS
e8c0: 3d 3d 22 73 74 61 74 69 63 22 20 74 68 65 6e 0a  =="static" then.
e8d0: 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  ** the value is 
e8e0: 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
e8f0: 20 6f 66 20 61 20 73 74 61 74 69 63 20 76 61 72   of a static var
e900: 69 61 62 6c 65 20 6e 61 6d 65 64 0a 2a 2a 20 22  iable named.** "
e910: 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69  sqlite_static_bi
e920: 6e 64 5f 76 61 6c 75 65 22 2e 20 20 49 66 20 46  nd_value".  If F
e930: 4c 41 47 53 3d 3d 22 6e 6f 72 6d 61 6c 22 20 74  LAGS=="normal" t
e940: 68 65 6e 20 61 20 63 6f 70 79 0a 2a 2a 20 6f 66  hen a copy.** of
e950: 20 74 68 65 20 56 41 4c 55 45 20 69 73 20 6d 61   the VALUE is ma
e960: 64 65 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d 22  de.  If FLAGS=="
e970: 62 6c 6f 62 31 30 22 20 74 68 65 6e 20 61 20 56  blob10" then a V
e980: 41 4c 55 45 20 69 73 20 69 67 6e 6f 72 65 64 0a  ALUE is ignored.
e990: 2a 2a 20 61 6e 20 61 20 31 30 2d 62 79 74 65 20  ** an a 10-byte 
e9a0: 62 6c 6f 62 20 22 61 62 63 5c 30 30 30 78 79 7a  blob "abc\000xyz
e9b0: 5c 30 30 30 70 71 22 20 69 73 20 69 6e 73 65 72  \000pq" is inser
e9c0: 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ted..*/.static i
e9d0: 6e 74 20 74 65 73 74 5f 62 69 6e 64 28 0a 20 20  nt test_bind(.  
e9e0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
e9f0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
ea00: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
ea10: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
ea20: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
ea30: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
ea40: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
ea50: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
ea60: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
ea70: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
ea80: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
ea90: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
eaa0: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
eab0: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
eac0: 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 69 64  int rc;.  int id
ead0: 78 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 35  x;.  if( argc!=5
eae0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
eaf0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
eb00: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
eb10: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
eb20: 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20  rgv[0], .       
eb30: 22 20 56 4d 20 49 44 58 20 56 41 4c 55 45 20 28  " VM IDX VALUE (
eb40: 6e 75 6c 6c 7c 73 74 61 74 69 63 7c 6e 6f 72 6d  null|static|norm
eb50: 61 6c 29 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  al)\"", 0);.    
eb60: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
eb70: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53  ;.  }.  if( getS
eb80: 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
eb90: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 70 53 74  p, argv[1], &pSt
eba0: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
ebb0: 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
ebc0: 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c  l_GetInt(interp,
ebd0: 20 61 72 67 76 5b 32 5d 2c 20 26 69 64 78 29 20   argv[2], &idx) 
ebe0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
ebf0: 4f 52 3b 0a 20 20 69 66 28 20 73 74 72 63 6d 70  OR;.  if( strcmp
ec00: 28 61 72 67 76 5b 34 5d 2c 22 6e 75 6c 6c 22 29  (argv[4],"null")
ec10: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
ec20: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c  sqlite3_bind_nul
ec30: 6c 28 70 53 74 6d 74 2c 20 69 64 78 29 3b 0a 20  l(pStmt, idx);. 
ec40: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
ec50: 70 28 61 72 67 76 5b 34 5d 2c 22 73 74 61 74 69  p(argv[4],"stati
ec60: 63 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  c")==0 ){.    rc
ec70: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
ec80: 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c  text(pStmt, idx,
ec90: 20 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62   sqlite_static_b
eca0: 69 6e 64 5f 76 61 6c 75 65 2c 20 2d 31 2c 20 30  ind_value, -1, 0
ecb0: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73  );.  }else if( s
ecc0: 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 73  trcmp(argv[4],"s
ecd0: 74 61 74 69 63 2d 6e 62 79 74 65 73 22 29 3d 3d  tatic-nbytes")==
ece0: 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
ecf0: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 28  lite3_bind_text(
ed00: 70 53 74 6d 74 2c 20 69 64 78 2c 20 73 71 6c 69  pStmt, idx, sqli
ed10: 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76  te_static_bind_v
ed20: 61 6c 75 65 2c 0a 20 20 20 20 20 20 20 20 20 20  alue,.          
ed30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed40: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
ed50: 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f  ite_static_bind_
ed60: 6e 62 79 74 65 2c 20 30 29 3b 0a 20 20 7d 65 6c  nbyte, 0);.  }el
ed70: 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72  se if( strcmp(ar
ed80: 67 76 5b 34 5d 2c 22 6e 6f 72 6d 61 6c 22 29 3d  gv[4],"normal")=
ed90: 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  =0 ){.    rc = s
eda0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
edb0: 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 61 72 67  (pStmt, idx, arg
edc0: 76 5b 33 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45  v[3], -1, SQLITE
edd0: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 7d  _TRANSIENT);.  }
ede0: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
edf0: 61 72 67 76 5b 34 5d 2c 22 62 6c 6f 62 31 30 22  argv[4],"blob10"
ee00: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  )==0 ){.    rc =
ee10: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
ee20: 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 22  xt(pStmt, idx, "
ee30: 61 62 63 5c 30 30 30 78 79 7a 5c 30 30 30 70 71  abc\000xyz\000pq
ee40: 22 2c 20 31 30 2c 20 53 51 4c 49 54 45 5f 53 54  ", 10, SQLITE_ST
ee50: 41 54 49 43 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ATIC);.  }else{.
ee60: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
ee70: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 34 74  sult(interp, "4t
ee80: 68 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c  h argument shoul
ee90: 64 20 62 65 20 22 0a 20 20 20 20 20 20 20 20 22  d be ".        "
eea0: 5c 22 6e 75 6c 6c 5c 22 20 6f 72 20 5c 22 73 74  \"null\" or \"st
eeb0: 61 74 69 63 5c 22 20 6f 72 20 5c 22 6e 6f 72 6d  atic\" or \"norm
eec0: 61 6c 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  al\"", 0);.    r
eed0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
eee0: 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74  .  }.  if( sqlit
eef0: 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
ef00: 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70  terp, StmtToDb(p
ef10: 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74  Stmt), rc) ) ret
ef20: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
ef30: 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 63   if( rc ){.    c
ef40: 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20 20  har zBuf[50];.  
ef50: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
ef60: 22 28 25 64 29 20 22 2c 20 72 63 29 3b 0a 20 20  "(%d) ", rc);.  
ef70: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
ef80: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
ef90: 20 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 72   sqlite3ErrStr(r
efa0: 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  c), 0);.    retu
efb0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
efc0: 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  }.  return TCL_O
efd0: 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  K;.}..#ifndef SQ
efe0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
eff0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64 64  /*.** Usage: add
f000: 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 3c 64  _test_collate <d
f010: 62 20 70 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75  b ptr> <utf8> <u
f020: 74 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65  tf16le> <utf16be
f030: 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  >.**.** This fun
f040: 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
f050: 20 74 65 73 74 20 74 68 61 74 20 53 51 4c 69 74   test that SQLit
f060: 65 20 73 65 6c 65 63 74 73 20 74 68 65 20 63 6f  e selects the co
f070: 72 72 65 63 74 20 63 6f 6c 6c 61 74 69 6f 6e 0a  rrect collation.
f080: 2a 2a 20 73 65 71 75 65 6e 63 65 20 63 61 6c 6c  ** sequence call
f090: 62 61 63 6b 20 77 68 65 6e 20 6d 75 6c 74 69 70  back when multip
f0a0: 6c 65 20 76 65 72 73 69 6f 6e 73 20 28 66 6f 72  le versions (for
f0b0: 20 64 69 66 66 65 72 65 6e 74 20 74 65 78 74 20   different text 
f0c0: 65 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a 20 61 72  encodings).** ar
f0d0: 65 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 0a  e available..**.
f0e0: 2a 2a 20 43 61 6c 6c 69 6e 67 20 74 68 69 73 20  ** Calling this 
f0f0: 72 6f 75 74 69 6e 65 20 72 65 67 69 73 74 65 72  routine register
f100: 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  s the collation 
f110: 73 65 71 75 65 6e 63 65 20 22 74 65 73 74 5f 63  sequence "test_c
f120: 6f 6c 6c 61 74 65 22 0a 2a 2a 20 77 69 74 68 20  ollate".** with 
f130: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
f140: 3c 64 62 3e 2e 20 54 68 65 20 73 65 63 6f 6e 64  <db>. The second
f150: 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62   argument must b
f160: 65 20 61 20 6c 69 73 74 20 6f 66 20 74 68 72 65  e a list of thre
f170: 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  e.** boolean val
f180: 75 65 73 2e 20 49 66 20 74 68 65 20 66 69 72 73  ues. If the firs
f190: 74 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  t is true, then 
f1a0: 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 65 73  a version of tes
f1b0: 74 5f 63 6f 6c 6c 61 74 65 20 69 73 0a 2a 2a 20  t_collate is.** 
f1c0: 72 65 67 69 73 74 65 72 65 64 20 66 6f 72 20 55  registered for U
f1d0: 54 46 2d 38 2c 20 69 66 20 74 68 65 20 73 65 63  TF-8, if the sec
f1e0: 6f 6e 64 20 69 73 20 74 72 75 65 2c 20 61 20 76  ond is true, a v
f1f0: 65 72 73 69 6f 6e 20 69 73 20 72 65 67 69 73 74  ersion is regist
f200: 65 72 65 64 20 66 6f 72 0a 2a 2a 20 55 54 46 2d  ered for.** UTF-
f210: 31 36 6c 65 2c 20 69 66 20 74 68 65 20 74 68 69  16le, if the thi
f220: 72 64 20 69 73 20 74 72 75 65 2c 20 61 20 55 54  rd is true, a UT
f230: 46 2d 31 36 62 65 20 76 65 72 73 69 6f 6e 20 69  F-16be version i
f240: 73 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 20  s available..** 
f250: 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e  Previous version
f260: 73 20 6f 66 20 74 65 73 74 5f 63 6f 6c 6c 61 74  s of test_collat
f270: 65 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a  e are deleted..*
f280: 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 6c 61 74 69  *.** The collati
f290: 6f 6e 20 73 65 71 75 65 6e 63 65 20 74 65 73 74  on sequence test
f2a0: 5f 63 6f 6c 6c 61 74 65 20 69 73 20 69 6d 70 6c  _collate is impl
f2b0: 65 6d 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69  emented by calli
f2c0: 6e 67 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  ng the.** follow
f2d0: 69 6e 67 20 54 43 4c 20 73 63 72 69 70 74 3a 0a  ing TCL script:.
f2e0: 2a 2a 0a 2a 2a 20 20 20 22 74 65 73 74 5f 63 6f  **.**   "test_co
f2f0: 6c 6c 61 74 65 20 3c 65 6e 63 3e 20 3c 6c 68 73  llate <enc> <lhs
f300: 3e 20 3c 72 68 73 3e 22 0a 2a 2a 0a 2a 2a 20 54  > <rhs>".**.** T
f310: 68 65 20 3c 6c 68 73 3e 20 61 6e 64 20 3c 72 68  he <lhs> and <rh
f320: 73 3e 20 61 72 65 20 74 68 65 20 74 77 6f 20 76  s> are the two v
f330: 61 6c 75 65 73 20 62 65 69 6e 67 20 63 6f 6d 70  alues being comp
f340: 61 72 65 64 2c 20 65 6e 63 6f 64 65 64 20 69 6e  ared, encoded in
f350: 20 55 54 46 2d 38 2e 0a 2a 2a 20 54 68 65 20 3c   UTF-8..** The <
f360: 65 6e 63 3e 20 70 61 72 61 6d 65 74 65 72 20 69  enc> parameter i
f370: 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  s the encoding o
f380: 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  f the collation 
f390: 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  function that.**
f3a0: 20 53 51 4c 69 74 65 20 73 65 6c 65 63 74 65 64   SQLite selected
f3b0: 20 74 6f 20 63 61 6c 6c 2e 20 54 68 65 20 54 43   to call. The TC
f3c0: 4c 20 74 65 73 74 20 73 63 72 69 70 74 20 69 6d  L test script im
f3d0: 70 6c 65 6d 65 6e 74 73 20 74 68 65 0a 2a 2a 20  plements the.** 
f3e0: 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 20 70  "test_collate" p
f3f0: 72 6f 63 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  roc..**.** Note 
f400: 74 68 61 74 20 74 68 69 73 20 77 69 6c 6c 20 6f  that this will o
f410: 6e 6c 79 20 77 6f 72 6b 20 77 69 74 68 20 6f 6e  nly work with on
f420: 65 20 69 6e 74 65 70 72 65 74 65 72 20 61 74 20  e intepreter at 
f430: 61 20 74 69 6d 65 2c 20 61 73 20 74 68 65 0a 2a  a time, as the.*
f440: 2a 20 69 6e 74 65 72 70 20 70 6f 69 6e 74 65 72  * interp pointer
f450: 20 74 6f 20 75 73 65 20 77 68 65 6e 20 65 76 61   to use when eva
f460: 6c 75 61 74 69 6e 67 20 74 68 65 20 54 43 4c 20  luating the TCL 
f470: 73 63 72 69 70 74 20 69 73 20 73 74 6f 72 65 64  script is stored
f480: 20 69 6e 0a 2a 2a 20 70 54 65 73 74 43 6f 6c 6c   in.** pTestColl
f490: 61 74 65 49 6e 74 65 72 70 2e 0a 2a 2f 0a 73 74  ateInterp..*/.st
f4a0: 61 74 69 63 20 54 63 6c 5f 49 6e 74 65 72 70 2a  atic Tcl_Interp*
f4b0: 20 70 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74   pTestCollateInt
f4c0: 65 72 70 3b 0a 73 74 61 74 69 63 20 69 6e 74 20  erp;.static int 
f4d0: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e  test_collate_fun
f4e0: 63 28 0a 20 20 76 6f 69 64 20 2a 70 43 74 78 2c  c(.  void *pCtx,
f4f0: 20 0a 20 20 69 6e 74 20 6e 41 2c 20 63 6f 6e 73   .  int nA, cons
f500: 74 20 76 6f 69 64 20 2a 7a 41 2c 0a 20 20 69 6e  t void *zA,.  in
f510: 74 20 6e 42 2c 20 63 6f 6e 73 74 20 76 6f 69 64  t nB, const void
f520: 20 2a 7a 42 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e   *zB.){.  Tcl_In
f530: 74 65 72 70 20 2a 69 20 3d 20 70 54 65 73 74 43  terp *i = pTestC
f540: 6f 6c 6c 61 74 65 49 6e 74 65 72 70 3b 0a 20 20  ollateInterp;.  
f550: 69 6e 74 20 65 6e 63 69 6e 20 3d 20 28 69 6e 74  int encin = (int
f560: 29 70 43 74 78 3b 0a 20 20 69 6e 74 20 72 65 73  )pCtx;.  int res
f570: 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 73 71  ;.  int n;..  sq
f580: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
f590: 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58  l;.  Tcl_Obj *pX
f5a0: 3b 0a 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e 65  ;..  pX = Tcl_Ne
f5b0: 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73 74  wStringObj("test
f5c0: 5f 63 6f 6c 6c 61 74 65 22 2c 20 2d 31 29 3b 0a  _collate", -1);.
f5d0: 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75    Tcl_IncrRefCou
f5e0: 6e 74 28 70 58 29 3b 0a 0a 20 20 73 77 69 74 63  nt(pX);..  switc
f5f0: 68 28 20 65 6e 63 69 6e 20 29 7b 0a 20 20 20 20  h( encin ){.    
f600: 63 61 73 65 20 53 51 4c 49 54 45 5f 55 54 46 38  case SQLITE_UTF8
f610: 3a 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69 73 74  :.      Tcl_List
f620: 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
f630: 28 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72  (i,pX,Tcl_NewStr
f640: 69 6e 67 4f 62 6a 28 22 55 54 46 2d 38 22 2c 2d  ingObj("UTF-8",-
f650: 31 29 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  1));.      break
f660: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
f670: 45 5f 55 54 46 31 36 4c 45 3a 0a 20 20 20 20 20  E_UTF16LE:.     
f680: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
f690: 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54  ndElement(i,pX,T
f6a0: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
f6b0: 22 55 54 46 2d 31 36 4c 45 22 2c 2d 31 29 29 3b  "UTF-16LE",-1));
f6c0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
f6d0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 55 54    case SQLITE_UT
f6e0: 46 31 36 42 45 3a 0a 20 20 20 20 20 20 54 63 6c  F16BE:.      Tcl
f6f0: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
f700: 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e  ement(i,pX,Tcl_N
f710: 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46  ewStringObj("UTF
f720: 2d 31 36 42 45 22 2c 2d 31 29 29 3b 0a 20 20 20  -16BE",-1));.   
f730: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
f740: 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 61 73 73  fault:.      ass
f750: 65 72 74 28 30 29 3b 0a 20 20 7d 0a 0a 20 20 70  ert(0);.  }..  p
f760: 56 61 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c  Val = sqlite3Val
f770: 75 65 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74  ueNew();.  sqlit
f780: 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56  e3ValueSetStr(pV
f790: 61 6c 2c 20 6e 41 2c 20 7a 41 2c 20 65 6e 63 69  al, nA, zA, enci
f7a0: 6e 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  n, SQLITE_STATIC
f7b0: 29 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33  );.  n = sqlite3
f7c0: 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70 56 61  _value_bytes(pVa
f7d0: 6c 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  l);.  Tcl_ListOb
f7e0: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
f7f0: 2c 70 58 2c 0a 20 20 20 20 20 20 54 63 6c 5f 4e  ,pX,.      Tcl_N
f800: 65 77 53 74 72 69 6e 67 4f 62 6a 28 28 63 68 61  ewStringObj((cha
f810: 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
f820: 5f 74 65 78 74 28 70 56 61 6c 29 2c 6e 29 29 3b  _text(pVal),n));
f830: 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  .  sqlite3ValueS
f840: 65 74 53 74 72 28 70 56 61 6c 2c 20 6e 42 2c 20  etStr(pVal, nB, 
f850: 7a 42 2c 20 65 6e 63 69 6e 2c 20 53 51 4c 49 54  zB, encin, SQLIT
f860: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 6e 20 3d  E_STATIC);.  n =
f870: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62   sqlite3_value_b
f880: 79 74 65 73 28 70 56 61 6c 29 3b 0a 20 20 54 63  ytes(pVal);.  Tc
f890: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
f8a0: 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 0a 20 20 20  lement(i,pX,.   
f8b0: 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67     Tcl_NewString
f8c0: 4f 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74  Obj((char*)sqlit
f8d0: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 56  e3_value_text(pV
f8e0: 61 6c 29 2c 6e 29 29 3b 0a 20 20 73 71 6c 69 74  al),n));.  sqlit
f8f0: 65 33 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c  e3ValueFree(pVal
f900: 29 3b 0a 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62  );..  Tcl_EvalOb
f910: 6a 45 78 28 69 2c 20 70 58 2c 20 30 29 3b 0a 20  jEx(i, pX, 0);. 
f920: 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e   Tcl_DecrRefCoun
f930: 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f 47 65 74  t(pX);.  Tcl_Get
f940: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 2c 20 54 63  IntFromObj(i, Tc
f950: 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_GetObjResult(i
f960: 29 2c 20 26 72 65 73 29 3b 0a 20 20 72 65 74 75  ), &res);.  retu
f970: 72 6e 20 72 65 73 3b 0a 7d 0a 73 74 61 74 69 63  rn res;.}.static
f980: 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74   int test_collat
f990: 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
f9a0: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
f9b0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
f9c0: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
f9d0: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
f9e0: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ].){.  sqlite3 *
f9f0: 64 62 3b 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 20  db;.  int val;. 
fa00: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
fa10: 70 56 61 6c 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  pVal;.  int rc;.
fa20: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29  .  if( objc!=5 )
fa30: 20 67 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a   goto bad_args;.
fa40: 20 20 70 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e    pTestCollateIn
fa50: 74 65 72 70 20 3d 20 69 6e 74 65 72 70 3b 0a 20  terp = interp;. 
fa60: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
fa70: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
fa80: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
fa90: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
faa0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66  TCL_ERROR;..  if
fab0: 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65  ( TCL_OK!=Tcl_Ge
fac0: 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28  tBooleanFromObj(
fad0: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
fae0: 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20   &val) ) return 
faf0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
fb00: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
fb10: 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22  _collation(db, "
fb20: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 53  test_collate", S
fb30: 51 4c 49 54 45 5f 55 54 46 38 2c 20 0a 20 20 20  QLITE_UTF8, .   
fb40: 20 20 20 20 20 20 20 28 76 6f 69 64 20 2a 29 53         (void *)S
fb50: 51 4c 49 54 45 5f 55 54 46 38 2c 20 76 61 6c 3f  QLITE_UTF8, val?
fb60: 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e  test_collate_fun
fb70: 63 3a 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  c:0);.  if( rc==
fb80: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
fb90: 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c   if( TCL_OK!=Tcl
fba0: 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f  _GetBooleanFromO
fbb0: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
fbc0: 33 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75  3], &val) ) retu
fbd0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
fbe0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
fbf0: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
fc00: 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74  db, "test_collat
fc10: 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  e", SQLITE_UTF16
fc20: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
fc30: 20 28 76 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f   (void *)SQLITE_
fc40: 55 54 46 31 36 4c 45 2c 20 76 61 6c 3f 74 65 73  UTF16LE, val?tes
fc50: 74 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30  t_collate_func:0
fc60: 29 3b 0a 20 20 20 20 69 66 28 20 54 43 4c 5f 4f  );.    if( TCL_O
fc70: 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61  K!=Tcl_GetBoolea
fc80: 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  nFromObj(interp,
fc90: 20 6f 62 6a 76 5b 34 5d 2c 20 26 76 61 6c 29 20   objv[4], &val) 
fca0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
fcb0: 4f 52 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  OR;..#ifdef SQLI
fcc0: 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 20 20  TE_MEMDEBUG.    
fcd0: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c  if( sqlite3_iMal
fce0: 6c 6f 63 46 61 69 6c 3e 30 20 29 7b 0a 20 20 20  locFail>0 ){.   
fcf0: 20 20 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c     sqlite3_iMall
fd00: 6f 63 46 61 69 6c 2b 2b 3b 0a 20 20 20 20 7d 0a  ocFail++;.    }.
fd10: 23 65 6e 64 69 66 0a 20 20 20 20 70 56 61 6c 20  #endif.    pVal 
fd20: 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65  = sqlite3ValueNe
fd30: 77 28 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  w();.    sqlite3
fd40: 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c  ValueSetStr(pVal
fd50: 2c 20 2d 31 2c 20 22 74 65 73 74 5f 63 6f 6c 6c  , -1, "test_coll
fd60: 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  ate", SQLITE_UTF
fd70: 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  8, SQLITE_STATIC
fd80: 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
fd90: 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
fda0: 74 69 6f 6e 31 36 28 64 62 2c 20 0a 20 20 20 20  tion16(db, .    
fdb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c        sqlite3Val
fdc0: 75 65 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c  ueText(pVal, SQL
fdd0: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 29  ITE_UTF16NATIVE)
fde0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  , SQLITE_UTF16BE
fdf0: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 28 76 6f  , .          (vo
fe00: 69 64 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 31  id *)SQLITE_UTF1
fe10: 36 42 45 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f  6BE, val?test_co
fe20: 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20  llate_func:0);. 
fe30: 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46     sqlite3ValueF
fe40: 72 65 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20  ree(pVal);.  }. 
fe50: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
fe60: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
fe70: 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
fe80: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 0a 20   TCL_ERROR;.  . 
fe90: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
fea0: 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  OK ){.    Tcl_Ap
feb0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
fec0: 70 2c 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  p, sqlite3TestEr
fed0: 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b  rorName(rc), 0);
fee0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
fef0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74  ERROR;.  }.  ret
ff00: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a 62 61 64  urn TCL_OK;..bad
ff10: 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 41 70 70  _args:.  Tcl_App
ff20: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
ff30: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
ff40: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
ff50: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
ff60: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
ff70: 30 5d 2c 20 30 29 2c 20 22 20 3c 44 42 3e 20 3c  0], 0), " <DB> <
ff80: 75 74 66 38 3e 20 3c 75 74 66 31 36 6c 65 3e 20  utf8> <utf16le> 
ff90: 3c 75 74 66 31 36 62 65 3e 22 2c 20 30 29 3b 0a  <utf16be>", 0);.
ffa0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
ffb0: 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 57 68 65  OR;.}../*.** Whe
ffc0: 6e 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  n the collation 
ffd0: 6e 65 65 64 65 64 20 63 61 6c 6c 62 61 63 6b 20  needed callback 
ffe0: 69 73 20 69 6e 76 6f 6b 65 64 2c 20 72 65 63 6f  is invoked, reco
fff0: 72 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 0a  rd the name of .
10000 2a 2a 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ** the requested
10010 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
10020 69 6f 6e 20 68 65 72 65 2e 20 20 54 68 65 20 72  ion here.  The r
10030 65 63 6f 72 64 65 64 20 6e 61 6d 65 20 69 73 20  ecorded name is 
10040 6c 69 6e 6b 65 64 0a 2a 2a 20 74 6f 20 61 20 54  linked.** to a T
10050 43 4c 20 76 61 72 69 61 62 6c 65 20 61 6e 64 20  CL variable and 
10060 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
10070 65 20 74 68 61 74 20 74 68 65 20 72 65 71 75 65  e that the reque
10080 73 74 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 0a 2a  sted collation.*
10090 2a 20 6e 61 6d 65 20 69 73 20 63 6f 72 72 65 63  * name is correc
100a0 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63 68 61  t..*/.static cha
100b0 72 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69  r zNeededCollati
100c0 6f 6e 5b 32 30 30 5d 3b 0a 73 74 61 74 69 63 20  on[200];.static 
100d0 63 68 61 72 20 2a 70 7a 4e 65 65 64 65 64 43 6f  char *pzNeededCo
100e0 6c 6c 61 74 69 6f 6e 20 3d 20 7a 4e 65 65 64 65  llation = zNeede
100f0 64 43 6f 6c 6c 61 74 69 6f 6e 3b 0a 0a 0a 2f 2a  dCollation;.../*
10100 0a 2a 2a 20 43 61 6c 6c 65 64 20 77 68 65 6e 20  .** Called when 
10110 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a collating sequ
10120 65 6e 63 65 20 69 73 20 6e 65 65 64 65 64 2e 20  ence is needed. 
10130 20 52 65 67 69 73 74 65 72 65 64 20 75 73 69 6e   Registered usin
10140 67 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  g.** sqlite3_col
10150 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31 36 28  lation_needed16(
10160 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  )..*/.static voi
10170 64 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e  d test_collate_n
10180 65 65 64 65 64 5f 63 62 28 0a 20 20 76 6f 69 64  eeded_cb(.  void
10190 20 2a 70 43 74 78 2c 20 0a 20 20 73 71 6c 69 74   *pCtx, .  sqlit
101a0 65 33 20 2a 64 62 2c 0a 20 20 69 6e 74 20 65 54  e3 *db,.  int eT
101b0 65 78 74 52 65 70 2c 0a 20 20 63 6f 6e 73 74 20  extRep,.  const 
101c0 76 6f 69 64 20 2a 70 4e 61 6d 65 0a 29 7b 0a 20  void *pName.){. 
101d0 20 69 6e 74 20 65 6e 63 20 3d 20 45 4e 43 28 64   int enc = ENC(d
101e0 62 29 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63  b);.  int i;.  c
101f0 68 61 72 20 2a 7a 3b 0a 20 20 66 6f 72 28 7a 20  har *z;.  for(z 
10200 3d 20 28 63 68 61 72 2a 29 70 4e 61 6d 65 2c 20  = (char*)pName, 
10210 69 3d 30 3b 20 2a 7a 20 7c 7c 20 7a 5b 31 5d 3b  i=0; *z || z[1];
10220 20 7a 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 2a   z++){.    if( *
10230 7a 20 29 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61  z ) zNeededColla
10240 74 69 6f 6e 5b 69 2b 2b 5d 20 3d 20 2a 7a 3b 0a  tion[i++] = *z;.
10250 20 20 7d 0a 20 20 7a 4e 65 65 64 65 64 43 6f 6c    }.  zNeededCol
10260 6c 61 74 69 6f 6e 5b 69 5d 20 3d 20 30 3b 0a 20  lation[i] = 0;. 
10270 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
10280 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 20 20 20  collation(.     
10290 20 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61   db, "test_colla
102a0 74 65 22 2c 20 45 4e 43 28 64 62 29 2c 20 28 76  te", ENC(db), (v
102b0 6f 69 64 20 2a 29 65 6e 63 2c 20 74 65 73 74 5f  oid *)enc, test_
102c0 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 29 3b 0a 7d  collate_func);.}
102d0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 61  ../*.** Usage: a
102e0 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f  dd_test_collate_
102f0 6e 65 65 64 65 64 20 44 42 0a 2a 2f 0a 73 74 61  needed DB.*/.sta
10300 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c  tic int test_col
10310 6c 61 74 65 5f 6e 65 65 64 65 64 28 0a 20 20 76  late_needed(.  v
10320 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
10330 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
10340 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
10350 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
10360 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
10370 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
10380 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
10390 62 6a 63 21 3d 32 20 29 20 67 6f 74 6f 20 62 61  bjc!=2 ) goto ba
103a0 64 5f 61 72 67 73 3b 0a 20 20 69 66 28 20 67 65  d_args;.  if( ge
103b0 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
103c0 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
103d0 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20  (objv[1]), &db) 
103e0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
103f0 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  OR;.  rc = sqlit
10400 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65 65  e3_collation_nee
10410 64 65 64 31 36 28 64 62 2c 20 30 2c 20 74 65 73  ded16(db, 0, tes
10420 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64  t_collate_needed
10430 5f 63 62 29 3b 0a 20 20 7a 4e 65 65 64 65 64 43  _cb);.  zNeededC
10440 6f 6c 6c 61 74 69 6f 6e 5b 30 5d 20 3d 20 30 3b  ollation[0] = 0;
10450 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
10460 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
10470 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
10480 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
10490 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 0a  return TCL_OK;..
104a0 62 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f  bad_args:.  Tcl_
104b0 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
104c0 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44  erp, 1, objv, "D
104d0 42 22 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  B");.  return TC
104e0 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a  L_ERROR;.}../*.*
104f0 2a 20 74 63 6c 63 6d 64 3a 20 20 20 61 64 64 5f  * tclcmd:   add_
10500 61 6c 69 67 6e 6d 65 6e 74 5f 74 65 73 74 5f 63  alignment_test_c
10510 6f 6c 6c 61 74 69 6f 6e 73 20 20 44 42 0a 2a 2a  ollations  DB.**
10520 0a 2a 2a 20 41 64 64 20 74 77 6f 20 6e 65 77 20  .** Add two new 
10530 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
10540 63 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62  ces to the datab
10550 61 73 65 20 44 42 0a 2a 2a 0a 2a 2a 20 20 20 20  ase DB.**.**    
10560 20 75 74 66 31 36 5f 61 6c 69 67 6e 65 64 0a 2a   utf16_aligned.*
10570 2a 20 20 20 20 20 75 74 66 31 36 5f 75 6e 61 6c  *     utf16_unal
10580 69 67 6e 65 64 0a 2a 2a 0a 2a 2a 20 42 6f 74 68  igned.**.** Both
10590 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
105a0 6e 63 65 73 20 75 73 65 20 74 68 65 20 73 61 6d  nces use the sam
105b0 65 20 73 6f 72 74 20 6f 72 64 65 72 20 61 73 20  e sort order as 
105c0 42 49 4e 41 52 59 2e 0a 2a 2a 20 54 68 65 20 6f  BINARY..** The o
105d0 6e 6c 79 20 64 69 66 66 65 72 65 6e 63 65 20 69  nly difference i
105e0 73 20 74 68 61 74 20 74 68 65 20 75 74 66 31 36  s that the utf16
105f0 5f 61 6c 69 67 6e 65 64 20 63 6f 6c 6c 61 74 69  _aligned collati
10600 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 69  ng.** sequence i
10610 73 20 64 65 63 6c 61 72 65 64 20 77 69 74 68 20  s declared with 
10620 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  the SQLITE_UTF16
10630 5f 41 4c 49 47 4e 45 44 20 66 6c 61 67 2e 0a 2a  _ALIGNED flag..*
10640 2a 20 42 6f 74 68 20 63 6f 6c 6c 61 74 69 6e 67  * Both collating
10650 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 63 72 65   functions incre
10660 6d 65 6e 74 20 74 68 65 20 75 6e 61 6c 69 67 6e  ment the unalign
10670 65 64 20 75 74 66 31 36 20 63 6f 75 6e 74 65 72  ed utf16 counter
10680 0a 2a 2a 20 77 68 65 6e 65 76 65 72 20 74 68 65  .** whenever the
10690 79 20 73 65 65 20 61 20 73 74 72 69 6e 67 20 74  y see a string t
106a0 68 61 74 20 62 65 67 69 6e 73 20 6f 6e 20 61 6e  hat begins on an
106b0 20 6f 64 64 20 62 79 74 65 20 62 6f 75 6e 64 61   odd byte bounda
106c0 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ry..*/.static in
106d0 74 20 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69  t unaligned_stri
106e0 6e 67 5f 63 6f 75 6e 74 65 72 20 3d 20 30 3b 0a  ng_counter = 0;.
106f0 73 74 61 74 69 63 20 69 6e 74 20 61 6c 69 67 6e  static int align
10700 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63 28 0a 20 20  mentCollFunc(.  
10710 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
10720 20 69 6e 74 20 6e 4b 65 79 31 2c 20 63 6f 6e 73   int nKey1, cons
10730 74 20 76 6f 69 64 20 2a 70 4b 65 79 31 2c 0a 20  t void *pKey1,. 
10740 20 69 6e 74 20 6e 4b 65 79 32 2c 20 63 6f 6e 73   int nKey2, cons
10750 74 20 76 6f 69 64 20 2a 70 4b 65 79 32 0a 29 7b  t void *pKey2.){
10760 0a 20 20 69 6e 74 20 72 63 2c 20 6e 3b 0a 20 20  .  int rc, n;.  
10770 6e 20 3d 20 6e 4b 65 79 31 3c 6e 4b 65 79 32 20  n = nKey1<nKey2 
10780 3f 20 6e 4b 65 79 31 20 3a 20 6e 4b 65 79 32 3b  ? nKey1 : nKey2;
10790 0a 20 20 69 66 28 20 6e 4b 65 79 31 3e 30 20 26  .  if( nKey1>0 &
107a0 26 20 31 3d 3d 28 31 26 28 69 6e 74 29 70 4b 65  & 1==(1&(int)pKe
107b0 79 31 29 20 29 20 75 6e 61 6c 69 67 6e 65 64 5f  y1) ) unaligned_
107c0 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72 2b 2b  string_counter++
107d0 3b 0a 20 20 69 66 28 20 6e 4b 65 79 32 3e 30 20  ;.  if( nKey2>0 
107e0 26 26 20 31 3d 3d 28 31 26 28 69 6e 74 29 70 4b  && 1==(1&(int)pK
107f0 65 79 32 29 20 29 20 75 6e 61 6c 69 67 6e 65 64  ey2) ) unaligned
10800 5f 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72 2b  _string_counter+
10810 2b 3b 0a 20 20 72 63 20 3d 20 6d 65 6d 63 6d 70  +;.  rc = memcmp
10820 28 70 4b 65 79 31 2c 20 70 4b 65 79 32 2c 20 6e  (pKey1, pKey2, n
10830 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 30 20 29  );.  if( rc==0 )
10840 7b 0a 20 20 20 20 72 63 20 3d 20 6e 4b 65 79 31  {.    rc = nKey1
10850 20 2d 20 6e 4b 65 79 32 3b 0a 20 20 7d 0a 20 20   - nKey2;.  }.  
10860 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 73 74 61  return rc;.}.sta
10870 74 69 63 20 69 6e 74 20 61 64 64 5f 61 6c 69 67  tic int add_alig
10880 6e 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61  nment_test_colla
10890 74 69 6f 6e 73 28 0a 20 20 76 6f 69 64 20 2a 20  tions(.  void * 
108a0 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
108b0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
108c0 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
108d0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
108e0 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
108f0 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 6f 62  e3 *db;.  if( ob
10900 6a 63 3e 3d 32 20 29 7b 0a 20 20 20 20 69 66 28  jc>=2 ){.    if(
10910 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
10920 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
10930 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
10940 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
10950 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74  ERROR;.    sqlit
10960 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
10970 69 6f 6e 28 64 62 2c 20 22 75 74 66 31 36 5f 75  ion(db, "utf16_u
10980 6e 61 6c 69 67 6e 65 64 22 2c 0a 20 20 20 20 20  naligned",.     
10990 20 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 2c     SQLITE_UTF16,
109a0 20 0a 20 20 20 20 20 20 20 20 30 2c 20 61 6c 69   .        0, ali
109b0 67 6e 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63 29 3b  gnmentCollFunc);
109c0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65  .    sqlite3_cre
109d0 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62  ate_collation(db
109e0 2c 20 22 75 74 66 31 36 5f 61 6c 69 67 6e 65 64  , "utf16_aligned
109f0 22 2c 0a 20 20 20 20 20 20 20 20 53 51 4c 49 54  ",.        SQLIT
10a00 45 5f 55 54 46 31 36 20 7c 20 53 51 4c 49 54 45  E_UTF16 | SQLITE
10a10 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45 44 2c 20  _UTF16_ALIGNED, 
10a20 0a 20 20 20 20 20 20 20 20 30 2c 20 61 6c 69 67  .        0, alig
10a30 6e 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63 29 3b 0a  nmentCollFunc);.
10a40 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c    }.  return SQL
10a50 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  ITE_OK;.}.#endif
10a60 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
10a70 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 29 20  ITE_OMIT_UTF16) 
10a80 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  */../*.** Usage:
10a90 20 61 64 64 5f 74 65 73 74 5f 66 75 6e 63 74 69   add_test_functi
10aa0 6f 6e 20 3c 64 62 20 70 74 72 3e 20 3c 75 74 66  on <db ptr> <utf
10ab0 38 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74  8> <utf16le> <ut
10ac0 66 31 36 62 65 3e 0a 2a 2a 0a 2a 2a 20 54 68 69  f16be>.**.** Thi
10ad0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73  s function is us
10ae0 65 64 20 74 6f 20 74 65 73 74 20 74 68 61 74 20  ed to test that 
10af0 53 51 4c 69 74 65 20 73 65 6c 65 63 74 73 20 74  SQLite selects t
10b00 68 65 20 63 6f 72 72 65 63 74 20 75 73 65 72 0a  he correct user.
10b10 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c  ** function call
10b20 62 61 63 6b 20 77 68 65 6e 20 6d 75 6c 74 69 70  back when multip
10b30 6c 65 20 76 65 72 73 69 6f 6e 73 20 28 66 6f 72  le versions (for
10b40 20 64 69 66 66 65 72 65 6e 74 20 74 65 78 74 20   different text 
10b50 65 6e 63 6f 64 69 6e 67 73 29 0a 2a 2a 20 61 72  encodings).** ar
10b60 65 20 61 76 61 69 6c 61 62 6c 65 2e 0a 2a 2a 0a  e available..**.
10b70 2a 2a 20 43 61 6c 6c 69 6e 67 20 74 68 69 73 20  ** Calling this 
10b80 72 6f 75 74 69 6e 65 20 72 65 67 69 73 74 65 72  routine register
10b90 73 20 75 70 20 74 6f 20 74 68 72 65 65 20 76 65  s up to three ve
10ba0 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 75 73  rsions of the us
10bb0 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 22  er function.** "
10bc0 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 20 77  test_function" w
10bd0 69 74 68 20 64 61 74 61 62 61 73 65 20 68 61 6e  ith database han
10be0 64 6c 65 20 3c 64 62 3e 2e 20 20 49 66 20 74 68  dle <db>.  If th
10bf0 65 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e  e second argumen
10c00 74 20 69 73 0a 2a 2a 20 74 72 75 65 2c 20 74 68  t is.** true, th
10c10 65 6e 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20  en a version of 
10c20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 69 73  test_function is
10c30 20 72 65 67 69 73 74 65 72 65 64 20 66 6f 72 20   registered for 
10c40 55 54 46 2d 38 2c 20 69 66 20 74 68 65 0a 2a 2a  UTF-8, if the.**
10c50 20 74 68 69 72 64 20 69 73 20 74 72 75 65 2c 20   third is true, 
10c60 61 20 76 65 72 73 69 6f 6e 20 69 73 20 72 65 67  a version is reg
10c70 69 73 74 65 72 65 64 20 66 6f 72 20 55 54 46 2d  istered for UTF-
10c80 31 36 6c 65 2c 20 69 66 20 74 68 65 20 66 6f 75  16le, if the fou
10c90 72 74 68 20 69 73 0a 2a 2a 20 74 72 75 65 2c 20  rth is.** true, 
10ca0 61 20 55 54 46 2d 31 36 62 65 20 76 65 72 73 69  a UTF-16be versi
10cb0 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  on is available.
10cc0 20 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69    Previous versi
10cd0 6f 6e 73 20 6f 66 0a 2a 2a 20 74 65 73 74 5f 66  ons of.** test_f
10ce0 75 6e 63 74 69 6f 6e 20 61 72 65 20 64 65 6c 65  unction are dele
10cf0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75  ted..**.** The u
10d00 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  ser function is 
10d10 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63  implemented by c
10d20 61 6c 6c 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f  alling the follo
10d30 77 69 6e 67 20 54 43 4c 20 73 63 72 69 70 74 3a  wing TCL script:
10d40 0a 2a 2a 0a 2a 2a 20 20 20 22 74 65 73 74 5f 66  .**.**   "test_f
10d50 75 6e 63 74 69 6f 6e 20 3c 65 6e 63 3e 20 3c 61  unction <enc> <a
10d60 72 67 3e 22 0a 2a 2a 0a 2a 2a 20 57 68 65 72 65  rg>".**.** Where
10d70 20 3c 65 6e 63 3e 20 69 73 20 6f 6e 65 20 6f 66   <enc> is one of
10d80 20 55 54 46 2d 38 2c 20 55 54 46 2d 31 36 4c 45   UTF-8, UTF-16LE
10d90 20 6f 72 20 55 54 46 31 36 42 45 2c 20 61 6e 64   or UTF16BE, and
10da0 20 3c 61 72 67 3e 20 69 73 20 74 68 65 0a 2a 2a   <arg> is the.**
10db0 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74   single argument
10dc0 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 53   passed to the S
10dd0 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 65  QL function. The
10de0 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
10df0 62 79 0a 2a 2a 20 74 68 65 20 54 43 4c 20 73 63  by.** the TCL sc
10e00 72 69 70 74 20 69 73 20 75 73 65 64 20 61 73 20  ript is used as 
10e10 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65  the return value
10e20 20 6f 66 20 74 68 65 20 53 51 4c 20 66 75 6e 63   of the SQL func
10e30 74 69 6f 6e 2e 20 49 74 0a 2a 2a 20 69 73 20 70  tion. It.** is p
10e40 61 73 73 65 64 20 74 6f 20 53 51 4c 69 74 65 20  assed to SQLite 
10e50 75 73 69 6e 67 20 55 54 46 2d 31 36 42 45 20 66  using UTF-16BE f
10e60 6f 72 20 61 20 55 54 46 2d 38 20 74 65 73 74 5f  or a UTF-8 test_
10e70 66 75 6e 63 74 69 6f 6e 28 29 2c 20 55 54 46 2d  function(), UTF-
10e80 38 0a 2a 2a 20 66 6f 72 20 61 20 55 54 46 2d 31  8.** for a UTF-1
10e90 36 4c 45 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  6LE test_functio
10ea0 6e 28 29 2c 20 61 6e 64 20 55 54 46 2d 31 36 4c  n(), and UTF-16L
10eb0 45 20 66 6f 72 20 61 6e 20 69 6d 70 6c 65 6d 65  E for an impleme
10ec0 6e 74 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  ntation that.** 
10ed0 70 72 65 66 65 72 73 20 55 54 46 2d 31 36 42 45  prefers UTF-16BE
10ee0 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
10ef0 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 73  ITE_OMIT_UTF16.s
10f00 74 61 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f  tatic void test_
10f10 66 75 6e 63 74 69 6f 6e 5f 75 74 66 38 28 0a 20  function_utf8(. 
10f20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
10f30 20 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e   *pCtx, .  int n
10f40 41 72 67 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76  Arg,.  sqlite3_v
10f50 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20  alue **argv.){. 
10f60 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
10f70 65 72 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  erp;.  Tcl_Obj *
10f80 70 58 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  pX;.  sqlite3_va
10f90 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74  lue *pVal;.  int
10fa0 65 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74 65 72  erp = (Tcl_Inter
10fb0 70 20 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72  p *)sqlite3_user
10fc0 5f 64 61 74 61 28 70 43 74 78 29 3b 0a 20 20 70  _data(pCtx);.  p
10fd0 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  X = Tcl_NewStrin
10fe0 67 4f 62 6a 28 22 74 65 73 74 5f 66 75 6e 63 74  gObj("test_funct
10ff0 69 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c  ion", -1);.  Tcl
11000 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 58  _IncrRefCount(pX
11010 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  );.  Tcl_ListObj
11020 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
11030 74 65 72 70 2c 20 70 58 2c 20 54 63 6c 5f 4e 65  terp, pX, Tcl_Ne
11040 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d  wStringObj("UTF-
11050 38 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f  8", -1));.  Tcl_
11060 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
11070 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c  ment(interp, pX,
11080 20 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53   .      Tcl_NewS
11090 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29  tringObj((char*)
110a0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
110b0 78 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29  xt(argv[0]), -1)
110c0 29 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a  );.  Tcl_EvalObj
110d0 45 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30  Ex(interp, pX, 0
110e0 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66  );.  Tcl_DecrRef
110f0 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 73 71 6c  Count(pX);.  sql
11100 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
11110 28 70 43 74 78 2c 20 54 63 6c 5f 47 65 74 53 74  (pCtx, Tcl_GetSt
11120 72 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72  ringResult(inter
11130 70 29 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54  p), -1, SQLITE_T
11140 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 70 56 61  RANSIENT);.  pVa
11150 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  l = sqlite3Value
11160 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33  New();.  sqlite3
11170 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c  ValueSetStr(pVal
11180 2c 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72  , -1, Tcl_GetStr
11190 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ingResult(interp
111a0 29 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45  ), .      SQLITE
111b0 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
111c0 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33  ATIC);.  sqlite3
111d0 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36 62 65  _result_text16be
111e0 28 70 43 74 78 2c 20 73 71 6c 69 74 65 33 5f 76  (pCtx, sqlite3_v
111f0 61 6c 75 65 5f 74 65 78 74 31 36 62 65 28 70 56  alue_text16be(pV
11200 61 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c 20 53  al),.      -1, S
11210 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
11220 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ;.  sqlite3Value
11230 46 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a 73 74  Free(pVal);.}.st
11240 61 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f 66  atic void test_f
11250 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 6c 65 28  unction_utf16le(
11260 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
11270 78 74 20 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74  xt *pCtx, .  int
11280 20 6e 41 72 67 2c 0a 20 20 73 71 6c 69 74 65 33   nArg,.  sqlite3
11290 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b  _value **argv.){
112a0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
112b0 6e 74 65 72 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a  nterp;.  Tcl_Obj
112c0 20 2a 70 58 3b 0a 20 20 73 71 6c 69 74 65 33 5f   *pX;.  sqlite3_
112d0 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69  value *pVal;.  i
112e0 6e 74 65 72 70 20 3d 20 28 54 63 6c 5f 49 6e 74  nterp = (Tcl_Int
112f0 65 72 70 20 2a 29 73 71 6c 69 74 65 33 5f 75 73  erp *)sqlite3_us
11300 65 72 5f 64 61 74 61 28 70 43 74 78 29 3b 0a 20  er_data(pCtx);. 
11310 20 70 58 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72   pX = Tcl_NewStr
11320 69 6e 67 4f 62 6a 28 22 74 65 73 74 5f 66 75 6e  ingObj("test_fun
11330 63 74 69 6f 6e 22 2c 20 2d 31 29 3b 0a 20 20 54  ction", -1);.  T
11340 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28  cl_IncrRefCount(
11350 70 58 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  pX);.  Tcl_ListO
11360 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
11370 69 6e 74 65 72 70 2c 20 70 58 2c 20 54 63 6c 5f  interp, pX, Tcl_
11380 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54  NewStringObj("UT
11390 46 2d 31 36 4c 45 22 2c 20 2d 31 29 29 3b 0a 20  F-16LE", -1));. 
113a0 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
113b0 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
113c0 2c 20 70 58 2c 20 0a 20 20 20 20 20 20 54 63 6c  , pX, .      Tcl
113d0 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 28 63  _NewStringObj((c
113e0 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
113f0 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29  ue_text(argv[0])
11400 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 45 76  , -1));.  Tcl_Ev
11410 61 6c 4f 62 6a 45 78 28 69 6e 74 65 72 70 2c 20  alObjEx(interp, 
11420 70 58 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65  pX, 0);.  Tcl_De
11430 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a  crRefCount(pX);.
11440 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33    pVal = sqlite3
11450 56 61 6c 75 65 4e 65 77 28 29 3b 0a 20 20 73 71  ValueNew();.  sq
11460 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72  lite3ValueSetStr
11470 28 70 56 61 6c 2c 20 2d 31 2c 20 54 63 6c 5f 47  (pVal, -1, Tcl_G
11480 65 74 53 74 72 69 6e 67 52 65 73 75 6c 74 28 69  etStringResult(i
11490 6e 74 65 72 70 29 2c 20 0a 20 20 20 20 20 20 53  nterp), .      S
114a0 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
114b0 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 73 71  TE_STATIC);.  sq
114c0 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
114d0 74 28 70 43 74 78 2c 28 63 68 61 72 2a 29 73 71  t(pCtx,(char*)sq
114e0 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
114f0 28 70 56 61 6c 29 2c 2d 31 2c 53 51 4c 49 54 45  (pVal),-1,SQLITE
11500 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73  _TRANSIENT);.  s
11510 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
11520 70 56 61 6c 29 3b 0a 7d 0a 73 74 61 74 69 63 20  pVal);.}.static 
11530 76 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69  void test_functi
11540 6f 6e 5f 75 74 66 31 36 62 65 28 0a 20 20 73 71  on_utf16be(.  sq
11550 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
11560 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67  Ctx, .  int nArg
11570 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ,.  sqlite3_valu
11580 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63  e **argv.){.  Tc
11590 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
115a0 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b  ;.  Tcl_Obj *pX;
115b0 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
115c0 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70   *pVal;.  interp
115d0 20 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a   = (Tcl_Interp *
115e0 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  )sqlite3_user_da
115f0 74 61 28 70 43 74 78 29 3b 0a 20 20 70 58 20 3d  ta(pCtx);.  pX =
11600 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
11610 6a 28 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  j("test_function
11620 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e  ", -1);.  Tcl_In
11630 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a  crRefCount(pX);.
11640 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70    Tcl_ListObjApp
11650 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
11660 70 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74  p, pX, Tcl_NewSt
11670 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 42  ringObj("UTF-16B
11680 45 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f  E", -1));.  Tcl_
11690 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
116a0 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c  ment(interp, pX,
116b0 20 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53   .      Tcl_NewS
116c0 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29  tringObj((char*)
116d0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
116e0 78 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29  xt(argv[0]), -1)
116f0 29 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a  );.  Tcl_EvalObj
11700 45 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30  Ex(interp, pX, 0
11710 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66  );.  Tcl_DecrRef
11720 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 70 56 61  Count(pX);.  pVa
11730 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  l = sqlite3Value
11740 4e 65 77 28 29 3b 0a 20 20 73 71 6c 69 74 65 33  New();.  sqlite3
11750 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c  ValueSetStr(pVal
11760 2c 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72  , -1, Tcl_GetStr
11770 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ingResult(interp
11780 29 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45  ), .      SQLITE
11790 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
117a0 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33  ATIC);.  sqlite3
117b0 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36 6c 65  _result_text16le
117c0 28 70 43 74 78 2c 20 73 71 6c 69 74 65 33 5f 76  (pCtx, sqlite3_v
117d0 61 6c 75 65 5f 74 65 78 74 31 36 6c 65 28 70 56  alue_text16le(pV
117e0 61 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c 20 53  al),.      -1, S
117f0 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
11800 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ;.  sqlite3Value
11810 46 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a 23 65  Free(pVal);.}.#e
11820 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
11830 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 73 74 61  MIT_UTF16 */.sta
11840 74 69 63 20 69 6e 74 20 74 65 73 74 5f 66 75 6e  tic int test_fun
11850 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20  ction(.  void * 
11860 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
11870 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
11880 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
11890 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
118a0 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66  bjv[].){.#ifndef
118b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
118c0 31 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  16.  sqlite3 *db
118d0 3b 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 0a 20 20  ;.  int val;..  
118e0 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 20 67 6f  if( objc!=5 ) go
118f0 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20 20 69  to bad_args;.  i
11900 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
11910 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
11920 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
11930 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
11940 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66 28 20  L_ERROR;..  if( 
11950 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42  TCL_OK!=Tcl_GetB
11960 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e  ooleanFromObj(in
11970 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
11980 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  val) ) return TC
11990 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76  L_ERROR;.  if( v
119a0 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  al ){.    sqlite
119b0 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
119c0 6e 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63  n(db, "test_func
119d0 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45  tion", 1, SQLITE
119e0 5f 55 54 46 38 2c 20 0a 20 20 20 20 20 20 20 20  _UTF8, .        
119f0 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66 75 6e  interp, test_fun
11a00 63 74 69 6f 6e 5f 75 74 66 38 2c 20 30 2c 20 30  ction_utf8, 0, 0
11a10 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 43 4c  );.  }.  if( TCL
11a20 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c  _OK!=Tcl_GetBool
11a30 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  eanFromObj(inter
11a40 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c  p, objv[3], &val
11a50 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
11a60 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61 6c 20  RROR;.  if( val 
11a70 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63  ){.    sqlite3_c
11a80 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64  reate_function(d
11a90 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f  b, "test_functio
11aa0 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54  n", 1, SQLITE_UT
11ab0 46 31 36 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  F16LE, .        
11ac0 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66 75 6e  interp, test_fun
11ad0 63 74 69 6f 6e 5f 75 74 66 31 36 6c 65 2c 20 30  ction_utf16le, 0
11ae0 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  , 0);.  }.  if( 
11af0 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42  TCL_OK!=Tcl_GetB
11b00 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e  ooleanFromObj(in
11b10 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26  terp, objv[4], &
11b20 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  val) ) return TC
11b30 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76  L_ERROR;.  if( v
11b40 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  al ){.    sqlite
11b50 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
11b60 6e 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63  n(db, "test_func
11b70 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45  tion", 1, SQLITE
11b80 5f 55 54 46 31 36 42 45 2c 20 0a 20 20 20 20 20  _UTF16BE, .     
11b90 20 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f     interp, test_
11ba0 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 62 65  function_utf16be
11bb0 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20  , 0, 0);.  }..  
11bc0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 62  return TCL_OK;.b
11bd0 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 41  ad_args:.  Tcl_A
11be0 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
11bf0 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
11c00 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
11c10 2c 0a 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  ,.      Tcl_GetS
11c20 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
11c30 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44 42 3e  v[0], 0), " <DB>
11c40 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c 65   <utf8> <utf16le
11c50 3e 20 3c 75 74 66 31 36 62 65 3e 22 2c 20 30 29  > <utf16be>", 0)
11c60 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
11c70 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
11c80 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52  .  return TCL_ER
11c90 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  ROR;.}../*.** Us
11ca0 61 67 65 3a 20 20 20 20 20 20 20 20 20 74 65 73  age:         tes
11cb0 74 5f 65 72 72 73 74 72 20 3c 65 72 72 20 63 6f  t_errstr <err co
11cc0 64 65 3e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74  de>.**.** Test t
11cd0 68 61 74 20 74 68 65 20 65 6e 67 6c 69 73 68 20  hat the english 
11ce0 6c 61 6e 67 75 61 67 65 20 73 74 72 69 6e 67 20  language string 
11cf0 65 71 75 69 76 61 6c 65 6e 74 73 20 66 6f 72 20  equivalents for 
11d00 73 71 6c 69 74 65 20 65 72 72 6f 72 20 63 6f 64  sqlite error cod
11d10 65 73 0a 2a 2a 20 61 72 65 20 73 61 6e 65 2e 20  es.** are sane. 
11d20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73  The parameter is
11d30 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
11d40 65 73 65 6e 74 69 6e 67 20 61 6e 20 73 71 6c 69  esenting an sqli
11d50 74 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a  te error code..*
11d60 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20  * The result is 
11d70 61 20 6c 69 73 74 20 6f 66 20 74 77 6f 20 65 6c  a list of two el
11d80 65 6d 65 6e 74 73 2c 20 74 68 65 20 73 74 72 69  ements, the stri
11d90 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ng representatio
11da0 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 65 72 72 6f  n of the.** erro
11db0 72 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20 65  r code and the e
11dc0 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
11dd0 65 78 70 6c 61 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a  explanation..*/.
11de0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
11df0 65 72 72 73 74 72 28 0a 20 20 76 6f 69 64 20 2a  errstr(.  void *
11e00 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
11e10 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
11e20 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
11e30 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
11e40 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 68 61 72  objv[].){.  char
11e50 20 2a 7a 43 6f 64 65 3b 0a 20 20 69 6e 74 20 69   *zCode;.  int i
11e60 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 31 20  ;.  if( objc!=1 
11e70 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
11e80 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
11e90 31 2c 20 6f 62 6a 76 2c 20 22 3c 65 72 72 6f 72  1, objv, "<error
11ea0 20 63 6f 64 65 3e 22 29 3b 0a 20 20 7d 0a 0a 20   code>");.  }.. 
11eb0 20 7a 43 6f 64 65 20 3d 20 54 63 6c 5f 47 65 74   zCode = Tcl_Get
11ec0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b  String(objv[1]);
11ed0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 32 30  .  for(i=0; i<20
11ee0 30 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  0; i++){.    if(
11ef0 20 30 3d 3d 73 74 72 63 6d 70 28 74 31 45 72 72   0==strcmp(t1Err
11f00 6f 72 4e 61 6d 65 28 69 29 2c 20 7a 43 6f 64 65  orName(i), zCode
11f10 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20  ) ) break;.  }. 
11f20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
11f30 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 73  nterp, (char *)s
11f40 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 29 2c  qlite3ErrStr(i),
11f50 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
11f60 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
11f70 73 61 67 65 3a 20 20 20 20 62 72 65 61 6b 70 6f  sage:    breakpo
11f80 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72  int.**.** This r
11f90 6f 75 74 69 6e 65 20 65 78 69 73 74 73 20 66 6f  outine exists fo
11fa0 72 20 6f 6e 65 20 70 75 72 70 6f 73 65 20 2d 20  r one purpose - 
11fb0 74 6f 20 70 72 6f 76 69 64 65 20 61 20 70 6c 61  to provide a pla
11fc0 63 65 20 74 6f 20 70 75 74 20 61 0a 2a 2a 20 62  ce to put a.** b
11fd0 72 65 61 6b 70 6f 69 6e 74 20 77 69 74 68 20 47  reakpoint with G
11fe0 44 42 20 74 68 61 74 20 63 61 6e 20 62 65 20 74  DB that can be t
11ff0 72 69 67 67 65 72 65 64 20 75 73 69 6e 67 20 54  riggered using T
12000 43 4c 20 63 6f 64 65 2e 20 20 54 68 65 20 75 73  CL code.  The us
12010 65 0a 2a 2a 20 66 6f 72 20 74 68 69 73 20 69 73  e.** for this is
12020 20 77 68 65 6e 20 61 20 70 61 72 74 69 63 75 6c   when a particul
12030 61 72 20 74 65 73 74 20 66 61 69 6c 73 20 6f 6e  ar test fails on
12040 20 28 73 61 79 29 20 74 68 65 20 31 34 38 35 74   (say) the 1485t
12050 68 20 69 74 65 72 61 74 69 6f 6e 2e 0a 2a 2a 20  h iteration..** 
12060 49 6e 20 74 68 65 20 54 43 4c 20 74 65 73 74 20  In the TCL test 
12070 73 63 72 69 70 74 2c 20 77 65 20 63 61 6e 20 61  script, we can a
12080 64 64 20 63 6f 64 65 20 6c 69 6b 65 20 74 68 69  dd code like thi
12090 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 69 66 20  s:.**.**     if 
120a0 7b 24 69 3d 3d 31 34 38 35 7d 20 62 72 65 61 6b  {$i==1485} break
120b0 70 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 65 6e  point.**.** Then
120c0 20 72 75 6e 20 74 65 73 74 66 69 78 74 75 72 65   run testfixture
120d0 20 69 6e 20 74 68 65 20 64 65 62 75 67 67 65 72   in the debugger
120e0 20 61 6e 64 20 77 61 69 74 20 66 6f 72 20 74 68   and wait for th
120f0 65 20 62 72 65 61 6b 70 6f 69 6e 74 20 74 6f 0a  e breakpoint to.
12100 2a 2a 20 66 69 72 65 2e 20 20 54 68 65 6e 20 61  ** fire.  Then a
12110 64 64 69 74 69 6f 6e 61 6c 20 62 72 65 61 6b 70  dditional breakp
12120 6f 69 6e 74 73 20 63 61 6e 20 62 65 20 73 65 74  oints can be set
12130 20 74 6f 20 74 72 61 63 65 20 64 6f 77 6e 20 74   to trace down t
12140 68 65 20 62 75 67 2e 0a 2a 2f 0a 73 74 61 74 69  he bug..*/.stati
12150 63 20 69 6e 74 20 74 65 73 74 5f 62 72 65 61 6b  c int test_break
12160 70 6f 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a 4e  point(.  void *N
12170 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
12180 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
12190 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
121a0 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
121b0 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
121c0 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
121d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
121e0 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
121f0 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
12200 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
12210 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
12220 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
12230 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
12240 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
12250 6f 74 68 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f 2a 0a  othing */.}../*.
12260 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
12270 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f  te3_bind_zeroblo
12280 62 20 20 53 54 4d 54 20 49 44 58 20 4e 0a 2a 2a  b  STMT IDX N.**
12290 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c  .** Test the sql
122a0 69 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c  ite3_bind_zerobl
122b0 6f 62 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53  ob interface.  S
122c0 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65  TMT is a prepare
122d0 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  d statement..** 
122e0 49 44 58 20 69 73 20 74 68 65 20 69 6e 64 65 78  IDX is the index
122f0 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69   of a wildcard i
12300 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
12310 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20  tatement.  This 
12320 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73  command.** binds
12330 20 61 20 4e 2d 62 79 74 65 20 7a 65 72 6f 2d 66   a N-byte zero-f
12340 69 6c 6c 65 64 20 42 4c 4f 42 20 74 6f 20 74 68  illed BLOB to th
12350 65 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73  e wildcard..*/.s
12360 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62  tatic int test_b
12370 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62 28 0a 20 20  ind_zeroblob(.  
12380 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
12390 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
123a0 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
123b0 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
123c0 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
123d0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
123e0 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78  pStmt;.  int idx
123f0 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  ;.  int n;.  int
12400 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
12410 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=4 ){.    Tcl_A
12420 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
12430 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
12440 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
12450 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
12460 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
12470 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54  bjv[0], 0), " ST
12480 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20 30 29 3b  MT N VALUE", 0);
12490 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
124a0 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
124b0 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
124c0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
124d0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
124e0 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
124f0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
12500 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
12510 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
12520 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65  v[2], &idx) ) re
12530 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
12540 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
12550 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
12560 6f 62 6a 76 5b 33 5d 2c 20 26 6e 29 20 29 20 72  objv[3], &n) ) r
12570 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12580 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
12590 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62 28 70  _bind_zeroblob(p
125a0 53 74 6d 74 2c 20 69 64 78 2c 20 6e 29 3b 0a 20  Stmt, idx, n);. 
125b0 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
125c0 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
125d0 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c  StmtToDb(pStmt),
125e0 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
125f0 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72  L_ERROR;.  if( r
12600 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
12610 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
12620 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74  RROR;.  }..  ret
12630 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
12640 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
12650 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 20  lite3_bind_int  
12660 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a  STMT N VALUE.**.
12670 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69  ** Test the sqli
12680 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 69 6e 74  te3_bind_int int
12690 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73  erface.  STMT is
126a0 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74   a prepared stat
126b0 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74  ement..** N is t
126c0 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69  he index of a wi
126d0 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72  ldcard in the pr
126e0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
126f0 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a  .  This command.
12700 2a 2a 20 62 69 6e 64 73 20 61 20 33 32 2d 62 69  ** binds a 32-bi
12710 74 20 69 6e 74 65 67 65 72 20 56 41 4c 55 45 20  t integer VALUE 
12720 74 6f 20 74 68 61 74 20 77 69 6c 64 63 61 72 64  to that wildcard
12730 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
12740 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 28 0a 20  test_bind_int(. 
12750 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
12760 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
12770 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
12780 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
12790 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
127a0 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
127b0 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64  *pStmt;.  int id
127c0 78 3b 0a 20 20 69 6e 74 20 76 61 6c 75 65 3b 0a  x;.  int value;.
127d0 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
127e0 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20   objc!=4 ){.    
127f0 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
12800 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
12810 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
12820 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54  e \"",.        T
12830 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
12840 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c  Obj(objv[0], 0),
12850 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 22   " STMT N VALUE"
12860 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
12870 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
12880 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
12890 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
128a0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
128b0 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
128c0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
128d0 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
128e0 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
128f0 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29  , objv[2], &idx)
12900 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
12910 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
12920 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
12930 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76  erp, objv[3], &v
12940 61 6c 75 65 29 20 29 20 72 65 74 75 72 6e 20 54  alue) ) return T
12950 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20  CL_ERROR;..  rc 
12960 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  = sqlite3_bind_i
12970 6e 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76  nt(pStmt, idx, v
12980 61 6c 75 65 29 3b 0a 20 20 69 66 28 20 73 71 6c  alue);.  if( sql
12990 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
129a0 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
129b0 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
129c0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
129d0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
129e0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75  E_OK ){.    retu
129f0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
12a00 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  }..  return TCL_
12a10 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73  OK;.}.../*.** Us
12a20 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62  age:   sqlite3_b
12a30 69 6e 64 5f 69 6e 74 36 34 20 20 53 54 4d 54 20  ind_int64  STMT 
12a40 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65  N VALUE.**.** Te
12a50 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62  st the sqlite3_b
12a60 69 6e 64 5f 69 6e 74 36 34 20 69 6e 74 65 72 66  ind_int64 interf
12a70 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20  ace.  STMT is a 
12a80 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
12a90 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20  nt..** N is the 
12aa0 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63  index of a wildc
12ab0 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61  ard in the prepa
12ac0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  red statement.  
12ad0 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20  This command.** 
12ae0 62 69 6e 64 73 20 61 20 36 34 2d 62 69 74 20 69  binds a 64-bit i
12af0 6e 74 65 67 65 72 20 56 41 4c 55 45 20 74 6f 20  nteger VALUE to 
12b00 74 68 61 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a  that wildcard..*
12b10 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
12b20 74 5f 62 69 6e 64 5f 69 6e 74 36 34 28 0a 20 20  t_bind_int64(.  
12b30 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
12b40 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
12b50 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
12b60 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
12b70 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
12b80 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
12b90 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78  pStmt;.  int idx
12ba0 3b 0a 20 20 69 36 34 20 76 61 6c 75 65 3b 0a 20  ;.  i64 value;. 
12bb0 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
12bc0 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54  objc!=4 ){.    T
12bd0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
12be0 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
12bf0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
12c00 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
12c10 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
12c20 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
12c30 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c  " STMT N VALUE",
12c40 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
12c50 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
12c60 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
12c70 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
12c80 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
12c90 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
12ca0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
12cb0 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
12cc0 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
12cd0 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20   objv[2], &idx) 
12ce0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
12cf0 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
12d00 74 57 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28  tWideIntFromObj(
12d10 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c  interp, objv[3],
12d20 20 26 76 61 6c 75 65 29 20 29 20 72 65 74 75 72   &value) ) retur
12d30 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
12d40 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
12d50 64 5f 69 6e 74 36 34 28 70 53 74 6d 74 2c 20 69  d_int64(pStmt, i
12d60 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69 66  dx, value);.  if
12d70 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
12d80 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d  Code(interp, Stm
12d90 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63  tToDb(pStmt), rc
12da0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
12db0 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d  RROR;.  if( rc!=
12dc0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
12dd0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
12de0 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  R;.  }..  return
12df0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a   TCL_OK;.}.../*.
12e00 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
12e10 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 20  te3_bind_double 
12e20 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a 2a   STMT N VALUE.**
12e30 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c  .** Test the sql
12e40 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
12e50 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d   interface.  STM
12e60 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20  T is a prepared 
12e70 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20  statement..** N 
12e80 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
12e90 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68  a wildcard in th
12ea0 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
12eb0 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d  ment.  This comm
12ec0 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 36  and.** binds a 6
12ed0 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 56 41  4-bit integer VA
12ee0 4c 55 45 20 74 6f 20 74 68 61 74 20 77 69 6c 64  LUE to that wild
12ef0 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  card..*/.static 
12f00 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 64 6f  int test_bind_do
12f10 75 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  uble(.  void * c
12f20 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
12f30 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
12f40 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
12f50 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
12f60 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
12f70 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
12f80 20 69 6e 74 20 69 64 78 3b 0a 20 20 64 6f 75 62   int idx;.  doub
12f90 6c 65 20 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20  le value;.  int 
12fa0 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
12fb0 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =4 ){.    Tcl_Ap
12fc0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
12fd0 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
12fe0 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
12ff0 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  .        Tcl_Get
13000 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
13010 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d  jv[0], 0), " STM
13020 54 20 4e 20 56 41 4c 55 45 22 2c 20 30 29 3b 0a  T N VALUE", 0);.
13030 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
13040 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
13050 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
13060 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
13070 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
13080 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
13090 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
130a0 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
130b0 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
130c0 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74  [2], &idx) ) ret
130d0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
130e0 20 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62   if( Tcl_GetDoub
130f0 6c 65 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  leFromObj(interp
13100 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75  , objv[3], &valu
13110 65 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  e) ) return TCL_
13120 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73  ERROR;..  rc = s
13130 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
13140 6c 65 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76  le(pStmt, idx, v
13150 61 6c 75 65 29 3b 0a 20 20 69 66 28 20 73 71 6c  alue);.  if( sql
13160 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
13170 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
13180 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
13190 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
131a0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
131b0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75  E_OK ){.    retu
131c0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
131d0 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  }..  return TCL_
131e0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
131f0 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ge:   sqlite3_bi
13200 6e 64 5f 6e 75 6c 6c 20 20 53 54 4d 54 20 4e 0a  nd_null  STMT N.
13210 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73  **.** Test the s
13220 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c  qlite3_bind_null
13230 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d   interface.  STM
13240 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20  T is a prepared 
13250 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20  statement..** N 
13260 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
13270 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68  a wildcard in th
13280 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
13290 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d  ment.  This comm
132a0 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 4e  and.** binds a N
132b0 55 4c 4c 20 74 6f 20 74 68 65 20 77 69 6c 64 63  ULL to the wildc
132c0 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ard..*/.static i
132d0 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 6e 75 6c  nt test_bind_nul
132e0 6c 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  l(.  void * clie
132f0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
13300 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
13310 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
13320 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
13330 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
13340 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
13350 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 72 63 3b  t idx;.  int rc;
13360 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
13370 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
13380 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
13390 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
133a0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
133b0 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
133c0 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
133d0 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e  0], 0), " STMT N
133e0 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
133f0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
13400 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
13410 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
13420 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
13430 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
13440 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
13450 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
13460 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
13470 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78  p, objv[2], &idx
13480 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
13490 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71  RROR;..  rc = sq
134a0 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28  lite3_bind_null(
134b0 70 53 74 6d 74 2c 20 69 64 78 29 3b 0a 20 20 69  pStmt, idx);.  i
134c0 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
134d0 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74  rCode(interp, St
134e0 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72  mtToDb(pStmt), r
134f0 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
13500 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21  ERROR;.  if( rc!
13510 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
13520 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
13530 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  OR;.  }..  retur
13540 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
13550 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
13560 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 20 53  te3_bind_text  S
13570 54 4d 54 20 4e 20 53 54 52 49 4e 47 20 42 59 54  TMT N STRING BYT
13580 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  ES.**.** Test th
13590 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  e sqlite3_bind_t
135a0 65 78 74 20 69 6e 74 65 72 66 61 63 65 2e 20 20  ext interface.  
135b0 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72  STMT is a prepar
135c0 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  ed statement..**
135d0 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78 20   N is the index 
135e0 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e  of a wildcard in
135f0 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
13600 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63  atement.  This c
13610 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20  ommand.** binds 
13620 61 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 53  a UTF-8 string S
13630 54 52 49 4e 47 20 74 6f 20 74 68 65 20 77 69 6c  TRING to the wil
13640 64 63 61 72 64 2e 20 20 54 68 65 20 73 74 72 69  dcard.  The stri
13650 6e 67 20 69 73 20 42 59 54 45 53 20 62 79 74 65  ng is BYTES byte
13660 73 0a 2a 2a 20 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74  s.** long..*/.st
13670 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69  atic int test_bi
13680 6e 64 5f 74 65 78 74 28 0a 20 20 76 6f 69 64 20  nd_text(.  void 
13690 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
136a0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
136b0 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
136c0 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
136d0 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
136e0 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
136f0 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69  ;.  int idx;.  i
13700 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 68 61 72  nt bytes;.  char
13710 20 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72   *value;.  int r
13720 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
13730 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  5 ){.    Tcl_App
13740 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
13750 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
13760 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
13770 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53          Tcl_GetS
13780 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
13790 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54  v[0], 0), " STMT
137a0 20 4e 20 56 41 4c 55 45 20 42 59 54 45 53 22 2c   N VALUE BYTES",
137b0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
137c0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
137d0 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
137e0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
137f0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
13800 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
13810 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
13820 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
13830 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
13840 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20   objv[2], &idx) 
13850 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
13860 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d 20 54 63  OR;.  value = Tc
13870 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
13880 5b 33 5d 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f  [3]);.  if( Tcl_
13890 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
138a0 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26  terp, objv[4], &
138b0 62 79 74 65 73 29 20 29 20 72 65 74 75 72 6e 20  bytes) ) return 
138c0 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63  TCL_ERROR;..  rc
138d0 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
138e0 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c  text(pStmt, idx,
138f0 20 76 61 6c 75 65 2c 20 62 79 74 65 73 2c 20 53   value, bytes, S
13900 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
13910 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
13920 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
13930 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
13940 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  t), rc) ) return
13950 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
13960 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
13970 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
13980 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
13990 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 6f 72  sqlite3TestError
139a0 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20  Name(rc), 0);.  
139b0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
139c0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  OR;.  }..  retur
139d0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
139e0 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
139f0 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 20  te3_bind_text16 
13a00 3f 2d 73 74 61 74 69 63 3f 20 53 54 4d 54 20 4e  ?-static? STMT N
13a10 20 53 54 52 49 4e 47 20 42 59 54 45 53 0a 2a 2a   STRING BYTES.**
13a20 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c  .** Test the sql
13a30 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36  ite3_bind_text16
13a40 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d   interface.  STM
13a50 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20  T is a prepared 
13a60 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20  statement..** N 
13a70 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
13a80 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68  a wildcard in th
13a90 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
13aa0 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d  ment.  This comm
13ab0 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55  and.** binds a U
13ac0 54 46 2d 31 36 20 73 74 72 69 6e 67 20 53 54 52  TF-16 string STR
13ad0 49 4e 47 20 74 6f 20 74 68 65 20 77 69 6c 64 63  ING to the wildc
13ae0 61 72 64 2e 20 20 54 68 65 20 73 74 72 69 6e 67  ard.  The string
13af0 20 69 73 20 42 59 54 45 53 20 62 79 74 65 73 0a   is BYTES bytes.
13b00 2a 2a 20 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74  ** long..*/.stat
13b10 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64  ic int test_bind
13b20 5f 74 65 78 74 31 36 28 0a 20 20 76 6f 69 64 20  _text16(.  void 
13b30 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
13b40 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
13b50 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
13b60 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
13b70 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64   objv[].){.#ifnd
13b80 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
13b90 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33 5f 73  TF16.  sqlite3_s
13ba0 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
13bb0 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 62 79 74  t idx;.  int byt
13bc0 65 73 3b 0a 20 20 63 68 61 72 20 2a 76 61 6c 75  es;.  char *valu
13bd0 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  e;.  int rc;..  
13be0 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 29 20 3d  void (*xDel)() =
13bf0 20 28 6f 62 6a 63 3d 3d 36 3f 53 51 4c 49 54 45   (objc==6?SQLITE
13c00 5f 53 54 41 54 49 43 3a 53 51 4c 49 54 45 5f 54  _STATIC:SQLITE_T
13c10 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 54 63 6c  RANSIENT);.  Tcl
13c20 5f 4f 62 6a 20 2a 6f 53 74 6d 74 20 20 20 20 3d  _Obj *oStmt    =
13c30 20 6f 62 6a 76 5b 6f 62 6a 63 2d 34 5d 3b 0a 20   objv[objc-4];. 
13c40 20 54 63 6c 5f 4f 62 6a 20 2a 6f 4e 20 20 20 20   Tcl_Obj *oN    
13c50 20 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 33     = objv[objc-3
13c60 5d 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 53  ];.  Tcl_Obj *oS
13c70 74 72 69 6e 67 20 20 3d 20 6f 62 6a 76 5b 6f 62  tring  = objv[ob
13c80 6a 63 2d 32 5d 3b 0a 20 20 54 63 6c 5f 4f 62 6a  jc-2];.  Tcl_Obj
13c90 20 2a 6f 42 79 74 65 73 20 20 20 3d 20 6f 62 6a   *oBytes   = obj
13ca0 76 5b 6f 62 6a 63 2d 31 5d 3b 0a 0a 20 20 69 66  v[objc-1];..  if
13cb0 28 20 6f 62 6a 63 21 3d 35 20 26 26 20 6f 62 6a  ( objc!=5 && obj
13cc0 63 21 3d 36 29 7b 0a 20 20 20 20 54 63 6c 5f 41  c!=6){.    Tcl_A
13cd0 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
13ce0 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
13cf0 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
13d00 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
13d10 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
13d20 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54  bjv[0], 0), " ST
13d30 4d 54 20 4e 20 56 41 4c 55 45 20 42 59 54 45 53  MT N VALUE BYTES
13d40 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
13d50 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
13d60 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
13d70 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
13d80 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 53 74  cl_GetString(oSt
13d90 6d 74 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  mt), &pStmt) ) r
13da0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
13db0 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
13dc0 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
13dd0 20 6f 4e 2c 20 26 69 64 78 29 20 29 20 72 65 74   oN, &idx) ) ret
13de0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
13df0 20 76 61 6c 75 65 20 3d 20 28 63 68 61 72 2a 29   value = (char*)
13e00 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79  Tcl_GetByteArray
13e10 46 72 6f 6d 4f 62 6a 28 6f 53 74 72 69 6e 67 2c  FromObj(oString,
13e20 20 30 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47   0);.  if( Tcl_G
13e30 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
13e40 65 72 70 2c 20 6f 42 79 74 65 73 2c 20 26 62 79  erp, oBytes, &by
13e50 74 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43  tes) ) return TC
13e60 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d  L_ERROR;..  rc =
13e70 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
13e80 78 74 31 36 28 70 53 74 6d 74 2c 20 69 64 78 2c  xt16(pStmt, idx,
13e90 20 28 76 6f 69 64 20 2a 29 76 61 6c 75 65 2c 20   (void *)value, 
13ea0 62 79 74 65 73 2c 20 78 44 65 6c 29 3b 0a 20 20  bytes, xDel);.  
13eb0 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
13ec0 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53  rrCode(interp, S
13ed0 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20  tmtToDb(pStmt), 
13ee0 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
13ef0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63  _ERROR;.  if( rc
13f00 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
13f10 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
13f20 52 4f 52 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66  ROR;.  }..#endif
13f30 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
13f40 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72  UTF16 */.  retur
13f50 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
13f60 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
13f70 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 20 20 53  te3_bind_blob  S
13f80 54 4d 54 20 4e 20 44 41 54 41 20 42 59 54 45 53  TMT N DATA BYTES
13f90 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20  .**.** Test the 
13fa0 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
13fb0 62 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54  b interface.  ST
13fc0 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65 64  MT is a prepared
13fd0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e   statement..** N
13fe0 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
13ff0 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74   a wildcard in t
14000 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
14010 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d  ement.  This com
14020 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20  mand.** binds a 
14030 42 4c 4f 42 20 74 6f 20 74 68 65 20 77 69 6c 64  BLOB to the wild
14040 63 61 72 64 2e 20 20 54 68 65 20 42 4c 4f 42 20  card.  The BLOB 
14050 69 73 20 42 59 54 45 53 20 62 79 74 65 73 20 69  is BYTES bytes i
14060 6e 20 73 69 7a 65 2e 0a 2a 2f 0a 73 74 61 74 69  n size..*/.stati
14070 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
14080 62 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a 20 63  blob(.  void * c
14090 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
140a0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
140b0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
140c0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
140d0 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
140e0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
140f0 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20   int idx;.  int 
14100 62 79 74 65 73 3b 0a 20 20 63 68 61 72 20 2a 76  bytes;.  char *v
14110 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  alue;.  int rc;.
14120 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29  .  if( objc!=5 )
14130 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
14140 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
14150 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
14160 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
14170 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
14180 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
14190 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20  ], 0), " STMT N 
141a0 44 41 54 41 20 42 59 54 45 53 22 2c 20 30 29 3b  DATA BYTES", 0);
141b0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
141c0 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
141d0 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
141e0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
141f0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
14200 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
14210 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
14220 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
14230 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
14240 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65  v[2], &idx) ) re
14250 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
14260 20 20 76 61 6c 75 65 20 3d 20 54 63 6c 5f 47 65    value = Tcl_Ge
14270 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29  tString(objv[3])
14280 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
14290 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
142a0 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 62 79 74 65  , objv[4], &byte
142b0 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  s) ) return TCL_
142c0 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73  ERROR;..  rc = s
142d0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62  qlite3_bind_blob
142e0 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c  (pStmt, idx, val
142f0 75 65 2c 20 62 79 74 65 73 2c 20 53 51 4c 49 54  ue, bytes, SQLIT
14300 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  E_TRANSIENT);.  
14310 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
14320 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53  rrCode(interp, S
14330 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20  tmtToDb(pStmt), 
14340 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
14350 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63  _ERROR;.  if( rc
14360 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
14370 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
14380 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75  ROR;.  }..  retu
14390 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
143a0 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c  .** Usage:   sql
143b0 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
143c0 74 65 72 5f 63 6f 75 6e 74 20 20 53 54 4d 54 0a  ter_count  STMT.
143d0 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
143e0 20 6e 75 6d 62 65 72 20 6f 66 20 77 69 6c 64 63   number of wildc
143f0 61 72 64 73 20 69 6e 20 74 68 65 20 67 69 76 65  ards in the give
14400 6e 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  n statement..*/.
14410 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
14420 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63  bind_parameter_c
14430 6f 75 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  ount(.  void * c
14440 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
14450 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
14460 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
14470 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
14480 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
14490 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a  3_stmt *pStmt;..
144a0 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
144b0 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75  .    Tcl_WrongNu
144c0 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
144d0 20 6f 62 6a 76 2c 20 22 53 54 4d 54 22 29 3b 0a   objv, "STMT");.
144e0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
144f0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
14500 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
14510 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
14520 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
14530 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
14540 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
14550 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
14560 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
14570 4f 62 6a 28 73 71 6c 69 74 65 33 5f 62 69 6e 64  Obj(sqlite3_bind
14580 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74  _parameter_count
14590 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74  (pStmt)));.  ret
145a0 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
145b0 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
145c0 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d  lite3_bind_param
145d0 65 74 65 72 5f 6e 61 6d 65 20 20 53 54 4d 54 20  eter_name  STMT 
145e0 20 4e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20   N.**.** Return 
145f0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
14600 4e 74 68 20 77 69 6c 64 63 61 72 64 2e 20 20 54  Nth wildcard.  T
14610 68 65 20 66 69 72 73 74 20 77 69 6c 64 63 61 72  he first wildcar
14620 64 20 69 73 20 31 2e 0a 2a 2a 20 41 6e 20 65 6d  d is 1..** An em
14630 70 74 79 20 73 74 72 69 6e 67 20 69 73 20 72 65  pty string is re
14640 74 75 72 6e 65 64 20 69 66 20 4e 20 69 73 20 6f  turned if N is o
14650 75 74 20 6f 66 20 72 61 6e 67 65 20 6f 72 20 69  ut of range or i
14660 66 20 74 68 65 20 77 69 6c 64 63 61 72 64 0a 2a  f the wildcard.*
14670 2a 20 69 73 20 6e 61 6d 65 6c 65 73 73 2e 0a 2a  * is nameless..*
14680 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
14690 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  t_bind_parameter
146a0 5f 6e 61 6d 65 28 0a 20 20 76 6f 69 64 20 2a 20  _name(.  void * 
146b0 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
146c0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
146d0 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
146e0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
146f0 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
14700 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
14710 20 20 69 6e 74 20 69 3b 0a 0a 20 20 69 66 28 20    int i;..  if( 
14720 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
14730 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
14740 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
14750 20 22 53 54 4d 54 20 4e 22 29 3b 0a 20 20 20 20   "STMT N");.    
14760 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
14770 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53  ;.  }.  if( getS
14780 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
14790 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
147a0 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
147b0 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
147c0 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
147d0 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
147e0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
147f0 26 69 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  &i) ) return TCL
14800 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65  _ERROR;.  Tcl_Se
14810 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
14820 70 2c 20 0a 20 20 20 20 20 54 63 6c 5f 4e 65 77  p, .     Tcl_New
14830 53 74 72 69 6e 67 4f 62 6a 28 73 71 6c 69 74 65  StringObj(sqlite
14840 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
14850 5f 6e 61 6d 65 28 70 53 74 6d 74 2c 69 29 2c 2d  _name(pStmt,i),-
14860 31 29 0a 20 20 29 3b 0a 20 20 72 65 74 75 72 6e  1).  );.  return
14870 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
14880 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
14890 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
148a0 72 5f 69 6e 64 65 78 20 20 53 54 4d 54 20 20 4e  r_index  STMT  N
148b0 41 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  AME.**.** Return
148c0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
148d0 65 20 77 69 6c 64 63 61 72 64 20 63 61 6c 6c 65  e wildcard calle
148e0 64 20 4e 41 4d 45 2e 20 20 52 65 74 75 72 6e 20  d NAME.  Return 
148f0 30 20 69 66 20 74 68 65 72 65 20 69 73 0a 2a 2a  0 if there is.**
14900 20 6e 6f 20 73 75 63 68 20 77 69 6c 64 63 61 72   no such wildcar
14910 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
14920 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d   test_bind_param
14930 65 74 65 72 5f 69 6e 64 65 78 28 0a 20 20 76 6f  eter_index(.  vo
14940 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
14950 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
14960 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
14970 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
14980 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
14990 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
149a0 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  tmt;..  if( objc
149b0 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=3 ){.    Tcl_W
149c0 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
149d0 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54  rp, 1, objv, "ST
149e0 4d 54 20 4e 41 4d 45 22 29 3b 0a 20 20 20 20 72  MT NAME");.    r
149f0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
14a00 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74  .  }.  if( getSt
14a10 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
14a20 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
14a30 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
14a40 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
14a50 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f  RROR;.  Tcl_SetO
14a60 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
14a70 20 0a 20 20 20 20 20 54 63 6c 5f 4e 65 77 49 6e   .     Tcl_NewIn
14a80 74 4f 62 6a 28 0a 20 20 20 20 20 20 20 73 71 6c  tObj(.       sql
14a90 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
14aa0 74 65 72 5f 69 6e 64 65 78 28 70 53 74 6d 74 2c  ter_index(pStmt,
14ab0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
14ac0 6a 76 5b 32 5d 29 29 0a 20 20 20 20 20 29 0a 20  jv[2])).     ). 
14ad0 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   );.  return TCL
14ae0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
14af0 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 63  age:   sqlite3_c
14b00 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 20 53 54  lear_bindings ST
14b10 4d 54 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 20  MT.**.*/.static 
14b20 69 6e 74 20 74 65 73 74 5f 63 6c 65 61 72 5f 62  int test_clear_b
14b30 69 6e 64 69 6e 67 73 28 0a 20 20 76 6f 69 64 20  indings(.  void 
14b40 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
14b50 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
14b60 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
14b70 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
14b80 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
14b90 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
14ba0 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
14bb0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
14bc0 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
14bd0 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 22   1, objv, "STMT"
14be0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
14bf0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
14c00 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
14c10 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
14c20 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
14c30 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
14c40 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
14c50 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
14c60 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
14c70 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63  IntObj(sqlite3_c
14c80 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 70 53  lear_bindings(pS
14c90 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e  tmt)));.  return
14ca0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
14cb0 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
14cc0 65 33 5f 73 6c 65 65 70 20 4d 49 4c 4c 49 53 45  e3_sleep MILLISE
14cd0 43 4f 4e 44 53 0a 2a 2f 0a 73 74 61 74 69 63 20  CONDS.*/.static 
14ce0 69 6e 74 20 74 65 73 74 5f 73 6c 65 65 70 28 0a  int test_sleep(.
14cf0 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
14d00 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
14d10 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
14d20 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
14d30 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
14d40 7b 0a 20 20 69 6e 74 20 6d 73 3b 0a 0a 20 20 69  {.  int ms;..  i
14d50 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
14d60 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
14d70 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
14d80 6a 76 2c 20 22 4d 49 4c 4c 49 53 45 43 4f 4e 44  jv, "MILLISECOND
14d90 53 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  S");.    return 
14da0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
14db0 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
14dc0 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
14dd0 62 6a 76 5b 31 5d 2c 20 26 6d 73 29 20 29 7b 0a  bjv[1], &ms) ){.
14de0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
14df0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  RROR;.  }.  Tcl_
14e00 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
14e10 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
14e20 62 6a 28 73 71 6c 69 74 65 33 5f 73 6c 65 65 70  bj(sqlite3_sleep
14e30 28 6d 73 29 29 29 3b 0a 20 20 72 65 74 75 72 6e  (ms)));.  return
14e40 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
14e50 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
14e60 5f 65 72 72 63 6f 64 65 20 44 42 0a 2a 2a 0a 2a  _errcode DB.**.*
14e70 2a 20 52 65 74 75 72 6e 20 74 68 65 20 73 74 72  * Return the str
14e80 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
14e90 6f 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  on of the most r
14ea0 65 63 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20  ecent sqlite3_* 
14eb0 41 50 49 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64  API.** error cod
14ec0 65 2e 20 65 2e 67 2e 20 22 53 51 4c 49 54 45 5f  e. e.g. "SQLITE_
14ed0 45 52 52 4f 52 22 2e 0a 2a 2f 0a 73 74 61 74 69  ERROR"..*/.stati
14ee0 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72 63 6f  c int test_errco
14ef0 64 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  de(.  void * cli
14f00 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
14f10 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
14f20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
14f30 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
14f40 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  [].){.  sqlite3 
14f50 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *db;.  int rc;. 
14f60 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a   char zBuf[30];.
14f70 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
14f80 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
14f90 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
14fa0 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
14fb0 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
14fc0 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
14fd0 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44  ng(objv[0]), " D
14fe0 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  B", 0);.    retu
14ff0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
15000 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
15010 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
15020 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
15030 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
15040 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
15050 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  rc = sqlite3_err
15060 63 6f 64 65 28 64 62 29 3b 0a 20 20 69 66 28 20  code(db);.  if( 
15070 28 72 63 26 30 78 66 66 29 3d 3d 72 63 20 29 7b  (rc&0xff)==rc ){
15080 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 30  .    zBuf[0] = 0
15090 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
150a0 70 72 69 6e 74 66 28 7a 42 75 66 2c 22 2b 25 64  printf(zBuf,"+%d
150b0 22 2c 20 72 63 3e 3e 38 29 3b 0a 20 20 7d 0a 20  ", rc>>8);.  }. 
150c0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
150d0 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
150e0 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63  *)t1ErrorName(rc
150f0 29 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72  ), zBuf, 0);.  r
15100 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
15110 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
15120 74 65 73 74 5f 65 72 72 6d 73 67 20 44 42 0a 2a  test_errmsg DB.*
15130 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65  *.** Returns the
15140 20 55 54 46 2d 38 20 72 65 70 72 65 73 65 6e 74   UTF-8 represent
15150 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 72 72  ation of the err
15160 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e  or message strin
15170 67 20 66 6f 72 20 74 68 65 0a 2a 2a 20 6d 6f 73  g for the.** mos
15180 74 20 72 65 63 65 6e 74 20 73 71 6c 69 74 65 33  t recent sqlite3
15190 5f 2a 20 41 50 49 20 63 61 6c 6c 2e 0a 2a 2f 0a  _* API call..*/.
151a0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
151b0 65 72 72 6d 73 67 28 0a 20 20 76 6f 69 64 20 2a  errmsg(.  void *
151c0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
151d0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
151e0 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
151f0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
15200 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
15210 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74  te3 *db;.  const
15220 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a 0a 20 20   char *zErr;..  
15230 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
15240 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
15250 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
15260 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
15270 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
15280 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
15290 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22 2c  objv[0]), " DB",
152a0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
152b0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
152c0 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
152d0 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
152e0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
152f0 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
15300 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a 45  TCL_ERROR;..  zE
15310 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 65 72 72  rr = sqlite3_err
15320 6d 73 67 28 64 62 29 3b 0a 20 20 54 63 6c 5f 53  msg(db);.  Tcl_S
15330 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
15340 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  rp, Tcl_NewStrin
15350 67 4f 62 6a 28 7a 45 72 72 2c 20 2d 31 29 29 3b  gObj(zErr, -1));
15360 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
15370 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
15380 3a 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67 31  :   test_errmsg1
15390 36 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  6 DB.**.** Retur
153a0 6e 73 20 74 68 65 20 55 54 46 2d 31 36 20 72 65  ns the UTF-16 re
153b0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
153c0 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
153d0 65 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  e string for the
153e0 0a 2a 2a 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  .** most recent 
153f0 73 71 6c 69 74 65 33 5f 2a 20 41 50 49 20 63 61  sqlite3_* API ca
15400 6c 6c 2e 20 54 68 69 73 20 69 73 20 61 20 62 79  ll. This is a by
15410 74 65 20 61 72 72 61 79 20 6f 62 6a 65 63 74 20  te array object 
15420 61 74 20 74 68 65 20 54 43 4c 20 0a 2a 2a 20 6c  at the TCL .** l
15430 65 76 65 6c 2c 20 61 6e 64 20 69 74 20 69 6e 63  evel, and it inc
15440 6c 75 64 65 73 20 74 68 65 20 30 78 30 30 20 30  ludes the 0x00 0
15450 78 30 30 20 74 65 72 6d 69 6e 61 74 6f 72 20 62  x00 terminator b
15460 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
15470 6f 66 20 74 68 65 0a 2a 2a 20 55 54 46 2d 31 36  of the.** UTF-16
15480 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74   string..*/.stat
15490 69 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72 6d  ic int test_errm
154a0 73 67 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  sg16(.  void * c
154b0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
154c0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
154d0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
154e0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
154f0 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
15500 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
15510 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  6.  sqlite3 *db;
15520 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
15530 45 72 72 3b 0a 20 20 69 6e 74 20 62 79 74 65 73  Err;.  int bytes
15540 20 3d 20 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a   = 0;..  if( obj
15550 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
15560 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
15570 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
15580 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
15590 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
155a0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
155b0 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20  ), " DB", 0);.  
155c0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
155d0 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
155e0 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
155f0 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
15600 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20  (objv[1]), &db) 
15610 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
15620 4f 52 3b 0a 0a 20 20 7a 45 72 72 20 3d 20 73 71  OR;..  zErr = sq
15630 6c 69 74 65 33 5f 65 72 72 6d 73 67 31 36 28 64  lite3_errmsg16(d
15640 62 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29  b);.  if( zErr )
15650 7b 0a 20 20 20 20 62 79 74 65 73 20 3d 20 73 71  {.    bytes = sq
15660 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65  lite3Utf16ByteLe
15670 6e 28 7a 45 72 72 2c 20 2d 31 29 3b 0a 20 20 7d  n(zErr, -1);.  }
15680 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
15690 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
156a0 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28  NewByteArrayObj(
156b0 7a 45 72 72 2c 20 62 79 74 65 73 29 29 3b 0a 23  zErr, bytes));.#
156c0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
156d0 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20  OMIT_UTF16 */.  
156e0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
156f0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
15700 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 44  qlite3_prepare D
15710 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c  B sql bytes tail
15720 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c  var.**.** Compil
15730 65 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e 20  e up to <bytes> 
15740 62 79 74 65 73 20 6f 66 20 74 68 65 20 73 75 70  bytes of the sup
15750 70 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e 67  plied SQL string
15760 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20   <sql> using.** 
15770 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
15780 3c 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d 65  <DB>. The parame
15790 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69 73  ter <tailval> is
157a0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 67   the name of a g
157b0 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62 6c  lobal.** variabl
157c0 65 20 74 68 61 74 20 69 73 20 73 65 74 20 74 6f  e that is set to
157d0 20 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72 74   the unused port
157e0 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69 66  ion of <sql> (if
157f0 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d 54   any). A.** STMT
15800 20 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75 72   handle is retur
15810 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ned..*/.static i
15820 6e 74 20 74 65 73 74 5f 70 72 65 70 61 72 65 28  nt test_prepare(
15830 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
15840 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
15850 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
15860 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
15870 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
15880 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
15890 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
158a0 7a 53 71 6c 3b 0a 20 20 69 6e 74 20 62 79 74 65  zSql;.  int byte
158b0 73 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  s;.  const char 
158c0 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20 73 71  *zTail = 0;.  sq
158d0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
158e0 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 42  t = 0;.  char zB
158f0 75 66 5b 35 30 5d 3b 0a 20 20 69 6e 74 20 72 63  uf[50];.  int rc
15900 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35  ;..  if( objc!=5
15910 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
15920 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
15930 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
15940 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
15950 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
15960 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
15970 20 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61   DB sql bytes ta
15980 69 6c 76 61 72 22 2c 20 30 29 3b 0a 20 20 20 20  ilvar", 0);.    
15990 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
159a0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
159b0 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
159c0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
159d0 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20  bjv[1]), &db) ) 
159e0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
159f0 3b 0a 20 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47  ;.  zSql = Tcl_G
15a00 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d  etString(objv[2]
15a10 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  );.  if( Tcl_Get
15a20 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
15a30 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74  p, objv[3], &byt
15a40 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  es) ) return TCL
15a50 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
15a60 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
15a70 64 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c  db, zSql, bytes,
15a80 20 26 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c 29   &pStmt, &zTail)
15a90 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
15aa0 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
15ab0 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74  p, db, rc) ) ret
15ac0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
15ad0 20 69 66 28 20 7a 54 61 69 6c 20 29 7b 0a 20 20   if( zTail ){.  
15ae0 20 20 69 66 28 20 62 79 74 65 73 3e 3d 30 20 29    if( bytes>=0 )
15af0 7b 0a 20 20 20 20 20 20 62 79 74 65 73 20 3d 20  {.      bytes = 
15b00 62 79 74 65 73 20 2d 20 28 7a 54 61 69 6c 2d 7a  bytes - (zTail-z
15b10 53 71 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Sql);.    }.    
15b20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69  Tcl_ObjSetVar2(i
15b30 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20  nterp, objv[4], 
15b40 30 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  0, Tcl_NewString
15b50 4f 62 6a 28 7a 54 61 69 6c 2c 20 62 79 74 65 73  Obj(zTail, bytes
15b60 29 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28  ), 0);.  }.  if(
15b70 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
15b80 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 53  {.    assert( pS
15b90 74 6d 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 70  tmt==0 );.    sp
15ba0 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 28 25 64  rintf(zBuf, "(%d
15bb0 29 20 22 2c 20 72 63 29 3b 0a 20 20 20 20 54 63  ) ", rc);.    Tc
15bc0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
15bd0 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 73 71 6c  nterp, zBuf, sql
15be0 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c  ite3_errmsg(db),
15bf0 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
15c00 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
15c10 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20    if( pStmt ){. 
15c20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65     if( sqlite3Te
15c30 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72  stMakePointerStr
15c40 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70  (interp, zBuf, p
15c50 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
15c60 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 54 63  CL_ERROR;.    Tc
15c70 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
15c80 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b  nterp, zBuf, 0);
15c90 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
15ca0 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
15cb0 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 70 72  sage: sqlite3_pr
15cc0 65 70 61 72 65 5f 76 32 20 44 42 20 73 71 6c 20  epare_v2 DB sql 
15cd0 62 79 74 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a  bytes tailvar.**
15ce0 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 75 70 20 74  .** Compile up t
15cf0 6f 20 3c 62 79 74 65 73 3e 20 62 79 74 65 73 20  o <bytes> bytes 
15d00 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  of the supplied 
15d10 53 51 4c 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e  SQL string <sql>
15d20 20 75 73 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61   using.** databa
15d30 73 65 20 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20  se handle <DB>. 
15d40 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 3c 74  The parameter <t
15d50 61 69 6c 76 61 6c 3e 20 69 73 20 74 68 65 20 6e  ailval> is the n
15d60 61 6d 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a  ame of a global.
15d70 2a 2a 20 76 61 72 69 61 62 6c 65 20 74 68 61 74  ** variable that
15d80 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 75   is set to the u
15d90 6e 75 73 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66  nused portion of
15da0 20 3c 73 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e   <sql> (if any).
15db0 20 41 0a 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c   A.** STMT handl
15dc0 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  e is returned..*
15dd0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
15de0 74 5f 70 72 65 70 61 72 65 5f 76 32 28 0a 20 20  t_prepare_v2(.  
15df0 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
15e00 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
15e10 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
15e20 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
15e30 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
15e40 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
15e50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71   const char *zSq
15e60 6c 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a  l;.  int bytes;.
15e70 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
15e80 61 69 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  ail = 0;.  sqlit
15e90 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d  e3_stmt *pStmt =
15ea0 20 30 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b   0;.  char zBuf[
15eb0 35 30 5d 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  50];.  int rc;..
15ec0 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b    if( objc!=5 ){
15ed0 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
15ee0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
15ef0 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
15f00 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
15f10 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
15f20 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42  g(objv[0]), " DB
15f30 20 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c 76   sql bytes tailv
15f40 61 72 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  ar", 0);.    ret
15f50 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
15f60 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
15f70 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
15f80 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
15f90 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
15fa0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
15fb0 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65 74 53   zSql = Tcl_GetS
15fc0 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a  tring(objv[2]);.
15fd0 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
15fe0 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
15ff0 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74 65 73 29  objv[3], &bytes)
16000 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
16010 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
16020 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
16030 64 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c  db, zSql, bytes,
16040 20 26 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c 29   &pStmt, &zTail)
16050 3b 0a 20 20 61 73 73 65 72 74 28 72 63 3d 3d 53  ;.  assert(rc==S
16060 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 53 74 6d  QLITE_OK || pStm
16070 74 3d 3d 30 29 3b 0a 20 20 69 66 28 20 73 71 6c  t==0);.  if( sql
16080 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
16090 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20  interp, db, rc) 
160a0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
160b0 4f 52 3b 0a 20 20 69 66 28 20 7a 54 61 69 6c 20  OR;.  if( zTail 
160c0 29 7b 0a 20 20 20 20 69 66 28 20 62 79 74 65 73  ){.    if( bytes
160d0 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 62 79 74  >=0 ){.      byt
160e0 65 73 20 3d 20 62 79 74 65 73 20 2d 20 28 7a 54  es = bytes - (zT
160f0 61 69 6c 2d 7a 53 71 6c 29 3b 0a 20 20 20 20 7d  ail-zSql);.    }
16100 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56  .    Tcl_ObjSetV
16110 61 72 32 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  ar2(interp, objv
16120 5b 34 5d 2c 20 30 2c 20 54 63 6c 5f 4e 65 77 53  [4], 0, Tcl_NewS
16130 74 72 69 6e 67 4f 62 6a 28 7a 54 61 69 6c 2c 20  tringObj(zTail, 
16140 62 79 74 65 73 29 2c 20 30 29 3b 0a 20 20 7d 0a  bytes), 0);.  }.
16150 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
16160 5f 4f 4b 20 29 7b 0a 20 20 20 20 61 73 73 65 72  _OK ){.    asser
16170 74 28 20 70 53 74 6d 74 3d 3d 30 20 29 3b 0a 20  t( pStmt==0 );. 
16180 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c     sprintf(zBuf,
16190 20 22 28 25 64 29 20 22 2c 20 72 63 29 3b 0a 20   "(%d) ", rc);. 
161a0 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
161b0 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
161c0 2c 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67  , sqlite3_errmsg
161d0 28 64 62 29 2c 20 30 29 3b 0a 20 20 20 20 72 65  (db), 0);.    re
161e0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
161f0 20 20 7d 0a 0a 20 20 69 66 28 20 70 53 74 6d 74    }..  if( pStmt
16200 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   ){.    if( sqli
16210 74 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74  te3TestMakePoint
16220 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42  erStr(interp, zB
16230 75 66 2c 20 70 53 74 6d 74 29 20 29 20 72 65 74  uf, pStmt) ) ret
16240 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
16250 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
16260 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
16270 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  , 0);.  }.  retu
16280 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
16290 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
162a0 65 33 5f 70 72 65 70 61 72 65 31 36 20 44 42 20  e3_prepare16 DB 
162b0 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c 76 61  sql bytes tailva
162c0 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20  r.**.** Compile 
162d0 75 70 20 74 6f 20 3c 62 79 74 65 73 3e 20 62 79  up to <bytes> by
162e0 74 65 73 20 6f 66 20 74 68 65 20 73 75 70 70 6c  tes of the suppl
162f0 69 65 64 20 53 51 4c 20 73 74 72 69 6e 67 20 3c  ied SQL string <
16300 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20 64 61  sql> using.** da
16310 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 44  tabase handle <D
16320 42 3e 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65  B>. The paramete
16330 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69 73 20 74  r <tailval> is t
16340 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 67 6c 6f  he name of a glo
16350 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  bal.** variable 
16360 74 68 61 74 20 69 73 20 73 65 74 20 74 6f 20 74  that is set to t
16370 68 65 20 75 6e 75 73 65 64 20 70 6f 72 74 69 6f  he unused portio
16380 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69 66 20 61  n of <sql> (if a
16390 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d 54 20 68  ny). A.** STMT h
163a0 61 6e 64 6c 65 20 69 73 20 72 65 74 75 72 6e 65  andle is returne
163b0 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
163c0 20 74 65 73 74 5f 70 72 65 70 61 72 65 31 36 28   test_prepare16(
163d0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
163e0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
163f0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
16400 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
16410 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
16420 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
16430 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73  E_OMIT_UTF16.  s
16440 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f  qlite3 *db;.  co
16450 6e 73 74 20 76 6f 69 64 20 2a 7a 53 71 6c 3b 0a  nst void *zSql;.
16460 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 54    const void *zT
16470 61 69 6c 20 3d 20 30 3b 0a 20 20 54 63 6c 5f 4f  ail = 0;.  Tcl_O
16480 62 6a 20 2a 70 54 61 69 6c 20 3d 20 30 3b 0a 20  bj *pTail = 0;. 
16490 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
164a0 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61 72  Stmt = 0;.  char
164b0 20 7a 42 75 66 5b 35 30 5d 3b 20 0a 20 20 69 6e   zBuf[50]; .  in
164c0 74 20 72 63 3b 0a 20 20 69 6e 74 20 62 79 74 65  t rc;.  int byte
164d0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
164e0 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72    /* The integer
164f0 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61 72   specified as ar
16500 67 20 33 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a  g 3 */.  int obj
16510 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
16520 20 20 20 2f 2a 20 54 68 65 20 62 79 74 65 2d 61     /* The byte-a
16530 72 72 61 79 20 6c 65 6e 67 74 68 20 6f 66 20 61  rray length of a
16540 72 67 20 32 20 2a 2f 0a 0a 20 20 69 66 28 20 6f  rg 2 */..  if( o
16550 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63  bjc!=5 ){.    Tc
16560 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
16570 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
16580 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
16590 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
165a0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
165b0 30 5d 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79  0]), " DB sql by
165c0 74 65 73 20 74 61 69 6c 76 61 72 22 2c 20 30 29  tes tailvar", 0)
165d0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
165e0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
165f0 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
16600 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
16610 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
16620 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
16630 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d  _ERROR;.  zSql =
16640 20 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61   Tcl_GetByteArra
16650 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d  yFromObj(objv[2]
16660 2c 20 26 6f 62 6a 6c 65 6e 29 3b 0a 20 20 69 66  , &objlen);.  if
16670 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
16680 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
16690 5b 33 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72  [3], &bytes) ) r
166a0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
166b0 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
166c0 5f 70 72 65 70 61 72 65 31 36 28 64 62 2c 20 7a  _prepare16(db, z
166d0 53 71 6c 2c 20 62 79 74 65 73 2c 20 26 70 53 74  Sql, bytes, &pSt
166e0 6d 74 2c 20 26 7a 54 61 69 6c 29 3b 0a 20 20 69  mt, &zTail);.  i
166f0 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
16700 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
16710 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
16720 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
16730 72 63 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  rc ){.    return
16740 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
16750 0a 20 20 69 66 28 20 7a 54 61 69 6c 20 29 7b 0a  .  if( zTail ){.
16760 20 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 6f 62 6a      objlen = obj
16770 6c 65 6e 20 2d 20 28 28 75 38 20 2a 29 7a 54 61  len - ((u8 *)zTa
16780 69 6c 2d 28 75 38 20 2a 29 7a 53 71 6c 29 3b 0a  il-(u8 *)zSql);.
16790 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6f 62 6a    }else{.    obj
167a0 6c 65 6e 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 70  len = 0;.  }.  p
167b0 54 61 69 6c 20 3d 20 54 63 6c 5f 4e 65 77 42 79  Tail = Tcl_NewBy
167c0 74 65 41 72 72 61 79 4f 62 6a 28 28 75 38 20 2a  teArrayObj((u8 *
167d0 29 7a 54 61 69 6c 2c 20 6f 62 6a 6c 65 6e 29 3b  )zTail, objlen);
167e0 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f  .  Tcl_IncrRefCo
167f0 75 6e 74 28 70 54 61 69 6c 29 3b 0a 20 20 54 63  unt(pTail);.  Tc
16800 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74  l_ObjSetVar2(int
16810 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30 2c  erp, objv[4], 0,
16820 20 70 54 61 69 6c 2c 20 30 29 3b 0a 20 20 54 63   pTail, 0);.  Tc
16830 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70  l_DecrRefCount(p
16840 54 61 69 6c 29 3b 0a 0a 20 20 69 66 28 20 70 53  Tail);..  if( pS
16850 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28 20 73  tmt ){.    if( s
16860 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
16870 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c  interStr(interp,
16880 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20 29 20   zBuf, pStmt) ) 
16890 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
168a0 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65  ;.  }.  Tcl_Appe
168b0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
168c0 20 7a 42 75 66 2c 20 30 29 3b 0a 23 65 6e 64 69   zBuf, 0);.#endi
168d0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
168e0 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75  _UTF16 */.  retu
168f0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
16900 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
16910 65 33 5f 70 72 65 70 61 72 65 31 36 5f 76 32 20  e3_prepare16_v2 
16920 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69  DB sql bytes tai
16930 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69  lvar.**.** Compi
16940 6c 65 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e  le up to <bytes>
16950 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 73 75   bytes of the su
16960 70 70 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e  pplied SQL strin
16970 67 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a  g <sql> using.**
16980 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
16990 20 3c 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d   <DB>. The param
169a0 65 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69  eter <tailval> i
169b0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
169c0 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62  global.** variab
169d0 6c 65 20 74 68 61 74 20 69 73 20 73 65 74 20 74  le that is set t
169e0 6f 20 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72  o the unused por
169f0 74 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69  tion of <sql> (i
16a00 66 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d  f any). A.** STM
16a10 54 20 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75  T handle is retu
16a20 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rned..*/.static 
16a30 69 6e 74 20 74 65 73 74 5f 70 72 65 70 61 72 65  int test_prepare
16a40 31 36 5f 76 32 28 0a 20 20 76 6f 69 64 20 2a 20  16_v2(.  void * 
16a50 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
16a60 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
16a70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
16a80 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
16a90 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66  bjv[].){.#ifndef
16aa0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
16ab0 31 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  16.  sqlite3 *db
16ac0 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ;.  const void *
16ad0 7a 53 71 6c 3b 0a 20 20 63 6f 6e 73 74 20 76 6f  zSql;.  const vo
16ae0 69 64 20 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20  id *zTail = 0;. 
16af0 20 54 63 6c 5f 4f 62 6a 20 2a 70 54 61 69 6c 20   Tcl_Obj *pTail 
16b00 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  = 0;.  sqlite3_s
16b10 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a  tmt *pStmt = 0;.
16b20 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b    char zBuf[50];
16b30 20 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e   .  int rc;.  in
16b40 74 20 62 79 74 65 73 3b 20 20 20 20 20 20 20 20  t bytes;        
16b50 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69          /* The i
16b60 6e 74 65 67 65 72 20 73 70 65 63 69 66 69 65 64  nteger specified
16b70 20 61 73 20 61 72 67 20 33 20 2a 2f 0a 20 20 69   as arg 3 */.  i
16b80 6e 74 20 6f 62 6a 6c 65 6e 3b 20 20 20 20 20 20  nt objlen;      
16b90 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
16ba0 62 79 74 65 2d 61 72 72 61 79 20 6c 65 6e 67 74  byte-array lengt
16bb0 68 20 6f 66 20 61 72 67 20 32 20 2a 2f 0a 0a 20  h of arg 2 */.. 
16bc0 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b 0a   if( objc!=5 ){.
16bd0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
16be0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
16bf0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
16c00 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
16c10 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
16c20 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 20  (objv[0]), " DB 
16c30 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c 76 61  sql bytes tailva
16c40 72 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  r", 0);.    retu
16c50 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
16c60 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
16c70 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
16c80 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
16c90 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
16ca0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
16cb0 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65 74 42 79  zSql = Tcl_GetBy
16cc0 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f  teArrayFromObj(o
16cd0 62 6a 76 5b 32 5d 2c 20 26 6f 62 6a 6c 65 6e 29  bjv[2], &objlen)
16ce0 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
16cf0 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
16d00 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74 65  , objv[3], &byte
16d10 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  s) ) return TCL_
16d20 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73  ERROR;..  rc = s
16d30 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
16d40 5f 76 32 28 64 62 2c 20 7a 53 71 6c 2c 20 62 79  _v2(db, zSql, by
16d50 74 65 73 2c 20 26 70 53 74 6d 74 2c 20 26 7a 54  tes, &pStmt, &zT
16d60 61 69 6c 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  ail);.  if( sqli
16d70 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
16d80 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29  nterp, db, rc) )
16d90 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
16da0 52 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  R;.  if( rc ){. 
16db0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
16dc0 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
16dd0 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20 6f 62 6a  zTail ){.    obj
16de0 6c 65 6e 20 3d 20 6f 62 6a 6c 65 6e 20 2d 20 28  len = objlen - (
16df0 28 75 38 20 2a 29 7a 54 61 69 6c 2d 28 75 38 20  (u8 *)zTail-(u8 
16e00 2a 29 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c 73 65  *)zSql);.  }else
16e10 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e 20 3d 20 30  {.    objlen = 0
16e20 3b 0a 20 20 7d 0a 20 20 70 54 61 69 6c 20 3d 20  ;.  }.  pTail = 
16e30 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79  Tcl_NewByteArray
16e40 4f 62 6a 28 28 75 38 20 2a 29 7a 54 61 69 6c 2c  Obj((u8 *)zTail,
16e50 20 6f 62 6a 6c 65 6e 29 3b 0a 20 20 54 63 6c 5f   objlen);.  Tcl_
16e60 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 54 61  IncrRefCount(pTa
16e70 69 6c 29 3b 0a 20 20 54 63 6c 5f 4f 62 6a 53 65  il);.  Tcl_ObjSe
16e80 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6f 62  tVar2(interp, ob
16e90 6a 76 5b 34 5d 2c 20 30 2c 20 70 54 61 69 6c 2c  jv[4], 0, pTail,
16ea0 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52   0);.  Tcl_DecrR
16eb0 65 66 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a  efCount(pTail);.
16ec0 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a  .  if( pStmt ){.
16ed0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54      if( sqlite3T
16ee0 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74  estMakePointerSt
16ef0 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  r(interp, zBuf, 
16f00 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
16f10 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
16f20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
16f30 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
16f40 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  0);.#endif /* SQ
16f50 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
16f60 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
16f70 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
16f80 67 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ge: sqlite3_open
16f90 20 66 69 6c 65 6e 61 6d 65 20 3f 6f 70 74 69 6f   filename ?optio
16fa0 6e 73 2d 6c 69 73 74 3f 0a 2a 2f 0a 73 74 61 74  ns-list?.*/.stat
16fb0 69 63 20 69 6e 74 20 74 65 73 74 5f 6f 70 65 6e  ic int test_open
16fc0 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
16fd0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
16fe0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
16ff0 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
17000 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
17010 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  .){.  const char
17020 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20 20 73   *zFilename;.  s
17030 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
17040 74 20 72 63 3b 0a 20 20 63 68 61 72 20 7a 42 75  t rc;.  char zBu
17050 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f  f[100];..  if( o
17060 62 6a 63 21 3d 33 20 26 26 20 6f 62 6a 63 21 3d  bjc!=3 && objc!=
17070 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
17080 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
17090 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
170a0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
170b0 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
170c0 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
170d0 22 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f  " filename optio
170e0 6e 73 2d 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20  ns-list", 0);.  
170f0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
17100 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65  OR;.  }..  zFile
17110 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65 74 53 74  name = Tcl_GetSt
17120 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b 0a 20  ring(objv[1]);. 
17130 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
17140 65 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 64  en(zFilename, &d
17150 62 29 3b 0a 20 20 0a 20 20 69 66 28 20 73 71 6c  b);.  .  if( sql
17160 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e  ite3TestMakePoin
17170 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a  terStr(interp, z
17180 42 75 66 2c 20 64 62 29 20 29 20 72 65 74 75 72  Buf, db) ) retur
17190 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
171a0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
171b0 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29  interp, zBuf, 0)
171c0 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
171d0 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
171e0 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31  e: sqlite3_open1
171f0 36 20 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f  6 filename optio
17200 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  ns.*/.static int
17210 20 74 65 73 74 5f 6f 70 65 6e 31 36 28 0a 20 20   test_open16(.  
17220 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
17230 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
17240 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
17250 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
17260 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
17270 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
17280 4d 49 54 5f 55 54 46 31 36 0a 20 20 63 6f 6e 73  MIT_UTF16.  cons
17290 74 20 76 6f 69 64 20 2a 7a 46 69 6c 65 6e 61 6d  t void *zFilenam
172a0 65 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  e;.  sqlite3 *db
172b0 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68  ;.  int rc;.  ch
172c0 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a 0a 20  ar zBuf[100];.. 
172d0 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
172e0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
172f0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
17300 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
17310 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
17320 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
17330 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c  (objv[0]), " fil
17340 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73 2d 6c 69  ename options-li
17350 73 74 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  st", 0);.    ret
17360 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
17370 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20   }..  zFilename 
17380 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72  = Tcl_GetByteArr
17390 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31  ayFromObj(objv[1
173a0 5d 2c 20 30 29 3b 0a 20 20 72 63 20 3d 20 73 71  ], 0);.  rc = sq
173b0 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28 7a 46 69  lite3_open16(zFi
173c0 6c 65 6e 61 6d 65 2c 20 26 64 62 29 3b 0a 20 20  lename, &db);.  
173d0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
173e0 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72  stMakePointerStr
173f0 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 64  (interp, zBuf, d
17400 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
17410 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 41 70 70  ERROR;.  Tcl_App
17420 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
17430 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23 65 6e 64  , zBuf, 0);.#end
17440 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
17450 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74  T_UTF16 */.  ret
17460 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
17470 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
17480 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31 36 20 3c  te3_complete16 <
17490 55 54 46 2d 31 36 20 73 74 72 69 6e 67 3e 0a 2a  UTF-16 string>.*
174a0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31 20 69 66  *.** Return 1 if
174b0 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 61 72   the supplied ar
174c0 67 75 6d 65 6e 74 20 69 73 20 61 20 63 6f 6d 70  gument is a comp
174d0 6c 65 74 65 20 53 51 4c 20 73 74 61 74 65 6d 65  lete SQL stateme
174e0 6e 74 2c 20 6f 72 20 7a 65 72 6f 0a 2a 2a 20 6f  nt, or zero.** o
174f0 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a 73 74 61  therwise..*/.sta
17500 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6d  tic int test_com
17510 70 6c 65 74 65 31 36 28 0a 20 20 76 6f 69 64 20  plete16(.  void 
17520 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
17530 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
17540 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
17550 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
17560 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 20 21   objv[].){.#if !
17570 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
17580 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 29 20 26 26  MIT_COMPLETE) &&
17590 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
175a0 5f 4f 4d 49 54 5f 55 54 46 31 36 29 0a 20 20 63  _OMIT_UTF16).  c
175b0 68 61 72 20 2a 7a 42 75 66 3b 0a 0a 20 20 69 66  har *zBuf;..  if
175c0 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
175d0 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
175e0 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
175f0 76 2c 20 22 3c 75 74 66 2d 31 36 20 73 71 6c 3e  v, "<utf-16 sql>
17600 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
17610 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
17620 20 7a 42 75 66 20 3d 20 28 63 68 61 72 2a 29 54   zBuf = (char*)T
17630 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79 46  cl_GetByteArrayF
17640 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31 5d 2c 20  romObj(objv[1], 
17650 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  0);.  Tcl_SetObj
17660 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
17670 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
17680 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31 36 28  ite3_complete16(
17690 7a 42 75 66 29 29 29 3b 0a 23 65 6e 64 69 66 20  zBuf)));.#endif 
176a0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
176b0 4f 4d 50 4c 45 54 45 20 26 26 20 53 51 4c 49 54  OMPLETE && SQLIT
176c0 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
176d0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
176e0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
176f0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 53 54   sqlite3_step ST
17700 4d 54 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65  MT.**.** Advance
17710 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
17720 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 2e 0a  o the next row..
17730 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
17740 73 74 5f 73 74 65 70 28 0a 20 20 76 6f 69 64 20  st_step(.  void 
17750 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
17760 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
17770 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
17780 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
17790 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
177a0 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
177b0 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69  ;.  int rc;..  i
177c0 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
177d0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
177e0 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
177f0 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
17800 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
17810 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
17820 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 22  bjv[0]), " STMT"
17830 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
17840 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
17850 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
17860 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
17870 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
17880 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
17890 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
178a0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
178b0 5f 73 74 65 70 28 70 53 74 6d 74 29 3b 0a 0a 20  _step(pStmt);.. 
178c0 20 2f 2a 20 69 66 28 20 72 63 21 3d 53 51 4c 49   /* if( rc!=SQLI
178d0 54 45 5f 44 4f 4e 45 20 26 26 20 72 63 21 3d 53  TE_DONE && rc!=S
178e0 51 4c 49 54 45 5f 52 4f 57 20 29 20 72 65 74 75  QLITE_ROW ) retu
178f0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 20 2a 2f  rn TCL_ERROR; */
17900 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
17910 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
17920 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29  )t1ErrorName(rc)
17930 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
17940 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
17950 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63  Usage: sqlite3_c
17960 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 53 54 4d 54  olumn_count STMT
17970 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74   .**.** Return t
17980 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
17990 75 6d 6e 73 20 72 65 74 75 72 6e 65 64 20 62 79  umns returned by
179a0 20 74 68 65 20 73 71 6c 20 73 74 61 74 65 6d 65   the sql stateme
179b0 6e 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74  nt STMT..*/.stat
179c0 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75  ic int test_colu
179d0 6d 6e 5f 63 6f 75 6e 74 28 0a 20 20 76 6f 69 64  mn_count(.  void
179e0 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
179f0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
17a00 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
17a10 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
17a20 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
17a30 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
17a40 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  t;..  if( objc!=
17a50 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
17a60 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
17a70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
17a80 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
17a90 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
17aa0 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
17ab0 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20  " STMT column", 
17ac0 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
17ad0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
17ae0 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
17af0 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
17b00 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
17b10 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
17b20 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
17b30 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
17b40 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
17b50 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65  NewIntObj(sqlite
17b60 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70  3_column_count(p
17b70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72  Stmt)));.  retur
17b80 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
17b90 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
17ba0 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 53 54  3_column_type ST
17bb0 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20  MT column.**.** 
17bc0 52 65 74 75 72 6e 20 74 68 65 20 74 79 70 65 20  Return the type 
17bd0 6f 66 20 74 68 65 20 64 61 74 61 20 69 6e 20 63  of the data in c
17be0 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f  olumn 'column' o
17bf0 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
17c00 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  w..*/.static int
17c10 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 74 79 70   test_column_typ
17c20 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
17c30 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
17c40 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
17c50 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
17c60 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
17c70 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
17c80 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
17c90 74 20 63 6f 6c 3b 0a 20 20 69 6e 74 20 74 70 3b  t col;.  int tp;
17ca0 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
17cb0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
17cc0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
17cd0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
17ce0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
17cf0 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
17d00 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
17d10 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29  STMT column", 0)
17d20 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
17d30 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
17d40 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
17d50 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
17d60 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
17d70 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
17d80 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
17d90 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
17da0 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
17db0 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72  jv[2], &col) ) r
17dc0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
17dd0 0a 0a 20 20 74 70 20 3d 20 73 71 6c 69 74 65 33  ..  tp = sqlite3
17de0 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74  _column_type(pSt
17df0 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 73 77 69 74  mt, col);.  swit
17e00 63 68 28 20 74 70 20 29 7b 0a 20 20 20 20 63 61  ch( tp ){.    ca
17e10 73 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45  se SQLITE_INTEGE
17e20 52 3a 20 0a 20 20 20 20 20 20 54 63 6c 5f 53 65  R: .      Tcl_Se
17e30 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
17e40 22 49 4e 54 45 47 45 52 22 2c 20 54 43 4c 5f 53  "INTEGER", TCL_S
17e50 54 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62  TATIC); .      b
17e60 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53  reak;.    case S
17e70 51 4c 49 54 45 5f 4e 55 4c 4c 3a 0a 20 20 20 20  QLITE_NULL:.    
17e80 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
17e90 69 6e 74 65 72 70 2c 20 22 4e 55 4c 4c 22 2c 20  interp, "NULL", 
17ea0 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20  TCL_STATIC); .  
17eb0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
17ec0 61 73 65 20 53 51 4c 49 54 45 5f 46 4c 4f 41 54  ase SQLITE_FLOAT
17ed0 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52  :.      Tcl_SetR
17ee0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 46  esult(interp, "F
17ef0 4c 4f 41 54 22 2c 20 54 43 4c 5f 53 54 41 54 49  LOAT", TCL_STATI
17f00 43 29 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b  C); .      break
17f10 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
17f20 45 5f 54 45 58 54 3a 0a 20 20 20 20 20 20 54 63  E_TEXT:.      Tc
17f30 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
17f40 72 70 2c 20 22 54 45 58 54 22 2c 20 54 43 4c 5f  rp, "TEXT", TCL_
17f50 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20  STATIC); .      
17f60 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
17f70 53 51 4c 49 54 45 5f 42 4c 4f 42 3a 0a 20 20 20  SQLITE_BLOB:.   
17f80 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74     Tcl_SetResult
17f90 28 69 6e 74 65 72 70 2c 20 22 42 4c 4f 42 22 2c  (interp, "BLOB",
17fa0 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20   TCL_STATIC); . 
17fb0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
17fc0 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 61  default:.      a
17fd0 73 73 65 72 74 28 30 29 3b 0a 20 20 7d 0a 0a 20  ssert(0);.  }.. 
17fe0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
17ff0 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
18000 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
18010 6e 74 36 34 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  nt64 STMT column
18020 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
18030 65 20 64 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e  e data in column
18040 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65   'column' of the
18050 20 63 75 72 72 65 6e 74 20 72 6f 77 20 63 61 73   current row cas
18060 74 20 61 73 20 61 6e 0a 2a 2a 20 77 69 64 65 20  t as an.** wide 
18070 28 36 34 2d 62 69 74 29 20 69 6e 74 65 67 65 72  (64-bit) integer
18080 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
18090 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  test_column_int6
180a0 34 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  4(.  void * clie
180b0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
180c0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
180d0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
180e0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
180f0 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
18100 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
18110 74 20 63 6f 6c 3b 0a 20 20 69 36 34 20 69 56 61  t col;.  i64 iVa
18120 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  l;..  if( objc!=
18130 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
18140 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
18150 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
18160 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
18170 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
18180 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
18190 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20  " STMT column", 
181a0 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
181b0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
181c0 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
181d0 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
181e0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
181f0 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
18200 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
18210 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
18220 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
18230 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29  objv[2], &col) )
18240 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
18250 52 3b 0a 0a 20 20 69 56 61 6c 20 3d 20 73 71 6c  R;..  iVal = sql
18260 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36  ite3_column_int6
18270 34 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20  4(pStmt, col);. 
18280 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
18290 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
182a0 77 57 69 64 65 49 6e 74 4f 62 6a 28 69 56 61 6c  wWideIntObj(iVal
182b0 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
182c0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
182d0 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
182e0 75 6d 6e 5f 62 6c 6f 62 20 53 54 4d 54 20 63 6f  umn_blob STMT co
182f0 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  lumn.*/.static i
18300 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 62  nt test_column_b
18310 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  lob(.  void * cl
18320 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
18330 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
18340 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
18350 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
18360 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
18370 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
18380 69 6e 74 20 63 6f 6c 3b 0a 0a 20 20 69 6e 74 20  int col;..  int 
18390 6c 65 6e 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69  len;.  const voi
183a0 64 20 2a 70 42 6c 6f 62 3b 0a 0a 20 20 69 66 28  d *pBlob;..  if(
183b0 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20   objc!=3 ){.    
183c0 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
183d0 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
183e0 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
183f0 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
18400 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
18410 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f  v[0]), " STMT co
18420 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72  lumn", 0);.    r
18430 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
18440 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
18450 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
18460 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
18470 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
18480 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
18490 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
184a0 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
184b0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
184c0 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54  &col) ) return T
184d0 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 6c 65 6e  CL_ERROR;..  len
184e0 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
184f0 6e 5f 62 79 74 65 73 28 70 53 74 6d 74 2c 20 63  n_bytes(pStmt, c
18500 6f 6c 29 3b 0a 20 20 70 42 6c 6f 62 20 3d 20 73  ol);.  pBlob = s
18510 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c  qlite3_column_bl
18520 6f 62 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a  ob(pStmt, col);.
18530 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
18540 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
18550 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28 70  ewByteArrayObj(p
18560 42 6c 6f 62 2c 20 6c 65 6e 29 29 3b 0a 20 20 72  Blob, len));.  r
18570 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
18580 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
18590 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75  lite3_column_dou
185a0 62 6c 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ble STMT column.
185b0 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
185c0 20 64 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e 20   data in column 
185d0 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65 20  'column' of the 
185e0 63 75 72 72 65 6e 74 20 72 6f 77 20 63 61 73 74  current row cast
185f0 20 61 73 20 61 20 64 6f 75 62 6c 65 2e 0a 2a 2f   as a double..*/
18600 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
18610 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 0a  _column_double(.
18620 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
18630 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
18640 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
18650 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
18660 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
18670 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
18680 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63   *pStmt;.  int c
18690 6f 6c 3b 0a 20 20 64 6f 75 62 6c 65 20 72 56 61  ol;.  double rVa
186a0 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  l;..  if( objc!=
186b0 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
186c0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
186d0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
186e0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
186f0 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
18700 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
18710 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20  " STMT column", 
18720 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
18730 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
18740 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
18750 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
18760 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
18770 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
18780 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
18790 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
187a0 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
187b0 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29  objv[2], &col) )
187c0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
187d0 52 3b 0a 0a 20 20 72 56 61 6c 20 3d 20 73 71 6c  R;..  rVal = sql
187e0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
187f0 6c 65 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a  le(pStmt, col);.
18800 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
18810 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
18820 65 77 44 6f 75 62 6c 65 4f 62 6a 28 72 56 61 6c  ewDoubleObj(rVal
18830 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
18840 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
18850 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 64 61 74  age: sqlite3_dat
18860 61 5f 63 6f 75 6e 74 20 53 54 4d 54 20 0a 2a 2a  a_count STMT .**
18870 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
18880 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
18890 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
188a0 20 73 71 6c 20 73 74 61 74 65 6d 65 6e 74 20 53   sql statement S
188b0 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  TMT..*/.static i
188c0 6e 74 20 74 65 73 74 5f 64 61 74 61 5f 63 6f 75  nt test_data_cou
188d0 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  nt(.  void * cli
188e0 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
188f0 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
18900 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
18910 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
18920 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
18930 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20  stmt *pStmt;..  
18940 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
18950 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
18960 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
18970 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
18980 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
18990 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
189a0 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
189b0 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
189c0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
189d0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
189e0 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
189f0 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
18a00 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
18a10 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
18a20 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 54 63 6c  CL_ERROR;..  Tcl
18a30 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
18a40 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
18a50 4f 62 6a 28 73 71 6c 69 74 65 33 5f 64 61 74 61  Obj(sqlite3_data
18a60 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 29 29 3b  _count(pStmt)));
18a70 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
18a80 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
18a90 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
18aa0 5f 74 65 78 74 20 53 54 4d 54 20 63 6f 6c 75 6d  _text STMT colum
18ab0 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  n.**.** Usage: s
18ac0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
18ad0 63 6c 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75  cltype STMT colu
18ae0 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  mn.**.** Usage: 
18af0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
18b00 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a  ame STMT column.
18b10 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
18b20 73 74 5f 73 74 6d 74 5f 75 74 66 38 28 0a 20 20  st_stmt_utf8(.  
18b30 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
18b40 61 2c 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  a,        /* Poi
18b50 6e 74 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41  nter to SQLite A
18b60 50 49 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62  PI function to b
18b70 65 20 69 6e 76 6f 6b 65 20 2a 2f 0a 20 20 54 63  e invoke */.  Tc
18b80 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
18b90 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
18ba0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
18bb0 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
18bc0 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
18bd0 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 63 6f 6e    int col;.  con
18be0 73 74 20 63 68 61 72 20 2a 28 2a 78 46 75 6e 63  st char *(*xFunc
18bf0 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c  )(sqlite3_stmt*,
18c00 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61   int) = clientDa
18c10 74 61 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ta;.  const char
18c20 20 2a 7a 52 65 74 3b 0a 0a 20 20 69 66 28 20 6f   *zRet;..  if( o
18c30 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
18c40 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
18c50 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
18c60 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
18c70 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
18c80 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
18c90 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75  0]), " STMT colu
18ca0 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  mn", 0);.    ret
18cb0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
18cc0 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
18cd0 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
18ce0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
18cf0 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
18d00 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
18d10 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
18d20 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
18d30 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63  erp, objv[2], &c
18d40 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ol) ) return TCL
18d50 5f 45 52 52 4f 52 3b 0a 20 20 7a 52 65 74 20 3d  _ERROR;.  zRet =
18d60 20 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f   xFunc(pStmt, co
18d70 6c 29 3b 0a 20 20 69 66 28 20 7a 52 65 74 20 29  l);.  if( zRet )
18d80 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73  {.    Tcl_SetRes
18d90 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
18da0 72 20 2a 29 7a 52 65 74 2c 20 30 29 3b 0a 20 20  r *)zRet, 0);.  
18db0 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  }.  return TCL_O
18dc0 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74  K;.}..static int
18dd0 20 74 65 73 74 5f 67 6c 6f 62 61 6c 5f 72 65 63   test_global_rec
18de0 6f 76 65 72 28 0a 20 20 76 6f 69 64 20 2a 20 63  over(.  void * c
18df0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
18e00 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
18e10 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
18e20 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
18e30 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
18e40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f 42  SQLITE_OMIT_GLOB
18e50 41 4c 52 45 43 4f 56 45 52 0a 20 20 69 6e 74 20  ALRECOVER.  int 
18e60 72 63 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  rc;.  if( objc!=
18e70 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  1 ){.    Tcl_Wro
18e80 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
18e90 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 22 29 3b 0a  , 1, objv, "");.
18ea0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
18eb0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  RROR;.  }.  rc =
18ec0 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f   sqlite3_global_
18ed0 72 65 63 6f 76 65 72 28 29 3b 0a 20 20 54 63 6c  recover();.  Tcl
18ee0 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
18ef0 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72  p, (char *)t1Err
18f00 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f  orName(rc), TCL_
18f10 53 54 41 54 49 43 29 3b 0a 23 65 6e 64 69 66 0a  STATIC);.#endif.
18f20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
18f30 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
18f40 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
18f50 74 65 78 74 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  text STMT column
18f60 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  .**.** Usage: sq
18f70 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
18f80 6c 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75 6d  ltype STMT colum
18f90 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  n.**.** Usage: s
18fa0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61  qlite3_column_na
18fb0 6d 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a  me STMT column.*
18fc0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
18fd0 74 5f 73 74 6d 74 5f 75 74 66 31 36 28 0a 20 20  t_stmt_utf16(.  
18fe0 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
18ff0 61 2c 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  a,     /* Pointe
19000 72 20 74 6f 20 53 51 4c 69 74 65 20 41 50 49 20  r to SQLite API 
19010 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 69  function to be i
19020 6e 76 6f 6b 65 64 20 2a 2f 0a 20 20 54 63 6c 5f  nvoked */.  Tcl_
19030 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
19040 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
19050 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
19060 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53  v[].){.#ifndef S
19070 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
19080 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
19090 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f  *pStmt;.  int co
190a0 6c 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 52  l;.  Tcl_Obj *pR
190b0 65 74 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  et;.  const void
190c0 20 2a 7a 4e 61 6d 65 31 36 3b 0a 20 20 63 6f 6e   *zName16;.  con
190d0 73 74 20 76 6f 69 64 20 2a 28 2a 78 46 75 6e 63  st void *(*xFunc
190e0 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c  )(sqlite3_stmt*,
190f0 20 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61   int) = clientDa
19100 74 61 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  ta;..  if( objc!
19110 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
19120 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
19130 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
19140 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
19150 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
19160 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
19170 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
19180 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
19190 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
191a0 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
191b0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
191c0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
191d0 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
191e0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
191f0 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
19200 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
19210 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
19220 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
19230 4f 52 3b 0a 0a 20 20 7a 4e 61 6d 65 31 36 20 3d  OR;..  zName16 =
19240 20 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63 6f   xFunc(pStmt, co
19250 6c 29 3b 0a 20 20 69 66 28 20 7a 4e 61 6d 65 31  l);.  if( zName1
19260 36 20 29 7b 0a 20 20 20 20 70 52 65 74 20 3d 20  6 ){.    pRet = 
19270 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79  Tcl_NewByteArray
19280 4f 62 6a 28 7a 4e 61 6d 65 31 36 2c 20 73 71 6c  Obj(zName16, sql
19290 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e  ite3Utf16ByteLen
192a0 28 7a 4e 61 6d 65 31 36 2c 20 2d 31 29 2b 32 29  (zName16, -1)+2)
192b0 3b 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a  ;.    Tcl_SetObj
192c0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 70  Result(interp, p
192d0 52 65 74 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  Ret);.  }.#endif
192e0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
192f0 55 54 46 31 36 20 2a 2f 0a 0a 20 20 72 65 74 75  UTF16 */..  retu
19300 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
19310 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
19320 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 20 53 54  e3_column_int ST
19330 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20  MT column.**.** 
19340 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63  Usage: sqlite3_c
19350 6f 6c 75 6d 6e 5f 62 79 74 65 73 20 53 54 4d 54  olumn_bytes STMT
19360 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73   column.**.** Us
19370 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
19380 75 6d 6e 5f 62 79 74 65 73 31 36 20 53 54 4d 54  umn_bytes16 STMT
19390 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2f 0a 73 74   column.**.*/.st
193a0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 74  atic int test_st
193b0 6d 74 5f 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a  mt_int(.  void *
193c0 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20   clientData,    
193d0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 51  /* Pointer to SQ
193e0 4c 69 74 65 20 41 50 49 20 66 75 6e 63 74 69 6f  Lite API functio
193f0 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20  n to be invoked 
19400 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  */.  Tcl_Interp 
19410 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
19420 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
19430 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
19440 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
19450 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c  pStmt;.  int col
19460 3b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29  ;.  int (*xFunc)
19470 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 20  (sqlite3_stmt*, 
19480 69 6e 74 29 20 3d 20 63 6c 69 65 6e 74 44 61 74  int) = clientDat
19490 61 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  a;..  if( objc!=
194a0 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
194b0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
194c0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
194d0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
194e0 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
194f0 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
19500 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20  " STMT column", 
19510 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
19520 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
19530 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
19540 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
19550 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
19560 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
19570 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
19580 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
19590 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
195a0 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29  objv[2], &col) )
195b0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
195c0 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  R;..  Tcl_SetObj
195d0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
195e0 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 78 46 75  cl_NewIntObj(xFu
195f0 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c 29 29 29  nc(pStmt, col)))
19600 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
19610 4b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  K;.}..#ifndef SQ
19620 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f  LITE_OMIT_DISKIO
19630 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
19640 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52 65 61 64  qlite3OsOpenRead
19650 57 72 69 74 65 20 3c 66 69 6c 65 6e 61 6d 65 3e  Write <filename>
19660 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
19670 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 4f 70 65  est_sqlite3OsOpe
19680 6e 52 65 61 64 57 72 69 74 65 28 0a 20 20 76 6f  nReadWrite(.  vo
19690 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
196a0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
196b0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
196c0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
196d0 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
196e0 4f 73 46 69 6c 65 20 2a 70 46 69 6c 65 3b 0a 20  OsFile *pFile;. 
196f0 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 64   int rc;.  int d
19700 75 6d 6d 79 3b 0a 20 20 63 68 61 72 20 7a 42 75  ummy;.  char zBu
19710 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f  f[100];..  if( o
19720 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
19730 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
19740 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
19750 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
19760 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
19770 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
19780 30 5d 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65 22  0]), " filename"
19790 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
197a0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
197b0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f  .  rc = sqlite3O
197c0 73 4f 70 65 6e 52 65 61 64 57 72 69 74 65 28 54  sOpenReadWrite(T
197d0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
197e0 76 5b 31 5d 29 2c 20 26 70 46 69 6c 65 2c 20 26  v[1]), &pFile, &
197f0 64 75 6d 6d 79 29 3b 0a 20 20 69 66 28 20 72 63  dummy);.  if( rc
19800 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
19810 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74     Tcl_SetResult
19820 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
19830 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29  )t1ErrorName(rc)
19840 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20  , TCL_STATIC);. 
19850 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
19860 52 4f 52 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ROR;.  }.  sqlit
19870 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65  e3TestMakePointe
19880 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75  rStr(interp, zBu
19890 66 2c 20 70 46 69 6c 65 29 3b 0a 20 20 54 63 6c  f, pFile);.  Tcl
198a0 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
198b0 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72  p, zBuf, 0);.  r
198c0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
198d0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
198e0 20 20 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65    sqlite3OsClose
198f0 20 3c 66 69 6c 65 20 68 61 6e 64 6c 65 3e 0a 2a   <file handle>.*
19900 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
19910 74 5f 73 71 6c 69 74 65 33 4f 73 43 6c 6f 73 65  t_sqlite3OsClose
19920 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
19930 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
19940 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
19950 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
19960 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
19970 0a 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a 70 46  .){.  OsFile *pF
19980 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  ile;.  int rc;..
19990 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
199a0 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
199b0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
199c0 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
199d0 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
199e0 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
199f0 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69  g(objv[0]), " fi
19a00 6c 65 68 61 6e 64 6c 65 22 2c 20 30 29 3b 0a 20  lehandle", 0);. 
19a10 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
19a20 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
19a30 67 65 74 46 69 6c 65 50 6f 69 6e 74 65 72 28 69  getFilePointer(i
19a40 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
19a50 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
19a60 70 46 69 6c 65 29 20 29 7b 0a 20 20 20 20 72 65  pFile) ){.    re
19a70 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
19a80 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
19a90 65 33 4f 73 43 6c 6f 73 65 28 26 70 46 69 6c 65  e3OsClose(&pFile
19aa0 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
19ab0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63  ITE_OK ){.    Tc
19ac0 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
19ad0 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72  rp, (char *)t1Er
19ae0 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
19af0 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 72 65  _STATIC);.    re
19b00 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
19b10 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c    }.  return TCL
19b20 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
19b30 61 67 65 3a 20 20 73 71 6c 69 74 65 33 4f 73 4c  age:  sqlite3OsL
19b40 6f 63 6b 20 3c 66 69 6c 65 20 68 61 6e 64 6c 65  ock <file handle
19b50 3e 20 3c 6c 6f 63 6b 74 79 70 65 3e 0a 2a 2f 0a  > <locktype>.*/.
19b60 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
19b70 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 0a 20  sqlite3OsLock(. 
19b80 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
19b90 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
19ba0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
19bb0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
19bc0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
19bd0 0a 20 20 4f 73 46 69 6c 65 20 2a 20 70 46 69 6c  .  OsFile * pFil
19be0 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  e;.  int rc;..  
19bf0 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
19c00 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
19c10 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
19c20 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
19c30 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
19c40 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
19c50 28 6f 62 6a 76 5b 30 5d 29 2c 20 0a 20 20 20 20  (objv[0]), .    
19c60 20 20 20 20 22 20 66 69 6c 65 68 61 6e 64 6c 65      " filehandle
19c70 20 28 53 48 41 52 45 44 7c 52 45 53 45 52 56 45   (SHARED|RESERVE
19c80 44 7c 50 45 4e 44 49 4e 47 7c 45 58 43 4c 55 53  D|PENDING|EXCLUS
19c90 49 56 45 29 22 2c 20 30 29 3b 0a 20 20 20 20 72  IVE)", 0);.    r
19ca0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
19cb0 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 46  .  }..  if( getF
19cc0 69 6c 65 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  ilePointer(inter
19cd0 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
19ce0 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 46 69 6c  (objv[1]), &pFil
19cf0 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  e) ){.    return
19d00 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
19d10 0a 20 20 69 66 28 20 30 3d 3d 73 74 72 63 6d 70  .  if( 0==strcmp
19d20 28 22 53 48 41 52 45 44 22 2c 20 54 63 6c 5f 47  ("SHARED", Tcl_G
19d30 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d  etString(objv[2]
19d40 29 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  )) ){.    rc = s
19d50 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 28 70 46 69  qlite3OsLock(pFi
19d60 6c 65 2c 20 53 48 41 52 45 44 5f 4c 4f 43 4b 29  le, SHARED_LOCK)
19d70 3b 0a 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28  ;.  }.  else if(
19d80 20 30 3d 3d 73 74 72 63 6d 70 28 22 52 45 53 45   0==strcmp("RESE
19d90 52 56 45 44 22 2c 20 54 63 6c 5f 47 65 74 53 74  RVED", Tcl_GetSt
19da0 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29  ring(objv[2])) )
19db0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
19dc0 65 33 4f 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20  e3OsLock(pFile, 
19dd0 52 45 53 45 52 56 45 44 5f 4c 4f 43 4b 29 3b 0a  RESERVED_LOCK);.
19de0 20 20 7d 0a 20 20 65 6c 73 65 20 69 66 28 20 30    }.  else if( 0
19df0 3d 3d 73 74 72 63 6d 70 28 22 50 45 4e 44 49 4e  ==strcmp("PENDIN
19e00 47 22 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  G", Tcl_GetStrin
19e10 67 28 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20  g(objv[2])) ){. 
19e20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
19e30 73 4c 6f 63 6b 28 70 46 69 6c 65 2c 20 50 45 4e  sLock(pFile, PEN
19e40 44 49 4e 47 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 0a  DING_LOCK);.  }.
19e50 20 20 65 6c 73 65 20 69 66 28 20 30 3d 3d 73 74    else if( 0==st
19e60 72 63 6d 70 28 22 45 58 43 4c 55 53 49 56 45 22  rcmp("EXCLUSIVE"
19e70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
19e80 6f 62 6a 76 5b 32 5d 29 29 20 29 7b 0a 20 20 20  objv[2])) ){.   
19e90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 4c   rc = sqlite3OsL
19ea0 6f 63 6b 28 70 46 69 6c 65 2c 20 45 58 43 4c 55  ock(pFile, EXCLU
19eb0 53 49 56 45 5f 4c 4f 43 4b 29 3b 0a 20 20 7d 65  SIVE_LOCK);.  }e
19ec0 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  lse{.    Tcl_App
19ed0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
19ee0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
19ef0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
19f00 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  .        Tcl_Get
19f10 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
19f20 20 0a 20 20 20 20 20 20 20 20 22 20 66 69 6c 65   .        " file
19f30 68 61 6e 64 6c 65 20 28 53 48 41 52 45 44 7c 52  handle (SHARED|R
19f40 45 53 45 52 56 45 44 7c 50 45 4e 44 49 4e 47 7c  ESERVED|PENDING|
19f50 45 58 43 4c 55 53 49 56 45 29 22 2c 20 30 29 3b  EXCLUSIVE)", 0);
19f60 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
19f70 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
19f80 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
19f90 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65  ){.    Tcl_SetRe
19fa0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
19fb0 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65  ar *)t1ErrorName
19fc0 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43  (rc), TCL_STATIC
19fd0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
19fe0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
19ff0 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
1a000 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
1a010 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 20 3c  qlite3OsUnlock <
1a020 66 69 6c 65 20 68 61 6e 64 6c 65 3e 0a 2a 2f 0a  file handle>.*/.
1a030 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
1a040 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 28  sqlite3OsUnlock(
1a050 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
1a060 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
1a070 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
1a080 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
1a090 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
1a0a0 29 7b 0a 20 20 4f 73 46 69 6c 65 20 2a 20 70 46  ){.  OsFile * pF
1a0b0 69 6c 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  ile;.  int rc;..
1a0c0 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
1a0d0 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
1a0e0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
1a0f0 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
1a100 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
1a110 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
1a120 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69  g(objv[0]), " fi
1a130 6c 65 68 61 6e 64 6c 65 22 2c 20 30 29 3b 0a 20  lehandle", 0);. 
1a140 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
1a150 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
1a160 67 65 74 46 69 6c 65 50 6f 69 6e 74 65 72 28 69  getFilePointer(i
1a170 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
1a180 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
1a190 70 46 69 6c 65 29 20 29 7b 0a 20 20 20 20 72 65  pFile) ){.    re
1a1a0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1a1b0 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
1a1c0 65 33 4f 73 55 6e 6c 6f 63 6b 28 70 46 69 6c 65  e3OsUnlock(pFile
1a1d0 2c 20 4e 4f 5f 4c 4f 43 4b 29 3b 0a 20 20 69 66  , NO_LOCK);.  if
1a1e0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1a1f0 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65  ){.    Tcl_SetRe
1a200 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
1a210 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65  ar *)t1ErrorName
1a220 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43  (rc), TCL_STATIC
1a230 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
1a240 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
1a250 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
1a260 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
1a270 71 6c 69 74 65 33 4f 73 54 65 6d 70 46 69 6c 65  qlite3OsTempFile
1a280 4e 61 6d 65 0a 2a 2f 0a 73 74 61 74 69 63 20 69  Name.*/.static i
1a290 6e 74 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f  nt test_sqlite3O
1a2a0 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 0a 20  sTempFileName(. 
1a2b0 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
1a2c0 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
1a2d0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
1a2e0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
1a2f0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
1a300 0a 20 20 63 68 61 72 20 7a 46 69 6c 65 5b 53 51  .  char zFile[SQ
1a310 4c 49 54 45 5f 54 45 4d 50 4e 41 4d 45 5f 53 49  LITE_TEMPNAME_SI
1a320 5a 45 5d 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  ZE];.  int rc;..
1a330 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73    rc = sqlite3Os
1a340 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 7a 46 69  TempFileName(zFi
1a350 6c 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  le);.  if( rc!=S
1a360 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1a370 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
1a380 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31  terp, (char *)t1
1a390 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54  ErrorName(rc), T
1a3a0 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  CL_STATIC);.    
1a3b0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1a3c0 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65  ;.  }.  Tcl_Appe
1a3d0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
1a3e0 20 7a 46 69 6c 65 2c 20 30 29 3b 0a 20 20 72 65   zFile, 0);.  re
1a3f0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23  turn TCL_OK;.}.#
1a400 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  endif../*.** Usa
1a410 67 65 3a 20 20 73 71 6c 69 74 65 5f 73 65 74 5f  ge:  sqlite_set_
1a420 6d 61 67 69 63 20 20 44 42 20 20 4d 41 47 49 43  magic  DB  MAGIC
1a430 2d 4e 55 4d 42 45 52 0a 2a 2a 0a 2a 2a 20 53 65  -NUMBER.**.** Se
1a440 74 20 74 68 65 20 64 62 2d 3e 6d 61 67 69 63 20  t the db->magic 
1a450 76 61 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20  value.  This is 
1a460 75 73 65 64 20 74 6f 20 74 65 73 74 20 65 72 72  used to test err
1a470 6f 72 20 72 65 63 6f 76 65 72 79 20 6c 6f 67 69  or recovery logi
1a480 63 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  c..*/.static int
1a490 20 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69   sqlite_set_magi
1a4a0 63 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  c(.  void * clie
1a4b0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
1a4c0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
1a4d0 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72  int argc,.  char
1a4e0 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c   **argv.){.  sql
1a4f0 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
1a500 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
1a510 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
1a520 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
1a530 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
1a540 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
1a550 20 20 20 20 20 20 20 20 22 20 44 42 20 4d 41 47          " DB MAG
1a560 49 43 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  IC", 0);.    ret
1a570 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1a580 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
1a590 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
1a5a0 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
1a5b0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1a5c0 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67    if( strcmp(arg
1a5d0 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41  v[2], "SQLITE_MA
1a5e0 47 49 43 5f 4f 50 45 4e 22 29 3d 3d 30 20 29 7b  GIC_OPEN")==0 ){
1a5f0 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  .    db->magic =
1a600 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
1a610 45 4e 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  EN;.  }else if( 
1a620 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20  strcmp(argv[2], 
1a630 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c  "SQLITE_MAGIC_CL
1a640 4f 53 45 44 22 29 3d 3d 30 20 29 7b 0a 20 20 20  OSED")==0 ){.   
1a650 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c   db->magic = SQL
1a660 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
1a670 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
1a680 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53  rcmp(argv[2], "S
1a690 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
1a6a0 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d  ")==0 ){.    db-
1a6b0 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
1a6c0 4d 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 7d 65  MAGIC_BUSY;.  }e
1a6d0 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61  lse if( strcmp(a
1a6e0 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f  rgv[2], "SQLITE_
1a6f0 4d 41 47 49 43 5f 45 52 52 4f 52 22 29 3d 3d 30  MAGIC_ERROR")==0
1a700 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69   ){.    db->magi
1a710 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  c = SQLITE_MAGIC
1a720 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 20  _ERROR;.  }else 
1a730 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69  if( Tcl_GetInt(i
1a740 6e 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20  nterp, argv[2], 
1a750 26 64 62 2d 3e 6d 61 67 69 63 29 20 29 7b 0a 20  &db->magic) ){. 
1a760 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
1a770 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  ROR;.  }.  retur
1a780 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
1a790 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
1a7a0 65 33 5f 69 6e 74 65 72 72 75 70 74 20 20 44 42  e3_interrupt  DB
1a7b0 20 0a 2a 2a 0a 2a 2a 20 54 72 69 67 67 65 72 20   .**.** Trigger 
1a7c0 61 6e 20 69 6e 74 65 72 72 75 70 74 20 6f 6e 20  an interrupt on 
1a7d0 44 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  DB.*/.static int
1a7e0 20 74 65 73 74 5f 69 6e 74 65 72 72 75 70 74 28   test_interrupt(
1a7f0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
1a800 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
1a810 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
1a820 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
1a830 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74  *argv.){.  sqlit
1a840 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72  e3 *db;.  if( ar
1a850 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
1a860 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
1a870 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
1a880 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
1a890 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44  "", argv[0], " D
1a8a0 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  B", 0);.    retu
1a8b0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1a8c0 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
1a8d0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
1a8e0 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
1a8f0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1a900 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
1a910 70 74 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e  pt(db);.  return
1a920 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74   TCL_OK;.}..stat
1a930 69 63 20 75 38 20 2a 73 71 6c 69 74 65 33 5f 73  ic u8 *sqlite3_s
1a940 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65 20 3d 20  tack_baseline = 
1a950 30 3b 0a 0a 2f 2a 0a 2a 2a 20 46 69 6c 6c 20 74  0;../*.** Fill t
1a960 68 65 20 73 74 61 63 6b 20 77 69 74 68 20 61 20  he stack with a 
1a970 6b 6e 6f 77 6e 20 62 69 74 70 61 74 74 65 72 6e  known bitpattern
1a980 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
1a990 20 70 72 65 70 53 74 61 63 6b 28 76 6f 69 64 29   prepStack(void)
1a9a0 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 75 33 32  {.  int i;.  u32
1a9b0 20 62 69 67 42 75 66 5b 36 35 35 33 36 5d 3b 0a   bigBuf[65536];.
1a9c0 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a    for(i=0; i<siz
1a9d0 65 6f 66 28 62 69 67 42 75 66 29 3b 20 69 2b 2b  eof(bigBuf); i++
1a9e0 29 20 62 69 67 42 75 66 5b 69 5d 20 3d 20 30 78  ) bigBuf[i] = 0x
1a9f0 64 65 61 64 62 65 65 66 3b 0a 20 20 73 71 6c 69  deadbeef;.  sqli
1aa00 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69  te3_stack_baseli
1aa10 6e 65 20 3d 20 28 75 38 2a 29 26 62 69 67 42 75  ne = (u8*)&bigBu
1aa20 66 5b 36 35 35 33 36 5d 3b 0a 7d 0a 0a 2f 2a 0a  f[65536];.}../*.
1aa30 2a 2a 20 47 65 74 20 74 68 65 20 63 75 72 72 65  ** Get the curre
1aa40 6e 74 20 73 74 61 63 6b 20 64 65 70 74 68 2e 20  nt stack depth. 
1aa50 20 55 73 65 64 20 66 6f 72 20 64 65 62 75 67 67   Used for debugg
1aa60 69 6e 67 20 6f 6e 6c 79 2e 0a 2a 2f 0a 75 36 34  ing only..*/.u64
1aa70 20 73 71 6c 69 74 65 33 53 74 61 63 6b 44 65 70   sqlite3StackDep
1aa80 74 68 28 76 6f 69 64 29 7b 0a 20 20 75 38 20 78  th(void){.  u8 x
1aa90 3b 0a 20 20 72 65 74 75 72 6e 20 28 75 36 34 29  ;.  return (u64)
1aaa0 28 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62  (sqlite3_stack_b
1aab0 61 73 65 6c 69 6e 65 20 2d 20 26 78 29 3b 0a 7d  aseline - &x);.}
1aac0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
1aad0 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 75 73  sqlite3_stack_us
1aae0 65 64 20 44 42 20 53 51 4c 0a 2a 2a 0a 2a 2a 20  ed DB SQL.**.** 
1aaf0 54 72 79 20 74 6f 20 6d 65 61 73 75 72 65 20 74  Try to measure t
1ab00 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 73 74 61  he amount of sta
1ab10 63 6b 20 73 70 61 63 65 20 75 73 65 64 20 62 79  ck space used by
1ab20 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74   a call to sqlit
1ab30 65 33 5f 65 78 65 63 0a 2a 2f 0a 73 74 61 74 69  e3_exec.*/.stati
1ab40 63 20 69 6e 74 20 74 65 73 74 5f 73 74 61 63 6b  c int test_stack
1ab50 5f 75 73 65 64 28 0a 20 20 76 6f 69 64 20 2a 20  _used(.  void * 
1ab60 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
1ab70 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
1ab80 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20  ,.  int argc,.  
1ab90 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20  char **argv.){. 
1aba0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
1abb0 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 61 72 67  int i;.  if( arg
1abc0 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
1abd0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
1abe0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
1abf0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
1ac00 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20  ", argv[0], .   
1ac10 20 20 20 20 20 22 20 44 42 20 53 51 4c 22 2c 20       " DB SQL", 
1ac20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
1ac30 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
1ac40 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
1ac50 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
1ac60 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
1ac70 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 70 72 65  TCL_ERROR;.  pre
1ac80 70 53 74 61 63 6b 28 29 3b 0a 20 20 28 76 6f 69  pStack();.  (voi
1ac90 64 29 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  d)sqlite3_exec(d
1aca0 62 2c 20 61 72 67 76 5b 32 5d 2c 20 30 2c 20 30  b, argv[2], 0, 0
1acb0 2c 20 30 29 3b 0a 20 20 66 6f 72 28 69 3d 36 35  , 0);.  for(i=65
1acc0 35 33 35 3b 20 69 3e 3d 30 20 26 26 20 28 28 75  535; i>=0 && ((u
1acd0 33 32 2a 29 73 71 6c 69 74 65 33 5f 73 74 61 63  32*)sqlite3_stac
1ace0 6b 5f 62 61 73 65 6c 69 6e 65 29 5b 2d 69 5d 3d  k_baseline)[-i]=
1acf0 3d 30 78 64 65 61 64 62 65 65 66 3b 20 69 2d 2d  =0xdeadbeef; i--
1ad00 29 7b 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  ){}.  Tcl_SetObj
1ad10 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
1ad20 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 69 2a 34  cl_NewIntObj(i*4
1ad30 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
1ad40 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
1ad50 61 67 65 3a 20 73 71 6c 69 74 65 5f 64 65 6c 65  age: sqlite_dele
1ad60 74 65 5f 66 75 6e 63 74 69 6f 6e 20 44 42 20 66  te_function DB f
1ad70 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a  unction-name.**.
1ad80 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 75 73  ** Delete the us
1ad90 65 72 20 66 75 6e 63 74 69 6f 6e 20 27 66 75 6e  er function 'fun
1ada0 63 74 69 6f 6e 2d 6e 61 6d 65 27 20 66 72 6f 6d  ction-name' from
1adb0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
1adc0 20 44 42 2e 20 49 74 0a 2a 2a 20 69 73 20 61 73   DB. It.** is as
1add0 73 75 6d 65 64 20 74 68 61 74 20 74 68 65 20 75  sumed that the u
1ade0 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  ser function was
1adf0 20 63 72 65 61 74 65 64 20 61 73 20 55 54 46 38   created as UTF8
1ae00 2c 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 0a  , any number of.
1ae10 2a 2a 20 61 72 67 75 6d 65 6e 74 73 20 28 74 68  ** arguments (th
1ae20 65 20 77 61 79 20 74 68 65 20 54 43 4c 20 69 6e  e way the TCL in
1ae30 74 65 72 66 61 63 65 20 64 6f 65 73 20 69 74 29  terface does it)
1ae40 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1ae50 64 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 28  delete_function(
1ae60 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
1ae70 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
1ae80 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
1ae90 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
1aea0 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20 72  *argv.){.  int r
1aeb0 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  c;.  sqlite3 *db
1aec0 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20  ;.  if( argc!=3 
1aed0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
1aee0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
1aef0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
1af00 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
1af10 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20  gv[0], .        
1af20 22 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e 61  " DB function-na
1af30 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  me", 0);.    ret
1af40 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1af50 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
1af60 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
1af70 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
1af80 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1af90 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
1afa0 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64  reate_function(d
1afb0 62 2c 20 61 72 67 76 5b 32 5d 2c 20 2d 31 2c 20  b, argv[2], -1, 
1afc0 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20  SQLITE_UTF8, 0, 
1afd0 30 2c 20 30 2c 20 30 29 3b 0a 20 20 54 63 6c 5f  0, 0, 0);.  Tcl_
1afe0 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
1aff0 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f  , (char *)t1Erro
1b000 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53  rName(rc), TCL_S
1b010 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75 72 6e  TATIC);.  return
1b020 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
1b030 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f  * Usage: sqlite_
1b040 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  delete_collation
1b050 20 44 42 20 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61   DB collation-na
1b060 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  me.**.** Delete 
1b070 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  the collation se
1b080 71 75 65 6e 63 65 20 27 63 6f 6c 6c 61 74 69 6f  quence 'collatio
1b090 6e 2d 6e 61 6d 65 27 20 66 72 6f 6d 20 64 61 74  n-name' from dat
1b0a0 61 62 61 73 65 20 68 61 6e 64 6c 65 20 0a 2a 2a  abase handle .**
1b0b0 20 44 42 2e 20 49 74 20 69 73 20 61 73 73 75 6d   DB. It is assum
1b0c0 65 64 20 74 68 61 74 20 74 68 65 20 63 6f 6c 6c  ed that the coll
1b0d0 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
1b0e0 61 73 20 63 72 65 61 74 65 64 20 61 73 20 55 54  as created as UT
1b0f0 46 38 20 28 74 68 65 20 0a 2a 2a 20 77 61 79 20  F8 (the .** way 
1b100 74 68 65 20 54 43 4c 20 69 6e 74 65 72 66 61 63  the TCL interfac
1b110 65 20 64 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a 73  e does it)..*/.s
1b120 74 61 74 69 63 20 69 6e 74 20 64 65 6c 65 74 65  tatic int delete
1b130 5f 63 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 76 6f  _collation(.  vo
1b140 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
1b150 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1b160 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67  nterp,.  int arg
1b170 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  c,.  char **argv
1b180 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  .){.  int rc;.  
1b190 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
1b1a0 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  f( argc!=3 ){.  
1b1b0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
1b1c0 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
1b1d0 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
1b1e0 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
1b1f0 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44 42 20  , .        " DB 
1b200 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 22 2c 20  function-name", 
1b210 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
1b220 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
1b230 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
1b240 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
1b250 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
1b260 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
1b270 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
1b280 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 61  _collation(db, a
1b290 72 67 76 5b 32 5d 2c 20 53 51 4c 49 54 45 5f 55  rgv[2], SQLITE_U
1b2a0 54 46 38 2c 20 30 2c 20 30 29 3b 0a 20 20 54 63  TF8, 0, 0);.  Tc
1b2b0 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
1b2c0 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72  rp, (char *)t1Er
1b2d0 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
1b2e0 5f 53 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75  _STATIC);.  retu
1b2f0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
1b300 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
1b310 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
1b320 74 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  t DB.**.** Retur
1b330 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 64 61  n true if the da
1b340 74 61 62 61 73 65 20 44 42 20 69 73 20 63 75 72  tabase DB is cur
1b350 72 65 6e 74 6c 79 20 69 6e 20 61 75 74 6f 2d 63  rently in auto-c
1b360 6f 6d 6d 69 74 20 6d 6f 64 65 2e 0a 2a 2a 20 52  ommit mode..** R
1b370 65 74 75 72 6e 20 66 61 6c 73 65 20 69 66 20 6e  eturn false if n
1b380 6f 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ot..*/.static in
1b390 74 20 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  t get_autocommit
1b3a0 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
1b3b0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
1b3c0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
1b3d0 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20  nt argc,.  char 
1b3e0 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 63 68 61 72  **argv.){.  char
1b3f0 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 73 71 6c   zBuf[30];.  sql
1b400 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20  ite3 *db;.  if( 
1b410 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  argc!=2 ){.    T
1b420 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
1b430 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
1b440 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
1b450 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a   \"", argv[0], .
1b460 20 20 20 20 20 20 20 20 22 20 44 42 22 2c 20 30          " DB", 0
1b470 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
1b480 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
1b490 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
1b4a0 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
1b4b0 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
1b4c0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 70 72 69  CL_ERROR;.  spri
1b4d0 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20  ntf(zBuf, "%d", 
1b4e0 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
1b4f0 63 6f 6d 6d 69 74 28 64 62 29 29 3b 0a 20 20 54  commit(db));.  T
1b500 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
1b510 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29  interp, zBuf, 0)
1b520 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
1b530 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
1b540 65 3a 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f  e: sqlite3_busy_
1b550 74 69 6d 65 6f 75 74 20 44 42 20 4d 53 0a 2a 2a  timeout DB MS.**
1b560 0a 2a 2a 20 53 65 74 20 74 68 65 20 62 75 73 79  .** Set the busy
1b570 20 74 69 6d 65 6f 75 74 2e 20 20 54 68 69 73 20   timeout.  This 
1b580 69 73 20 6d 6f 72 65 20 65 61 73 69 6c 79 20 64  is more easily d
1b590 6f 6e 65 20 75 73 69 6e 67 20 74 68 65 20 74 69  one using the ti
1b5a0 6d 65 6f 75 74 0a 2a 2a 20 6d 65 74 68 6f 64 20  meout.** method 
1b5b0 6f 66 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72  of the TCL inter
1b5c0 66 61 63 65 2e 20 20 42 75 74 20 77 65 20 6e 65  face.  But we ne
1b5d0 65 64 20 61 20 77 61 79 20 74 6f 20 74 65 73 74  ed a way to test
1b5e0 20 74 68 65 20 63 61 73 65 0a 2a 2a 20 77 68 65   the case.** whe
1b5f0 72 65 20 69 74 20 72 65 74 75 72 6e 73 20 53 51  re it returns SQ
1b600 4c 49 54 45 5f 4d 49 53 55 53 45 2e 0a 2a 2f 0a  LITE_MISUSE..*/.
1b610 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
1b620 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 0a 20 20  busy_timeout(.  
1b630 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
1b640 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
1b650 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61  *interp,.  int a
1b660 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72  rgc,.  char **ar
1b670 67 76 0a 29 7b 0a 20 20 69 6e 74 20 72 63 2c 20  gv.){.  int rc, 
1b680 6d 73 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  ms;.  sqlite3 *d
1b690 62 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33  b;.  if( argc!=3
1b6a0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
1b6b0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
1b6c0 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
1b6d0 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
1b6e0 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20  rgv[0], .       
1b6f0 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20   " DB", 0);.    
1b700 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1b710 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
1b720 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
1b730 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
1b740 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1b750 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
1b760 49 6e 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76  Int(interp, argv
1b770 5b 32 5d 2c 20 26 6d 73 29 20 29 20 72 65 74 75  [2], &ms) ) retu
1b780 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1b790 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 75 73  rc = sqlite3_bus
1b7a0 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 6d 73  y_timeout(db, ms
1b7b0 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  );.  Tcl_AppendR
1b7c0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71  esult(interp, sq
1b7d0 6c 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61  lite3TestErrorNa
1b7e0 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 72 65  me(rc), 0);.  re
1b7f0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
1b800 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 74 63  /*.** Usage:  tc
1b810 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65 20  l_variable_type 
1b820 56 41 52 49 41 42 4c 45 4e 41 4d 45 0a 2a 2a 0a  VARIABLENAME.**.
1b830 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61  ** Return the na
1b840 6d 65 20 6f 66 20 74 68 65 20 69 6e 74 65 72 6e  me of the intern
1b850 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
1b860 6e 20 66 6f 72 20 74 68 65 0a 2a 2a 20 76 61 6c  n for the.** val
1b870 75 65 20 6f 66 20 74 68 65 20 67 69 76 65 6e 20  ue of the given 
1b880 76 61 72 69 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61  variable..*/.sta
1b890 74 69 63 20 69 6e 74 20 74 63 6c 5f 76 61 72 69  tic int tcl_vari
1b8a0 61 62 6c 65 5f 74 79 70 65 28 0a 20 20 76 6f 69  able_type(.  voi
1b8b0 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
1b8c0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
1b8d0 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
1b8e0 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
1b8f0 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 54  ST objv[].){.  T
1b900 63 6c 5f 4f 62 6a 20 2a 70 56 61 72 3b 0a 20 20  cl_Obj *pVar;.  
1b910 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
1b920 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
1b930 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
1b940 62 6a 76 2c 20 22 56 41 52 49 41 42 4c 45 22 29  bjv, "VARIABLE")
1b950 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
1b960 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 70 56  _ERROR;.  }.  pV
1b970 61 72 20 3d 20 54 63 6c 5f 47 65 74 56 61 72 32  ar = Tcl_GetVar2
1b980 45 78 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  Ex(interp, Tcl_G
1b990 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
1b9a0 29 2c 20 30 2c 20 54 43 4c 5f 4c 45 41 56 45 5f  ), 0, TCL_LEAVE_
1b9b0 45 52 52 5f 4d 53 47 29 3b 0a 20 20 69 66 28 20  ERR_MSG);.  if( 
1b9c0 70 56 61 72 3d 3d 30 20 29 20 72 65 74 75 72 6e  pVar==0 ) return
1b9d0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
1b9e0 28 20 70 56 61 72 2d 3e 74 79 70 65 50 74 72 20  ( pVar->typePtr 
1b9f0 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62  ){.    Tcl_SetOb
1ba00 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
1ba10 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
1ba20 28 70 56 61 72 2d 3e 74 79 70 65 50 74 72 2d 3e  (pVar->typePtr->
1ba30 6e 61 6d 65 2c 20 2d 31 29 29 3b 0a 20 20 7d 0a  name, -1));.  }.
1ba40 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
1ba50 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
1ba60 20 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73    sqlite3_releas
1ba70 65 5f 6d 65 6d 6f 72 79 20 3f 4e 3f 0a 2a 2a 0a  e_memory ?N?.**.
1ba80 2a 2a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65  ** Attempt to re
1ba90 6c 65 61 73 65 20 6d 65 6d 6f 72 79 20 63 75 72  lease memory cur
1baa0 72 65 6e 74 6c 79 20 68 65 6c 64 20 62 75 74 20  rently held but 
1bab0 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 72 65 71  not actually req
1bac0 75 69 72 65 64 2e 0a 2a 2a 20 54 68 65 20 69 6e  uired..** The in
1bad0 74 65 67 65 72 20 4e 20 69 73 20 74 68 65 20 6e  teger N is the n
1bae0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 77  umber of bytes w
1baf0 65 20 61 72 65 20 74 72 79 69 6e 67 20 74 6f 20  e are trying to 
1bb00 72 65 6c 65 61 73 65 2e 20 20 54 68 65 20 0a 2a  release.  The .*
1bb10 2a 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69  * return value i
1bb20 73 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20  s the amount of 
1bb30 6d 65 6d 6f 72 79 20 61 63 74 75 61 6c 6c 79 20  memory actually 
1bb40 72 65 6c 65 61 73 65 64 2e 0a 2a 2f 0a 73 74 61  released..*/.sta
1bb50 74 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65 6c  tic int test_rel
1bb60 65 61 73 65 5f 6d 65 6d 6f 72 79 28 0a 20 20 76  ease_memory(.  v
1bb70 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
1bb80 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
1bb90 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
1bba0 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
1bbb0 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23  ONST objv[].){.#
1bbc0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
1bbd0 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f  E_ENABLE_MEMORY_
1bbe0 4d 41 4e 41 47 45 4d 45 4e 54 29 20 26 26 20 21  MANAGEMENT) && !
1bbf0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1bc00 4d 49 54 5f 44 49 53 4b 49 4f 29 0a 20 20 69 6e  MIT_DISKIO).  in
1bc10 74 20 4e 3b 0a 20 20 69 6e 74 20 61 6d 74 3b 0a  t N;.  int amt;.
1bc20 20 20 69 66 28 20 6f 62 6a 63 21 3d 31 20 26 26    if( objc!=1 &&
1bc30 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20   objc!=2 ){.    
1bc40 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
1bc50 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
1bc60 2c 20 22 3f 4e 3f 22 29 3b 0a 20 20 20 20 72 65  , "?N?");.    re
1bc70 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1bc80 20 20 7d 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d    }.  if( objc==
1bc90 32 20 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c  2 ){.    if( Tcl
1bca0 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
1bcb0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20  nterp, objv[1], 
1bcc0 26 4e 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  &N) ) return TCL
1bcd0 5f 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b  _ERROR;.  }else{
1bce0 0a 20 20 20 20 4e 20 3d 20 2d 31 3b 0a 20 20 7d  .    N = -1;.  }
1bcf0 0a 20 20 61 6d 74 20 3d 20 73 71 6c 69 74 65 33  .  amt = sqlite3
1bd00 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
1bd10 4e 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  N);.  Tcl_SetObj
1bd20 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
1bd30 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 6d 74  cl_NewIntObj(amt
1bd40 29 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74  ));.#endif.  ret
1bd50 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
1bd60 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
1bd70 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c  ite3_soft_heap_l
1bd80 69 6d 69 74 20 3f 4e 3f 0a 2a 2a 0a 2a 2a 20 51  imit ?N?.**.** Q
1bd90 75 65 72 79 20 6f 72 20 73 65 74 20 74 68 65 20  uery or set the 
1bda0 73 6f 66 74 20 68 65 61 70 20 6c 69 6d 69 74 20  soft heap limit 
1bdb0 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
1bdc0 74 68 72 65 61 64 2e 20 20 54 68 65 0a 2a 2a 20  thread.  The.** 
1bdd0 6c 69 6d 69 74 20 69 73 20 6f 6e 6c 79 20 63 68  limit is only ch
1bde0 61 6e 67 65 64 20 69 66 20 74 68 65 20 4e 20 69  anged if the N i
1bdf0 73 20 70 72 65 73 65 6e 74 2e 20 20 54 68 65 20  s present.  The 
1be00 70 72 65 76 69 6f 75 73 20 6c 69 6d 69 74 0a 2a  previous limit.*
1be10 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  * is returned..*
1be20 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
1be30 74 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  t_soft_heap_limi
1be40 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  t(.  void * clie
1be50 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
1be60 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
1be70 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
1be80 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
1be90 5d 0a 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64  ].){.#if defined
1bea0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  (SQLITE_ENABLE_M
1beb0 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54  EMORY_MANAGEMENT
1bec0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
1bed0 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f  LITE_OMIT_DISKIO
1bee0 29 0a 20 20 69 6e 74 20 61 6d 74 3b 0a 20 20 69  ).  int amt;.  i
1bef0 66 28 20 6f 62 6a 63 21 3d 31 20 26 26 20 6f 62  f( objc!=1 && ob
1bf00 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
1bf10 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
1bf20 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
1bf30 3f 4e 3f 22 29 3b 0a 20 20 20 20 72 65 74 75 72  ?N?");.    retur
1bf40 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
1bf50 0a 20 20 61 6d 74 20 3d 20 73 71 6c 69 74 65 33  .  amt = sqlite3
1bf60 54 68 72 65 61 64 44 61 74 61 52 65 61 64 4f 6e  ThreadDataReadOn
1bf70 6c 79 28 29 2d 3e 6e 53 6f 66 74 48 65 61 70 4c  ly()->nSoftHeapL
1bf80 69 6d 69 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63  imit;.  if( objc
1bf90 3d 3d 32 20 29 7b 0a 20 20 20 20 69 6e 74 20 4e  ==2 ){.    int N
1bfa0 3b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65  ;.    if( Tcl_Ge
1bfb0 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
1bfc0 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 4e 29  rp, objv[1], &N)
1bfd0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
1bfe0 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ROR;.    sqlite3
1bff0 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
1c000 28 4e 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53  (N);.  }.  Tcl_S
1c010 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
1c020 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
1c030 6a 28 61 6d 74 29 29 3b 0a 23 65 6e 64 69 66 0a  j(amt));.#endif.
1c040 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
1c050 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
1c060 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72     sqlite3_clear
1c070 5f 74 73 64 5f 6d 65 6d 64 65 62 75 67 0a 2a 2a  _tsd_memdebug.**
1c080 0a 2a 2a 20 43 6c 65 61 72 20 61 6c 6c 20 6f 66  .** Clear all of
1c090 20 74 68 65 20 4d 45 4d 44 45 42 55 47 20 69 6e   the MEMDEBUG in
1c0a0 66 6f 72 6d 61 74 69 6f 6e 20 6f 75 74 20 6f 66  formation out of
1c0b0 20 74 68 72 65 61 64 2d 73 70 65 63 69 66 69 63   thread-specific
1c0c0 20 64 61 74 61 2e 0a 2a 2a 20 54 68 69 73 20 77   data..** This w
1c0d0 69 6c 6c 20 61 6c 6c 6f 77 20 69 74 20 74 6f 20  ill allow it to 
1c0e0 62 65 20 64 65 61 6c 6c 6f 63 61 74 65 64 2e 0a  be deallocated..
1c0f0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
1c100 73 74 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65 6d  st_clear_tsd_mem
1c110 64 65 62 75 67 28 0a 20 20 76 6f 69 64 20 2a 20  debug(.  void * 
1c120 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
1c130 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
1c140 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
1c150 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
1c160 62 6a 76 5b 5d 0a 29 7b 0a 20 20 72 65 74 75 72  bjv[].){.  retur
1c170 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
1c180 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
1c190 74 65 33 5f 74 73 64 5f 72 65 6c 65 61 73 65 0a  te3_tsd_release.
1c1a0 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74  **.** Call sqlit
1c1b0 65 33 52 65 6c 65 61 73 65 54 68 72 65 61 64 44  e3ReleaseThreadD
1c1c0 61 74 61 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ata..*/.static i
1c1d0 6e 74 20 74 65 73 74 5f 74 73 64 5f 72 65 6c 65  nt test_tsd_rele
1c1e0 61 73 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ase(.  void * cl
1c1f0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
1c200 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
1c210 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
1c220 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
1c230 76 5b 5d 0a 29 7b 0a 23 69 66 20 64 65 66 69 6e  v[].){.#if defin
1c240 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
1c250 55 47 29 0a 20 20 73 71 6c 69 74 65 33 52 65 6c  UG).  sqlite3Rel
1c260 65 61 73 65 54 68 72 65 61 64 44 61 74 61 28 29  easeThreadData()
1c270 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
1c280 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
1c290 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
1c2a0 74 65 33 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e  te3_thread_clean
1c2b0 75 70 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 74 68  up.**.** Call th
1c2c0 65 20 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64  e sqlite3_thread
1c2d0 5f 63 6c 65 61 6e 75 70 20 41 50 49 2e 0a 2a 2f  _cleanup API..*/
1c2e0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
1c2f0 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 28  _thread_cleanup(
1c300 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
1c310 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
1c320 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
1c330 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
1c340 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
1c350 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 74 68 72  ){.  sqlite3_thr
1c360 65 61 64 5f 63 6c 65 61 6e 75 70 28 29 3b 0a 20  ead_cleanup();. 
1c370 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
1c380 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  }.../*.** Usage:
1c390 20 20 20 73 71 6c 69 74 65 33 5f 70 61 67 65 72     sqlite3_pager
1c3a0 5f 72 65 66 63 6f 75 6e 74 73 20 20 44 42 0a 2a  _refcounts  DB.*
1c3b0 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 6c 69  *.** Return a li
1c3c0 73 74 20 6f 66 20 6e 75 6d 62 65 72 73 20 77 68  st of numbers wh
1c3d0 69 63 68 20 61 72 65 20 74 68 65 20 50 61 67 65  ich are the Page
1c3e0 72 52 65 66 63 6f 75 6e 74 20 66 6f 72 20 61 6c  rRefcount for al
1c3f0 6c 0a 2a 2a 20 70 61 67 65 72 73 20 6f 6e 20 65  l.** pagers on e
1c400 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
1c410 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74  nection..*/.stat
1c420 69 63 20 69 6e 74 20 74 65 73 74 5f 70 61 67 65  ic int test_page
1c430 72 5f 72 65 66 63 6f 75 6e 74 73 28 0a 20 20 76  r_refcounts(.  v
1c440 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
1c450 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
1c460 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
1c470 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
1c480 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
1c490 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
1c4a0 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20 76 2c 20  int i;.  int v, 
1c4b0 2a 61 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  *a;.  Tcl_Obj *p
1c4c0 52 65 73 75 6c 74 3b 0a 0a 20 20 69 66 28 20 6f  Result;..  if( o
1c4d0 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
1c4e0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
1c4f0 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
1c500 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
1c510 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c  \"",.        Tcl
1c520 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
1c530 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
1c540 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   DB", 0);.    re
1c550 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1c560 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
1c570 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
1c580 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
1c590 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
1c5a0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1c5b0 20 20 70 52 65 73 75 6c 74 20 3d 20 54 63 6c 5f    pResult = Tcl_
1c5c0 4e 65 77 4f 62 6a 28 29 3b 0a 20 20 66 6f 72 28  NewObj();.  for(
1c5d0 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
1c5e0 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 64 62  i++){.    if( db
1c5f0 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20  ->aDb[i].pBt==0 
1c600 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 2d 31 3b  ){.      v = -1;
1c610 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1c620 20 20 61 20 3d 20 73 71 6c 69 74 65 33 50 61 67    a = sqlite3Pag
1c630 65 72 53 74 61 74 73 28 73 71 6c 69 74 65 33 42  erStats(sqlite3B
1c640 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44  treePager(db->aD
1c650 62 5b 69 5d 2e 70 42 74 29 29 3b 0a 20 20 20 20  b[i].pBt));.    
1c660 20 20 76 20 3d 20 61 5b 30 5d 3b 0a 20 20 20 20    v = a[0];.    
1c670 7d 0a 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62  }.    Tcl_ListOb
1c680 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30  jAppendElement(0
1c690 2c 20 70 52 65 73 75 6c 74 2c 20 54 63 6c 5f 4e  , pResult, Tcl_N
1c6a0 65 77 49 6e 74 4f 62 6a 28 76 29 29 3b 0a 20 20  ewIntObj(v));.  
1c6b0 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  }.  Tcl_SetObjRe
1c6c0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 70 52 65  sult(interp, pRe
1c6d0 73 75 6c 74 29 3b 0a 20 20 72 65 74 75 72 6e 20  sult);.  return 
1c6e0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  TCL_OK;.}.../*.*
1c6f0 2a 20 74 63 6c 63 6d 64 3a 20 20 20 77 6f 72 6b  * tclcmd:   work
1c700 69 6e 67 5f 36 34 62 69 74 5f 69 6e 74 0a 2a 2a  ing_64bit_int.**
1c710 0a 2a 2a 20 53 6f 6d 65 20 54 43 4c 20 62 75 69  .** Some TCL bui
1c720 6c 64 73 20 28 65 78 3a 20 63 79 67 77 69 6e 29  lds (ex: cygwin)
1c730 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72 74 20   do not support 
1c740 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 73 2e  64-bit integers.
1c750 20 20 54 68 69 73 0a 2a 2a 20 6c 65 61 64 73 20    This.** leads 
1c760 74 6f 20 61 20 6e 75 6d 62 65 72 20 6f 66 20 74  to a number of t
1c770 65 73 74 20 66 61 69 6c 75 72 65 73 2e 20 20 54  est failures.  T
1c780 68 65 20 70 72 65 73 65 6e 74 20 63 6f 6d 6d 61  he present comma
1c790 6e 64 20 63 68 65 63 6b 73 20 74 68 65 0a 2a 2a  nd checks the.**
1c7a0 20 54 43 4c 20 62 75 69 6c 64 20 74 6f 20 73 65   TCL build to se
1c7b0 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
1c7c0 20 69 74 20 73 75 70 70 6f 72 74 73 20 36 34 2d   it supports 64-
1c7d0 62 69 74 20 69 6e 74 65 67 65 72 73 2e 20 20 49  bit integers.  I
1c7e0 74 0a 2a 2a 20 72 65 74 75 72 6e 73 20 54 52 55  t.** returns TRU
1c7f0 45 20 69 66 20 69 74 20 64 6f 65 73 20 61 6e 64  E if it does and
1c800 20 46 41 4c 53 45 20 69 66 20 6e 6f 74 2e 0a 2a   FALSE if not..*
1c810 2a 0a 2a 2a 20 54 68 69 73 20 63 6f 6d 6d 61 6e  *.** This comman
1c820 64 20 69 73 20 75 73 65 64 20 74 6f 20 77 61 72  d is used to war
1c830 6e 20 75 73 65 72 73 20 74 68 61 74 20 74 68 65  n users that the
1c840 69 72 20 54 43 4c 20 62 75 69 6c 64 20 69 73 20  ir TCL build is 
1c850 64 65 66 65 63 74 69 76 65 0a 2a 2a 20 61 6e 64  defective.** and
1c860 20 74 68 61 74 20 74 68 65 20 65 72 72 6f 72 73   that the errors
1c870 20 74 68 65 79 20 61 72 65 20 73 65 65 69 6e 67   they are seeing
1c880 20 69 6e 20 74 68 65 20 74 65 73 74 20 73 63 72   in the test scr
1c890 69 70 74 73 20 6d 69 67 68 74 20 62 65 0a 2a 2a  ipts might be.**
1c8a0 20 61 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65   a result of the
1c8b0 69 72 20 64 65 66 65 63 74 69 76 65 20 54 43 4c  ir defective TCL
1c8c0 20 72 61 74 68 65 72 20 74 68 61 6e 20 70 72 6f   rather than pro
1c8d0 62 6c 65 6d 73 20 69 6e 20 53 51 4c 69 74 65 2e  blems in SQLite.
1c8e0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 77  .*/.static int w
1c8f0 6f 72 6b 69 6e 67 5f 36 34 62 69 74 5f 69 6e 74  orking_64bit_int
1c900 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63  (.  ClientData c
1c910 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f  lientData, /* Po
1c920 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  inter to sqlite3
1c930 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63  _enable_XXX func
1c940 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  tion */.  Tcl_In
1c950 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
1c960 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
1c970 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
1c980 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
1c990 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  d */.  int objc,
1c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c9b0 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
1c9c0 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62  ents */.  Tcl_Ob
1c9d0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20  j *CONST objv[] 
1c9e0 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
1c9f0 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63  ments */.){.  Tc
1ca00 6c 5f 4f 62 6a 20 2a 70 54 65 73 74 4f 62 6a 3b  l_Obj *pTestObj;
1ca10 0a 20 20 69 6e 74 20 77 6f 72 6b 69 6e 67 20 3d  .  int working =
1ca20 20 30 3b 0a 0a 20 20 70 54 65 73 74 4f 62 6a 20   0;..  pTestObj 
1ca30 3d 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74  = Tcl_NewWideInt
1ca40 4f 62 6a 28 31 30 30 30 30 30 30 2a 28 69 36 34  Obj(1000000*(i64
1ca50 29 31 32 33 34 35 36 37 38 39 30 29 3b 0a 20 20  )1234567890);.  
1ca60 77 6f 72 6b 69 6e 67 20 3d 20 73 74 72 63 6d 70  working = strcmp
1ca70 28 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 70  (Tcl_GetString(p
1ca80 54 65 73 74 4f 62 6a 29 2c 20 22 31 32 33 34 35  TestObj), "12345
1ca90 36 37 38 39 30 30 30 30 30 30 30 22 29 3d 3d 30  67890000000")==0
1caa0 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  ;.  Tcl_DecrRefC
1cab0 6f 75 6e 74 28 70 54 65 73 74 4f 62 6a 29 3b 0a  ount(pTestObj);.
1cac0 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
1cad0 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
1cae0 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 77 6f 72  ewBooleanObj(wor
1caf0 6b 69 6e 67 29 29 3b 0a 20 20 72 65 74 75 72 6e  king));.  return
1cb00 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a   TCL_OK;.}.../*.
1cb10 2a 2a 20 52 65 67 69 73 74 65 72 20 63 6f 6d 6d  ** Register comm
1cb20 61 6e 64 73 20 77 69 74 68 20 74 68 65 20 54 43  ands with the TC
1cb30 4c 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0a 2a  L interpreter..*
1cb40 2f 0a 69 6e 74 20 53 71 6c 69 74 65 74 65 73 74  /.int Sqlitetest
1cb50 31 5f 49 6e 69 74 28 54 63 6c 5f 49 6e 74 65 72  1_Init(Tcl_Inter
1cb60 70 20 2a 69 6e 74 65 72 70 29 7b 0a 20 20 65 78  p *interp){.  ex
1cb70 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
1cb80 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 3b 0a 20  _search_count;. 
1cb90 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
1cba0 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
1cbb0 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  unt;.  extern in
1cbc0 74 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 66  t sqlite3_open_f
1cbd0 69 6c 65 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74  ile_count;.  ext
1cbe0 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
1cbf0 73 6f 72 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78  sort_count;.  ex
1cc00 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
1cc10 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65 3b 0a 20  _current_time;. 
1cc20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
1cc30 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65  te3_max_blobsize
1cc40 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
1cc50 71 6c 69 74 65 33 42 74 72 65 65 53 68 61 72 65  qlite3BtreeShare
1cc60 64 43 61 63 68 65 52 65 70 6f 72 74 28 76 6f 69  dCacheReport(voi
1cc70 64 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  d*,.            
1cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63                Tc
1cca0 6c 5f 49 6e 74 65 72 70 2a 2c 69 6e 74 2c 54 63  l_Interp*,int,Tc
1ccb0 6c 5f 4f 62 6a 2a 43 4f 4e 53 54 2a 29 3b 0a 20  l_Obj*CONST*);. 
1ccc0 20 73 74 61 74 69 63 20 73 74 72 75 63 74 20 7b   static struct {
1ccd0 0a 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  .     char *zNam
1cce0 65 3b 0a 20 20 20 20 20 54 63 6c 5f 43 6d 64 50  e;.     Tcl_CmdP
1ccf0 72 6f 63 20 2a 78 50 72 6f 63 3b 0a 20 20 7d 20  roc *xProc;.  } 
1cd00 61 43 6d 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  aCmd[] = {.     
1cd10 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
1cd20 74 66 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20  tf_int",        
1cd30 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1cd40 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
1cd50 5f 69 6e 74 20 20 20 20 7d 2c 0a 20 20 20 20 20  _int    },.     
1cd60 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
1cd70 74 66 5f 69 6e 74 36 34 22 2c 20 20 20 20 20 20  tf_int64",      
1cd80 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1cd90 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
1cda0 5f 69 6e 74 36 34 20 20 7d 2c 0a 20 20 20 20 20  _int64  },.     
1cdb0 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
1cdc0 74 66 5f 73 74 72 22 2c 20 20 20 20 20 20 20 20  tf_str",        
1cdd0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1cde0 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
1cdf0 5f 73 74 72 20 20 20 20 7d 2c 0a 20 20 20 20 20  _str    },.     
1ce00 7b 20 22 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  { "sqlite3_snpri
1ce10 6e 74 66 5f 73 74 72 22 2c 20 20 20 20 20 20 20  ntf_str",       
1ce20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1ce30 29 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74  )sqlite3_snprint
1ce40 66 5f 73 74 72 20 20 20 7d 2c 0a 20 20 20 20 20  f_str   },.     
1ce50 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
1ce60 74 66 5f 73 74 72 6f 6e 6c 79 22 2c 20 20 20 20  tf_stronly",    
1ce70 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1ce80 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
1ce90 5f 73 74 72 6f 6e 6c 79 7d 2c 0a 20 20 20 20 20  _stronly},.     
1cea0 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
1ceb0 74 66 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20 20  tf_double",     
1cec0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1ced0 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
1cee0 5f 64 6f 75 62 6c 65 20 7d 2c 0a 20 20 20 20 20  _double },.     
1cef0 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
1cf00 74 66 5f 73 63 61 6c 65 64 22 2c 20 20 20 20 20  tf_scaled",     
1cf10 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1cf20 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
1cf30 5f 73 63 61 6c 65 64 20 7d 2c 0a 20 20 20 20 20  _scaled },.     
1cf40 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
1cf50 74 66 5f 68 65 78 64 6f 75 62 6c 65 22 2c 20 20  tf_hexdouble",  
1cf60 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
1cf70 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68  qlite3_mprintf_h
1cf80 65 78 64 6f 75 62 6c 65 7d 2c 0a 20 20 20 20 20  exdouble},.     
1cf90 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
1cfa0 74 66 5f 7a 5f 74 65 73 74 22 2c 20 20 20 20 20  tf_z_test",     
1cfb0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
1cfc0 29 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f 7a 20  )test_mprintf_z 
1cfd0 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b         },.     {
1cfe0 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74   "sqlite3_mprint
1cff0 66 5f 6e 5f 74 65 73 74 22 2c 20 20 20 20 20 20  f_n_test",      
1d000 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
1d010 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f 6e 20 20  test_mprintf_n  
1d020 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
1d030 22 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74  "sqlite3_snprint
1d040 66 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20  f_int",         
1d050 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
1d060 65 73 74 5f 73 6e 70 72 69 6e 74 66 5f 69 6e 74  est_snprintf_int
1d070 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
1d080 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
1d090 65 72 74 5f 72 6f 77 69 64 22 2c 20 20 20 20 20  ert_rowid",     
1d0a0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
1d0b0 73 74 5f 6c 61 73 74 5f 72 6f 77 69 64 20 20 20  st_last_rowid   
1d0c0 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
1d0d0 71 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e  qlite3_exec_prin
1d0e0 74 66 22 2c 20 20 20 20 20 20 20 20 20 20 20 28  tf",           (
1d0f0 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
1d100 74 5f 65 78 65 63 5f 70 72 69 6e 74 66 20 20 20  t_exec_printf   
1d110 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
1d120 6c 69 74 65 33 5f 65 78 65 63 22 2c 20 20 20 20  lite3_exec",    
1d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
1d140 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
1d150 5f 65 78 65 63 20 20 20 20 20 20 20 20 20 20 20  _exec           
1d160 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
1d170 69 74 65 33 5f 65 78 65 63 5f 6e 72 22 2c 20 20  ite3_exec_nr",  
1d180 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
1d190 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
1d1a0 65 78 65 63 5f 6e 72 20 20 20 20 20 20 20 20 20  exec_nr         
1d1b0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1d1c0 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72  te3_get_table_pr
1d1d0 69 6e 74 66 22 2c 20 20 20 20 20 20 28 54 63 6c  intf",      (Tcl
1d1e0 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 67  _CmdProc*)test_g
1d1f0 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 20  et_table_printf 
1d200 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1d210 65 33 5f 63 6c 6f 73 65 22 2c 20 20 20 20 20 20  e3_close",      
1d220 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
1d230 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f  CmdProc*)sqlite_
1d240 74 65 73 74 5f 63 6c 6f 73 65 20 20 20 20 20 7d  test_close     }
1d250 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1d260 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
1d270 6e 22 2c 20 20 20 20 20 20 20 28 54 63 6c 5f 43  n",       (Tcl_C
1d280 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 63 72 65  mdProc*)test_cre
1d290 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 20 7d 2c  ate_function  },
1d2a0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1d2b0 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74  _create_aggregat
1d2c0 65 22 2c 20 20 20 20 20 20 28 54 63 6c 5f 43 6d  e",      (Tcl_Cm
1d2d0 64 50 72 6f 63 2a 29 74 65 73 74 5f 63 72 65 61  dProc*)test_crea
1d2e0 74 65 5f 61 67 67 72 65 67 61 74 65 20 7d 2c 0a  te_aggregate },.
1d2f0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 72       { "sqlite_r
1d300 65 67 69 73 74 65 72 5f 74 65 73 74 5f 66 75 6e  egister_test_fun
1d310 63 74 69 6f 6e 22 2c 20 28 54 63 6c 5f 43 6d 64  ction", (Tcl_Cmd
1d320 50 72 6f 63 2a 29 74 65 73 74 5f 72 65 67 69 73  Proc*)test_regis
1d330 74 65 72 5f 66 75 6e 63 20 20 20 20 7d 2c 0a 20  ter_func    },. 
1d340 20 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 61 62      { "sqlite_ab
1d350 6f 72 74 22 2c 20 20 20 20 20 20 20 20 20 20 20  ort",           
1d360 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
1d370 72 6f 63 2a 29 73 71 6c 69 74 65 5f 61 62 6f 72  roc*)sqlite_abor
1d380 74 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 23 69  t          },.#i
1d390 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44  fdef SQLITE_MEMD
1d3a0 45 42 55 47 0a 20 20 20 20 20 7b 20 22 73 71 6c  EBUG.     { "sql
1d3b0 69 74 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 22  ite_malloc_fail"
1d3c0 2c 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63  ,            (Tc
1d3d0 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74  l_CmdProc*)sqlit
1d3e0 65 5f 6d 61 6c 6c 6f 63 5f 66 61 69 6c 20 20 20  e_malloc_fail   
1d3f0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1d400 74 65 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 22 2c  te_malloc_stat",
1d410 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
1d420 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65  _CmdProc*)sqlite
1d430 5f 6d 61 6c 6c 6f 63 5f 73 74 61 74 20 20 20 20  _malloc_stat    
1d440 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b  },.#endif.     {
1d450 20 22 73 71 6c 69 74 65 5f 62 69 6e 64 22 2c 20   "sqlite_bind", 
1d460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d470 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
1d480 74 65 73 74 5f 62 69 6e 64 20 20 20 20 20 20 20  test_bind       
1d490 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
1d4a0 22 62 72 65 61 6b 70 6f 69 6e 74 22 2c 20 20 20  "breakpoint",   
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4c0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
1d4d0 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 20 20  est_breakpoint  
1d4e0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
1d4f0 73 71 6c 69 74 65 33 5f 6b 65 79 22 2c 20 20 20  sqlite3_key",   
1d500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d510 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
1d520 73 74 5f 6b 65 79 20 20 20 20 20 20 20 20 20 20  st_key          
1d530 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
1d540 71 6c 69 74 65 33 5f 72 65 6b 65 79 22 2c 20 20  qlite3_rekey",  
1d550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1d560 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
1d570 74 5f 72 65 6b 65 79 20 20 20 20 20 20 20 20 20  t_rekey         
1d580 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
1d590 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 22 2c  lite_set_magic",
1d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
1d5b0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
1d5c0 74 65 5f 73 65 74 5f 6d 61 67 69 63 20 20 20 20  te_set_magic    
1d5d0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
1d5e0 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 22 2c  ite3_interrupt",
1d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
1d600 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
1d610 69 6e 74 65 72 72 75 70 74 20 20 20 20 20 20 20  interrupt       
1d620 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1d630 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e 63 74 69  te_delete_functi
1d640 6f 6e 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c  on",        (Tcl
1d650 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65 74 65  _CmdProc*)delete
1d660 5f 66 75 6e 63 74 69 6f 6e 20 20 20 20 20 20 20  _function       
1d670 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1d680 65 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69  e_delete_collati
1d690 6f 6e 22 2c 20 20 20 20 20 20 20 28 54 63 6c 5f  on",       (Tcl_
1d6a0 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65 74 65 5f  CmdProc*)delete_
1d6b0 63 6f 6c 6c 61 74 69 6f 6e 20 20 20 20 20 20 7d  collation      }
1d6c0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1d6d0 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
1d6e0 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43  ",        (Tcl_C
1d6f0 6d 64 50 72 6f 63 2a 29 67 65 74 5f 61 75 74 6f  mdProc*)get_auto
1d700 63 6f 6d 6d 69 74 20 20 20 20 20 20 20 20 7d 2c  commit        },
1d710 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1d720 5f 73 74 61 63 6b 5f 75 73 65 64 22 2c 20 20 20  _stack_used",   
1d730 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
1d740 64 50 72 6f 63 2a 29 74 65 73 74 5f 73 74 61 63  dProc*)test_stac
1d750 6b 5f 75 73 65 64 20 20 20 20 20 20 20 7d 2c 0a  k_used       },.
1d760 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1d770 62 75 73 79 5f 74 69 6d 65 6f 75 74 22 2c 20 20  busy_timeout",  
1d780 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
1d790 50 72 6f 63 2a 29 74 65 73 74 5f 62 75 73 79 5f  Proc*)test_busy_
1d7a0 74 69 6d 65 6f 75 74 20 20 20 20 20 7d 2c 0a 20  timeout     },. 
1d7b0 20 20 20 20 7b 20 22 70 72 69 6e 74 66 22 2c 20      { "printf", 
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7d0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
1d7e0 72 6f 63 2a 29 74 65 73 74 5f 70 72 69 6e 74 66  roc*)test_printf
1d7f0 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
1d800 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 69 6f     { "sqlite3_io
1d810 5f 74 72 61 63 65 22 2c 20 20 20 20 20 20 20 20  _trace",        
1d820 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
1d830 6f 63 2a 29 74 65 73 74 5f 69 6f 5f 74 72 61 63  oc*)test_io_trac
1d840 65 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7d  e         },.  }
1d850 3b 0a 20 20 73 74 61 74 69 63 20 73 74 72 75 63  ;.  static struc
1d860 74 20 7b 0a 20 20 20 20 20 63 68 61 72 20 2a 7a  t {.     char *z
1d870 4e 61 6d 65 3b 0a 20 20 20 20 20 54 63 6c 5f 4f  Name;.     Tcl_O
1d880 62 6a 43 6d 64 50 72 6f 63 20 2a 78 50 72 6f 63  bjCmdProc *xProc
1d890 3b 0a 20 20 20 20 20 76 6f 69 64 20 2a 63 6c 69  ;.     void *cli
1d8a0 65 6e 74 44 61 74 61 3b 0a 20 20 7d 20 61 4f 62  entData;.  } aOb
1d8b0 6a 43 6d 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  jCmd[] = {.     
1d8c0 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65  { "sqlite3_conne
1d8d0 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 22 2c 20  ction_pointer", 
1d8e0 20 20 20 67 65 74 5f 73 71 6c 69 74 65 5f 70 6f     get_sqlite_po
1d8f0 69 6e 74 65 72 2c 20 30 20 7d 2c 0a 20 20 20 20  inter, 0 },.    
1d900 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64   { "sqlite3_bind
1d910 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20  _int",          
1d920 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e      test_bind_in
1d930 74 2c 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 20  t,      0 },.   
1d940 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e    { "sqlite3_bin
1d950 64 5f 7a 65 72 6f 62 6c 6f 62 22 2c 20 20 20 20  d_zeroblob",    
1d960 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 7a       test_bind_z
1d970 65 72 6f 62 6c 6f 62 2c 20 30 20 7d 2c 0a 20 20  eroblob, 0 },.  
1d980 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
1d990 6e 64 5f 69 6e 74 36 34 22 2c 20 20 20 20 20 20  nd_int64",      
1d9a0 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f        test_bind_
1d9b0 69 6e 74 36 34 2c 20 20 20 20 30 20 7d 2c 0a 20  int64,    0 },. 
1d9c0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62      { "sqlite3_b
1d9d0 69 6e 64 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20  ind_double",    
1d9e0 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64         test_bind
1d9f0 5f 64 6f 75 62 6c 65 2c 20 20 20 30 20 7d 2c 0a  _double,   0 },.
1da00 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1da10 62 69 6e 64 5f 6e 75 6c 6c 22 2c 20 20 20 20 20  bind_null",     
1da20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e          test_bin
1da30 64 5f 6e 75 6c 6c 20 20 20 20 20 2c 30 20 7d 2c  d_null     ,0 },
1da40 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1da50 5f 62 69 6e 64 5f 74 65 78 74 22 2c 20 20 20 20  _bind_text",    
1da60 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69           test_bi
1da70 6e 64 5f 74 65 78 74 20 20 20 20 20 2c 30 20 7d  nd_text     ,0 }
1da80 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1da90 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 22 2c 20  3_bind_text16", 
1daa0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62            test_b
1dab0 69 6e 64 5f 74 65 78 74 31 36 20 20 20 2c 30 20  ind_text16   ,0 
1dac0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1dad0 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 22 2c 20 20  e3_bind_blob",  
1dae0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
1daf0 62 69 6e 64 5f 62 6c 6f 62 20 20 20 20 20 2c 30  bind_blob     ,0
1db00 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1db10 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
1db20 65 72 5f 63 6f 75 6e 74 22 2c 20 20 74 65 73 74  er_count",  test
1db30 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
1db40 63 6f 75 6e 74 2c 20 30 7d 2c 0a 20 20 20 20 20  count, 0},.     
1db50 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  { "sqlite3_bind_
1db60 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 22 2c  parameter_name",
1db70 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72     test_bind_par
1db80 61 6d 65 74 65 72 5f 6e 61 6d 65 2c 20 20 30 7d  ameter_name,  0}
1db90 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1dba0 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
1dbb0 5f 69 6e 64 65 78 22 2c 20 20 74 65 73 74 5f 62  _index",  test_b
1dbc0 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e  ind_parameter_in
1dbd0 64 65 78 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20  dex, 0},.     { 
1dbe0 22 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62  "sqlite3_clear_b
1dbf0 69 6e 64 69 6e 67 73 22 2c 20 20 20 20 20 20 20  indings",       
1dc00 20 74 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64   test_clear_bind
1dc10 69 6e 67 73 2c 20 30 7d 2c 0a 20 20 20 20 20 7b  ings, 0},.     {
1dc20 20 22 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 22   "sqlite3_sleep"
1dc30 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1dc40 20 20 74 65 73 74 5f 73 6c 65 65 70 2c 20 20 20    test_sleep,   
1dc50 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
1dc60 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  { "sqlite3_errco
1dc70 64 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  de",            
1dc80 20 20 20 74 65 73 74 5f 65 72 72 63 6f 64 65 20     test_errcode 
1dc90 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20        ,0 },.    
1dca0 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72 6d   { "sqlite3_errm
1dcb0 73 67 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  sg",            
1dcc0 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67 20      test_errmsg 
1dcd0 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
1dce0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72    { "sqlite3_err
1dcf0 6d 73 67 31 36 22 2c 20 20 20 20 20 20 20 20 20  msg16",         
1dd00 20 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67       test_errmsg
1dd10 31 36 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20  16      ,0 },.  
1dd20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f 70     { "sqlite3_op
1dd30 65 6e 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  en",            
1dd40 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65 6e 20        test_open 
1dd50 20 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20           ,0 },. 
1dd60 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f      { "sqlite3_o
1dd70 70 65 6e 31 36 22 2c 20 20 20 20 20 20 20 20 20  pen16",         
1dd80 20 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65 6e         test_open
1dd90 31 36 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a  16        ,0 },.
1dda0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1ddb0 63 6f 6d 70 6c 65 74 65 31 36 22 2c 20 20 20 20  complete16",    
1ddc0 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6d          test_com
1ddd0 70 6c 65 74 65 31 36 20 20 20 20 2c 30 20 7d 2c  plete16    ,0 },
1dde0 0a 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ..     { "sqlite
1ddf0 33 5f 70 72 65 70 61 72 65 22 2c 20 20 20 20 20  3_prepare",     
1de00 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 70            test_p
1de10 72 65 70 61 72 65 20 20 20 20 20 20 20 2c 30 20  repare       ,0 
1de20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1de30 65 33 5f 70 72 65 70 61 72 65 31 36 22 2c 20 20  e3_prepare16",  
1de40 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
1de50 70 72 65 70 61 72 65 31 36 20 20 20 20 20 2c 30  prepare16     ,0
1de60 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1de70 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 22 2c  te3_prepare_v2",
1de80 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
1de90 5f 70 72 65 70 61 72 65 5f 76 32 20 20 20 20 2c  _prepare_v2    ,
1dea0 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
1deb0 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 5f 76  ite3_prepare16_v
1dec0 32 22 2c 20 20 20 20 20 20 20 20 20 20 74 65 73  2",          tes
1ded0 74 5f 70 72 65 70 61 72 65 31 36 5f 76 32 20 20  t_prepare16_v2  
1dee0 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
1def0 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 22 2c  lite3_finalize",
1df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
1df10 73 74 5f 66 69 6e 61 6c 69 7a 65 20 20 20 20 20  st_finalize     
1df20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
1df30 71 6c 69 74 65 33 5f 72 65 73 65 74 22 2c 20 20  qlite3_reset",  
1df40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1df50 65 73 74 5f 72 65 73 65 74 20 20 20 20 20 20 20  est_reset       
1df60 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
1df70 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64 22  sqlite3_expired"
1df80 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1df90 74 65 73 74 5f 65 78 70 69 72 65 64 20 20 20 20  test_expired    
1dfa0 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
1dfb0 22 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65  "sqlite3_transfe
1dfc0 72 5f 62 69 6e 64 69 6e 67 73 22 2c 20 20 20 20  r_bindings",    
1dfd0 20 74 65 73 74 5f 74 72 61 6e 73 66 65 72 5f 62   test_transfer_b
1dfe0 69 6e 64 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b  ind ,0 },.     {
1dff0 20 22 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65   "sqlite3_change
1e000 73 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  s",             
1e010 20 20 74 65 73 74 5f 63 68 61 6e 67 65 73 20 20    test_changes  
1e020 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
1e030 7b 20 22 73 71 6c 69 74 65 33 5f 73 74 65 70 22  { "sqlite3_step"
1e040 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1e050 20 20 20 74 65 73 74 5f 73 74 65 70 20 20 20 20     test_step    
1e060 20 20 20 20 20 20 2c 30 20 7d 2c 0a 0a 20 20 20        ,0 },..   
1e070 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 72 65 6c    { "sqlite3_rel
1e080 65 61 73 65 5f 6d 65 6d 6f 72 79 22 2c 20 20 20  ease_memory",   
1e090 20 20 20 20 20 74 65 73 74 5f 72 65 6c 65 61 73       test_releas
1e0a0 65 5f 6d 65 6d 6f 72 79 2c 20 20 20 20 20 30 7d  e_memory,     0}
1e0b0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1e0c0 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  3_soft_heap_limi
1e0d0 74 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f 73  t",       test_s
1e0e0 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 2c 20  oft_heap_limit, 
1e0f0 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73     0},.     { "s
1e100 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 74 73 64  qlite3_clear_tsd
1e110 5f 6d 65 6d 64 65 62 75 67 22 2c 20 20 20 20 74  _memdebug",    t
1e120 65 73 74 5f 63 6c 65 61 72 5f 74 73 64 5f 6d 65  est_clear_tsd_me
1e130 6d 64 65 62 75 67 2c 20 30 7d 2c 0a 20 20 20 20  mdebug, 0},.    
1e140 20 7b 20 22 73 71 6c 69 74 65 33 5f 74 73 64 5f   { "sqlite3_tsd_
1e150 72 65 6c 65 61 73 65 22 2c 20 20 20 20 20 20 20  release",       
1e160 20 20 20 20 74 65 73 74 5f 74 73 64 5f 72 65 6c      test_tsd_rel
1e170 65 61 73 65 2c 20 20 20 20 20 20 20 20 30 7d 2c  ease,        0},
1e180 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1e190 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 22  _thread_cleanup"
1e1a0 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 74 68  ,        test_th
1e1b0 72 65 61 64 5f 63 6c 65 61 6e 75 70 2c 20 20 20  read_cleanup,   
1e1c0 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71    0},.     { "sq
1e1d0 6c 69 74 65 33 5f 70 61 67 65 72 5f 72 65 66 63  lite3_pager_refc
1e1e0 6f 75 6e 74 73 22 2c 20 20 20 20 20 20 20 74 65  ounts",       te
1e1f0 73 74 5f 70 61 67 65 72 5f 72 65 66 63 6f 75 6e  st_pager_refcoun
1e200 74 73 2c 20 20 20 20 30 7d 2c 0a 0a 20 20 20 20  ts,    0},..    
1e210 20 7b 20 22 73 71 6c 69 74 65 33 5f 6c 6f 61 64   { "sqlite3_load
1e220 5f 65 78 74 65 6e 73 69 6f 6e 22 2c 20 20 20 20  _extension",    
1e230 20 20 20 20 74 65 73 74 5f 6c 6f 61 64 5f 65 78      test_load_ex
1e240 74 65 6e 73 69 6f 6e 2c 20 20 20 20 20 30 7d 2c  tension,     0},
1e250 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1e260 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74  _enable_load_ext
1e270 65 6e 73 69 6f 6e 22 2c 20 74 65 73 74 5f 65 6e  ension", test_en
1e280 61 62 6c 65 5f 6c 6f 61 64 2c 20 20 20 20 20 20  able_load,      
1e290 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71    0},.     { "sq
1e2a0 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 72  lite3_extended_r
1e2b0 65 73 75 6c 74 5f 63 6f 64 65 73 22 2c 20 74 65  esult_codes", te
1e2c0 73 74 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75  st_extended_resu
1e2d0 6c 74 5f 63 6f 64 65 73 2c 20 30 7d 2c 0a 0a 20  lt_codes, 0},.. 
1e2e0 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 63      /* sqlite3_c
1e2f0 6f 6c 75 6d 6e 5f 2a 28 29 20 41 50 49 20 2a 2f  olumn_*() API */
1e300 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
1e310 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 22 2c 20  _column_count", 
1e320 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f           test_co
1e330 6c 75 6d 6e 5f 63 6f 75 6e 74 20 20 2c 30 20 7d  lumn_count  ,0 }
1e340 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1e350 33 5f 64 61 74 61 5f 63 6f 75 6e 74 22 2c 20 20  3_data_count",  
1e360 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 64            test_d
1e370 61 74 61 5f 63 6f 75 6e 74 20 20 20 20 2c 30 20  ata_count    ,0 
1e380 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1e390 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 22 2c  e3_column_type",
1e3a0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
1e3b0 63 6f 6c 75 6d 6e 5f 74 79 70 65 20 20 20 2c 30  column_type   ,0
1e3c0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
1e3d0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 22  te3_column_blob"
1e3e0 2c 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74  ,           test
1e3f0 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 20 20 2c  _column_blob   ,
1e400 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
1e410 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62  ite3_column_doub
1e420 6c 65 22 2c 20 20 20 20 20 20 20 20 20 74 65 73  le",         tes
1e430 74 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20  t_column_double 
1e440 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
1e450 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
1e460 36 34 22 2c 20 20 20 20 20 20 20 20 20 20 74 65  64",          te
1e470 73 74 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20  st_column_int64 
1e480 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
1e490 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
1e4a0 78 74 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f  xt",       test_
1e4b0 73 74 6d 74 5f 75 74 66 38 2c 20 20 73 71 6c 69  stmt_utf8,  sqli
1e4c0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20  te3_column_text 
1e4d0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
1e4e0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
1e4f0 65 63 6c 74 79 70 65 22 2c 20 20 20 74 65 73 74  ecltype",   test
1e500 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 73 71 6c  _stmt_utf8,  sql
1e510 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
1e520 74 79 70 65 20 20 7d 2c 0a 20 20 20 20 20 7b 20  type  },.     { 
1e530 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
1e540 6e 61 6d 65 22 2c 20 20 20 20 20 20 20 74 65 73  name",       tes
1e550 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 73 71  t_stmt_utf8,  sq
1e560 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
1e570 65 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b  e      },.     {
1e580 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
1e590 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20 74 65  _int",        te
1e5a0 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 20 20 73  st_stmt_int,   s
1e5b0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
1e5c0 74 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  t       },.     
1e5d0 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
1e5e0 6e 5f 62 79 74 65 73 22 2c 20 20 20 20 20 20 74  n_bytes",      t
1e5f0 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 20 20  est_stmt_int,   
1e600 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62  sqlite3_column_b
1e610 79 74 65 73 20 20 20 20 20 7d 2c 0a 23 69 66 64  ytes     },.#ifd
1e620 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1e630 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41  _COLUMN_METADATA
1e640 0a 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75  .{ "sqlite3_colu
1e650 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65  mn_database_name
1e660 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66  ", test_stmt_utf
1e670 38 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  8, sqlite3_colum
1e680 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 7d  n_database_name}
1e690 2c 0a 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c  ,.{ "sqlite3_col
1e6a0 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 22 2c  umn_table_name",
1e6b0 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 2c   test_stmt_utf8,
1e6c0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1e6d0 74 61 62 6c 65 5f 6e 61 6d 65 7d 2c 0a 7b 20 22  table_name},.{ "
1e6e0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f  sqlite3_column_o
1e6f0 72 69 67 69 6e 5f 6e 61 6d 65 22 2c 20 74 65 73  rigin_name", tes
1e700 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 73 71 6c  t_stmt_utf8, sql
1e710 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
1e720 69 6e 5f 6e 61 6d 65 7d 2c 0a 23 65 6e 64 69 66  in_name},.#endif
1e730 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
1e740 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 20 20  _OMIT_UTF16.    
1e750 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
1e760 6d 6e 5f 62 79 74 65 73 31 36 22 2c 20 20 20 20  mn_bytes16",    
1e770 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 20  test_stmt_int,  
1e780 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1e790 62 79 74 65 73 31 36 20 20 20 7d 2c 0a 20 20 20  bytes16   },.   
1e7a0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
1e7b0 75 6d 6e 5f 74 65 78 74 31 36 22 2c 20 20 20 20  umn_text16",    
1e7c0 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36   test_stmt_utf16
1e7d0 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  , sqlite3_column
1e7e0 5f 74 65 78 74 31 36 20 20 20 20 7d 2c 0a 20 20  _text16    },.  
1e7f0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
1e800 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 22  lumn_decltype16"
1e810 2c 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31  , test_stmt_utf1
1e820 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  6, sqlite3_colum
1e830 6e 5f 64 65 63 6c 74 79 70 65 31 36 7d 2c 0a 20  n_decltype16},. 
1e840 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
1e850 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 22 2c 20 20  olumn_name16",  
1e860 20 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66     test_stmt_utf
1e870 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  16, sqlite3_colu
1e880 6d 6e 5f 6e 61 6d 65 31 36 20 20 20 20 7d 2c 0a  mn_name16    },.
1e890 20 20 20 20 20 7b 20 22 61 64 64 5f 61 6c 69 67       { "add_alig
1e8a0 6e 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61  nment_test_colla
1e8b0 74 69 6f 6e 73 22 2c 20 61 64 64 5f 61 6c 69 67  tions", add_alig
1e8c0 6e 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61  nment_test_colla
1e8d0 74 69 6f 6e 73 2c 20 30 20 20 20 20 20 20 7d 2c  tions, 0      },
1e8e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1e8f0 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54  NABLE_COLUMN_MET
1e900 41 44 41 54 41 0a 7b 22 73 71 6c 69 74 65 33 5f  ADATA.{"sqlite3_
1e910 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f  column_database_
1e920 6e 61 6d 65 31 36 22 2c 0a 20 20 74 65 73 74 5f  name16",.  test_
1e930 73 74 6d 74 5f 75 74 66 31 36 2c 20 73 71 6c 69  stmt_utf16, sqli
1e940 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62  te3_column_datab
1e950 61 73 65 5f 6e 61 6d 65 31 36 7d 2c 0a 7b 22 73  ase_name16},.{"s
1e960 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61  qlite3_column_ta
1e970 62 6c 65 5f 6e 61 6d 65 31 36 22 2c 20 74 65 73  ble_name16", tes
1e980 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73 71  t_stmt_utf16, sq
1e990 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
1e9a0 6c 65 5f 6e 61 6d 65 31 36 7d 2c 0a 7b 22 73 71  le_name16},.{"sq
1e9b0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
1e9c0 67 69 6e 5f 6e 61 6d 65 31 36 22 2c 20 74 65 73  gin_name16", tes
1e9d0 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 73 71  t_stmt_utf16, sq
1e9e0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
1e9f0 67 69 6e 5f 6e 61 6d 65 31 36 7d 2c 0a 23 65 6e  gin_name16},.#en
1ea00 64 69 66 0a 23 65 6e 64 69 66 0a 20 20 20 20 20  dif.#endif.     
1ea10 7b 20 22 73 71 6c 69 74 65 33 5f 63 72 65 61 74  { "sqlite3_creat
1ea20 65 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 76 32 22 2c  e_collation_v2",
1ea30 20 74 65 73 74 5f 63 72 65 61 74 65 5f 63 6f 6c   test_create_col
1ea40 6c 61 74 69 6f 6e 5f 76 32 2c 20 30 20 7d 2c 0a  lation_v2, 0 },.
1ea50 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
1ea60 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 22 2c  global_recover",
1ea70 20 20 20 20 20 74 65 73 74 5f 67 6c 6f 62 61 6c       test_global
1ea80 5f 72 65 63 6f 76 65 72 2c 20 30 20 20 20 7d 2c  _recover, 0   },
1ea90 0a 20 20 20 20 20 7b 20 22 77 6f 72 6b 69 6e 67  .     { "working
1eaa0 5f 36 34 62 69 74 5f 69 6e 74 22 2c 20 20 20 20  _64bit_int",    
1eab0 20 20 20 20 20 20 77 6f 72 6b 69 6e 67 5f 36 34        working_64
1eac0 62 69 74 5f 69 6e 74 2c 20 20 20 30 20 20 20 7d  bit_int,   0   }
1ead0 2c 0a 0a 20 20 20 20 20 2f 2a 20 46 75 6e 63 74  ,..     /* Funct
1eae0 69 6f 6e 73 20 66 72 6f 6d 20 6f 73 2e 68 20 2a  ions from os.h *
1eaf0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1eb00 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 20 20 20  _OMIT_DISKIO.   
1eb10 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73 4f 70    { "sqlite3OsOp
1eb20 65 6e 52 65 61 64 57 72 69 74 65 22 2c 74 65 73  enReadWrite",tes
1eb30 74 5f 73 71 6c 69 74 65 33 4f 73 4f 70 65 6e 52  t_sqlite3OsOpenR
1eb40 65 61 64 57 72 69 74 65 2c 20 30 20 7d 2c 0a 20  eadWrite, 0 },. 
1eb50 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 4f 73      { "sqlite3Os
1eb60 43 6c 6f 73 65 22 2c 20 20 20 20 20 20 20 20 74  Close",        t
1eb70 65 73 74 5f 73 71 6c 69 74 65 33 4f 73 43 6c 6f  est_sqlite3OsClo
1eb80 73 65 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20  se, 0 },.     { 
1eb90 22 73 71 6c 69 74 65 33 4f 73 4c 6f 63 6b 22 2c  "sqlite3OsLock",
1eba0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 73 71           test_sq
1ebb0 6c 69 74 65 33 4f 73 4c 6f 63 6b 2c 20 30 20 7d  lite3OsLock, 0 }
1ebc0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
1ebd0 33 4f 73 54 65 6d 70 46 69 6c 65 4e 61 6d 65 22  3OsTempFileName"
1ebe0 2c 20 74 65 73 74 5f 73 71 6c 69 74 65 33 4f 73  , test_sqlite3Os
1ebf0 54 65 6d 70 46 69 6c 65 4e 61 6d 65 2c 20 30 20  TempFileName, 0 
1ec00 7d 2c 0a 20 20 20 0a 20 20 20 20 20 2f 2a 20 43  },.   .     /* C
1ec10 75 73 74 6f 6d 20 74 65 73 74 20 69 6e 74 65 72  ustom test inter
1ec20 66 61 63 65 73 20 2a 2f 0a 20 20 20 20 20 7b 20  faces */.     { 
1ec30 22 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b  "sqlite3OsUnlock
1ec40 22 2c 20 20 20 20 20 20 20 20 20 74 65 73 74 5f  ",         test_
1ec50 73 71 6c 69 74 65 33 4f 73 55 6e 6c 6f 63 6b 2c  sqlite3OsUnlock,
1ec60 20 30 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a   0    },.#endif.
1ec70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1ec80 4d 49 54 5f 55 54 46 31 36 0a 20 20 20 20 20 7b  MIT_UTF16.     {
1ec90 20 22 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61   "add_test_colla
1eca0 74 65 22 2c 20 20 20 20 20 20 20 20 74 65 73 74  te",        test
1ecb0 5f 63 6f 6c 6c 61 74 65 2c 20 30 20 20 20 20 20  _collate, 0     
1ecc0 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b         },.     {
1ecd0 20 22 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61   "add_test_colla
1ece0 74 65 5f 6e 65 65 64 65 64 22 2c 20 74 65 73 74  te_needed", test
1ecf0 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 2c  _collate_needed,
1ed00 20 30 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b   0     },.     {
1ed10 20 22 61 64 64 5f 74 65 73 74 5f 66 75 6e 63 74   "add_test_funct
1ed20 69 6f 6e 22 2c 20 20 20 20 20 20 20 74 65 73 74  ion",       test
1ed30 5f 66 75 6e 63 74 69 6f 6e 2c 20 30 20 20 20 20  _function, 0    
1ed40 20 20 20 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66         },.#endif
1ed50 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d  .#ifdef SQLITE_M
1ed60 45 4d 44 45 42 55 47 0a 20 20 20 20 20 7b 20 22  EMDEBUG.     { "
1ed70 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75  sqlite_malloc_ou
1ed80 74 73 74 61 6e 64 69 6e 67 22 2c 20 73 71 6c 69  tstanding", sqli
1ed90 74 65 5f 6d 61 6c 6c 6f 63 5f 6f 75 74 73 74 61  te_malloc_outsta
1eda0 6e 64 69 6e 67 2c 20 30 7d 2c 0a 23 65 6e 64 69  nding, 0},.#endi
1edb0 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  f.     { "sqlite
1edc0 33 5f 74 65 73 74 5f 65 72 72 73 74 72 22 2c 20  3_test_errstr", 
1edd0 20 20 20 20 74 65 73 74 5f 65 72 72 73 74 72 2c      test_errstr,
1ede0 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d   0             }
1edf0 2c 0a 20 20 20 20 20 7b 20 22 74 63 6c 5f 76 61  ,.     { "tcl_va
1ee00 72 69 61 62 6c 65 5f 74 79 70 65 22 2c 20 20 20  riable_type",   
1ee10 20 20 20 20 74 63 6c 5f 76 61 72 69 61 62 6c 65      tcl_variable
1ee20 5f 74 79 70 65 2c 20 30 20 20 20 20 20 20 20 7d  _type, 0       }
1ee30 2c 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ,.#ifndef SQLITE
1ee40 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
1ee50 48 45 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  HE.     { "sqlit
1ee60 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64  e3_enable_shared
1ee70 5f 63 61 63 68 65 22 2c 20 74 65 73 74 5f 65 6e  _cache", test_en
1ee80 61 62 6c 65 5f 73 68 61 72 65 64 2c 20 30 20 20  able_shared, 0  
1ee90 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
1eea0 65 33 5f 73 68 61 72 65 64 5f 63 61 63 68 65 5f  e3_shared_cache_
1eeb0 72 65 70 6f 72 74 22 2c 20 73 71 6c 69 74 65 33  report", sqlite3
1eec0 42 74 72 65 65 53 68 61 72 65 64 43 61 63 68 65  BtreeSharedCache
1eed0 52 65 70 6f 72 74 2c 20 30 7d 2c 0a 23 65 6e 64  Report, 0},.#end
1eee0 69 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  if.     { "sqlit
1eef0 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75  e3_libversion_nu
1ef00 6d 62 65 72 22 2c 20 74 65 73 74 5f 6c 69 62 76  mber", test_libv
1ef10 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 2c 20 30  ersion_number, 0
1ef20 20 20 7d 2c 0a 23 69 66 64 65 66 20 53 51 4c 49    },.#ifdef SQLI
1ef30 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
1ef40 5f 4d 45 54 41 44 41 54 41 0a 20 20 20 20 20 7b  _METADATA.     {
1ef50 20 22 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f   "sqlite3_table_
1ef60 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 22  column_metadata"
1ef70 2c 20 74 65 73 74 5f 74 61 62 6c 65 5f 63 6f 6c  , test_table_col
1ef80 75 6d 6e 5f 6d 65 74 61 64 61 74 61 2c 20 30 20  umn_metadata, 0 
1ef90 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   },.#endif.#ifnd
1efa0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
1efb0 4e 43 52 42 4c 4f 42 0a 20 20 20 20 20 7b 20 22  NCRBLOB.     { "
1efc0 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 72 65 61  sqlite3_blob_rea
1efd0 64 22 2c 20 20 74 65 73 74 5f 62 6c 6f 62 5f 72  d",  test_blob_r
1efe0 65 61 64 2c 20 30 20 20 7d 2c 0a 20 20 20 20 20  ead, 0  },.     
1eff0 7b 20 22 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f  { "sqlite3_blob_
1f000 77 72 69 74 65 22 2c 20 74 65 73 74 5f 62 6c 6f  write", test_blo
1f010 62 5f 77 72 69 74 65 2c 20 30 20 20 7d 2c 0a 23  b_write, 0  },.#
1f020 65 6e 64 69 66 0a 20 20 7d 3b 0a 20 20 73 74 61  endif.  };.  sta
1f030 74 69 63 20 69 6e 74 20 62 69 74 6d 61 73 6b 5f  tic int bitmask_
1f040 73 69 7a 65 20 3d 20 73 69 7a 65 6f 66 28 42 69  size = sizeof(Bi
1f050 74 6d 61 73 6b 29 2a 38 3b 0a 20 20 69 6e 74 20  tmask)*8;.  int 
1f060 69 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  i;.  extern int 
1f070 73 71 6c 69 74 65 33 5f 6f 73 5f 74 72 61 63 65  sqlite3_os_trace
1f080 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
1f090 71 6c 69 74 65 33 5f 77 68 65 72 65 5f 74 72 61  qlite3_where_tra
1f0a0 63 65 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  ce;.  extern int
1f0b0 20 73 71 6c 69 74 65 33 5f 73 79 6e 63 5f 63 6f   sqlite3_sync_co
1f0c0 75 6e 74 2c 20 73 71 6c 69 74 65 33 5f 66 75 6c  unt, sqlite3_ful
1f0d0 6c 73 79 6e 63 5f 63 6f 75 6e 74 3b 0a 20 20 65  lsync_count;.  e
1f0e0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
1f0f0 33 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74  3_opentemp_count
1f100 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
1f110 71 6c 69 74 65 33 5f 6d 65 6d 55 73 65 64 3b 0a  qlite3_memUsed;.
1f120 20 20 65 78 74 65 72 6e 20 63 68 61 72 20 2a 73    extern char *s
1f130 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 5f 69 64  qlite3_malloc_id
1f140 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
1f150 71 6c 69 74 65 33 5f 6d 65 6d 4d 61 78 3b 0a 20  qlite3_memMax;. 
1f160 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
1f170 74 65 33 5f 6c 69 6b 65 5f 63 6f 75 6e 74 3b 0a  te3_like_count;.
1f180 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
1f190 69 74 65 33 5f 74 73 64 5f 63 6f 75 6e 74 3b 0a  ite3_tsd_count;.
1f1a0 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
1f1b0 69 74 65 33 5f 78 66 65 72 6f 70 74 5f 63 6f 75  ite3_xferopt_cou
1f1c0 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  nt;.  extern int
1f1d0 20 73 71 6c 69 74 65 33 5f 70 61 67 65 72 5f 72   sqlite3_pager_r
1f1e0 65 61 64 64 62 5f 63 6f 75 6e 74 3b 0a 20 20 65  eaddb_count;.  e
1f1f0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
1f200 33 5f 70 61 67 65 72 5f 77 72 69 74 65 64 62 5f  3_pager_writedb_
1f210 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20  count;.  extern 
1f220 69 6e 74 20 73 71 6c 69 74 65 33 5f 70 61 67 65  int sqlite3_page
1f230 72 5f 77 72 69 74 65 6a 5f 63 6f 75 6e 74 3b 0a  r_writej_count;.
1f240 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
1f250 69 74 65 33 5f 70 61 67 65 72 5f 70 67 66 72 65  ite3_pager_pgfre
1f260 65 5f 63 6f 75 6e 74 3b 0a 23 69 66 20 4f 53 5f  e_count;.#if OS_
1f270 55 4e 49 58 20 26 26 20 64 65 66 69 6e 65 64 28  UNIX && defined(
1f280 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20  SQLITE_TEST) && 
1f290 64 65 66 69 6e 65 64 28 54 48 52 45 41 44 53 41  defined(THREADSA
1f2a0 46 45 29 20 26 26 20 54 48 52 45 41 44 53 41 46  FE) && THREADSAF
1f2b0 45 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 74  E.  extern int t
1f2c0 68 72 65 61 64 73 4f 76 65 72 72 69 64 65 45 61  hreadsOverrideEa
1f2d0 63 68 4f 74 68 65 72 73 4c 6f 63 6b 73 3b 0a 23  chOthersLocks;.#
1f2e0 65 6e 64 69 66 0a 23 69 66 20 4f 53 5f 57 49 4e  endif.#if OS_WIN
1f2f0 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
1f300 6c 69 74 65 33 5f 6f 73 5f 74 79 70 65 3b 0a 23  lite3_os_type;.#
1f310 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
1f320 49 54 45 5f 44 45 42 55 47 0a 20 20 65 78 74 65  ITE_DEBUG.  exte
1f330 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 76  rn int sqlite3_v
1f340 64 62 65 5f 61 64 64 6f 70 5f 74 72 61 63 65 3b  dbe_addop_trace;
1f350 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
1f360 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 65 78 74  QLITE_TEST.  ext
1f370 65 72 6e 20 63 68 61 72 20 73 71 6c 69 74 65 33  ern char sqlite3
1f380 5f 71 75 65 72 79 5f 70 6c 61 6e 5b 5d 3b 0a 20  _query_plan[];. 
1f390 20 73 74 61 74 69 63 20 63 68 61 72 20 2a 71 75   static char *qu
1f3a0 65 72 79 5f 70 6c 61 6e 20 3d 20 73 71 6c 69 74  ery_plan = sqlit
1f3b0 65 33 5f 71 75 65 72 79 5f 70 6c 61 6e 3b 0a 23  e3_query_plan;.#
1f3c0 65 6e 64 69 66 0a 0a 20 20 66 6f 72 28 69 3d 30  endif..  for(i=0
1f3d0 3b 20 69 3c 73 69 7a 65 6f 66 28 61 43 6d 64 29  ; i<sizeof(aCmd)
1f3e0 2f 73 69 7a 65 6f 66 28 61 43 6d 64 5b 30 5d 29  /sizeof(aCmd[0])
1f3f0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f  ; i++){.    Tcl_
1f400 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64 28 69 6e  CreateCommand(in
1f410 74 65 72 70 2c 20 61 43 6d 64 5b 69 5d 2e 7a 4e  terp, aCmd[i].zN
1f420 61 6d 65 2c 20 61 43 6d 64 5b 69 5d 2e 78 50 72  ame, aCmd[i].xPr
1f430 6f 63 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20  oc, 0, 0);.  }. 
1f440 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65   for(i=0; i<size
1f450 6f 66 28 61 4f 62 6a 43 6d 64 29 2f 73 69 7a 65  of(aObjCmd)/size
1f460 6f 66 28 61 4f 62 6a 43 6d 64 5b 30 5d 29 3b 20  of(aObjCmd[0]); 
1f470 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f 43 72  i++){.    Tcl_Cr
1f480 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e 64 28 69  eateObjCommand(i
1f490 6e 74 65 72 70 2c 20 61 4f 62 6a 43 6d 64 5b 69  nterp, aObjCmd[i
1f4a0 5d 2e 7a 4e 61 6d 65 2c 20 0a 20 20 20 20 20 20  ].zName, .      
1f4b0 20 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 78 50 72    aObjCmd[i].xPr
1f4c0 6f 63 2c 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e 63  oc, aObjCmd[i].c
1f4d0 6c 69 65 6e 74 44 61 74 61 2c 20 30 29 3b 0a 20  lientData, 0);. 
1f4e0 20 7d 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72   }.  Tcl_LinkVar
1f4f0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1f500 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 22 2c 20  _search_count", 
1f510 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1f520 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
1f530 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  unt, TCL_LINK_IN
1f540 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  T);.  Tcl_LinkVa
1f550 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
1f560 65 5f 73 6f 72 74 5f 63 6f 75 6e 74 22 2c 20 0a  e_sort_count", .
1f570 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
1f580 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
1f590 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
1f5a0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1f5b0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33 5f  nterp, "sqlite3_
1f5c0 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 22 2c 20 0a  max_blobsize", .
1f5d0 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
1f5e0 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
1f5f0 7a 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  ze, TCL_LINK_INT
1f600 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
1f610 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
1f620 5f 6c 69 6b 65 5f 63 6f 75 6e 74 22 2c 20 0a 20  _like_count", . 
1f630 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
1f640 69 74 65 33 5f 6c 69 6b 65 5f 63 6f 75 6e 74 2c  ite3_like_count,
1f650 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
1f660 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
1f670 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 69 6e  terp, "sqlite_in
1f680 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 22 2c 20  terrupt_count", 
1f690 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1f6a0 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
1f6b0 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b  _count, TCL_LINK
1f6c0 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
1f6d0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1f6e0 6c 69 74 65 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63  lite_open_file_c
1f6f0 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63  ount", .      (c
1f700 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 70  har*)&sqlite3_op
1f710 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 2c 20 54  en_file_count, T
1f720 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
1f730 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1f740 72 70 2c 20 22 73 71 6c 69 74 65 5f 63 75 72 72  rp, "sqlite_curr
1f750 65 6e 74 5f 74 69 6d 65 22 2c 20 0a 20 20 20 20  ent_time", .    
1f760 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
1f770 33 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65 2c 20  3_current_time, 
1f780 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20  TCL_LINK_INT);. 
1f790 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
1f7a0 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 73 5f  erp, "sqlite_os_
1f7b0 74 72 61 63 65 22 2c 0a 20 20 20 20 20 20 28 63  trace",.      (c
1f7c0 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 73  har*)&sqlite3_os
1f7d0 5f 74 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b  _trace, TCL_LINK
1f7e0 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
1f7f0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1f800 6c 69 74 65 33 5f 74 73 64 5f 63 6f 75 6e 74 22  lite3_tsd_count"
1f810 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
1f820 73 71 6c 69 74 65 33 5f 74 73 64 5f 63 6f 75 6e  sqlite3_tsd_coun
1f830 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
1f840 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
1f850 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33  interp, "sqlite3
1f860 5f 78 66 65 72 6f 70 74 5f 63 6f 75 6e 74 22 2c  _xferopt_count",
1f870 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1f880 71 6c 69 74 65 33 5f 78 66 65 72 6f 70 74 5f 63  qlite3_xferopt_c
1f890 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  ount, TCL_LINK_I
1f8a0 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
1f8b0 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1f8c0 74 65 33 5f 70 61 67 65 72 5f 72 65 61 64 64 62  te3_pager_readdb
1f8d0 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28  _count",.      (
1f8e0 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 70  char*)&sqlite3_p
1f8f0 61 67 65 72 5f 72 65 61 64 64 62 5f 63 6f 75 6e  ager_readdb_coun
1f900 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
1f910 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
1f920 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33  interp, "sqlite3
1f930 5f 70 61 67 65 72 5f 77 72 69 74 65 64 62 5f 63  _pager_writedb_c
1f940 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68  ount",.      (ch
1f950 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 70 61 67  ar*)&sqlite3_pag
1f960 65 72 5f 77 72 69 74 65 64 62 5f 63 6f 75 6e 74  er_writedb_count
1f970 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
1f980 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1f990 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33 5f  nterp, "sqlite3_
1f9a0 70 61 67 65 72 5f 77 72 69 74 65 6a 5f 63 6f 75  pager_writej_cou
1f9b0 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  nt",.      (char
1f9c0 2a 29 26 73 71 6c 69 74 65 33 5f 70 61 67 65 72  *)&sqlite3_pager
1f9d0 5f 77 72 69 74 65 6a 5f 63 6f 75 6e 74 2c 20 54  _writej_count, T
1f9e0 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
1f9f0 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1fa00 72 70 2c 20 22 73 71 6c 69 74 65 33 5f 70 61 67  rp, "sqlite3_pag
1fa10 65 72 5f 70 67 66 72 65 65 5f 63 6f 75 6e 74 22  er_pgfree_count"
1fa20 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
1fa30 73 71 6c 69 74 65 33 5f 70 61 67 65 72 5f 70 67  sqlite3_pager_pg
1fa40 66 72 65 65 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  free_count, TCL_
1fa50 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 69 66 6e 64  LINK_INT);.#ifnd
1fa60 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
1fa70 54 46 31 36 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  TF16.  Tcl_LinkV
1fa80 61 72 28 69 6e 74 65 72 70 2c 20 22 75 6e 61 6c  ar(interp, "unal
1fa90 69 67 6e 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75  igned_string_cou
1faa0 6e 74 65 72 22 2c 0a 20 20 20 20 20 20 28 63 68  nter",.      (ch
1fab0 61 72 2a 29 26 75 6e 61 6c 69 67 6e 65 64 5f 73  ar*)&unaligned_s
1fac0 74 72 69 6e 67 5f 63 6f 75 6e 74 65 72 2c 20 54  tring_counter, T
1fad0 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65  CL_LINK_INT);.#e
1fae0 6e 64 69 66 0a 23 69 66 20 4f 53 5f 55 4e 49 58  ndif.#if OS_UNIX
1faf0 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
1fb00 54 45 5f 54 45 53 54 29 20 26 26 20 64 65 66 69  TE_TEST) && defi
1fb10 6e 65 64 28 54 48 52 45 41 44 53 41 46 45 29 20  ned(THREADSAFE) 
1fb20 26 26 20 54 48 52 45 41 44 53 41 46 45 0a 20 20  && THREADSAFE.  
1fb30 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1fb40 72 70 2c 20 22 74 68 72 65 61 64 73 4f 76 65 72  rp, "threadsOver
1fb50 72 69 64 65 45 61 63 68 4f 74 68 65 72 73 4c 6f  rideEachOthersLo
1fb60 63 6b 73 22 2c 0a 20 20 20 20 20 20 28 63 68 61  cks",.      (cha
1fb70 72 2a 29 26 74 68 72 65 61 64 73 4f 76 65 72 72  r*)&threadsOverr
1fb80 69 64 65 45 61 63 68 4f 74 68 65 72 73 4c 6f 63  ideEachOthersLoc
1fb90 6b 73 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  ks, TCL_LINK_INT
1fba0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  );.#endif.#ifnde
1fbb0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
1fbc0 46 31 36 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  F16.  Tcl_LinkVa
1fbd0 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
1fbe0 65 5f 6c 61 73 74 5f 6e 65 65 64 65 64 5f 63 6f  e_last_needed_co
1fbf0 6c 6c 61 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20  llation",.      
1fc00 28 63 68 61 72 2a 29 26 70 7a 4e 65 65 64 65 64  (char*)&pzNeeded
1fc10 43 6f 6c 6c 61 74 69 6f 6e 2c 20 54 43 4c 5f 4c  Collation, TCL_L
1fc20 49 4e 4b 5f 53 54 52 49 4e 47 7c 54 43 4c 5f 4c  INK_STRING|TCL_L
1fc30 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a  INK_READ_ONLY);.
1fc40 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
1fc50 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
1fc60 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
1fc70 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d 61 6c 6c  rp, "sqlite_mall
1fc80 6f 63 5f 69 64 22 2c 0a 20 20 20 20 20 20 28 63  oc_id",.      (c
1fc90 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d 61  har*)&sqlite3_ma
1fca0 6c 6c 6f 63 5f 69 64 2c 20 54 43 4c 5f 4c 49 4e  lloc_id, TCL_LIN
1fcb0 4b 5f 53 54 52 49 4e 47 29 3b 0a 23 65 6e 64 69  K_STRING);.#endi
1fcc0 66 0a 23 69 66 20 4f 53 5f 57 49 4e 0a 20 20 54  f.#if OS_WIN.  T
1fcd0 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
1fce0 70 2c 20 22 73 71 6c 69 74 65 5f 6f 73 5f 74 79  p, "sqlite_os_ty
1fcf0 70 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  pe",.      (char
1fd00 2a 29 26 73 71 6c 69 74 65 33 5f 6f 73 5f 74 79  *)&sqlite3_os_ty
1fd10 70 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  pe, TCL_LINK_INT
1fd20 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
1fd30 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 54   SQLITE_TEST.  T
1fd40 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
1fd50 70 2c 20 22 73 71 6c 69 74 65 5f 71 75 65 72 79  p, "sqlite_query
1fd60 5f 70 6c 61 6e 22 2c 0a 20 20 20 20 20 20 28 63  _plan",.      (c
1fd70 68 61 72 2a 29 26 71 75 65 72 79 5f 70 6c 61 6e  har*)&query_plan
1fd80 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52 49 4e  , TCL_LINK_STRIN
1fd90 47 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f  G|TCL_LINK_READ_
1fda0 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ONLY);.#endif.#i
1fdb0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1fdc0 47 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  G.  Tcl_LinkVar(
1fdd0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
1fde0 61 64 64 6f 70 5f 74 72 61 63 65 22 2c 0a 20 20  addop_trace",.  
1fdf0 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
1fe00 74 65 33 5f 76 64 62 65 5f 61 64 64 6f 70 5f 74  te3_vdbe_addop_t
1fe10 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  race, TCL_LINK_I
1fe20 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
1fe30 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
1fe40 74 65 5f 77 68 65 72 65 5f 74 72 61 63 65 22 2c  te_where_trace",
1fe50 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
1fe60 71 6c 69 74 65 33 5f 77 68 65 72 65 5f 74 72 61  qlite3_where_tra
1fe70 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  ce, TCL_LINK_INT
1fe80 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  );.#endif.#ifdef
1fe90 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
1fea0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
1feb0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6d  nterp, "sqlite_m
1fec0 65 6d 75 73 65 64 22 2c 0a 20 20 20 20 20 20 28  emused",.      (
1fed0 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d  char*)&sqlite3_m
1fee0 65 6d 55 73 65 64 2c 20 54 43 4c 5f 4c 49 4e 4b  emUsed, TCL_LINK
1fef0 5f 49 4e 54 20 7c 20 54 43 4c 5f 4c 49 4e 4b 5f  _INT | TCL_LINK_
1ff00 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 20 20 54 63  READ_ONLY);.  Tc
1ff10 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
1ff20 2c 20 22 73 71 6c 69 74 65 5f 6d 65 6d 6d 61 78  , "sqlite_memmax
1ff30 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
1ff40 26 73 71 6c 69 74 65 33 5f 6d 65 6d 4d 61 78 2c  &sqlite3_memMax,
1ff50 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 20 7c 20   TCL_LINK_INT | 
1ff60 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e  TCL_LINK_READ_ON
1ff70 4c 59 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e  LY);.#endif.#ifn
1ff80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1ff90 44 49 53 4b 49 4f 0a 20 20 54 63 6c 5f 4c 69 6e  DISKIO.  Tcl_Lin
1ffa0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
1ffb0 6c 69 74 65 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f  lite_opentemp_co
1ffc0 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61  unt",.      (cha
1ffd0 72 2a 29 26 73 71 6c 69 74 65 33 5f 6f 70 65 6e  r*)&sqlite3_open
1ffe0 74 65 6d 70 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  temp_count, TCL_
1fff0 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69  LINK_INT);.#endi
20000 66 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  f.  Tcl_LinkVar(
20010 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
20020 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75  static_bind_valu
20030 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  e",.      (char*
20040 29 26 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f  )&sqlite_static_
20050 62 69 6e 64 5f 76 61 6c 75 65 2c 20 54 43 4c 5f  bind_value, TCL_
20060 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a 20 20  LINK_STRING);.  
20070 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
20080 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 74 61 74  rp, "sqlite_stat
20090 69 63 5f 62 69 6e 64 5f 6e 62 79 74 65 22 2c 0a  ic_bind_nbyte",.
200a0 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
200b0 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64  lite_static_bind
200c0 5f 6e 62 79 74 65 2c 20 54 43 4c 5f 4c 49 4e 4b  _nbyte, TCL_LINK
200d0 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
200e0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
200f0 6c 69 74 65 5f 74 65 6d 70 5f 64 69 72 65 63 74  lite_temp_direct
20100 6f 72 79 22 2c 0a 20 20 20 20 20 20 28 63 68 61  ory",.      (cha
20110 72 2a 29 26 73 71 6c 69 74 65 33 5f 74 65 6d 70  r*)&sqlite3_temp
20120 5f 64 69 72 65 63 74 6f 72 79 2c 20 54 43 4c 5f  _directory, TCL_
20130 4c 49 4e 4b 5f 53 54 52 49 4e 47 29 3b 0a 20 20  LINK_STRING);.  
20140 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
20150 72 70 2c 20 22 62 69 74 6d 61 73 6b 5f 73 69 7a  rp, "bitmask_siz
20160 65 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  e",.      (char*
20170 29 26 62 69 74 6d 61 73 6b 5f 73 69 7a 65 2c 20  )&bitmask_size, 
20180 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 7c 54 43 4c  TCL_LINK_INT|TCL
20190 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29  _LINK_READ_ONLY)
201a0 3b 0a 23 69 66 20 4f 53 5f 55 4e 49 58 0a 20 20  ;.#if OS_UNIX.  
201b0 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
201c0 72 70 2c 20 22 73 71 6c 69 74 65 5f 73 79 6e 63  rp, "sqlite_sync
201d0 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28  _count",.      (
201e0 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 73  char*)&sqlite3_s
201f0 79 6e 63 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c  ync_count, TCL_L
20200 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
20210 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
20220 22 73 71 6c 69 74 65 5f 66 75 6c 6c 73 79 6e 63  "sqlite_fullsync
20230 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28  _count",.      (
20240 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 66  char*)&sqlite3_f
20250 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 2c 20 54  ullsync_count, T
20260 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65  CL_LINK_INT);.#e
20270 6e 64 69 66 20 2f 2a 20 4f 53 5f 55 4e 49 58 20  ndif /* OS_UNIX 
20280 2a 2f 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  */..  return TCL
20290 5f 4f 4b 3b 0a 7d 0a                             _OK;.}.