/ Hex Artifact Content
Login

Artifact 72ed8f7cabea905401691a836d578b8317b4d76e:


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 33 34 35 20 32 30 30 39 2f 30 32 2f 30   1.345 2009/02/0
0240: 31 20 30 30 3a 32 31 3a 31 30 20 64 72 68 20 45  1 00:21:10 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 3c 73 74 64 6c 69 62  #include <stdlib
0290: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
02a0: 72 69 6e 67 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 54  ring.h>../*.** T
02b0: 68 69 73 20 69 73 20 61 20 63 6f 70 79 20 6f 66  his is a copy of
02c0: 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
02d0: 6f 66 20 74 68 65 20 53 71 6c 69 74 65 44 62 20  of the SqliteDb 
02e0: 73 74 72 75 63 74 75 72 65 20 69 6e 20 0a 2a 2a  structure in .**
02f0: 20 74 63 6c 73 71 6c 69 74 65 2e 63 2e 20 20 57   tclsqlite.c.  W
0300: 65 20 6e 65 65 64 20 69 74 20 68 65 72 65 20 73  e need it here s
0310: 6f 20 74 68 61 74 20 74 68 65 20 67 65 74 5f 73  o that the get_s
0320: 71 6c 69 74 65 5f 70 6f 69 6e 74 65 72 20 72 6f  qlite_pointer ro
0330: 75 74 69 6e 65 0a 2a 2a 20 63 61 6e 20 65 78 74  utine.** can ext
0340: 72 61 63 74 20 74 68 65 20 73 71 6c 69 74 65 33  ract the sqlite3
0350: 2a 20 70 6f 69 6e 74 65 72 20 66 72 6f 6d 20 61  * pointer from a
0360: 6e 20 65 78 69 73 74 69 6e 67 20 54 63 6c 20 53  n existing Tcl S
0370: 51 4c 69 74 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  QLite.** connect
0380: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
0390: 71 6c 69 74 65 44 62 20 7b 0a 20 20 73 71 6c 69  qliteDb {.  sqli
03a0: 74 65 33 20 2a 64 62 3b 0a 7d 3b 0a 0a 2f 2a 0a  te3 *db;.};../*.
03b0: 2a 2a 20 43 6f 6e 76 65 72 74 20 74 65 78 74 20  ** Convert text 
03c0: 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
03d0: 20 22 25 70 22 20 63 6f 6e 76 65 72 73 69 6f 6e   "%p" conversion
03e0: 20 66 6f 72 6d 61 74 20 62 61 63 6b 20 69 6e 74   format back int
03f0: 6f 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 2e 0a  o.** a pointer..
0400: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
0410: 73 74 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68  stHexToInt(int h
0420: 29 7b 0a 20 20 69 66 28 20 68 3e 3d 27 30 27 20  ){.  if( h>='0' 
0430: 26 26 20 68 3c 3d 27 39 27 20 29 7b 0a 20 20 20  && h<='9' ){.   
0440: 20 72 65 74 75 72 6e 20 68 20 2d 20 27 30 27 3b   return h - '0';
0450: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 68 3e 3d  .  }else if( h>=
0460: 27 61 27 20 26 26 20 68 3c 3d 27 66 27 20 29 7b  'a' && h<='f' ){
0470: 0a 20 20 20 20 72 65 74 75 72 6e 20 68 20 2d 20  .    return h - 
0480: 27 61 27 20 2b 20 31 30 3b 0a 20 20 7d 65 6c 73  'a' + 10;.  }els
0490: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 68  e{.    assert( h
04a0: 3e 3d 27 41 27 20 26 26 20 68 3c 3d 27 46 27 20  >='A' && h<='F' 
04b0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 68 20  );.    return h 
04c0: 2d 20 27 41 27 20 2b 20 31 30 3b 0a 20 20 7d 0a  - 'A' + 10;.  }.
04d0: 7d 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54  }.void *sqlite3T
04e0: 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e  estTextToPtr(con
04f0: 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 76  st char *z){.  v
0500: 6f 69 64 20 2a 70 3b 0a 20 20 75 36 34 20 76 3b  oid *p;.  u64 v;
0510: 0a 20 20 75 33 32 20 76 32 3b 0a 20 20 69 66 28  .  u32 v2;.  if(
0520: 20 7a 5b 30 5d 3d 3d 27 30 27 20 26 26 20 7a 5b   z[0]=='0' && z[
0530: 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20 20 20 7a  1]=='x' ){.    z
0540: 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20 20 76 20 3d   += 2;.  }.  v =
0550: 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 2a 7a 20   0;.  while( *z 
0560: 29 7b 0a 20 20 20 20 76 20 3d 20 28 76 3c 3c 34  ){.    v = (v<<4
0570: 29 20 2b 20 74 65 73 74 48 65 78 54 6f 49 6e 74  ) + testHexToInt
0580: 28 2a 7a 29 3b 0a 20 20 20 20 7a 2b 2b 3b 0a 20  (*z);.    z++;. 
0590: 20 7d 0a 20 20 69 66 28 20 73 69 7a 65 6f 66 28   }.  if( sizeof(
05a0: 70 29 3d 3d 73 69 7a 65 6f 66 28 76 29 20 29 7b  p)==sizeof(v) ){
05b0: 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 70 2c 20  .    memcpy(&p, 
05c0: 26 76 2c 20 73 69 7a 65 6f 66 28 70 29 29 3b 0a  &v, sizeof(p));.
05d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
05e0: 65 72 74 28 20 73 69 7a 65 6f 66 28 70 29 3d 3d  ert( sizeof(p)==
05f0: 73 69 7a 65 6f 66 28 76 32 29 20 29 3b 0a 20 20  sizeof(v2) );.  
0600: 20 20 76 32 20 3d 20 28 75 33 32 29 76 3b 0a 20    v2 = (u32)v;. 
0610: 20 20 20 6d 65 6d 63 70 79 28 26 70 2c 20 26 76     memcpy(&p, &v
0620: 32 2c 20 73 69 7a 65 6f 66 28 70 29 29 3b 0a 20  2, sizeof(p));. 
0630: 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d   }.  return p;.}
0640: 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 54 43 4c 20 63  .../*.** A TCL c
0650: 6f 6d 6d 61 6e 64 20 74 68 61 74 20 72 65 74 75  ommand that retu
0660: 72 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  rns the address 
0670: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 2a 20 70  of the sqlite* p
0680: 6f 69 6e 74 65 72 0a 2a 2a 20 66 6f 72 20 61 6e  ointer.** for an
0690: 20 73 71 6c 69 74 65 20 63 6f 6e 6e 65 63 74 69   sqlite connecti
06a0: 6f 6e 20 69 6e 73 74 61 6e 63 65 2e 20 20 42 61  on instance.  Ba
06b0: 64 20 74 68 69 6e 67 73 20 68 61 70 70 65 6e 20  d things happen 
06c0: 69 66 20 74 68 65 0a 2a 2a 20 69 6e 70 75 74 20  if the.** input 
06d0: 69 73 20 6e 6f 74 20 61 6e 20 73 71 6c 69 74 65  is not an sqlite
06e0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a   connection..*/.
06f0: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 5f 73  static int get_s
0700: 71 6c 69 74 65 5f 70 6f 69 6e 74 65 72 28 0a 20  qlite_pointer(. 
0710: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
0720: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
0730: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
0740: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
0750: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
0760: 0a 20 20 73 74 72 75 63 74 20 53 71 6c 69 74 65  .  struct Sqlite
0770: 44 62 20 2a 70 3b 0a 20 20 54 63 6c 5f 43 6d 64  Db *p;.  Tcl_Cmd
0780: 49 6e 66 6f 20 63 6d 64 49 6e 66 6f 3b 0a 20 20  Info cmdInfo;.  
0790: 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b 0a  char zBuf[100];.
07a0: 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
07b0: 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75  .    Tcl_WrongNu
07c0: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
07d0: 20 6f 62 6a 76 2c 20 22 53 51 4c 49 54 45 2d 43   objv, "SQLITE-C
07e0: 4f 4e 4e 45 43 54 49 4f 4e 22 29 3b 0a 20 20 20  ONNECTION");.   
07f0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
0800: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 21 54 63  R;.  }.  if( !Tc
0810: 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64 49 6e 66 6f  l_GetCommandInfo
0820: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
0830: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
0840: 20 26 63 6d 64 49 6e 66 6f 29 20 29 7b 0a 20 20   &cmdInfo) ){.  
0850: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
0860: 6c 74 28 69 6e 74 65 72 70 2c 20 22 63 6f 6d 6d  lt(interp, "comm
0870: 61 6e 64 20 6e 6f 74 20 66 6f 75 6e 64 3a 20 22  and not found: "
0880: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 54 63 6c  ,.           Tcl
0890: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
08a0: 31 5d 29 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  1]), (char*)0);.
08b0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
08c0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 70 20 3d 20  RROR;.  }.  p = 
08d0: 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 44 62  (struct SqliteDb
08e0: 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62 6a 43 6c 69  *)cmdInfo.objCli
08f0: 65 6e 74 44 61 74 61 3b 0a 20 20 73 70 72 69 6e  entData;.  sprin
0900: 74 66 28 7a 42 75 66 2c 20 22 25 70 22 2c 20 70  tf(zBuf, "%p", p
0910: 2d 3e 64 62 29 3b 0a 20 20 69 66 28 20 73 74 72  ->db);.  if( str
0920: 6e 63 6d 70 28 7a 42 75 66 2c 22 30 78 22 2c 32  ncmp(zBuf,"0x",2
0930: 29 20 29 7b 0a 20 20 20 20 73 70 72 69 6e 74 66  ) ){.    sprintf
0940: 28 7a 42 75 66 2c 20 22 30 78 25 70 22 2c 20 70  (zBuf, "0x%p", p
0950: 2d 3e 64 62 29 3b 0a 20 20 7d 0a 20 20 54 63 6c  ->db);.  }.  Tcl
0960: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
0970: 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a  terp, zBuf, 0);.
0980: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
0990: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6f 64 65  .}../*.** Decode
09a0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
09b0: 20 73 71 6c 69 74 65 33 20 6f 62 6a 65 63 74 2e   sqlite3 object.
09c0: 0a 2a 2f 0a 69 6e 74 20 67 65 74 44 62 50 6f 69  .*/.int getDbPoi
09d0: 6e 74 65 72 28 54 63 6c 5f 49 6e 74 65 72 70 20  nter(Tcl_Interp 
09e0: 2a 69 6e 74 65 72 70 2c 20 63 6f 6e 73 74 20 63  *interp, const c
09f0: 68 61 72 20 2a 7a 41 2c 20 73 71 6c 69 74 65 33  har *zA, sqlite3
0a00: 20 2a 2a 70 70 44 62 29 7b 0a 20 20 73 74 72 75   **ppDb){.  stru
0a10: 63 74 20 53 71 6c 69 74 65 44 62 20 2a 70 3b 0a  ct SqliteDb *p;.
0a20: 20 20 54 63 6c 5f 43 6d 64 49 6e 66 6f 20 63 6d    Tcl_CmdInfo cm
0a30: 64 49 6e 66 6f 3b 0a 20 20 69 66 28 20 54 63 6c  dInfo;.  if( Tcl
0a40: 5f 47 65 74 43 6f 6d 6d 61 6e 64 49 6e 66 6f 28  _GetCommandInfo(
0a50: 69 6e 74 65 72 70 2c 20 7a 41 2c 20 26 63 6d 64  interp, zA, &cmd
0a60: 49 6e 66 6f 29 20 29 7b 0a 20 20 20 20 70 20 3d  Info) ){.    p =
0a70: 20 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 44   (struct SqliteD
0a80: 62 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62 6a 43 6c  b*)cmdInfo.objCl
0a90: 69 65 6e 74 44 61 74 61 3b 0a 20 20 20 20 2a 70  ientData;.    *p
0aa0: 70 44 62 20 3d 20 70 2d 3e 64 62 3b 0a 20 20 7d  pDb = p->db;.  }
0ab0: 65 6c 73 65 7b 0a 20 20 20 20 2a 70 70 44 62 20  else{.    *ppDb 
0ac0: 3d 20 28 73 71 6c 69 74 65 33 2a 29 73 71 6c 69  = (sqlite3*)sqli
0ad0: 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72  te3TestTextToPtr
0ae0: 28 7a 41 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  (zA);.  }.  retu
0af0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 63  rn TCL_OK;.}...c
0b00: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
0b10: 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65 28  e3TestErrorName(
0b20: 69 6e 74 20 72 63 29 7b 0a 20 20 63 6f 6e 73 74  int rc){.  const
0b30: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20 3d 20 30   char *zName = 0
0b40: 3b 0a 20 20 73 77 69 74 63 68 28 20 72 63 20 29  ;.  switch( rc )
0b50: 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  {.    case SQLIT
0b60: 45 5f 4f 4b 3a 20 20 20 20 20 20 20 20 20 20 20  E_OK:           
0b70: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0b80: 53 51 4c 49 54 45 5f 4f 4b 22 3b 20 20 20 20 20  SQLITE_OK";     
0b90: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
0ba0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0bb0: 45 5f 45 52 52 4f 52 3a 20 20 20 20 20 20 20 20  E_ERROR:        
0bc0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0bd0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 22 3b 20 20  SQLITE_ERROR";  
0be0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
0bf0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0c00: 45 5f 49 4e 54 45 52 4e 41 4c 3a 20 20 20 20 20  E_INTERNAL:     
0c10: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0c20: 53 51 4c 49 54 45 5f 49 4e 54 45 52 4e 41 4c 22  SQLITE_INTERNAL"
0c30: 3b 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  ;          break
0c40: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0c50: 45 5f 50 45 52 4d 3a 20 20 20 20 20 20 20 20 20  E_PERM:         
0c60: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0c70: 53 51 4c 49 54 45 5f 50 45 52 4d 22 3b 20 20 20  SQLITE_PERM";   
0c80: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
0c90: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0ca0: 45 5f 41 42 4f 52 54 3a 20 20 20 20 20 20 20 20  E_ABORT:        
0cb0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0cc0: 53 51 4c 49 54 45 5f 41 42 4f 52 54 22 3b 20 20  SQLITE_ABORT";  
0cd0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
0ce0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0cf0: 45 5f 42 55 53 59 3a 20 20 20 20 20 20 20 20 20  E_BUSY:         
0d00: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0d10: 53 51 4c 49 54 45 5f 42 55 53 59 22 3b 20 20 20  SQLITE_BUSY";   
0d20: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
0d30: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0d40: 45 5f 4c 4f 43 4b 45 44 3a 20 20 20 20 20 20 20  E_LOCKED:       
0d50: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0d60: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 22 3b 20  SQLITE_LOCKED"; 
0d70: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
0d80: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0d90: 45 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20 20 20 20  E_NOMEM:        
0da0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0db0: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 22 3b 20 20  SQLITE_NOMEM";  
0dc0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
0dd0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0de0: 45 5f 52 45 41 44 4f 4e 4c 59 3a 20 20 20 20 20  E_READONLY:     
0df0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0e00: 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 22  SQLITE_READONLY"
0e10: 3b 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  ;          break
0e20: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0e30: 45 5f 49 4e 54 45 52 52 55 50 54 3a 20 20 20 20  E_INTERRUPT:    
0e40: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0e50: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
0e60: 22 3b 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  ";         break
0e70: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0e80: 45 5f 49 4f 45 52 52 3a 20 20 20 20 20 20 20 20  E_IOERR:        
0e90: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0ea0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 22 3b 20 20  SQLITE_IOERR";  
0eb0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
0ec0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0ed0: 45 5f 43 4f 52 52 55 50 54 3a 20 20 20 20 20 20  E_CORRUPT:      
0ee0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0ef0: 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 22 3b  SQLITE_CORRUPT";
0f00: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
0f10: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0f20: 45 5f 4e 4f 54 46 4f 55 4e 44 3a 20 20 20 20 20  E_NOTFOUND:     
0f30: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0f40: 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 22  SQLITE_NOTFOUND"
0f50: 3b 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  ;          break
0f60: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0f70: 45 5f 46 55 4c 4c 3a 20 20 20 20 20 20 20 20 20  E_FULL:         
0f80: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0f90: 53 51 4c 49 54 45 5f 46 55 4c 4c 22 3b 20 20 20  SQLITE_FULL";   
0fa0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
0fb0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
0fc0: 45 5f 43 41 4e 54 4f 50 45 4e 3a 20 20 20 20 20  E_CANTOPEN:     
0fd0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
0fe0: 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 22  SQLITE_CANTOPEN"
0ff0: 3b 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  ;          break
1000: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1010: 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20 20 20 20  E_PROTOCOL:     
1020: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1030: 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 22  SQLITE_PROTOCOL"
1040: 3b 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  ;          break
1050: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1060: 45 5f 45 4d 50 54 59 3a 20 20 20 20 20 20 20 20  E_EMPTY:        
1070: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1080: 53 51 4c 49 54 45 5f 45 4d 50 54 59 22 3b 20 20  SQLITE_EMPTY";  
1090: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
10a0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
10b0: 45 5f 53 43 48 45 4d 41 3a 20 20 20 20 20 20 20  E_SCHEMA:       
10c0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
10d0: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 22 3b 20  SQLITE_SCHEMA"; 
10e0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
10f0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1100: 45 5f 54 4f 4f 42 49 47 3a 20 20 20 20 20 20 20  E_TOOBIG:       
1110: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1120: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 22 3b 20  SQLITE_TOOBIG"; 
1130: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
1140: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1150: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 3a 20 20 20  E_CONSTRAINT:   
1160: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1170: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
1180: 54 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  T";        break
1190: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
11a0: 45 5f 4d 49 53 4d 41 54 43 48 3a 20 20 20 20 20  E_MISMATCH:     
11b0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
11c0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 22  SQLITE_MISMATCH"
11d0: 3b 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  ;          break
11e0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
11f0: 45 5f 4d 49 53 55 53 45 3a 20 20 20 20 20 20 20  E_MISUSE:       
1200: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1210: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 22 3b 20  SQLITE_MISUSE"; 
1220: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
1230: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1240: 45 5f 4e 4f 4c 46 53 3a 20 20 20 20 20 20 20 20  E_NOLFS:        
1250: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1260: 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 22 3b 20 20  SQLITE_NOLFS";  
1270: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
1280: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1290: 45 5f 41 55 54 48 3a 20 20 20 20 20 20 20 20 20  E_AUTH:         
12a0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
12b0: 53 51 4c 49 54 45 5f 41 55 54 48 22 3b 20 20 20  SQLITE_AUTH";   
12c0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
12d0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
12e0: 45 5f 46 4f 52 4d 41 54 3a 20 20 20 20 20 20 20  E_FORMAT:       
12f0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1300: 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 22 3b 20  SQLITE_FORMAT"; 
1310: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
1320: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1330: 45 5f 52 41 4e 47 45 3a 20 20 20 20 20 20 20 20  E_RANGE:        
1340: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1350: 53 51 4c 49 54 45 5f 52 41 4e 47 45 22 3b 20 20  SQLITE_RANGE";  
1360: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
1370: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1380: 45 5f 4e 4f 54 41 44 42 3a 20 20 20 20 20 20 20  E_NOTADB:       
1390: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
13a0: 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42 22 3b 20  SQLITE_NOTADB"; 
13b0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
13c0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
13d0: 45 5f 52 4f 57 3a 20 20 20 20 20 20 20 20 20 20  E_ROW:          
13e0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
13f0: 53 51 4c 49 54 45 5f 52 4f 57 22 3b 20 20 20 20  SQLITE_ROW";    
1400: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
1410: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1420: 45 5f 44 4f 4e 45 3a 20 20 20 20 20 20 20 20 20  E_DONE:         
1430: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1440: 53 51 4c 49 54 45 5f 44 4f 4e 45 22 3b 20 20 20  SQLITE_DONE";   
1450: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
1460: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1470: 45 5f 49 4f 45 52 52 5f 52 45 41 44 3a 20 20 20  E_IOERR_READ:   
1480: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1490: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 52 45 41  SQLITE_IOERR_REA
14a0: 44 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  D";        break
14b0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
14c0: 45 5f 49 4f 45 52 52 5f 53 48 4f 52 54 5f 52 45  E_IOERR_SHORT_RE
14d0: 41 44 3a 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22  AD:    zName = "
14e0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 53 48 4f  SQLITE_IOERR_SHO
14f0: 52 54 5f 52 45 41 44 22 3b 20 20 62 72 65 61 6b  RT_READ";  break
1500: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1510: 45 5f 49 4f 45 52 52 5f 57 52 49 54 45 3a 20 20  E_IOERR_WRITE:  
1520: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1530: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 57 52 49  SQLITE_IOERR_WRI
1540: 54 45 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  TE";       break
1550: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1560: 45 5f 49 4f 45 52 52 5f 46 53 59 4e 43 3a 20 20  E_IOERR_FSYNC:  
1570: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1580: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 46 53 59  SQLITE_IOERR_FSY
1590: 4e 43 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  NC";       break
15a0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
15b0: 45 5f 49 4f 45 52 52 5f 44 49 52 5f 46 53 59 4e  E_IOERR_DIR_FSYN
15c0: 43 3a 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22  C:     zName = "
15d0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 44 49 52  SQLITE_IOERR_DIR
15e0: 5f 46 53 59 4e 43 22 3b 20 20 20 62 72 65 61 6b  _FSYNC";   break
15f0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1600: 45 5f 49 4f 45 52 52 5f 54 52 55 4e 43 41 54 45  E_IOERR_TRUNCATE
1610: 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22  :      zName = "
1620: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 54 52 55  SQLITE_IOERR_TRU
1630: 4e 43 41 54 45 22 3b 20 20 20 20 62 72 65 61 6b  NCATE";    break
1640: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1650: 45 5f 49 4f 45 52 52 5f 46 53 54 41 54 3a 20 20  E_IOERR_FSTAT:  
1660: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1670: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 46 53 54  SQLITE_IOERR_FST
1680: 41 54 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  AT";       break
1690: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
16a0: 45 5f 49 4f 45 52 52 5f 55 4e 4c 4f 43 4b 3a 20  E_IOERR_UNLOCK: 
16b0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
16c0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 55 4e 4c  SQLITE_IOERR_UNL
16d0: 4f 43 4b 22 3b 20 20 20 20 20 20 62 72 65 61 6b  OCK";      break
16e0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
16f0: 45 5f 49 4f 45 52 52 5f 52 44 4c 4f 43 4b 3a 20  E_IOERR_RDLOCK: 
1700: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1710: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 52 44 4c  SQLITE_IOERR_RDL
1720: 4f 43 4b 22 3b 20 20 20 20 20 20 62 72 65 61 6b  OCK";      break
1730: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1740: 45 5f 49 4f 45 52 52 5f 44 45 4c 45 54 45 3a 20  E_IOERR_DELETE: 
1750: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1760: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 44 45 4c  SQLITE_IOERR_DEL
1770: 45 54 45 22 3b 20 20 20 20 20 20 62 72 65 61 6b  ETE";      break
1780: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1790: 45 5f 49 4f 45 52 52 5f 42 4c 4f 43 4b 45 44 3a  E_IOERR_BLOCKED:
17a0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
17b0: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 42 4c 4f  SQLITE_IOERR_BLO
17c0: 43 4b 45 44 22 3b 20 20 20 20 20 62 72 65 61 6b  CKED";     break
17d0: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
17e0: 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 3a 20 20  E_IOERR_NOMEM:  
17f0: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1800: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d  SQLITE_IOERR_NOM
1810: 45 4d 22 3b 20 20 20 20 20 20 20 62 72 65 61 6b  EM";       break
1820: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1830: 45 5f 49 4f 45 52 52 5f 41 43 43 45 53 53 3a 20  E_IOERR_ACCESS: 
1840: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1850: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 41 43 43  SQLITE_IOERR_ACC
1860: 45 53 53 22 3b 20 20 20 20 20 20 62 72 65 61 6b  ESS";      break
1870: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1880: 45 5f 49 4f 45 52 52 5f 43 48 45 43 4b 52 45 53  E_IOERR_CHECKRES
1890: 45 52 56 45 44 4c 4f 43 4b 3a 0a 20 20 20 20 20  ERVEDLOCK:.     
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b0: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
18c0: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
18d0: 43 48 45 43 4b 52 45 53 45 52 56 45 44 4c 4f 43  CHECKRESERVEDLOC
18e0: 4b 22 3b 20 62 72 65 61 6b 3b 0a 20 20 20 20 63  K"; break;.    c
18f0: 61 73 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ase SQLITE_IOERR
1900: 5f 4c 4f 43 4b 3a 20 20 20 20 20 20 20 20 20 20  _LOCK:          
1910: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
1920: 49 4f 45 52 52 5f 4c 4f 43 4b 22 3b 20 20 20 20  IOERR_LOCK";    
1930: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
1940: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20  efault:         
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1960: 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f  zName = "SQLITE_
1970: 55 6e 6b 6e 6f 77 6e 22 3b 20 20 20 20 20 20 20  Unknown";       
1980: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
1990: 20 72 65 74 75 72 6e 20 7a 4e 61 6d 65 3b 0a 7d   return zName;.}
19a0: 0a 23 64 65 66 69 6e 65 20 74 31 45 72 72 6f 72  .#define t1Error
19b0: 4e 61 6d 65 20 73 71 6c 69 74 65 33 54 65 73 74  Name sqlite3Test
19c0: 45 72 72 6f 72 4e 61 6d 65 0a 0a 2f 2a 0a 2a 2a  ErrorName../*.**
19d0: 20 43 6f 6e 76 65 72 74 20 61 6e 20 73 71 6c 69   Convert an sqli
19e0: 74 65 33 5f 73 74 6d 74 2a 20 69 6e 74 6f 20 61  te3_stmt* into a
19f0: 6e 20 73 71 6c 69 74 65 33 2a 2e 20 20 54 68 69  n sqlite3*.  Thi
1a00: 73 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65  s depends on the
1a10: 0a 2a 2a 20 66 61 63 74 20 74 68 61 74 20 74 68  .** fact that th
1a20: 65 20 73 71 6c 69 74 65 33 2a 20 69 73 20 74 68  e sqlite3* is th
1a30: 65 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e  e first field in
1a40: 20 74 68 65 20 56 64 62 65 20 73 74 72 75 63 74   the Vdbe struct
1a50: 75 72 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ure..*/.#define 
1a60: 53 74 6d 74 54 6f 44 62 28 58 29 20 20 20 73 71  StmtToDb(X)   sq
1a70: 6c 69 74 65 33 5f 64 62 5f 68 61 6e 64 6c 65 28  lite3_db_handle(
1a80: 58 29 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  X)../*.** Check 
1a90: 61 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 74  a return value t
1aa0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 61  o make sure it a
1ab0: 67 72 65 65 73 20 77 69 74 68 20 74 68 65 20 72  grees with the r
1ac0: 65 73 75 6c 74 73 0a 2a 2a 20 66 72 6f 6d 20 73  esults.** from s
1ad0: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 2e 0a  qlite3_errcode..
1ae0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  */.int sqlite3Te
1af0: 73 74 45 72 72 43 6f 64 65 28 54 63 6c 5f 49 6e  stErrCode(Tcl_In
1b00: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 73 71  terp *interp, sq
1b10: 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 72  lite3 *db, int r
1b20: 63 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  c){.  if( sqlite
1b30: 33 5f 74 68 72 65 61 64 73 61 66 65 28 29 3d 3d  3_threadsafe()==
1b40: 30 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f  0 && rc!=SQLITE_
1b50: 4d 49 53 55 53 45 20 26 26 20 72 63 21 3d 53 51  MISUSE && rc!=SQ
1b60: 4c 49 54 45 5f 4f 4b 0a 20 20 20 26 26 20 73 71  LITE_OK.   && sq
1b70: 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64 62  lite3_errcode(db
1b80: 29 21 3d 72 63 20 29 7b 0a 20 20 20 20 63 68 61  )!=rc ){.    cha
1b90: 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20  r zBuf[200];.   
1ba0: 20 69 6e 74 20 72 32 20 3d 20 73 71 6c 69 74 65   int r2 = sqlite
1bb0: 33 5f 65 72 72 63 6f 64 65 28 64 62 29 3b 0a 20  3_errcode(db);. 
1bc0: 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c     sprintf(zBuf,
1bd0: 20 22 65 72 72 6f 72 20 63 6f 64 65 20 25 73 20   "error code %s 
1be0: 28 25 64 29 20 64 6f 65 73 20 6e 6f 74 20 6d 61  (%d) does not ma
1bf0: 74 63 68 20 73 71 6c 69 74 65 33 5f 65 72 72 63  tch sqlite3_errc
1c00: 6f 64 65 20 25 73 20 28 25 64 29 22 2c 0a 20 20  ode %s (%d)",.  
1c10: 20 20 20 20 20 74 31 45 72 72 6f 72 4e 61 6d 65       t1ErrorName
1c20: 28 72 63 29 2c 20 72 63 2c 20 74 31 45 72 72 6f  (rc), rc, t1Erro
1c30: 72 4e 61 6d 65 28 72 32 29 2c 20 72 32 29 3b 0a  rName(r2), r2);.
1c40: 20 20 20 20 54 63 6c 5f 52 65 73 65 74 52 65 73      Tcl_ResetRes
1c50: 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 20 20 20  ult(interp);.   
1c60: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
1c70: 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
1c80: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31  0);.    return 1
1c90: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30  ;.  }.  return 0
1ca0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6f 64  ;.}../*.** Decod
1cb0: 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  e a pointer to a
1cc0: 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 6f  n sqlite3_stmt o
1cd0: 62 6a 65 63 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  bject..*/.static
1ce0: 20 69 6e 74 20 67 65 74 53 74 6d 74 50 6f 69 6e   int getStmtPoin
1cf0: 74 65 72 28 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ter(.  Tcl_Inter
1d00: 70 20 2a 69 6e 74 65 72 70 2c 20 0a 20 20 63 6f  p *interp, .  co
1d10: 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 2c 20  nst char *zArg, 
1d20: 20 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   .  sqlite3_stmt
1d30: 20 2a 2a 70 70 53 74 6d 74 0a 29 7b 0a 20 20 2a   **ppStmt.){.  *
1d40: 70 70 53 74 6d 74 20 3d 20 28 73 71 6c 69 74 65  ppStmt = (sqlite
1d50: 33 5f 73 74 6d 74 2a 29 73 71 6c 69 74 65 33 54  3_stmt*)sqlite3T
1d60: 65 73 74 54 65 78 74 54 6f 50 74 72 28 7a 41 72  estTextToPtr(zAr
1d70: 67 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  g);.  return TCL
1d80: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65  _OK;.}../*.** Ge
1d90: 6e 65 72 61 74 65 20 61 20 74 65 78 74 20 72 65  nerate a text re
1da0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
1db0: 61 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20 63  a pointer that c
1dc0: 61 6e 20 62 65 20 75 6e 64 65 72 73 74 6f 6f 64  an be understood
1dd0: 0a 2a 2a 20 62 79 20 74 68 65 20 67 65 74 44 62  .** by the getDb
1de0: 50 6f 69 6e 74 65 72 20 61 6e 64 20 67 65 74 56  Pointer and getV
1df0: 6d 50 6f 69 6e 74 65 72 20 72 6f 75 74 69 6e 65  mPointer routine
1e00: 73 20 61 62 6f 76 65 2e 0a 2a 2a 0a 2a 2a 20 54  s above..**.** T
1e10: 68 65 20 70 72 6f 62 6c 65 6d 20 69 73 2c 20 6f  he problem is, o
1e20: 6e 20 73 6f 6d 65 20 6d 61 63 68 69 6e 65 73 20  n some machines 
1e30: 28 53 6f 6c 61 72 69 73 29 20 69 66 20 79 6f 75  (Solaris) if you
1e40: 20 64 6f 20 61 20 70 72 69 6e 74 66 20 77 69 74   do a printf wit
1e50: 68 0a 2a 2a 20 22 25 70 22 20 79 6f 75 20 63 61  h.** "%p" you ca
1e60: 6e 6e 6f 74 20 74 75 72 6e 20 61 72 6f 75 6e 64  nnot turn around
1e70: 20 61 6e 64 20 64 6f 20 61 20 73 63 61 6e 66 20   and do a scanf 
1e80: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 22 25  with the same "%
1e90: 70 22 20 61 6e 64 0a 2a 2a 20 67 65 74 20 79 6f  p" and.** get yo
1ea0: 75 72 20 70 6f 69 6e 74 65 72 20 62 61 63 6b 2e  ur pointer back.
1eb0: 20 20 59 6f 75 20 68 61 76 65 20 74 6f 20 70 72    You have to pr
1ec0: 65 70 65 6e 64 20 61 20 22 30 78 22 20 62 65 66  epend a "0x" bef
1ed0: 6f 72 65 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 77  ore it will.** w
1ee0: 6f 72 6b 2e 20 20 4f 72 20 61 74 20 6c 65 61 73  ork.  Or at leas
1ef0: 74 20 74 68 61 74 20 69 73 20 77 68 61 74 20 69  t that is what i
1f00: 73 20 72 65 70 6f 72 74 65 64 20 74 6f 20 6d 65  s reported to me
1f10: 20 28 64 72 68 29 2e 20 20 42 75 74 20 74 68 69   (drh).  But thi
1f20: 73 0a 2a 2a 20 62 65 68 61 76 69 6f 72 20 76 61  s.** behavior va
1f30: 72 69 65 73 20 66 72 6f 6d 20 6d 61 63 68 69 6e  ries from machin
1f40: 65 20 74 6f 20 6d 61 63 68 69 6e 65 2e 20 20 54  e to machine.  T
1f50: 68 65 20 73 6f 6c 75 74 69 6f 6e 20 75 73 65 64  he solution used
1f60: 20 68 65 72 20 69 73 0a 2a 2a 20 74 6f 20 74 65   her is.** to te
1f70: 73 74 20 74 68 65 20 73 74 72 69 6e 67 20 72 69  st the string ri
1f80: 67 68 74 20 61 66 74 65 72 20 69 74 20 69 73 20  ght after it is 
1f90: 67 65 6e 65 72 61 74 65 64 20 74 6f 20 73 65 65  generated to see
1fa0: 20 69 66 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a   if it can be.**
1fb0: 20 75 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 73   understood by s
1fc0: 63 61 6e 66 2c 20 61 6e 64 20 69 66 20 6e 6f 74  canf, and if not
1fd0: 2c 20 74 72 79 20 70 72 65 70 65 6e 64 69 6e 67  , try prepending
1fe0: 20 61 6e 20 22 30 78 22 20 74 6f 20 73 65 65 20   an "0x" to see 
1ff0: 69 66 0a 2a 2a 20 74 68 61 74 20 68 65 6c 70 73  if.** that helps
2000: 2e 20 20 49 66 20 6e 6f 74 68 69 6e 67 20 77 6f  .  If nothing wo
2010: 72 6b 73 2c 20 61 20 66 61 74 61 6c 20 65 72 72  rks, a fatal err
2020: 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e  or is generated.
2030: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  .*/.int sqlite3T
2040: 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74  estMakePointerSt
2050: 72 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e  r(Tcl_Interp *in
2060: 74 65 72 70 2c 20 63 68 61 72 20 2a 7a 50 74 72  terp, char *zPtr
2070: 2c 20 76 6f 69 64 20 2a 70 29 7b 0a 20 20 73 71  , void *p){.  sq
2080: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
2090: 30 30 2c 20 7a 50 74 72 2c 20 22 25 70 22 2c 20  00, zPtr, "%p", 
20a0: 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  p);.  return TCL
20b0: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  _OK;.}../*.** Th
20c0: 65 20 63 61 6c 6c 62 61 63 6b 20 72 6f 75 74 69  e callback routi
20d0: 6e 65 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 65  ne for sqlite3_e
20e0: 78 65 63 5f 70 72 69 6e 74 66 28 29 2e 0a 2a 2f  xec_printf()..*/
20f0: 0a 73 74 61 74 69 63 20 69 6e 74 20 65 78 65 63  .static int exec
2100: 5f 70 72 69 6e 74 66 5f 63 62 28 76 6f 69 64 20  _printf_cb(void 
2110: 2a 70 41 72 67 2c 20 69 6e 74 20 61 72 67 63 2c  *pArg, int argc,
2120: 20 63 68 61 72 20 2a 2a 61 72 67 76 2c 20 63 68   char **argv, ch
2130: 61 72 20 2a 2a 6e 61 6d 65 29 7b 0a 20 20 54 63  ar **name){.  Tc
2140: 6c 5f 44 53 74 72 69 6e 67 20 2a 73 74 72 20 3d  l_DString *str =
2150: 20 28 54 63 6c 5f 44 53 74 72 69 6e 67 2a 29 70   (Tcl_DString*)p
2160: 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20  Arg;.  int i;.. 
2170: 20 69 66 28 20 54 63 6c 5f 44 53 74 72 69 6e 67   if( Tcl_DString
2180: 4c 65 6e 67 74 68 28 73 74 72 29 3d 3d 30 20 29  Length(str)==0 )
2190: 7b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  {.    for(i=0; i
21a0: 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20  <argc; i++){.   
21b0: 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 41 70     Tcl_DStringAp
21c0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 73 74 72 2c  pendElement(str,
21d0: 20 6e 61 6d 65 5b 69 5d 20 3f 20 6e 61 6d 65 5b   name[i] ? name[
21e0: 69 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20  i] : "NULL");.  
21f0: 20 20 7d 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d    }.  }.  for(i=
2200: 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b  0; i<argc; i++){
2210: 0a 20 20 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  .    Tcl_DString
2220: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 73 74  AppendElement(st
2230: 72 2c 20 61 72 67 76 5b 69 5d 20 3f 20 61 72 67  r, argv[i] ? arg
2240: 76 5b 69 5d 20 3a 20 22 4e 55 4c 4c 22 29 3b 0a  v[i] : "NULL");.
2250: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
2260: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 49 2f 4f  }../*.** The I/O
2270: 20 74 72 61 63 69 6e 67 20 63 61 6c 6c 62 61 63   tracing callbac
2280: 6b 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  k..*/.#if !defin
2290: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
22a0: 52 41 43 45 29 20 26 26 20 64 65 66 69 6e 65 64  RACE) && defined
22b0: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49  (SQLITE_ENABLE_I
22c0: 4f 54 52 41 43 45 29 0a 73 74 61 74 69 63 20 46  OTRACE).static F
22d0: 49 4c 45 20 2a 69 6f 74 72 61 63 65 5f 66 69 6c  ILE *iotrace_fil
22e0: 65 20 3d 20 30 3b 0a 73 74 61 74 69 63 20 76 6f  e = 0;.static vo
22f0: 69 64 20 69 6f 5f 74 72 61 63 65 5f 63 61 6c 6c  id io_trace_call
2300: 62 61 63 6b 28 63 6f 6e 73 74 20 63 68 61 72 20  back(const char 
2310: 2a 7a 46 6f 72 6d 61 74 2c 20 2e 2e 2e 29 7b 0a  *zFormat, ...){.
2320: 20 20 76 61 5f 6c 69 73 74 20 61 70 3b 0a 20 20    va_list ap;.  
2330: 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a 46 6f  va_start(ap, zFo
2340: 72 6d 61 74 29 3b 0a 20 20 76 66 70 72 69 6e 74  rmat);.  vfprint
2350: 66 28 69 6f 74 72 61 63 65 5f 66 69 6c 65 2c 20  f(iotrace_file, 
2360: 7a 46 6f 72 6d 61 74 2c 20 61 70 29 3b 0a 20 20  zFormat, ap);.  
2370: 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 66 66  va_end(ap);.  ff
2380: 6c 75 73 68 28 69 6f 74 72 61 63 65 5f 66 69 6c  lush(iotrace_fil
2390: 65 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  e);.}.#endif../*
23a0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 69 6f 5f 74  .** Usage:  io_t
23b0: 72 61 63 65 20 46 49 4c 45 4e 41 4d 45 0a 2a 2a  race FILENAME.**
23c0: 0a 2a 2a 20 54 75 72 6e 20 49 2f 4f 20 74 72 61  .** Turn I/O tra
23d0: 63 69 6e 67 20 6f 6e 20 6f 72 20 6f 66 66 2e 20  cing on or off. 
23e0: 20 49 66 20 46 49 4c 45 4e 41 4d 45 20 69 73 20   If FILENAME is 
23f0: 6e 6f 74 20 61 6e 20 65 6d 70 74 79 20 73 74 72  not an empty str
2400: 69 6e 67 2c 0a 2a 2a 20 49 2f 4f 20 74 72 61 63  ing,.** I/O trac
2410: 69 6e 67 20 62 65 67 69 6e 73 20 67 6f 69 6e 67  ing begins going
2420: 20 69 6e 74 6f 20 46 49 4c 45 4e 41 4d 45 2e 20   into FILENAME. 
2430: 49 66 20 46 49 4c 45 4e 41 4d 45 20 69 73 20 61  If FILENAME is a
2440: 6e 20 65 6d 70 74 79 0a 2a 2a 20 73 74 72 69 6e  n empty.** strin
2450: 67 2c 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 69  g, I/O tracing i
2460: 73 20 74 75 72 6e 65 64 20 6f 66 66 2e 0a 2a 2f  s turned off..*/
2470: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
2480: 5f 69 6f 5f 74 72 61 63 65 28 0a 20 20 76 6f 69  _io_trace(.  voi
2490: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
24a0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
24b0: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
24c0: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
24d0: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
24e0: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
24f0: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
2500: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
2510: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
2520: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
2530: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
2540: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
2550: 0a 29 7b 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .){.#if !defined
2560: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41  (SQLITE_OMIT_TRA
2570: 43 45 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  CE) && defined(S
2580: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
2590: 52 41 43 45 29 0a 20 20 69 66 28 20 61 72 67 63  RACE).  if( argc
25a0: 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
25b0: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
25c0: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
25d0: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
25e0: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
25f0: 20 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c       " FILENAME\
2600: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
2610: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
2620: 7d 0a 20 20 69 66 28 20 69 6f 74 72 61 63 65 5f  }.  if( iotrace_
2630: 66 69 6c 65 20 29 7b 0a 20 20 20 20 69 66 28 20  file ){.    if( 
2640: 69 6f 74 72 61 63 65 5f 66 69 6c 65 21 3d 73 74  iotrace_file!=st
2650: 64 6f 75 74 20 26 26 20 69 6f 74 72 61 63 65 5f  dout && iotrace_
2660: 66 69 6c 65 21 3d 73 74 64 65 72 72 20 29 7b 0a  file!=stderr ){.
2670: 20 20 20 20 20 20 66 63 6c 6f 73 65 28 69 6f 74        fclose(iot
2680: 72 61 63 65 5f 66 69 6c 65 29 3b 0a 20 20 20 20  race_file);.    
2690: 7d 0a 20 20 20 20 69 6f 74 72 61 63 65 5f 66 69  }.    iotrace_fi
26a0: 6c 65 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  le = 0;.    sqli
26b0: 74 65 33 49 6f 54 72 61 63 65 20 3d 20 30 3b 0a  te3IoTrace = 0;.
26c0: 20 20 7d 0a 20 20 69 66 28 20 61 72 67 76 5b 31    }.  if( argv[1
26d0: 5d 5b 30 5d 20 29 7b 0a 20 20 20 20 69 66 28 20  ][0] ){.    if( 
26e0: 73 74 72 63 6d 70 28 61 72 67 76 5b 31 5d 2c 22  strcmp(argv[1],"
26f0: 73 74 64 6f 75 74 22 29 3d 3d 30 20 29 7b 0a 20  stdout")==0 ){. 
2700: 20 20 20 20 20 69 6f 74 72 61 63 65 5f 66 69 6c       iotrace_fil
2710: 65 20 3d 20 73 74 64 6f 75 74 3b 0a 20 20 20 20  e = stdout;.    
2720: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
2730: 28 61 72 67 76 5b 31 5d 2c 22 73 74 64 65 72 72  (argv[1],"stderr
2740: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  ")==0 ){.      i
2750: 6f 74 72 61 63 65 5f 66 69 6c 65 20 3d 20 73 74  otrace_file = st
2760: 64 65 72 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  derr;.    }else{
2770: 0a 20 20 20 20 20 20 69 6f 74 72 61 63 65 5f 66  .      iotrace_f
2780: 69 6c 65 20 3d 20 66 6f 70 65 6e 28 61 72 67 76  ile = fopen(argv
2790: 5b 31 5d 2c 20 22 77 22 29 3b 0a 20 20 20 20 7d  [1], "w");.    }
27a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 49 6f 54 72  .    sqlite3IoTr
27b0: 61 63 65 20 3d 20 69 6f 5f 74 72 61 63 65 5f 63  ace = io_trace_c
27c0: 61 6c 6c 62 61 63 6b 3b 0a 20 20 7d 0a 23 65 6e  allback;.  }.#en
27d0: 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  dif.  return TCL
27e0: 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55  _OK;.}.../*.** U
27f0: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 65  sage:  sqlite3_e
2800: 78 65 63 5f 70 72 69 6e 74 66 20 20 44 42 20 20  xec_printf  DB  
2810: 46 4f 52 4d 41 54 20 20 53 54 52 49 4e 47 0a 2a  FORMAT  STRING.*
2820: 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20  *.** Invoke the 
2830: 73 71 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69  sqlite3_exec_pri
2840: 6e 74 66 28 29 20 69 6e 74 65 72 66 61 63 65 20  ntf() interface 
2850: 75 73 69 6e 67 20 74 68 65 20 6f 70 65 6e 20 64  using the open d
2860: 61 74 61 62 61 73 65 0a 2a 2a 20 44 42 2e 20 20  atabase.** DB.  
2870: 54 68 65 20 53 51 4c 20 69 73 20 74 68 65 20 73  The SQL is the s
2880: 74 72 69 6e 67 20 46 4f 52 4d 41 54 2e 20 20 54  tring FORMAT.  T
2890: 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
28a0: 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 0a   should contain.
28b0: 2a 2a 20 6f 6e 65 20 25 73 20 6f 72 20 25 71 2e  ** one %s or %q.
28c0: 20 20 53 54 52 49 4e 47 20 69 73 20 74 68 65 20    STRING is the 
28d0: 76 61 6c 75 65 20 69 6e 73 65 72 74 65 64 20 69  value inserted i
28e0: 6e 74 6f 20 25 73 20 6f 72 20 25 71 2e 0a 2a 2f  nto %s or %q..*/
28f0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
2900: 5f 65 78 65 63 5f 70 72 69 6e 74 66 28 0a 20 20  _exec_printf(.  
2910: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
2920: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
2930: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
2940: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
2950: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
2960: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
2970: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
2980: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2990: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
29a0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
29b0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
29c0: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
29d0: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
29e0: 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53 74 72   *db;.  Tcl_DStr
29f0: 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74 20 72  ing str;.  int r
2a00: 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20  c;.  char *zErr 
2a10: 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71  = 0;.  char *zSq
2a20: 6c 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33  l;.  char zBuf[3
2a30: 30 5d 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  0];.  if( argc!=
2a40: 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  4 ){.    Tcl_App
2a50: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
2a60: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
2a70: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
2a80: 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20  argv[0], .      
2a90: 20 22 20 44 42 20 46 4f 52 4d 41 54 20 53 54 52   " DB FORMAT STR
2aa0: 49 4e 47 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  ING", 0);.    re
2ab0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
2ac0: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
2ad0: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
2ae0: 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
2af0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
2b00: 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 49 6e  .  Tcl_DStringIn
2b10: 69 74 28 26 73 74 72 29 3b 0a 20 20 7a 53 71 6c  it(&str);.  zSql
2b20: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
2b30: 74 66 28 61 72 67 76 5b 32 5d 2c 20 61 72 67 76  tf(argv[2], argv
2b40: 5b 33 5d 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  [3]);.  rc = sql
2b50: 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53  ite3_exec(db, zS
2b60: 71 6c 2c 20 65 78 65 63 5f 70 72 69 6e 74 66 5f  ql, exec_printf_
2b70: 63 62 2c 20 26 73 74 72 2c 20 26 7a 45 72 72 29  cb, &str, &zErr)
2b80: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
2b90: 28 7a 53 71 6c 29 3b 0a 20 20 73 70 72 69 6e 74  (zSql);.  sprint
2ba0: 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 72 63  f(zBuf, "%d", rc
2bb0: 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 45  );.  Tcl_AppendE
2bc0: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a  lement(interp, z
2bd0: 42 75 66 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  Buf);.  Tcl_Appe
2be0: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
2bf0: 2c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  , rc==SQLITE_OK 
2c00: 3f 20 54 63 6c 5f 44 53 74 72 69 6e 67 56 61 6c  ? Tcl_DStringVal
2c10: 75 65 28 26 73 74 72 29 20 3a 20 7a 45 72 72 29  ue(&str) : zErr)
2c20: 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 46  ;.  Tcl_DStringF
2c30: 72 65 65 28 26 73 74 72 29 3b 0a 20 20 69 66 28  ree(&str);.  if(
2c40: 20 7a 45 72 72 20 29 20 73 71 6c 69 74 65 33 5f   zErr ) sqlite3_
2c50: 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 69 66  free(zErr);.  if
2c60: 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
2c70: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c  Code(interp, db,
2c80: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
2c90: 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72  L_ERROR;.  retur
2ca0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
2cb0: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
2cc0: 65 33 5f 65 78 65 63 5f 68 65 78 20 20 44 42 20  e3_exec_hex  DB 
2cd0: 20 48 45 58 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b   HEX.**.** Invok
2ce0: 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65 78  e the sqlite3_ex
2cf0: 65 63 28 29 20 6f 6e 20 61 20 73 74 72 69 6e 67  ec() on a string
2d00: 20 74 68 61 74 20 69 73 20 6f 62 74 61 69 6e 65   that is obtaine
2d10: 64 20 62 79 20 74 72 61 6e 73 6c 61 74 69 6e 67  d by translating
2d20: 0a 2a 2a 20 48 45 58 20 69 6e 74 6f 20 41 53 43  .** HEX into ASC
2d30: 49 49 2e 20 20 4d 6f 73 74 20 63 68 61 72 61 63  II.  Most charac
2d40: 74 65 72 73 20 61 72 65 20 74 72 61 6e 73 6c 61  ters are transla
2d50: 74 65 64 20 61 73 20 69 73 2e 20 20 25 48 48 20  ted as is.  %HH 
2d60: 62 65 63 6f 6d 65 73 0a 2a 2a 20 61 20 68 65 78  becomes.** a hex
2d70: 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 73   character..*/.s
2d80: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65  tatic int test_e
2d90: 78 65 63 5f 68 65 78 28 0a 20 20 76 6f 69 64 20  xec_hex(.  void 
2da0: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
2db0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
2dc0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
2dd0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
2de0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
2df0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
2e00: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
2e10: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
2e20: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
2e30: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
2e40: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
2e50: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
2e60: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
2e70: 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 20 73  .  Tcl_DString s
2e80: 74 72 3b 0a 20 20 69 6e 74 20 72 63 2c 20 69 2c  tr;.  int rc, i,
2e90: 20 6a 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72   j;.  char *zErr
2ea0: 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 48   = 0;.  char *zH
2eb0: 65 78 3b 0a 20 20 63 68 61 72 20 7a 53 71 6c 5b  ex;.  char zSql[
2ec0: 35 30 30 5d 3b 0a 20 20 63 68 61 72 20 7a 42 75  500];.  char zBu
2ed0: 66 5b 33 30 5d 3b 0a 20 20 69 66 28 20 61 72 67  f[30];.  if( arg
2ee0: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
2ef0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
2f00: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
2f10: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
2f20: 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20  ", argv[0], .   
2f30: 20 20 20 20 22 20 44 42 20 48 45 58 22 2c 20 30      " DB HEX", 0
2f40: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
2f50: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
2f60: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
2f70: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
2f80: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
2f90: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 48 65 78  CL_ERROR;.  zHex
2fa0: 20 3d 20 61 72 67 76 5b 32 5d 3b 0a 20 20 66 6f   = argv[2];.  fo
2fb0: 72 28 69 3d 6a 3d 30 3b 20 69 3c 73 69 7a 65 6f  r(i=j=0; i<sizeo
2fc0: 66 28 7a 53 71 6c 29 20 26 26 20 7a 48 65 78 5b  f(zSql) && zHex[
2fd0: 6a 5d 3b 20 69 2b 2b 2c 20 6a 2b 2b 29 7b 0a 20  j]; i++, j++){. 
2fe0: 20 20 20 69 66 28 20 7a 48 65 78 5b 6a 5d 3d 3d     if( zHex[j]==
2ff0: 27 25 27 20 26 26 20 7a 48 65 78 5b 6a 2b 32 5d  '%' && zHex[j+2]
3000: 20 26 26 20 7a 48 65 78 5b 6a 2b 32 5d 20 29 7b   && zHex[j+2] ){
3010: 0a 20 20 20 20 20 20 7a 53 71 6c 5b 69 5d 20 3d  .      zSql[i] =
3020: 20 28 74 65 73 74 48 65 78 54 6f 49 6e 74 28 7a   (testHexToInt(z
3030: 48 65 78 5b 6a 2b 31 5d 29 3c 3c 34 29 20 2b 20  Hex[j+1])<<4) + 
3040: 74 65 73 74 48 65 78 54 6f 49 6e 74 28 7a 48 65  testHexToInt(zHe
3050: 78 5b 6a 2b 32 5d 29 3b 0a 20 20 20 20 20 20 6a  x[j+2]);.      j
3060: 20 2b 3d 20 32 3b 0a 20 20 20 20 7d 65 6c 73 65   += 2;.    }else
3070: 7b 0a 20 20 20 20 20 20 7a 53 71 6c 5b 69 5d 20  {.      zSql[i] 
3080: 3d 20 7a 48 65 78 5b 6a 5d 3b 0a 20 20 20 20 7d  = zHex[j];.    }
3090: 0a 20 20 7d 0a 20 20 7a 53 71 6c 5b 69 5d 20 3d  .  }.  zSql[i] =
30a0: 20 30 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e   0;.  Tcl_DStrin
30b0: 67 49 6e 69 74 28 26 73 74 72 29 3b 0a 20 20 72  gInit(&str);.  r
30c0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
30d0: 28 64 62 2c 20 7a 53 71 6c 2c 20 65 78 65 63 5f  (db, zSql, exec_
30e0: 70 72 69 6e 74 66 5f 63 62 2c 20 26 73 74 72 2c  printf_cb, &str,
30f0: 20 26 7a 45 72 72 29 3b 0a 20 20 73 70 72 69 6e   &zErr);.  sprin
3100: 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 72  tf(zBuf, "%d", r
3110: 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  c);.  Tcl_Append
3120: 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
3130: 7a 42 75 66 29 3b 0a 20 20 54 63 6c 5f 41 70 70  zBuf);.  Tcl_App
3140: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
3150: 70 2c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p, rc==SQLITE_OK
3160: 20 3f 20 54 63 6c 5f 44 53 74 72 69 6e 67 56 61   ? Tcl_DStringVa
3170: 6c 75 65 28 26 73 74 72 29 20 3a 20 7a 45 72 72  lue(&str) : zErr
3180: 29 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  );.  Tcl_DString
3190: 46 72 65 65 28 26 73 74 72 29 3b 0a 20 20 69 66  Free(&str);.  if
31a0: 28 20 7a 45 72 72 20 29 20 73 71 6c 69 74 65 33  ( zErr ) sqlite3
31b0: 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 69  _free(zErr);.  i
31c0: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
31d0: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
31e0: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
31f0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75  CL_ERROR;.  retu
3200: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
3210: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 64 62 5f 65  .** Usage:  db_e
3220: 6e 74 65 72 20 44 42 0a 2a 2a 20 20 20 20 20 20  nter DB.**      
3230: 20 20 20 64 62 5f 6c 65 61 76 65 20 44 42 0a 2a     db_leave DB.*
3240: 2a 0a 2a 2a 20 45 6e 74 65 72 20 6f 72 20 6c 65  *.** Enter or le
3250: 61 76 65 20 74 68 65 20 6d 75 74 65 78 20 6f 6e  ave the mutex on
3260: 20 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e   a database conn
3270: 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69  ection..*/.stati
3280: 63 20 69 6e 74 20 64 62 5f 65 6e 74 65 72 28 0a  c int db_enter(.
3290: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
32a0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
32b0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
32c0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
32d0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
32e0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
32f0: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
3300: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
3310: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
3320: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
3330: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
3340: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
3350: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  nt */.){.  sqlit
3360: 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72  e3 *db;.  if( ar
3370: 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
3380: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
3390: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
33a0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
33b0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20  "", argv[0], .  
33c0: 20 20 20 20 20 22 20 44 42 22 2c 20 30 29 3b 0a       " DB", 0);.
33d0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
33e0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
33f0: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
3400: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
3410: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
3420: 45 52 52 4f 52 3b 0a 20 20 73 71 6c 69 74 65 33  ERROR;.  sqlite3
3430: 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d  _mutex_enter(db-
3440: 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75 72  >mutex);.  retur
3450: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 73 74 61 74  n TCL_OK;.}.stat
3460: 69 63 20 69 6e 74 20 64 62 5f 6c 65 61 76 65 28  ic int db_leave(
3470: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
3480: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
3490: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
34a0: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
34b0: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
34c0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
34d0: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
34e0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
34f0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
3500: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
3510: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
3520: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
3530: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  ent */.){.  sqli
3540: 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61  te3 *db;.  if( a
3550: 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  rgc!=2 ){.    Tc
3560: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
3570: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
3580: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
3590: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20  \"", argv[0], . 
35a0: 20 20 20 20 20 20 22 20 44 42 22 2c 20 30 29 3b        " DB", 0);
35b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
35c0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
35d0: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
35e0: 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
35f0: 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
3600: 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c 69 74 65  _ERROR;.  sqlite
3610: 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64 62  3_mutex_leave(db
3620: 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72 65 74 75  ->mutex);.  retu
3630: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
3640: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
3650: 74 65 33 5f 65 78 65 63 20 20 44 42 20 20 53 51  te3_exec  DB  SQ
3660: 4c 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  L.**.** Invoke t
3670: 68 65 20 73 71 6c 69 74 65 33 5f 65 78 65 63 20  he sqlite3_exec 
3680: 69 6e 74 65 72 66 61 63 65 20 75 73 69 6e 67 20  interface using 
3690: 74 68 65 20 6f 70 65 6e 20 64 61 74 61 62 61 73  the open databas
36a0: 65 20 44 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69  e DB.*/.static i
36b0: 6e 74 20 74 65 73 74 5f 65 78 65 63 28 0a 20 20  nt test_exec(.  
36c0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
36d0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
36e0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
36f0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
3700: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
3710: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
3720: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
3730: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
3740: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
3750: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
3760: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
3770: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
3780: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
3790: 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53 74 72   *db;.  Tcl_DStr
37a0: 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74 20 72  ing str;.  int r
37b0: 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20  c;.  char *zErr 
37c0: 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71  = 0;.  char *zSq
37d0: 6c 3b 0a 20 20 69 6e 74 20 69 2c 20 6a 3b 0a 20  l;.  int i, j;. 
37e0: 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a   char zBuf[30];.
37f0: 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b    if( argc!=3 ){
3800: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
3810: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
3820: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
3830: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
3840: 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44  [0], .       " D
3850: 42 20 53 51 4c 22 2c 20 30 29 3b 0a 20 20 20 20  B SQL", 0);.    
3860: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
3870: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
3880: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
3890: 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
38a0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
38b0: 52 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  R;.  Tcl_DString
38c0: 49 6e 69 74 28 26 73 74 72 29 3b 0a 20 20 7a 53  Init(&str);.  zS
38d0: 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
38e0: 69 6e 74 66 28 22 25 73 22 2c 20 61 72 67 76 5b  intf("%s", argv[
38f0: 32 5d 29 3b 0a 20 20 66 6f 72 28 69 3d 6a 3d 30  2]);.  for(i=j=0
3900: 3b 20 7a 53 71 6c 5b 69 5d 3b 29 7b 0a 20 20 20  ; zSql[i];){.   
3910: 20 69 66 28 20 7a 53 71 6c 5b 69 5d 3d 3d 27 25   if( zSql[i]=='%
3920: 27 20 29 7b 0a 20 20 20 20 20 20 7a 53 71 6c 5b  ' ){.      zSql[
3930: 6a 2b 2b 5d 20 3d 20 28 74 65 73 74 48 65 78 54  j++] = (testHexT
3940: 6f 49 6e 74 28 7a 53 71 6c 5b 69 2b 31 5d 29 3c  oInt(zSql[i+1])<
3950: 3c 34 29 20 2b 20 74 65 73 74 48 65 78 54 6f 49  <4) + testHexToI
3960: 6e 74 28 7a 53 71 6c 5b 69 2b 32 5d 29 3b 0a 20  nt(zSql[i+2]);. 
3970: 20 20 20 20 20 69 20 2b 3d 20 33 3b 0a 20 20 20       i += 3;.   
3980: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 53   }else{.      zS
3990: 71 6c 5b 6a 2b 2b 5d 20 3d 20 7a 53 71 6c 5b 69  ql[j++] = zSql[i
39a0: 2b 2b 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ++];.    }.  }. 
39b0: 20 7a 53 71 6c 5b 6a 5d 20 3d 20 30 3b 0a 20 20   zSql[j] = 0;.  
39c0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
39d0: 63 28 64 62 2c 20 7a 53 71 6c 2c 20 65 78 65 63  c(db, zSql, exec
39e0: 5f 70 72 69 6e 74 66 5f 63 62 2c 20 26 73 74 72  _printf_cb, &str
39f0: 2c 20 26 7a 45 72 72 29 3b 0a 20 20 73 71 6c 69  , &zErr);.  sqli
3a00: 74 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a  te3_free(zSql);.
3a10: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
3a20: 22 25 64 22 2c 20 72 63 29 3b 0a 20 20 54 63 6c  "%d", rc);.  Tcl
3a30: 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  _AppendElement(i
3a40: 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20  nterp, zBuf);.  
3a50: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
3a60: 74 28 69 6e 74 65 72 70 2c 20 72 63 3d 3d 53 51  t(interp, rc==SQ
3a70: 4c 49 54 45 5f 4f 4b 20 3f 20 54 63 6c 5f 44 53  LITE_OK ? Tcl_DS
3a80: 74 72 69 6e 67 56 61 6c 75 65 28 26 73 74 72 29  tringValue(&str)
3a90: 20 3a 20 7a 45 72 72 29 3b 0a 20 20 54 63 6c 5f   : zErr);.  Tcl_
3aa0: 44 53 74 72 69 6e 67 46 72 65 65 28 26 73 74 72  DStringFree(&str
3ab0: 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29 20  );.  if( zErr ) 
3ac0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72  sqlite3_free(zEr
3ad0: 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  r);.  if( sqlite
3ae0: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
3af0: 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72  erp, db, rc) ) r
3b00: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
3b10: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
3b20: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
3b30: 3a 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 5f  :  sqlite3_exec_
3b40: 6e 72 20 20 44 42 20 20 53 51 4c 0a 2a 2a 0a 2a  nr  DB  SQL.**.*
3b50: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 73 71 6c  * Invoke the sql
3b60: 69 74 65 33 5f 65 78 65 63 20 69 6e 74 65 72 66  ite3_exec interf
3b70: 61 63 65 20 75 73 69 6e 67 20 74 68 65 20 6f 70  ace using the op
3b80: 65 6e 20 64 61 74 61 62 61 73 65 20 44 42 2e 20  en database DB. 
3b90: 20 44 69 73 63 61 72 64 0a 2a 2a 20 61 6c 6c 20   Discard.** all 
3ba0: 72 65 73 75 6c 74 73 0a 2a 2f 0a 73 74 61 74 69  results.*/.stati
3bb0: 63 20 69 6e 74 20 74 65 73 74 5f 65 78 65 63 5f  c int test_exec_
3bc0: 6e 72 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  nr(.  void *NotU
3bd0: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
3be0: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
3bf0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
3c00: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
3c10: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
3c20: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
3c30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
3c40: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
3c50: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
3c60: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
3c70: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
3c80: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73  gument */.){.  s
3c90: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
3ca0: 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45  t rc;.  char *zE
3cb0: 72 72 20 3d 20 30 3b 0a 20 20 69 66 28 20 61 72  rr = 0;.  if( ar
3cc0: 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
3cd0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
3ce0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
3cf0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
3d00: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20  "", argv[0], .  
3d10: 20 20 20 20 20 22 20 44 42 20 53 51 4c 22 2c 20       " DB SQL", 
3d20: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
3d30: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
3d40: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
3d50: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
3d60: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
3d70: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
3d80: 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
3d90: 62 2c 20 61 72 67 76 5b 32 5d 2c 20 30 2c 20 30  b, argv[2], 0, 0
3da0: 2c 20 26 7a 45 72 72 29 3b 0a 20 20 69 66 28 20  , &zErr);.  if( 
3db0: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
3dc0: 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
3dd0: 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
3de0: 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20  ERROR;.  return 
3df0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
3e00: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
3e10: 5f 6d 70 72 69 6e 74 66 5f 7a 5f 74 65 73 74 20  _mprintf_z_test 
3e20: 20 53 45 50 41 52 41 54 4f 52 20 20 41 52 47 30   SEPARATOR  ARG0
3e30: 20 20 41 52 47 31 20 2e 2e 2e 0a 2a 2a 0a 2a 2a    ARG1 ....**.**
3e40: 20 54 65 73 74 20 74 68 65 20 25 7a 20 66 6f 72   Test the %z for
3e50: 6d 61 74 20 6f 66 20 73 71 6c 69 74 65 4d 50 72  mat of sqliteMPr
3e60: 69 6e 74 66 28 29 2e 20 20 55 73 65 20 6d 75 6c  intf().  Use mul
3e70: 74 69 70 6c 65 20 6d 70 72 69 6e 74 66 28 29 20  tiple mprintf() 
3e80: 63 61 6c 6c 73 20 74 6f 20 0a 2a 2a 20 63 6f 6e  calls to .** con
3e90: 63 61 74 65 6e 61 74 65 20 61 72 67 30 20 74 68  catenate arg0 th
3ea0: 72 6f 75 67 68 20 61 72 67 6e 20 75 73 69 6e 67  rough argn using
3eb0: 20 73 65 70 61 72 61 74 6f 72 20 61 73 20 74 68   separator as th
3ec0: 65 20 73 65 70 61 72 61 74 6f 72 2e 0a 2a 2a 20  e separator..** 
3ed0: 52 65 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c  Return the resul
3ee0: 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  t..*/.static int
3ef0: 20 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f 7a 28   test_mprintf_z(
3f00: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
3f10: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
3f20: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
3f30: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
3f40: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
3f50: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
3f60: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
3f70: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
3f80: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
3f90: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
3fa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
3fb0: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
3fc0: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72  ent */.){.  char
3fd0: 20 2a 7a 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20   *zResult = 0;. 
3fe0: 20 69 6e 74 20 69 3b 0a 0a 20 20 66 6f 72 28 69   int i;..  for(i
3ff0: 3d 32 3b 20 69 3c 61 72 67 63 20 26 26 20 28 69  =2; i<argc && (i
4000: 3d 3d 32 20 7c 7c 20 7a 52 65 73 75 6c 74 29 3b  ==2 || zResult);
4010: 20 69 2b 2b 29 7b 0a 20 20 20 20 7a 52 65 73 75   i++){.    zResu
4020: 6c 74 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  lt = sqlite3MPri
4030: 6e 74 66 28 30 2c 20 22 25 7a 25 73 25 73 22 2c  ntf(0, "%z%s%s",
4040: 20 7a 52 65 73 75 6c 74 2c 20 61 72 67 76 5b 31   zResult, argv[1
4050: 5d 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d  ], argv[i]);.  }
4060: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
4070: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 52 65 73  ult(interp, zRes
4080: 75 6c 74 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  ult, 0);.  sqlit
4090: 65 33 5f 66 72 65 65 28 7a 52 65 73 75 6c 74 29  e3_free(zResult)
40a0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
40b0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
40c0: 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e:  sqlite3_mpri
40d0: 6e 74 66 5f 6e 5f 74 65 73 74 20 20 53 54 52 49  ntf_n_test  STRI
40e0: 4e 47 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  NG.**.** Test th
40f0: 65 20 25 6e 20 66 6f 72 6d 61 74 20 6f 66 20 73  e %n format of s
4100: 71 6c 69 74 65 4d 50 72 69 6e 74 66 28 29 2e 20  qliteMPrintf(). 
4110: 20 52 65 74 75 72 6e 20 74 68 65 20 6c 65 6e 67   Return the leng
4120: 74 68 20 6f 66 20 74 68 65 0a 2a 2a 20 69 6e 70  th of the.** inp
4130: 75 74 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 73 74  ut string..*/.st
4140: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6d 70  atic int test_mp
4150: 72 69 6e 74 66 5f 6e 28 0a 20 20 76 6f 69 64 20  rintf_n(.  void 
4160: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
4170: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
4180: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
4190: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
41a0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
41b0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
41c0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
41d0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
41e0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
41f0: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
4200: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
4210: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
4220: 7b 0a 20 20 63 68 61 72 20 2a 7a 53 74 72 3b 0a  {.  char *zStr;.
4230: 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 7a    int n = 0;.  z
4240: 53 74 72 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Str = sqlite3MPr
4250: 69 6e 74 66 28 30 2c 20 22 25 73 25 6e 22 2c 20  intf(0, "%s%n", 
4260: 61 72 67 76 5b 31 5d 2c 20 26 6e 29 3b 0a 20 20  argv[1], &n);.  
4270: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 74  sqlite3_free(zSt
4280: 72 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  r);.  Tcl_SetObj
4290: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
42a0: 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e 29 29  cl_NewIntObj(n))
42b0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
42c0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
42d0: 65 3a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  e:  sqlite3_snpr
42e0: 69 6e 74 66 5f 69 6e 74 20 20 53 49 5a 45 20 46  intf_int  SIZE F
42f0: 4f 52 4d 41 54 20 20 49 4e 54 0a 2a 2a 0a 2a 2a  ORMAT  INT.**.**
4300: 20 54 65 73 74 20 74 68 65 20 6f 66 20 73 71 6c   Test the of sql
4310: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 29 20  ite3_snprintf() 
4320: 72 6f 75 74 69 6e 65 2e 20 20 53 49 5a 45 20 69  routine.  SIZE i
4330: 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
4340: 65 0a 2a 2a 20 6f 75 74 70 75 74 20 62 75 66 66  e.** output buff
4350: 65 72 20 69 6e 20 62 79 74 65 73 2e 20 20 54 68  er in bytes.  Th
4360: 65 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 69  e maximum size i
4370: 73 20 31 30 30 2e 20 20 46 4f 52 4d 41 54 20 69  s 100.  FORMAT i
4380: 73 20 74 68 65 0a 2a 2a 20 66 6f 72 6d 61 74 20  s the.** format 
4390: 73 74 72 69 6e 67 2e 20 20 49 4e 54 20 69 73 20  string.  INT is 
43a0: 61 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72  a single integer
43b0: 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65 20   argument.  The 
43c0: 46 4f 52 4d 41 54 0a 2a 2a 20 73 74 72 69 6e 67  FORMAT.** string
43d0: 20 6d 75 73 74 20 72 65 71 75 69 72 65 20 6e 6f   must require no
43e0: 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 69 73 20   more than this 
43f0: 6f 6e 65 20 69 6e 74 65 67 65 72 20 61 72 67 75  one integer argu
4400: 6d 65 6e 74 2e 20 20 49 66 0a 2a 2a 20 59 6f 75  ment.  If.** You
4410: 20 70 61 73 73 20 69 6e 20 61 20 66 6f 72 6d 61   pass in a forma
4420: 74 20 73 74 72 69 6e 67 20 74 68 61 74 20 72 65  t string that re
4430: 71 75 69 72 65 73 20 6d 6f 72 65 20 74 68 61 6e  quires more than
4440: 20 6f 6e 65 20 61 72 67 75 6d 65 6e 74 2c 0a 2a   one argument,.*
4450: 2a 20 62 61 64 20 74 68 69 6e 67 73 20 77 69 6c  * bad things wil
4460: 6c 20 68 61 70 70 65 6e 2e 0a 2a 2f 0a 73 74 61  l happen..*/.sta
4470: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 6e 70  tic int test_snp
4480: 72 69 6e 74 66 5f 69 6e 74 28 0a 20 20 76 6f 69  rintf_int(.  voi
4490: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
44a0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
44b0: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
44c0: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
44d0: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
44e0: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
44f0: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
4500: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
4510: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
4520: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
4530: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
4540: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
4550: 0a 29 7b 0a 20 20 63 68 61 72 20 7a 53 74 72 5b  .){.  char zStr[
4560: 31 30 30 5d 3b 0a 20 20 69 6e 74 20 6e 20 3d 20  100];.  int n = 
4570: 61 74 6f 69 28 61 72 67 76 5b 31 5d 29 3b 0a 20  atoi(argv[1]);. 
4580: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 6f   const char *zFo
4590: 72 6d 61 74 20 3d 20 61 72 67 76 5b 32 5d 3b 0a  rmat = argv[2];.
45a0: 20 20 69 6e 74 20 61 31 20 3d 20 61 74 6f 69 28    int a1 = atoi(
45b0: 61 72 67 76 5b 33 5d 29 3b 0a 20 20 69 66 28 20  argv[3]);.  if( 
45c0: 6e 3e 73 69 7a 65 6f 66 28 7a 53 74 72 29 20 29  n>sizeof(zStr) )
45d0: 20 6e 20 3d 20 73 69 7a 65 6f 66 28 7a 53 74 72   n = sizeof(zStr
45e0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  );.  sqlite3_snp
45f0: 72 69 6e 74 66 28 73 69 7a 65 6f 66 28 7a 53 74  rintf(sizeof(zSt
4600: 72 29 2c 20 7a 53 74 72 2c 20 22 61 62 63 64 65  r), zStr, "abcde
4610: 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75  fghijklmnopqrstu
4620: 76 77 78 79 7a 22 29 3b 0a 20 20 73 71 6c 69 74  vwxyz");.  sqlit
4630: 65 33 5f 73 6e 70 72 69 6e 74 66 28 6e 2c 20 7a  e3_snprintf(n, z
4640: 53 74 72 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 31  Str, zFormat, a1
4650: 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  );.  Tcl_AppendR
4660: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 53  esult(interp, zS
4670: 74 72 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e  tr, 0);.  return
4680: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e   TCL_OK;.}..#ifn
4690: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
46a0: 47 45 54 5f 54 41 42 4c 45 0a 0a 2f 2a 0a 2a 2a  GET_TABLE../*.**
46b0: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
46c0: 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74  _get_table_print
46d0: 66 20 20 44 42 20 20 46 4f 52 4d 41 54 20 20 53  f  DB  FORMAT  S
46e0: 54 52 49 4e 47 20 20 3f 2d 2d 6e 6f 2d 63 6f 75  TRING  ?--no-cou
46f0: 6e 74 73 3f 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b  nts?.**.** Invok
4700: 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 67 65  e the sqlite3_ge
4710: 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 28 29  t_table_printf()
4720: 20 69 6e 74 65 72 66 61 63 65 20 75 73 69 6e 67   interface using
4730: 20 74 68 65 20 6f 70 65 6e 20 64 61 74 61 62 61   the open databa
4740: 73 65 0a 2a 2a 20 44 42 2e 20 20 54 68 65 20 53  se.** DB.  The S
4750: 51 4c 20 69 73 20 74 68 65 20 73 74 72 69 6e 67  QL is the string
4760: 20 46 4f 52 4d 41 54 2e 20 20 54 68 65 20 66 6f   FORMAT.  The fo
4770: 72 6d 61 74 20 73 74 72 69 6e 67 20 73 68 6f 75  rmat string shou
4780: 6c 64 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 6f 6e  ld contain.** on
4790: 65 20 25 73 20 6f 72 20 25 71 2e 20 20 53 54 52  e %s or %q.  STR
47a0: 49 4e 47 20 69 73 20 74 68 65 20 76 61 6c 75 65  ING is the value
47b0: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 25   inserted into %
47c0: 73 20 6f 72 20 25 71 2e 0a 2a 2f 0a 73 74 61 74  s or %q..*/.stat
47d0: 69 63 20 69 6e 74 20 74 65 73 74 5f 67 65 74 5f  ic int test_get_
47e0: 74 61 62 6c 65 5f 70 72 69 6e 74 66 28 0a 20 20  table_printf(.  
47f0: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
4800: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
4810: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
4820: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
4830: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
4840: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
4850: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
4860: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4870: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
4880: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
4890: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
48a0: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
48b0: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
48c0: 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53 74 72   *db;.  Tcl_DStr
48d0: 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74 20 72  ing str;.  int r
48e0: 63 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20  c;.  char *zErr 
48f0: 3d 20 30 3b 0a 20 20 69 6e 74 20 6e 52 6f 77 2c  = 0;.  int nRow,
4900: 20 6e 43 6f 6c 3b 0a 20 20 63 68 61 72 20 2a 2a   nCol;.  char **
4910: 61 52 65 73 75 6c 74 3b 0a 20 20 69 6e 74 20 69  aResult;.  int i
4920: 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33 30  ;.  char zBuf[30
4930: 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  ];.  char *zSql;
4940: 0a 20 20 69 6e 74 20 72 65 73 43 6f 75 6e 74 20  .  int resCount 
4950: 3d 20 2d 31 3b 0a 20 20 69 66 28 20 61 72 67 63  = -1;.  if( argc
4960: 3d 3d 35 20 29 7b 0a 20 20 20 20 69 66 28 20 54  ==5 ){.    if( T
4970: 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70  cl_GetInt(interp
4980: 2c 20 61 72 67 76 5b 34 5d 2c 20 26 72 65 73 43  , argv[4], &resC
4990: 6f 75 6e 74 29 20 29 20 72 65 74 75 72 6e 20 54  ount) ) return T
49a0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
49b0: 69 66 28 20 61 72 67 63 21 3d 34 20 26 26 20 61  if( argc!=4 && a
49c0: 72 67 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63  rgc!=5 ){.    Tc
49d0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
49e0: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
49f0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
4a00: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20  \"", argv[0], . 
4a10: 20 20 20 20 20 20 22 20 44 42 20 46 4f 52 4d 41        " DB FORMA
4a20: 54 20 53 54 52 49 4e 47 20 3f 43 4f 55 4e 54 3f  T STRING ?COUNT?
4a30: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
4a40: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
4a50: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
4a60: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
4a70: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
4a80: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
4a90: 54 63 6c 5f 44 53 74 72 69 6e 67 49 6e 69 74 28  Tcl_DStringInit(
4aa0: 26 73 74 72 29 3b 0a 20 20 7a 53 71 6c 20 3d 20  &str);.  zSql = 
4ab0: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
4ac0: 61 72 67 76 5b 32 5d 2c 61 72 67 76 5b 33 5d 29  argv[2],argv[3])
4ad0: 3b 0a 20 20 69 66 28 20 61 72 67 63 3d 3d 35 20  ;.  if( argc==5 
4ae0: 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
4af0: 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 28 64 62  te3_get_table(db
4b00: 2c 20 7a 53 71 6c 2c 20 26 61 52 65 73 75 6c 74  , zSql, &aResult
4b10: 2c 20 30 2c 20 30 2c 20 26 7a 45 72 72 29 3b 0a  , 0, 0, &zErr);.
4b20: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
4b30: 3d 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61  = sqlite3_get_ta
4b40: 62 6c 65 28 64 62 2c 20 7a 53 71 6c 2c 20 26 61  ble(db, zSql, &a
4b50: 52 65 73 75 6c 74 2c 20 26 6e 52 6f 77 2c 20 26  Result, &nRow, &
4b60: 6e 43 6f 6c 2c 20 26 7a 45 72 72 29 3b 0a 20 20  nCol, &zErr);.  
4b70: 20 20 72 65 73 43 6f 75 6e 74 20 3d 20 28 6e 52    resCount = (nR
4b80: 6f 77 2b 31 29 2a 6e 43 6f 6c 3b 0a 20 20 7d 0a  ow+1)*nCol;.  }.
4b90: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
4ba0: 53 71 6c 29 3b 0a 20 20 73 70 72 69 6e 74 66 28  Sql);.  sprintf(
4bb0: 7a 42 75 66 2c 20 22 25 64 22 2c 20 72 63 29 3b  zBuf, "%d", rc);
4bc0: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65  .  Tcl_AppendEle
4bd0: 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  ment(interp, zBu
4be0: 66 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  f);.  if( rc==SQ
4bf0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 69  LITE_OK ){.    i
4c00: 66 28 20 61 72 67 63 3d 3d 34 20 29 7b 0a 20 20  f( argc==4 ){.  
4c10: 20 20 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66      sprintf(zBuf
4c20: 2c 20 22 25 64 22 2c 20 6e 52 6f 77 29 3b 0a 20  , "%d", nRow);. 
4c30: 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 45       Tcl_AppendE
4c40: 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a  lement(interp, z
4c50: 42 75 66 29 3b 0a 20 20 20 20 20 20 73 70 72 69  Buf);.      spri
4c60: 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20  ntf(zBuf, "%d", 
4c70: 6e 43 6f 6c 29 3b 0a 20 20 20 20 20 20 54 63 6c  nCol);.      Tcl
4c80: 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  _AppendElement(i
4c90: 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20  nterp, zBuf);.  
4ca0: 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b    }.    for(i=0;
4cb0: 20 69 3c 72 65 73 43 6f 75 6e 74 3b 20 69 2b 2b   i<resCount; i++
4cc0: 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41 70 70  ){.      Tcl_App
4cd0: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
4ce0: 70 2c 20 61 52 65 73 75 6c 74 5b 69 5d 20 3f 20  p, aResult[i] ? 
4cf0: 61 52 65 73 75 6c 74 5b 69 5d 20 3a 20 22 4e 55  aResult[i] : "NU
4d00: 4c 4c 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  LL");.    }.  }e
4d10: 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  lse{.    Tcl_App
4d20: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
4d30: 70 2c 20 7a 45 72 72 29 3b 0a 20 20 7d 0a 20 20  p, zErr);.  }.  
4d40: 73 71 6c 69 74 65 33 5f 66 72 65 65 5f 74 61 62  sqlite3_free_tab
4d50: 6c 65 28 61 52 65 73 75 6c 74 29 3b 0a 20 20 69  le(aResult);.  i
4d60: 66 28 20 7a 45 72 72 20 29 20 73 71 6c 69 74 65  f( zErr ) sqlite
4d70: 33 5f 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20  3_free(zErr);.  
4d80: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
4d90: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
4da0: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
4db0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74  TCL_ERROR;.  ret
4dc0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 23  urn TCL_OK;.}..#
4dd0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
4de0: 4f 4d 49 54 5f 47 45 54 5f 54 41 42 4c 45 20 2a  OMIT_GET_TABLE *
4df0: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  /.../*.** Usage:
4e00: 20 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69    sqlite3_last_i
4e10: 6e 73 65 72 74 5f 72 6f 77 69 64 20 44 42 0a 2a  nsert_rowid DB.*
4e20: 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65  *.** Returns the
4e30: 20 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f   integer ROWID o
4e40: 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  f the most recen
4e50: 74 20 69 6e 73 65 72 74 2e 0a 2a 2f 0a 73 74 61  t insert..*/.sta
4e60: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6c 61 73  tic int test_las
4e70: 74 5f 72 6f 77 69 64 28 0a 20 20 76 6f 69 64 20  t_rowid(.  void 
4e80: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
4e90: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
4ea0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
4eb0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
4ec0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
4ed0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
4ee0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
4ef0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
4f00: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
4f10: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
4f20: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
4f30: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
4f40: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
4f50: 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d  .  char zBuf[30]
4f60: 3b 0a 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32  ;..  if( argc!=2
4f70: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
4f80: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
4f90: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
4fa0: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
4fb0: 72 67 76 5b 30 5d 2c 20 22 20 44 42 5c 22 22 2c  rgv[0], " DB\"",
4fc0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
4fd0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
4fe0: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
4ff0: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
5000: 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
5010: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 70   TCL_ERROR;.  sp
5020: 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 6c 6c  rintf(zBuf, "%ll
5030: 64 22 2c 20 73 71 6c 69 74 65 33 5f 6c 61 73 74  d", sqlite3_last
5040: 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 64 62  _insert_rowid(db
5050: 29 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  ));.  Tcl_Append
5060: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
5070: 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  Buf, 0);.  retur
5080: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a  n SQLITE_OK;.}..
5090: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
50a0: 6c 69 74 65 33 5f 6b 65 79 20 44 42 20 4b 45 59  lite3_key DB KEY
50b0: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 63  .**.** Set the c
50c0: 6f 64 65 63 20 6b 65 79 2e 0a 2a 2f 0a 73 74 61  odec key..*/.sta
50d0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6b 65 79  tic int test_key
50e0: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
50f0: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
5100: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
5110: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
5120: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
5130: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
5140: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
5150: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
5160: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
5170: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
5180: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
5190: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
51a0: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  ment */.){.  sql
51b0: 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73  ite3 *db;.  cons
51c0: 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 20 20  t char *zKey;.  
51d0: 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 69 66 28 20  int nKey;.  if( 
51e0: 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
51f0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
5200: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
5210: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
5220: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
5230: 20 20 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45        " FILENAME
5240: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
5250: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
5260: 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
5270: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
5280: 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
5290: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
52a0: 20 20 7a 4b 65 79 20 3d 20 61 72 67 76 5b 32 5d    zKey = argv[2]
52b0: 3b 0a 20 20 6e 4b 65 79 20 3d 20 73 74 72 6c 65  ;.  nKey = strle
52c0: 6e 28 7a 4b 65 79 29 3b 0a 23 69 66 64 65 66 20  n(zKey);.#ifdef 
52d0: 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
52e0: 0a 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 28 64  .  sqlite3_key(d
52f0: 62 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 29 3b 0a  b, zKey, nKey);.
5300: 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20  #endif.  return 
5310: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
5320: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
5330: 5f 72 65 6b 65 79 20 44 42 20 4b 45 59 0a 2a 2a  _rekey DB KEY.**
5340: 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 63  .** Change the c
5350: 6f 64 65 63 20 6b 65 79 2e 0a 2a 2f 0a 73 74 61  odec key..*/.sta
5360: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65 6b  tic int test_rek
5370: 65 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  ey(.  void *NotU
5380: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
5390: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
53a0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
53b0: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
53c0: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
53d0: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
53e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
53f0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
5400: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
5410: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
5420: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
5430: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73  gument */.){.  s
5440: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f  qlite3 *db;.  co
5450: 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a  nst char *zKey;.
5460: 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 69 66    int nKey;.  if
5470: 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20  ( argc!=3 ){.   
5480: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
5490: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
54a0: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
54b0: 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
54c0: 0a 20 20 20 20 20 20 20 22 20 46 49 4c 45 4e 41  .       " FILENA
54d0: 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  ME\"", 0);.    r
54e0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
54f0: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
5500: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
5510: 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
5520: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
5530: 3b 0a 20 20 7a 4b 65 79 20 3d 20 61 72 67 76 5b  ;.  zKey = argv[
5540: 32 5d 3b 0a 20 20 6e 4b 65 79 20 3d 20 73 74 72  2];.  nKey = str
5550: 6c 65 6e 28 7a 4b 65 79 29 3b 0a 23 69 66 64 65  len(zKey);.#ifde
5560: 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44  f SQLITE_HAS_COD
5570: 45 43 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 6b  EC.  sqlite3_rek
5580: 65 79 28 64 62 2c 20 7a 4b 65 79 2c 20 6e 4b 65  ey(db, zKey, nKe
5590: 79 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74  y);.#endif.  ret
55a0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
55b0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
55c0: 69 74 65 33 5f 63 6c 6f 73 65 20 44 42 0a 2a 2a  ite3_close DB.**
55d0: 0a 2a 2a 20 43 6c 6f 73 65 73 20 74 68 65 20 64  .** Closes the d
55e0: 61 74 61 62 61 73 65 20 6f 70 65 6e 65 64 20 62  atabase opened b
55f0: 79 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 2e 0a  y sqlite3_open..
5600: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
5610: 6c 69 74 65 5f 74 65 73 74 5f 63 6c 6f 73 65 28  lite_test_close(
5620: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
5630: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
5640: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
5650: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
5660: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
5670: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
5680: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
5690: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
56a0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
56b0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
56c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
56d0: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
56e0: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  ent */.){.  sqli
56f0: 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  te3 *db;.  int r
5700: 63 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32  c;.  if( argc!=2
5710: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
5720: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
5730: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
5740: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
5750: 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22  rgv[0],.       "
5760: 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29   FILENAME\"", 0)
5770: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
5780: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
5790: 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
57a0: 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
57b0: 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
57c0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20  L_ERROR;.  rc = 
57d0: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62  sqlite3_close(db
57e0: 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75  );.  Tcl_SetResu
57f0: 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72  lt(interp, (char
5800: 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72   *)t1ErrorName(r
5810: 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  c), TCL_STATIC);
5820: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
5830: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65  ;.}../*.** Imple
5840: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
5850: 20 78 5f 63 6f 61 6c 65 73 63 65 28 29 20 66 75   x_coalesce() fu
5860: 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 52 65 74 75 72  nction..** Retur
5870: 6e 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  n the first argu
5880: 6d 65 6e 74 20 6e 6f 6e 2d 4e 55 4c 4c 20 61 72  ment non-NULL ar
5890: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69  gument..*/.stati
58a0: 63 20 76 6f 69 64 20 74 31 5f 69 66 6e 75 6c 6c  c void t1_ifnull
58b0: 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65 33 5f  Func(.  sqlite3_
58c0: 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74  context *context
58d0: 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20  ,.  int argc,.  
58e0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
58f0: 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20 69 3b  argv.){.  int i;
5900: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72  .  for(i=0; i<ar
5910: 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  gc; i++){.    if
5920: 28 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d 73  ( SQLITE_NULL!=s
5930: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
5940: 65 28 61 72 67 76 5b 69 5d 29 20 29 7b 0a 20 20  e(argv[i]) ){.  
5950: 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69      int n = sqli
5960: 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28  te3_value_bytes(
5970: 61 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20 20 20  argv[i]);.      
5980: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
5990: 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 28 63 68  ext(context, (ch
59a0: 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
59b0: 65 5f 74 65 78 74 28 61 72 67 76 5b 69 5d 29 2c  e_text(argv[i]),
59c0: 0a 20 20 20 20 20 20 20 20 20 20 6e 2c 20 53 51  .          n, SQ
59d0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
59e0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
59f0: 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a    }.  }.}../*.**
5a00: 20 54 68 65 73 65 20 61 72 65 20 74 65 73 74 20   These are test 
5a10: 66 75 6e 63 74 69 6f 6e 73 2e 20 20 20 20 68 65  functions.    he
5a20: 78 38 28 29 20 69 6e 74 65 72 70 72 65 74 73 20  x8() interprets 
5a30: 69 74 73 20 61 72 67 75 6d 65 6e 74 20 61 73 0a  its argument as.
5a40: 2a 2a 20 55 54 46 38 20 61 6e 64 20 72 65 74 75  ** UTF8 and retu
5a50: 72 6e 73 20 61 20 68 65 78 20 65 6e 63 6f 64 69  rns a hex encodi
5a60: 6e 67 2e 20 20 68 65 78 31 36 6c 65 28 29 20 69  ng.  hex16le() i
5a70: 6e 74 65 72 70 72 65 74 73 20 69 74 73 20 61 72  nterprets its ar
5a80: 67 75 6d 65 6e 74 0a 2a 2a 20 61 73 20 55 54 46  gument.** as UTF
5a90: 31 36 6c 65 20 61 6e 64 20 72 65 74 75 72 6e 73  16le and returns
5aa0: 20 61 20 68 65 78 20 65 6e 63 6f 64 69 6e 67 2e   a hex encoding.
5ab0: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
5ac0: 68 65 78 38 46 75 6e 63 28 73 71 6c 69 74 65 33  hex8Func(sqlite3
5ad0: 5f 63 6f 6e 74 65 78 74 20 2a 70 2c 20 69 6e 74  _context *p, int
5ae0: 20 61 72 67 63 2c 20 73 71 6c 69 74 65 33 5f 76   argc, sqlite3_v
5af0: 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a 20 20  alue **argv){.  
5b00: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
5b10: 68 61 72 20 2a 7a 3b 0a 20 20 69 6e 74 20 69 3b  har *z;.  int i;
5b20: 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30  .  char zBuf[200
5b30: 5d 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  ];.  z = sqlite3
5b40: 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76  _value_text(argv
5b50: 5b 30 5d 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  [0]);.  for(i=0;
5b60: 20 69 3c 73 69 7a 65 6f 66 28 7a 42 75 66 29 2f   i<sizeof(zBuf)/
5b70: 32 20 2d 20 32 20 26 26 20 7a 5b 69 5d 3b 20 69  2 - 2 && z[i]; i
5b80: 2b 2b 29 7b 0a 20 20 20 20 73 70 72 69 6e 74 66  ++){.    sprintf
5b90: 28 26 7a 42 75 66 5b 69 2a 32 5d 2c 20 22 25 30  (&zBuf[i*2], "%0
5ba0: 32 78 22 2c 20 7a 5b 69 5d 26 30 78 66 66 29 3b  2x", z[i]&0xff);
5bb0: 0a 20 20 7d 0a 20 20 7a 42 75 66 5b 69 2a 32 5d  .  }.  zBuf[i*2]
5bc0: 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = 0;.  sqlite3_
5bd0: 72 65 73 75 6c 74 5f 74 65 78 74 28 70 2c 20 28  result_text(p, (
5be0: 63 68 61 72 2a 29 7a 42 75 66 2c 20 2d 31 2c 20  char*)zBuf, -1, 
5bf0: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
5c00: 29 3b 0a 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c  );.}.#ifndef SQL
5c10: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 73  ITE_OMIT_UTF16.s
5c20: 74 61 74 69 63 20 76 6f 69 64 20 68 65 78 31 36  tatic void hex16
5c30: 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Func(sqlite3_con
5c40: 74 65 78 74 20 2a 70 2c 20 69 6e 74 20 61 72 67  text *p, int arg
5c50: 63 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  c, sqlite3_value
5c60: 20 2a 2a 61 72 67 76 29 7b 0a 20 20 63 6f 6e 73   **argv){.  cons
5c70: 74 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74  t unsigned short
5c80: 20 69 6e 74 20 2a 7a 3b 0a 20 20 69 6e 74 20 69   int *z;.  int i
5c90: 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 34 30  ;.  char zBuf[40
5ca0: 30 5d 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65  0];.  z = sqlite
5cb0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28 61  3_value_text16(a
5cc0: 72 67 76 5b 30 5d 29 3b 0a 20 20 66 6f 72 28 69  rgv[0]);.  for(i
5cd0: 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 42 75  =0; i<sizeof(zBu
5ce0: 66 29 2f 34 20 2d 20 34 20 26 26 20 7a 5b 69 5d  f)/4 - 4 && z[i]
5cf0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 70 72 69  ; i++){.    spri
5d00: 6e 74 66 28 26 7a 42 75 66 5b 69 2a 34 5d 2c 20  ntf(&zBuf[i*4], 
5d10: 22 25 30 34 78 22 2c 20 7a 5b 69 5d 26 30 78 66  "%04x", z[i]&0xf
5d20: 66 29 3b 0a 20 20 7d 0a 20 20 7a 42 75 66 5b 69  f);.  }.  zBuf[i
5d30: 2a 34 5d 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  *4] = 0;.  sqlit
5d40: 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 70  e3_result_text(p
5d50: 2c 20 28 63 68 61 72 2a 29 7a 42 75 66 2c 20 2d  , (char*)zBuf, -
5d60: 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  1, SQLITE_TRANSI
5d70: 45 4e 54 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  ENT);.}.#endif..
5d80: 2f 2a 0a 2a 2a 20 41 20 73 74 72 75 63 74 75 72  /*.** A structur
5d90: 65 20 69 6e 74 6f 20 77 68 69 63 68 20 74 6f 20  e into which to 
5da0: 61 63 63 75 6d 75 6c 61 74 65 20 74 65 78 74 2e  accumulate text.
5db0: 0a 2a 2f 0a 73 74 72 75 63 74 20 64 73 74 72 20  .*/.struct dstr 
5dc0: 7b 0a 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20  {.  int nAlloc; 
5dd0: 20 2f 2a 20 53 70 61 63 65 20 61 6c 6c 6f 63 61   /* Space alloca
5de0: 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73  ted */.  int nUs
5df0: 65 64 3b 20 20 20 2f 2a 20 53 70 61 63 65 20 75  ed;   /* Space u
5e00: 73 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  sed */.  char *z
5e10: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 73 70 61  ;     /* The spa
5e20: 63 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ce */.};../*.** 
5e30: 41 70 70 65 6e 64 20 74 65 78 74 20 74 6f 20 61  Append text to a
5e40: 20 64 73 74 72 0a 2a 2f 0a 73 74 61 74 69 63 20   dstr.*/.static 
5e50: 76 6f 69 64 20 64 73 74 72 41 70 70 65 6e 64 28  void dstrAppend(
5e60: 73 74 72 75 63 74 20 64 73 74 72 20 2a 70 2c 20  struct dstr *p, 
5e70: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
5e80: 6e 74 20 64 69 76 69 64 65 72 29 7b 0a 20 20 69  nt divider){.  i
5e90: 6e 74 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 29  nt n = strlen(z)
5ea0: 3b 0a 20 20 69 66 28 20 70 2d 3e 6e 55 73 65 64  ;.  if( p->nUsed
5eb0: 20 2b 20 6e 20 2b 20 32 20 3e 20 70 2d 3e 6e 41   + n + 2 > p->nA
5ec0: 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 63 68 61 72  lloc ){.    char
5ed0: 20 2a 7a 4e 65 77 3b 0a 20 20 20 20 70 2d 3e 6e   *zNew;.    p->n
5ee0: 41 6c 6c 6f 63 20 3d 20 70 2d 3e 6e 41 6c 6c 6f  Alloc = p->nAllo
5ef0: 63 2a 32 20 2b 20 6e 20 2b 20 32 30 30 3b 0a 20  c*2 + n + 200;. 
5f00: 20 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65     zNew = sqlite
5f10: 33 5f 72 65 61 6c 6c 6f 63 28 70 2d 3e 7a 2c 20  3_realloc(p->z, 
5f20: 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a 20 20 20 20  p->nAlloc);.    
5f30: 69 66 28 20 7a 4e 65 77 3d 3d 30 20 29 7b 0a 20  if( zNew==0 ){. 
5f40: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
5f50: 65 28 70 2d 3e 7a 29 3b 0a 20 20 20 20 20 20 6d  e(p->z);.      m
5f60: 65 6d 73 65 74 28 70 2c 20 30 2c 20 73 69 7a 65  emset(p, 0, size
5f70: 6f 66 28 2a 70 29 29 3b 0a 20 20 20 20 20 20 72  of(*p));.      r
5f80: 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20  eturn;.    }.   
5f90: 20 70 2d 3e 7a 20 3d 20 7a 4e 65 77 3b 0a 20 20   p->z = zNew;.  
5fa0: 7d 0a 20 20 69 66 28 20 64 69 76 69 64 65 72 20  }.  if( divider 
5fb0: 26 26 20 70 2d 3e 6e 55 73 65 64 3e 30 20 29 7b  && p->nUsed>0 ){
5fc0: 0a 20 20 20 20 70 2d 3e 7a 5b 70 2d 3e 6e 55 73  .    p->z[p->nUs
5fd0: 65 64 2b 2b 5d 20 3d 20 64 69 76 69 64 65 72 3b  ed++] = divider;
5fe0: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70  .  }.  memcpy(&p
5ff0: 2d 3e 7a 5b 70 2d 3e 6e 55 73 65 64 5d 2c 20 7a  ->z[p->nUsed], z
6000: 2c 20 6e 2b 31 29 3b 0a 20 20 70 2d 3e 6e 55 73  , n+1);.  p->nUs
6010: 65 64 20 2b 3d 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a  ed += n;.}../*.*
6020: 2a 20 49 6e 76 6f 6b 65 64 20 66 6f 72 20 65 61  * Invoked for ea
6030: 63 68 20 63 61 6c 6c 62 61 63 6b 20 66 72 6f 6d  ch callback from
6040: 20 73 71 6c 69 74 65 33 45 78 65 63 46 75 6e 63   sqlite3ExecFunc
6050: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 65  .*/.static int e
6060: 78 65 63 46 75 6e 63 43 61 6c 6c 62 61 63 6b 28  xecFuncCallback(
6070: 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74  void *pData, int
6080: 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72   argc, char **ar
6090: 67 76 2c 20 63 68 61 72 20 2a 2a 4e 6f 74 55 73  gv, char **NotUs
60a0: 65 64 29 7b 0a 20 20 73 74 72 75 63 74 20 64 73  ed){.  struct ds
60b0: 74 72 20 2a 70 20 3d 20 28 73 74 72 75 63 74 20  tr *p = (struct 
60c0: 64 73 74 72 2a 29 70 44 61 74 61 3b 0a 20 20 69  dstr*)pData;.  i
60d0: 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  nt i;.  for(i=0;
60e0: 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20   i<argc; i++){. 
60f0: 20 20 20 69 66 28 20 61 72 67 76 5b 69 5d 3d 3d     if( argv[i]==
6100: 30 20 29 7b 0a 20 20 20 20 20 20 64 73 74 72 41  0 ){.      dstrA
6110: 70 70 65 6e 64 28 70 2c 20 22 4e 55 4c 4c 22 2c  ppend(p, "NULL",
6120: 20 27 20 27 29 3b 0a 20 20 20 20 7d 65 6c 73 65   ' ');.    }else
6130: 7b 0a 20 20 20 20 20 20 64 73 74 72 41 70 70 65  {.      dstrAppe
6140: 6e 64 28 70 2c 20 61 72 67 76 5b 69 5d 2c 20 27  nd(p, argv[i], '
6150: 20 27 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   ');.    }.  }. 
6160: 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
6170: 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69  .** Implementati
6180: 6f 6e 20 6f 66 20 74 68 65 20 78 5f 73 71 6c 69  on of the x_sqli
6190: 74 65 5f 65 78 65 63 28 29 20 66 75 6e 63 74 69  te_exec() functi
61a0: 6f 6e 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69  on.  This functi
61b0: 6f 6e 20 74 61 6b 65 73 0a 2a 2a 20 61 20 73 69  on takes.** a si
61c0: 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 20 61 6e  ngle argument an
61d0: 64 20 61 74 74 65 6d 70 74 73 20 74 6f 20 65 78  d attempts to ex
61e0: 65 63 75 74 65 20 74 68 61 74 20 61 72 67 75 6d  ecute that argum
61f0: 65 6e 74 20 61 73 20 53 51 4c 20 63 6f 64 65 2e  ent as SQL code.
6200: 0a 2a 2a 20 54 68 69 73 20 69 73 20 69 6c 6c 65  .** This is ille
6210: 67 61 6c 20 61 6e 64 20 73 68 6f 75 6c 64 20 73  gal and should s
6220: 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 49  et the SQLITE_MI
6230: 53 55 53 45 20 66 6c 61 67 20 6f 6e 20 74 68 65  SUSE flag on the
6240: 20 64 61 74 61 62 61 73 65 2e 0a 2a 2a 0a 2a 2a   database..**.**
6250: 20 32 30 30 34 2d 4a 61 6e 2d 30 37 3a 20 20 57   2004-Jan-07:  W
6260: 65 20 68 61 76 65 20 63 68 61 6e 67 65 64 20 74  e have changed t
6270: 68 69 73 20 74 6f 20 6d 61 6b 65 20 69 74 20 6c  his to make it l
6280: 65 67 61 6c 20 74 6f 20 63 61 6c 6c 20 73 71 6c  egal to call sql
6290: 69 74 65 33 5f 65 78 65 63 28 29 0a 2a 2a 20 66  ite3_exec().** f
62a0: 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 66 75 6e  rom within a fun
62b0: 63 74 69 6f 6e 20 63 61 6c 6c 2e 20 20 0a 2a 2a  ction call.  .**
62c0: 20 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e   .** This routin
62d0: 65 20 73 69 6d 75 6c 61 74 65 73 20 74 68 65 20  e simulates the 
62e0: 65 66 66 65 63 74 20 6f 66 20 68 61 76 69 6e 67  effect of having
62f0: 20 74 77 6f 20 74 68 72 65 61 64 73 20 61 74 74   two threads att
6300: 65 6d 70 74 20 74 6f 0a 2a 2a 20 75 73 65 20 74  empt to.** use t
6310: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
6320: 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
6330: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  e..*/.static voi
6340: 64 20 73 71 6c 69 74 65 33 45 78 65 63 46 75 6e  d sqlite3ExecFun
6350: 63 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  c(.  sqlite3_con
6360: 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20 0a  text *context, .
6370: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 0a 20 20    int argc,  .  
6380: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
6390: 61 72 67 76 0a 29 7b 0a 20 20 73 74 72 75 63 74  argv.){.  struct
63a0: 20 64 73 74 72 20 78 3b 0a 20 20 6d 65 6d 73 65   dstr x;.  memse
63b0: 74 28 26 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28  t(&x, 0, sizeof(
63c0: 78 29 29 3b 0a 20 20 28 76 6f 69 64 29 73 71 6c  x));.  (void)sql
63d0: 69 74 65 33 5f 65 78 65 63 28 28 73 71 6c 69 74  ite3_exec((sqlit
63e0: 65 33 2a 29 73 71 6c 69 74 65 33 5f 75 73 65 72  e3*)sqlite3_user
63f0: 5f 64 61 74 61 28 63 6f 6e 74 65 78 74 29 2c 0a  _data(context),.
6400: 20 20 20 20 20 20 28 63 68 61 72 2a 29 73 71 6c        (char*)sql
6410: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
6420: 61 72 67 76 5b 30 5d 29 2c 0a 20 20 20 20 20 20  argv[0]),.      
6430: 65 78 65 63 46 75 6e 63 43 61 6c 6c 62 61 63 6b  execFuncCallback
6440: 2c 20 26 78 2c 20 30 29 3b 0a 20 20 73 71 6c 69  , &x, 0);.  sqli
6450: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
6460: 63 6f 6e 74 65 78 74 2c 20 78 2e 7a 2c 20 78 2e  context, x.z, x.
6470: 6e 55 73 65 64 2c 20 53 51 4c 49 54 45 5f 54 52  nUsed, SQLITE_TR
6480: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69  ANSIENT);.  sqli
6490: 74 65 33 5f 66 72 65 65 28 78 2e 7a 29 3b 0a 7d  te3_free(x.z);.}
64a0: 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e  ../*.** Implemen
64b0: 74 61 74 69 6f 6e 20 6f 66 20 74 6b 74 32 32 31  tation of tkt221
64c0: 33 66 75 6e 63 28 29 2c 20 61 20 73 63 61 6c 61  3func(), a scala
64d0: 72 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20  r function that 
64e0: 74 61 6b 65 73 20 65 78 61 63 74 6c 79 0a 2a 2a  takes exactly.**
64f0: 20 6f 6e 65 20 61 72 67 75 6d 65 6e 74 2e 20 49   one argument. I
6500: 74 20 68 61 73 20 74 77 6f 20 69 6e 74 65 72 65  t has two intere
6510: 73 74 69 6e 67 20 66 65 61 74 75 72 65 73 3a 0a  sting features:.
6520: 2a 2a 0a 2a 2a 20 2a 20 49 74 20 63 61 6c 6c 73  **.** * It calls
6530: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
6540: 65 78 74 28 29 20 33 20 74 69 6d 65 73 20 6f 6e  ext() 3 times on
6550: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 73 71   the argument sq
6560: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2e 0a 2a 2a  lite3_value*..**
6570: 20 20 20 49 66 20 74 68 65 20 74 68 72 65 65 20     If the three 
6580: 70 6f 69 6e 74 65 72 73 20 72 65 74 75 72 6e 65  pointers returne
6590: 64 20 61 72 65 20 6e 6f 74 20 74 68 65 20 73 61  d are not the sa
65a0: 6d 65 20 61 6e 20 53 51 4c 20 65 72 72 6f 72 20  me an SQL error 
65b0: 69 73 20 72 61 69 73 65 64 2e 0a 2a 2a 0a 2a 2a  is raised..**.**
65c0: 20 2a 20 4f 74 68 65 72 77 69 73 65 20 69 74 20   * Otherwise it 
65d0: 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f  returns a copy o
65e0: 66 20 74 68 65 20 74 65 78 74 20 72 65 70 72 65  f the text repre
65f0: 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 69 74 73  sentation of its
6600: 20 0a 2a 2a 20 20 20 61 72 67 75 6d 65 6e 74 20   .**   argument 
6610: 69 6e 20 73 75 63 68 20 61 20 77 61 79 20 61 73  in such a way as
6620: 20 74 68 65 20 56 44 42 45 20 72 65 70 72 65 73   the VDBE repres
6630: 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 20 4d 65  entation is a Me
6640: 6d 2a 20 63 65 6c 6c 20 0a 2a 2a 20 20 20 77 69  m* cell .**   wi
6650: 74 68 20 74 68 65 20 4d 45 4d 5f 54 65 72 6d 20  th the MEM_Term 
6660: 66 6c 61 67 20 63 6c 65 61 72 2e 20 0a 2a 2a 0a  flag clear. .**.
6670: 2a 2a 20 54 69 63 6b 65 74 20 23 32 32 31 33 20  ** Ticket #2213 
6680: 63 61 6e 20 74 68 65 72 65 66 6f 72 65 20 62 65  can therefore be
6690: 20 74 65 73 74 65 64 20 62 79 20 65 76 61 6c 75   tested by evalu
66a0: 61 74 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77  ating the follow
66b0: 69 6e 67 0a 2a 2a 20 53 51 4c 20 65 78 70 72 65  ing.** SQL expre
66c0: 73 73 69 6f 6e 3a 0a 2a 2a 0a 2a 2a 20 20 20 74  ssion:.**.**   t
66d0: 6b 74 32 32 31 33 66 75 6e 63 28 74 6b 74 32 32  kt2213func(tkt22
66e0: 31 33 66 75 6e 63 28 27 61 20 73 74 72 69 6e 67  13func('a string
66f0: 27 29 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 76  '));.*/.static v
6700: 6f 69 64 20 74 6b 74 32 32 31 33 46 75 6e 63 74  oid tkt2213Funct
6710: 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33 5f 63  ion(.  sqlite3_c
6720: 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c  ontext *context,
6730: 20 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 0a   .  int argc,  .
6740: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
6750: 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20  **argv.){.  int 
6760: 6e 54 65 78 74 3b 0a 20 20 75 6e 73 69 67 6e 65  nText;.  unsigne
6770: 64 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 54  d char const *zT
6780: 65 78 74 31 3b 0a 20 20 75 6e 73 69 67 6e 65 64  ext1;.  unsigned
6790: 20 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 54 65   char const *zTe
67a0: 78 74 32 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20  xt2;.  unsigned 
67b0: 63 68 61 72 20 63 6f 6e 73 74 20 2a 7a 54 65 78  char const *zTex
67c0: 74 33 3b 0a 0a 20 20 6e 54 65 78 74 20 3d 20 73  t3;..  nText = s
67d0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
67e0: 65 73 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 7a  es(argv[0]);.  z
67f0: 54 65 78 74 31 20 3d 20 73 71 6c 69 74 65 33 5f  Text1 = sqlite3_
6800: 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b  value_text(argv[
6810: 30 5d 29 3b 0a 20 20 7a 54 65 78 74 32 20 3d 20  0]);.  zText2 = 
6820: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
6830: 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 7a  xt(argv[0]);.  z
6840: 54 65 78 74 33 20 3d 20 73 71 6c 69 74 65 33 5f  Text3 = sqlite3_
6850: 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b  value_text(argv[
6860: 30 5d 29 3b 0a 0a 20 20 69 66 28 20 7a 54 65 78  0]);..  if( zTex
6870: 74 31 21 3d 7a 54 65 78 74 32 20 7c 7c 20 7a 54  t1!=zText2 || zT
6880: 65 78 74 32 21 3d 7a 54 65 78 74 33 20 29 7b 0a  ext2!=zText3 ){.
6890: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
68a0: 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74  lt_error(context
68b0: 2c 20 22 74 6b 74 32 32 31 33 20 69 73 20 6e 6f  , "tkt2213 is no
68c0: 74 20 66 69 78 65 64 22 2c 20 2d 31 29 3b 0a 20  t fixed", -1);. 
68d0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72   }else{.    char
68e0: 20 2a 7a 43 6f 70 79 20 3d 20 28 63 68 61 72 20   *zCopy = (char 
68f0: 2a 29 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  *)sqlite3_malloc
6900: 28 6e 54 65 78 74 29 3b 0a 20 20 20 20 6d 65 6d  (nText);.    mem
6910: 63 70 79 28 7a 43 6f 70 79 2c 20 7a 54 65 78 74  cpy(zCopy, zText
6920: 31 2c 20 6e 54 65 78 74 29 3b 0a 20 20 20 20 73  1, nText);.    s
6930: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
6940: 78 74 28 63 6f 6e 74 65 78 74 2c 20 7a 43 6f 70  xt(context, zCop
6950: 79 2c 20 6e 54 65 78 74 2c 20 73 71 6c 69 74 65  y, nText, sqlite
6960: 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 7d 0a 0a  3_free);.  }.}..
6970: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
6980: 69 6e 67 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ing SQL function
6990: 20 74 61 6b 65 73 20 34 20 61 72 67 75 6d 65 6e   takes 4 argumen
69a0: 74 73 2e 20 20 54 68 65 20 32 6e 64 20 61 6e 64  ts.  The 2nd and
69b0: 0a 2a 2a 20 34 74 68 20 61 72 67 75 6d 65 6e 74  .** 4th argument
69c0: 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20   must be one of 
69d0: 74 68 65 73 65 20 73 74 72 69 6e 67 73 3a 20 20  these strings:  
69e0: 27 74 65 78 74 27 2c 20 27 74 65 78 74 31 36 27  'text', 'text16'
69f0: 2c 0a 2a 2a 20 6f 72 20 27 62 6c 6f 62 27 20 63  ,.** or 'blob' c
6a00: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
6a10: 41 50 49 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  API functions.**
6a20: 0a 2a 2a 20 20 20 20 20 20 73 71 6c 69 74 65 33  .**      sqlite3
6a30: 5f 76 61 6c 75 65 5f 74 65 78 74 28 29 0a 2a 2a  _value_text().**
6a40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 61        sqlite3_va
6a50: 6c 75 65 5f 74 65 78 74 31 36 28 29 0a 2a 2a 20  lue_text16().** 
6a60: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 61 6c       sqlite3_val
6a70: 75 65 5f 62 6c 6f 62 28 29 0a 2a 2a 0a 2a 2a 20  ue_blob().**.** 
6a80: 54 68 65 20 74 68 69 72 64 20 61 72 67 75 6d 65  The third argume
6a90: 6e 74 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20  nt is a string, 
6aa0: 65 69 74 68 65 72 20 27 62 79 74 65 73 27 20 6f  either 'bytes' o
6ab0: 72 20 27 62 79 74 65 73 31 36 27 20 6f 72 20 27  r 'bytes16' or '
6ac0: 6e 6f 6f 70 27 2c 0a 2a 2a 20 63 6f 72 72 65 73  noop',.** corres
6ad0: 70 6f 6e 64 69 6e 67 20 74 6f 20 41 50 49 73 3a  ponding to APIs:
6ae0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 73 71 6c 69  .**.**      sqli
6af0: 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28  te3_value_bytes(
6b00: 29 0a 2a 2a 20 20 20 20 20 20 73 71 6c 69 74 65  ).**      sqlite
6b10: 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 31 36 28  3_value_bytes16(
6b20: 29 0a 2a 2a 20 20 20 20 20 20 6e 6f 6f 70 0a 2a  ).**      noop.*
6b30: 2a 0a 2a 2a 20 54 68 65 20 41 50 49 73 20 64 65  *.** The APIs de
6b40: 73 69 67 6e 61 74 65 64 20 62 79 20 74 68 65 20  signated by the 
6b50: 32 6e 64 20 74 68 72 6f 75 67 68 20 34 74 68 20  2nd through 4th 
6b60: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 61 70  arguments are ap
6b70: 70 6c 69 65 64 0a 2a 2a 20 74 6f 20 74 68 65 20  plied.** to the 
6b80: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 69  first argument i
6b90: 6e 20 6f 72 64 65 72 2e 20 20 49 66 20 74 68 65  n order.  If the
6ba0: 20 70 6f 69 6e 74 65 72 73 20 72 65 74 75 72 6e   pointers return
6bb0: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 65 63  ed by the.** sec
6bc0: 6f 6e 64 20 61 6e 64 20 66 6f 75 72 74 68 20 61  ond and fourth a
6bd0: 72 65 20 64 69 66 66 65 72 65 6e 74 2c 20 74 68  re different, th
6be0: 69 73 20 72 6f 75 74 69 6e 65 20 72 65 74 75 72  is routine retur
6bf0: 6e 73 20 31 2e 20 20 4f 74 68 65 72 77 69 73 65  ns 1.  Otherwise
6c00: 2c 0a 2a 2a 20 74 68 69 73 20 72 6f 75 74 69 6e  ,.** this routin
6c10: 65 20 72 65 74 75 72 6e 73 20 30 2e 0a 2a 2a 0a  e returns 0..**.
6c20: 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
6c30: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
6c40: 20 74 6f 20 73 65 65 20 77 68 65 6e 20 72 65 74   to see when ret
6c50: 75 72 6e 65 64 20 70 6f 69 6e 74 65 72 73 20 66  urned pointers f
6c60: 72 6f 6d 0a 2a 2a 20 74 68 65 20 5f 74 65 78 74  rom.** the _text
6c70: 28 29 2c 20 5f 74 65 78 74 31 36 28 29 20 61 6e  (), _text16() an
6c80: 64 20 5f 62 6c 6f 62 28 29 20 41 50 49 73 20 62  d _blob() APIs b
6c90: 65 63 6f 6d 65 20 69 6e 76 61 6c 69 64 61 74 65  ecome invalidate
6ca0: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
6cb0: 64 20 70 74 72 43 68 6e 67 46 75 6e 63 74 69 6f  d ptrChngFunctio
6cc0: 6e 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  n(.  sqlite3_con
6cd0: 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 20 0a  text *context, .
6ce0: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 0a 20 20    int argc,  .  
6cf0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
6d00: 61 72 67 76 0a 29 7b 0a 20 20 63 6f 6e 73 74 20  argv.){.  const 
6d10: 76 6f 69 64 20 2a 70 31 2c 20 2a 70 32 3b 0a 20  void *p1, *p2;. 
6d20: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6d   const char *zCm
6d30: 64 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34  d;.  if( argc!=4
6d40: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 7a 43 6d   ) return;.  zCm
6d50: 64 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  d = (const char*
6d60: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
6d70: 65 78 74 28 61 72 67 76 5b 31 5d 29 3b 0a 20 20  ext(argv[1]);.  
6d80: 69 66 28 20 7a 43 6d 64 3d 3d 30 20 29 20 72 65  if( zCmd==0 ) re
6d90: 74 75 72 6e 3b 0a 20 20 69 66 28 20 73 74 72 63  turn;.  if( strc
6da0: 6d 70 28 7a 43 6d 64 2c 22 74 65 78 74 22 29 3d  mp(zCmd,"text")=
6db0: 3d 30 20 29 7b 0a 20 20 20 20 70 31 20 3d 20 28  =0 ){.    p1 = (
6dc0: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 73 71 6c 69  const void*)sqli
6dd0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61  te3_value_text(a
6de0: 72 67 76 5b 30 5d 29 3b 0a 23 69 66 6e 64 65 66  rgv[0]);.#ifndef
6df0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
6e00: 31 36 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73  16.  }else if( s
6e10: 74 72 63 6d 70 28 7a 43 6d 64 2c 20 22 74 65 78  trcmp(zCmd, "tex
6e20: 74 31 36 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  t16")==0 ){.    
6e30: 70 31 20 3d 20 28 63 6f 6e 73 74 20 76 6f 69 64  p1 = (const void
6e40: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
6e50: 74 65 78 74 31 36 28 61 72 67 76 5b 30 5d 29 3b  text16(argv[0]);
6e60: 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20  .#endif.  }else 
6e70: 69 66 28 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c  if( strcmp(zCmd,
6e80: 20 22 62 6c 6f 62 22 29 3d 3d 30 20 29 7b 0a 20   "blob")==0 ){. 
6e90: 20 20 20 70 31 20 3d 20 28 63 6f 6e 73 74 20 76     p1 = (const v
6ea0: 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  oid*)sqlite3_val
6eb0: 75 65 5f 62 6c 6f 62 28 61 72 67 76 5b 30 5d 29  ue_blob(argv[0])
6ec0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
6ed0: 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 7a 43 6d  eturn;.  }.  zCm
6ee0: 64 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  d = (const char*
6ef0: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
6f00: 65 78 74 28 61 72 67 76 5b 32 5d 29 3b 0a 20 20  ext(argv[2]);.  
6f10: 69 66 28 20 7a 43 6d 64 3d 3d 30 20 29 20 72 65  if( zCmd==0 ) re
6f20: 74 75 72 6e 3b 0a 20 20 69 66 28 20 73 74 72 63  turn;.  if( strc
6f30: 6d 70 28 7a 43 6d 64 2c 22 62 79 74 65 73 22 29  mp(zCmd,"bytes")
6f40: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
6f50: 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 61  e3_value_bytes(a
6f60: 72 67 76 5b 30 5d 29 3b 0a 23 69 66 6e 64 65 66  rgv[0]);.#ifndef
6f70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
6f80: 31 36 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73  16.  }else if( s
6f90: 74 72 63 6d 70 28 7a 43 6d 64 2c 20 22 62 79 74  trcmp(zCmd, "byt
6fa0: 65 73 31 36 22 29 3d 3d 30 20 29 7b 0a 20 20 20  es16")==0 ){.   
6fb0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62   sqlite3_value_b
6fc0: 79 74 65 73 31 36 28 61 72 67 76 5b 30 5d 29 3b  ytes16(argv[0]);
6fd0: 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20  .#endif.  }else 
6fe0: 69 66 28 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c  if( strcmp(zCmd,
6ff0: 20 22 6e 6f 6f 70 22 29 3d 3d 30 20 29 7b 0a 20   "noop")==0 ){. 
7000: 20 20 20 2f 2a 20 64 6f 20 6e 6f 74 68 69 6e 67     /* do nothing
7010: 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
7020: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 7a   return;.  }.  z
7030: 43 6d 64 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  Cmd = (const cha
7040: 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
7050: 5f 74 65 78 74 28 61 72 67 76 5b 33 5d 29 3b 0a  _text(argv[3]);.
7060: 20 20 69 66 28 20 7a 43 6d 64 3d 3d 30 20 29 20    if( zCmd==0 ) 
7070: 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 73 74  return;.  if( st
7080: 72 63 6d 70 28 7a 43 6d 64 2c 22 74 65 78 74 22  rcmp(zCmd,"text"
7090: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 32 20 3d  )==0 ){.    p2 =
70a0: 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 29 73 71   (const void*)sq
70b0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
70c0: 28 61 72 67 76 5b 30 5d 29 3b 0a 23 69 66 6e 64  (argv[0]);.#ifnd
70d0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
70e0: 54 46 31 36 0a 20 20 7d 65 6c 73 65 20 69 66 28  TF16.  }else if(
70f0: 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c 20 22 74   strcmp(zCmd, "t
7100: 65 78 74 31 36 22 29 3d 3d 30 20 29 7b 0a 20 20  ext16")==0 ){.  
7110: 20 20 70 32 20 3d 20 28 63 6f 6e 73 74 20 76 6f    p2 = (const vo
7120: 69 64 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  id*)sqlite3_valu
7130: 65 5f 74 65 78 74 31 36 28 61 72 67 76 5b 30 5d  e_text16(argv[0]
7140: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73  );.#endif.  }els
7150: 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 43 6d  e if( strcmp(zCm
7160: 64 2c 20 22 62 6c 6f 62 22 29 3d 3d 30 20 29 7b  d, "blob")==0 ){
7170: 0a 20 20 20 20 70 32 20 3d 20 28 63 6f 6e 73 74  .    p2 = (const
7180: 20 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 76   void*)sqlite3_v
7190: 61 6c 75 65 5f 62 6c 6f 62 28 61 72 67 76 5b 30  alue_blob(argv[0
71a0: 5d 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ]);.  }else{.   
71b0: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20 73   return;.  }.  s
71c0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e  qlite3_result_in
71d0: 74 28 63 6f 6e 74 65 78 74 2c 20 70 31 21 3d 70  t(context, p1!=p
71e0: 32 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73  2);.}.../*.** Us
71f0: 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 74 65 73  age:  sqlite_tes
7200: 74 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  t_create_functio
7210: 6e 20 44 42 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20  n DB.**.** Call 
7220: 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72 65 61  the sqlite3_crea
7230: 74 65 5f 66 75 6e 63 74 69 6f 6e 20 41 50 49 20  te_function API 
7240: 6f 6e 20 74 68 65 20 67 69 76 65 6e 20 64 61 74  on the given dat
7250: 61 62 61 73 65 20 69 6e 20 6f 72 64 65 72 0a 2a  abase in order.*
7260: 2a 20 74 6f 20 63 72 65 61 74 65 20 61 20 66 75  * to create a fu
7270: 6e 63 74 69 6f 6e 20 6e 61 6d 65 64 20 22 78 5f  nction named "x_
7280: 63 6f 61 6c 65 73 63 65 22 2e 20 20 54 68 69 73  coalesce".  This
7290: 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 74   function does t
72a0: 68 65 20 73 61 6d 65 20 74 68 69 6e 67 0a 2a 2a  he same thing.**
72b0: 20 61 73 20 74 68 65 20 22 63 6f 61 6c 65 73 63   as the "coalesc
72c0: 65 22 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  e" function.  Th
72d0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 61 6c 73 6f  is function also
72e0: 20 72 65 67 69 73 74 65 72 73 20 61 6e 20 53 51   registers an SQ
72f0: 4c 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6e 61  L function.** na
7300: 6d 65 64 20 22 78 5f 73 71 6c 69 74 65 5f 65 78  med "x_sqlite_ex
7310: 65 63 22 20 74 68 61 74 20 69 6e 76 6f 6b 65 73  ec" that invokes
7320: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2e   sqlite3_exec().
7330: 20 20 49 6e 76 6f 6b 69 6e 67 20 73 71 6c 69 74    Invoking sqlit
7340: 65 33 5f 65 78 65 63 28 29 0a 2a 2a 20 69 6e 20  e3_exec().** in 
7350: 74 68 69 73 20 77 61 79 20 69 73 20 69 6c 6c 65  this way is ille
7360: 67 61 6c 20 72 65 63 75 72 73 69 6f 6e 20 61 6e  gal recursion an
7370: 64 20 73 68 6f 75 6c 64 20 72 61 69 73 65 20 61  d should raise a
7380: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
7390: 65 72 72 6f 72 2e 0a 2a 2a 20 54 68 65 20 65 66  error..** The ef
73a0: 66 65 63 74 20 69 73 20 73 69 6d 69 6c 61 72 20  fect is similar 
73b0: 74 6f 20 74 72 79 69 6e 67 20 74 6f 20 75 73 65  to trying to use
73c0: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
73d0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 72  se connection fr
73e0: 6f 6d 0a 2a 2a 20 74 77 6f 20 74 68 72 65 61 64  om.** two thread
73f0: 73 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  s at the same ti
7400: 6d 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6f 72  me..**.** The or
7410: 69 67 69 6e 61 6c 20 6d 6f 74 69 76 61 74 69 6f  iginal motivatio
7420: 6e 20 66 6f 72 20 74 68 69 73 20 72 6f 75 74 69  n for this routi
7430: 6e 65 20 77 61 73 20 74 6f 20 62 65 20 61 62 6c  ne was to be abl
7440: 65 20 74 6f 20 63 61 6c 6c 20 74 68 65 0a 2a 2a  e to call the.**
7450: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
7460: 66 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f  function functio
7470: 6e 20 77 68 69 6c 65 20 61 20 71 75 65 72 79 20  n while a query 
7480: 69 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 69  is in progress i
7490: 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 74 65  n order.** to te
74a0: 73 74 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 49  st the SQLITE_MI
74b0: 53 55 53 45 20 64 65 74 65 63 74 69 6f 6e 20 6c  SUSE detection l
74c0: 6f 67 69 63 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ogic..*/.static 
74d0: 69 6e 74 20 74 65 73 74 5f 63 72 65 61 74 65 5f  int test_create_
74e0: 66 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64  function(.  void
74f0: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
7500: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
7510: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
7520: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
7530: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
7540: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
7550: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
7560: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
7570: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
7580: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
7590: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
75a0: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
75b0: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73  ){.  int rc;.  s
75c0: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 0a 20 20 69  qlite3 *db;..  i
75d0: 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20  f( argc!=2 ){.  
75e0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
75f0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
7600: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
7610: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
7620: 2c 0a 20 20 20 20 20 20 20 22 20 44 42 5c 22 22  ,.       " DB\""
7630: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
7640: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
7650: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
7660: 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
7670: 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
7680: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
7690: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
76a0: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
76b0: 22 78 5f 63 6f 61 6c 65 73 63 65 22 2c 20 2d 31  "x_coalesce", -1
76c0: 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c  , SQLITE_ANY, 0,
76d0: 20 0a 20 20 20 20 20 20 20 20 74 31 5f 69 66 6e   .        t1_ifn
76e0: 75 6c 6c 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a  ullFunc, 0, 0);.
76f0: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
7700: 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
7710: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
7720: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 68 65 78  unction(db, "hex
7730: 38 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 41 4e  8", 1, SQLITE_AN
7740: 59 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20  Y, 0, .         
7750: 20 68 65 78 38 46 75 6e 63 2c 20 30 2c 20 30 29   hex8Func, 0, 0)
7760: 3b 0a 20 20 7d 0a 23 69 66 6e 64 65 66 20 53 51  ;.  }.#ifndef SQ
7770: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
7780: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
7790: 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
77a0: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66  sqlite3_create_f
77b0: 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 68 65 78  unction(db, "hex
77c0: 31 36 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 41  16", 1, SQLITE_A
77d0: 4e 59 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20  NY, 0, .        
77e0: 20 20 68 65 78 31 36 46 75 6e 63 2c 20 30 2c 20    hex16Func, 0, 
77f0: 30 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20  0);.  }.#endif. 
7800: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
7810: 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  OK ){.    rc = s
7820: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
7830: 6e 63 74 69 6f 6e 28 64 62 2c 20 22 74 6b 74 32  nction(db, "tkt2
7840: 32 31 33 66 75 6e 63 22 2c 20 31 2c 20 53 51 4c  213func", 1, SQL
7850: 49 54 45 5f 41 4e 59 2c 20 30 2c 20 0a 20 20 20  ITE_ANY, 0, .   
7860: 20 20 20 20 20 20 20 74 6b 74 32 32 31 33 46 75         tkt2213Fu
7870: 6e 63 74 69 6f 6e 2c 20 30 2c 20 30 29 3b 0a 20  nction, 0, 0);. 
7880: 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
7890: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
78a0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
78b0: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22  e_function(db, "
78c0: 70 6f 69 6e 74 65 72 5f 63 68 61 6e 67 65 22 2c  pointer_change",
78d0: 20 34 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20   4, SQLITE_ANY, 
78e0: 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 70 74  0, .          pt
78f0: 72 43 68 6e 67 46 75 6e 63 74 69 6f 6e 2c 20 30  rChngFunction, 0
7900: 2c 20 30 29 3b 0a 20 20 7d 0a 0a 23 69 66 6e 64  , 0);.  }..#ifnd
7910: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
7920: 54 46 31 36 0a 20 20 2f 2a 20 55 73 65 20 74 68  TF16.  /* Use th
7930: 65 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  e sqlite3_create
7940: 5f 66 75 6e 63 74 69 6f 6e 31 36 28 29 20 41 50  _function16() AP
7950: 49 20 68 65 72 65 2e 20 4d 61 69 6e 6c 79 20 66  I here. Mainly f
7960: 6f 72 20 66 75 6e 2c 20 62 75 74 20 61 6c 73 6f  or fun, but also
7970: 20 0a 20 20 2a 2a 20 62 65 63 61 75 73 65 20 69   .  ** because i
7980: 74 20 69 73 20 6e 6f 74 20 74 65 73 74 65 64 20  t is not tested 
7990: 61 6e 79 77 68 65 72 65 20 65 6c 73 65 2e 20 2a  anywhere else. *
79a0: 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
79b0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 63 6f 6e  TE_OK ){.    con
79c0: 73 74 20 76 6f 69 64 20 2a 7a 55 74 66 31 36 3b  st void *zUtf16;
79d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  .    sqlite3_val
79e0: 75 65 20 2a 70 56 61 6c 3b 0a 20 20 20 20 73 71  ue *pVal;.    sq
79f0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
7a00: 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  r(db->mutex);.  
7a10: 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33    pVal = sqlite3
7a20: 56 61 6c 75 65 4e 65 77 28 64 62 29 3b 0a 20 20  ValueNew(db);.  
7a30: 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
7a40: 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 22  tStr(pVal, -1, "
7a50: 78 5f 73 71 6c 69 74 65 5f 65 78 65 63 22 2c 20  x_sqlite_exec", 
7a60: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
7a70: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
7a80: 20 7a 55 74 66 31 36 20 3d 20 73 71 6c 69 74 65   zUtf16 = sqlite
7a90: 33 56 61 6c 75 65 54 65 78 74 28 70 56 61 6c 2c  3ValueText(pVal,
7aa0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
7ab0: 49 56 45 29 3b 0a 20 20 20 20 69 66 28 20 64 62  IVE);.    if( db
7ac0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
7ad0: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
7ae0: 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d  ITE_NOMEM;.    }
7af0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
7b00: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
7b10: 66 75 6e 63 74 69 6f 6e 31 36 28 64 62 2c 20 7a  function16(db, z
7b20: 55 74 66 31 36 2c 20 0a 20 20 20 20 20 20 20 20  Utf16, .        
7b30: 20 20 20 20 20 20 20 20 31 2c 20 53 51 4c 49 54          1, SQLIT
7b40: 45 5f 55 54 46 31 36 2c 20 64 62 2c 20 73 71 6c  E_UTF16, db, sql
7b50: 69 74 65 33 45 78 65 63 46 75 6e 63 2c 20 30 2c  ite3ExecFunc, 0,
7b60: 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73   0);.    }.    s
7b70: 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
7b80: 70 56 61 6c 29 3b 0a 20 20 20 20 73 71 6c 69 74  pVal);.    sqlit
7b90: 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76 65 28 64  e3_mutex_leave(d
7ba0: 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 7d 0a 23  b->mutex);.  }.#
7bb0: 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 73 71 6c  endif..  if( sql
7bc0: 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
7bd0: 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20  interp, db, rc) 
7be0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
7bf0: 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73  OR;.  Tcl_SetRes
7c00: 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
7c10: 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28  r *)t1ErrorName(
7c20: 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  rc), 0);.  retur
7c30: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
7c40: 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 69  ** Routines to i
7c50: 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 78 5f 63  mplement the x_c
7c60: 6f 75 6e 74 28 29 20 61 67 67 72 65 67 61 74 65  ount() aggregate
7c70: 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
7c80: 20 78 5f 63 6f 75 6e 74 28 29 20 63 6f 75 6e 74   x_count() count
7c90: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
7ca0: 6e 6f 6e 2d 6e 75 6c 6c 20 61 72 67 75 6d 65 6e  non-null argumen
7cb0: 74 73 2e 20 20 42 75 74 20 74 68 65 72 65 20 61  ts.  But there a
7cc0: 72 65 0a 2a 2a 20 73 6f 6d 65 20 74 77 69 73 74  re.** some twist
7cd0: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 70 75  s for testing pu
7ce0: 72 70 6f 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  rposes..**.** If
7cf0: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
7d00: 20 78 5f 63 6f 75 6e 74 28 29 20 69 73 20 34 30   x_count() is 40
7d10: 20 74 68 65 6e 20 61 20 55 54 46 2d 38 20 65 72   then a UTF-8 er
7d20: 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 0a  ror is reported.
7d30: 2a 2a 20 6f 6e 20 74 68 65 20 73 74 65 70 20 66  ** on the step f
7d40: 75 6e 63 74 69 6f 6e 2e 20 20 49 66 20 78 5f 63  unction.  If x_c
7d50: 6f 75 6e 74 28 34 31 29 20 69 73 20 73 65 65 6e  ount(41) is seen
7d60: 2c 20 74 68 65 6e 20 61 20 55 54 46 2d 31 36 20  , then a UTF-16 
7d70: 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 70 6f  error.** is repo
7d80: 72 74 65 64 20 6f 6e 20 74 68 65 20 73 74 65 70  rted on the step
7d90: 20 66 75 6e 63 74 69 6f 6e 2e 20 20 49 66 20 74   function.  If t
7da0: 68 65 20 74 6f 74 61 6c 20 63 6f 75 6e 74 20 69  he total count i
7db0: 73 20 34 32 2c 20 74 68 65 6e 0a 2a 2a 20 61 20  s 42, then.** a 
7dc0: 55 54 46 2d 38 20 65 72 72 6f 72 20 69 73 20 72  UTF-8 error is r
7dd0: 65 70 6f 72 74 65 64 20 6f 6e 20 74 68 65 20 66  eported on the f
7de0: 69 6e 61 6c 69 7a 65 20 66 75 6e 63 74 69 6f 6e  inalize function
7df0: 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
7e00: 75 63 74 20 74 31 43 6f 75 6e 74 43 74 78 20 74  uct t1CountCtx t
7e10: 31 43 6f 75 6e 74 43 74 78 3b 0a 73 74 72 75 63  1CountCtx;.struc
7e20: 74 20 74 31 43 6f 75 6e 74 43 74 78 20 7b 0a 20  t t1CountCtx {. 
7e30: 20 69 6e 74 20 6e 3b 0a 7d 3b 0a 73 74 61 74 69   int n;.};.stati
7e40: 63 20 76 6f 69 64 20 74 31 43 6f 75 6e 74 53 74  c void t1CountSt
7e50: 65 70 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  ep(.  sqlite3_co
7e60: 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0a  ntext *context,.
7e70: 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 73 71    int argc,.  sq
7e80: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
7e90: 67 76 0a 29 7b 0a 20 20 74 31 43 6f 75 6e 74 43  gv.){.  t1CountC
7ea0: 74 78 20 2a 70 3b 0a 20 20 70 20 3d 20 73 71 6c  tx *p;.  p = sql
7eb0: 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63  ite3_aggregate_c
7ec0: 6f 6e 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20  ontext(context, 
7ed0: 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 20 20 69  sizeof(*p));.  i
7ee0: 66 28 20 28 61 72 67 63 3d 3d 30 20 7c 7c 20 53  f( (argc==0 || S
7ef0: 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d 73 71 6c 69  QLITE_NULL!=sqli
7f00: 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 61  te3_value_type(a
7f10: 72 67 76 5b 30 5d 29 20 29 20 26 26 20 70 20 29  rgv[0]) ) && p )
7f20: 7b 0a 20 20 20 20 70 2d 3e 6e 2b 2b 3b 0a 20 20  {.    p->n++;.  
7f30: 7d 0a 20 20 69 66 28 20 61 72 67 63 3e 30 20 29  }.  if( argc>0 )
7f40: 7b 0a 20 20 20 20 69 6e 74 20 76 20 3d 20 73 71  {.    int v = sq
7f50: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28  lite3_value_int(
7f60: 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20 69 66  argv[0]);.    if
7f70: 28 20 76 3d 3d 34 30 20 29 7b 0a 20 20 20 20 20  ( v==40 ){.     
7f80: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
7f90: 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 22  error(context, "
7fa0: 76 61 6c 75 65 20 6f 66 20 34 30 20 68 61 6e 64  value of 40 hand
7fb0: 65 64 20 74 6f 20 78 5f 63 6f 75 6e 74 22 2c 20  ed to x_count", 
7fc0: 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  -1);.#ifndef SQL
7fd0: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
7fe0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 76 3d 3d     }else if( v==
7ff0: 34 31 20 29 7b 0a 20 20 20 20 20 20 63 6f 6e 73  41 ){.      cons
8000: 74 20 63 68 61 72 20 7a 55 74 66 31 36 45 72 72  t char zUtf16Err
8010: 4d 73 67 5b 5d 20 3d 20 7b 20 30 2c 20 30 78 36  Msg[] = { 0, 0x6
8020: 31 2c 20 30 2c 20 30 78 36 32 2c 20 30 2c 20 30  1, 0, 0x62, 0, 0
8030: 78 36 33 2c 20 30 2c 20 30 2c 20 30 7d 3b 0a 20  x63, 0, 0, 0};. 
8040: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
8050: 75 6c 74 5f 65 72 72 6f 72 31 36 28 63 6f 6e 74  ult_error16(cont
8060: 65 78 74 2c 20 26 7a 55 74 66 31 36 45 72 72 4d  ext, &zUtf16ErrM
8070: 73 67 5b 31 2d 53 51 4c 49 54 45 5f 42 49 47 45  sg[1-SQLITE_BIGE
8080: 4e 44 49 41 4e 5d 2c 20 2d 31 29 3b 0a 23 65 6e  NDIAN], -1);.#en
8090: 64 69 66 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 20  dif.    }.  }.} 
80a0: 20 20 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74    .static void t
80b0: 31 43 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 28 73  1CountFinalize(s
80c0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
80d0: 63 6f 6e 74 65 78 74 29 7b 0a 20 20 74 31 43 6f  context){.  t1Co
80e0: 75 6e 74 43 74 78 20 2a 70 3b 0a 20 20 70 20 3d  untCtx *p;.  p =
80f0: 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61   sqlite3_aggrega
8100: 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65  te_context(conte
8110: 78 74 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b  xt, sizeof(*p));
8120: 0a 20 20 69 66 28 20 70 20 29 7b 0a 20 20 20 20  .  if( p ){.    
8130: 69 66 28 20 70 2d 3e 6e 3d 3d 34 32 20 29 7b 0a  if( p->n==42 ){.
8140: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
8150: 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65  sult_error(conte
8160: 78 74 2c 20 22 78 5f 63 6f 75 6e 74 20 74 6f 74  xt, "x_count tot
8170: 61 6c 73 20 74 6f 20 34 32 22 2c 20 2d 31 29 3b  als to 42", -1);
8180: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
8190: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
81a0: 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 70 20  _int(context, p 
81b0: 3f 20 70 2d 3e 6e 20 3a 20 30 29 3b 0a 20 20 20  ? p->n : 0);.   
81c0: 20 7d 0a 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63   }.  }.}..static
81d0: 20 76 6f 69 64 20 6c 65 67 61 63 79 43 6f 75 6e   void legacyCoun
81e0: 74 53 74 65 70 28 0a 20 20 73 71 6c 69 74 65 33  tStep(.  sqlite3
81f0: 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78  _context *contex
8200: 74 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20  t,.  int argc,. 
8210: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
8220: 2a 61 72 67 76 0a 29 7b 0a 20 20 2f 2a 20 6e 6f  *argv.){.  /* no
8230: 2d 6f 70 20 2a 2f 0a 7d 0a 0a 23 69 66 6e 64 65  -op */.}..#ifnde
8240: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  f SQLITE_OMIT_DE
8250: 50 52 45 43 41 54 45 44 0a 73 74 61 74 69 63 20  PRECATED.static 
8260: 76 6f 69 64 20 6c 65 67 61 63 79 43 6f 75 6e 74  void legacyCount
8270: 46 69 6e 61 6c 69 7a 65 28 73 71 6c 69 74 65 33  Finalize(sqlite3
8280: 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78  _context *contex
8290: 74 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  t){.  sqlite3_re
82a0: 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74  sult_int(context
82b0: 2c 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  , sqlite3_aggreg
82c0: 61 74 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65 78  ate_count(contex
82d0: 74 29 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  t));.}.#endif../
82e0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
82f0: 69 74 65 33 5f 63 72 65 61 74 65 5f 61 67 67 72  ite3_create_aggr
8300: 65 67 61 74 65 20 44 42 0a 2a 2a 0a 2a 2a 20 43  egate DB.**.** C
8310: 61 6c 6c 20 74 68 65 20 73 71 6c 69 74 65 33 5f  all the sqlite3_
8320: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20  create_function 
8330: 41 50 49 20 6f 6e 20 74 68 65 20 67 69 76 65 6e  API on the given
8340: 20 64 61 74 61 62 61 73 65 20 69 6e 20 6f 72 64   database in ord
8350: 65 72 0a 2a 2a 20 74 6f 20 63 72 65 61 74 65 20  er.** to create 
8360: 61 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64  a function named
8370: 20 22 78 5f 63 6f 75 6e 74 22 2e 20 20 54 68 69   "x_count".  Thi
8380: 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 69  s function is si
8390: 6d 69 6c 61 72 0a 2a 2a 20 74 6f 20 74 68 65 20  milar.** to the 
83a0: 62 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 29  built-in count()
83b0: 20 66 75 6e 63 74 69 6f 6e 2c 20 77 69 74 68 20   function, with 
83c0: 61 20 66 65 77 20 73 70 65 63 69 61 6c 20 71 75  a few special qu
83d0: 69 72 6b 73 0a 2a 2a 20 66 6f 72 20 74 65 73 74  irks.** for test
83e0: 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ing the sqlite3_
83f0: 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 29 20 41  result_error() A
8400: 50 49 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6f  PIs..**.** The o
8410: 72 69 67 69 6e 61 6c 20 6d 6f 74 69 76 61 74 69  riginal motivati
8420: 6f 6e 20 66 6f 72 20 74 68 69 73 20 72 6f 75 74  on for this rout
8430: 69 6e 65 20 77 61 73 20 74 6f 20 62 65 20 61 62  ine was to be ab
8440: 6c 65 20 74 6f 20 63 61 6c 6c 20 74 68 65 0a 2a  le to call the.*
8450: 2a 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  * sqlite3_create
8460: 5f 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74  _aggregate funct
8470: 69 6f 6e 20 77 68 69 6c 65 20 61 20 71 75 65 72  ion while a quer
8480: 79 20 69 73 20 69 6e 20 70 72 6f 67 72 65 73 73  y is in progress
8490: 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20   in order.** to 
84a0: 74 65 73 74 20 74 68 65 20 53 51 4c 49 54 45 5f  test the SQLITE_
84b0: 4d 49 53 55 53 45 20 64 65 74 65 63 74 69 6f 6e  MISUSE detection
84c0: 20 6c 6f 67 69 63 2e 20 20 53 65 65 20 6d 69 73   logic.  See mis
84d0: 75 73 65 2e 74 65 73 74 2e 0a 2a 2a 0a 2a 2a 20  use.test..**.** 
84e0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 77 61 73  This routine was
84f0: 20 6c 61 74 65 72 20 65 78 74 65 6e 64 65 64 20   later extended 
8500: 74 6f 20 74 65 73 74 20 74 68 65 20 75 73 65 20  to test the use 
8510: 6f 66 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  of sqlite3_resul
8520: 74 5f 65 72 72 6f 72 28 29 0a 2a 2a 20 77 69 74  t_error().** wit
8530: 68 69 6e 20 61 67 67 72 65 67 61 74 65 20 66 75  hin aggregate fu
8540: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 4c  nctions..**.** L
8550: 61 74 65 72 3a 20 49 74 20 69 73 20 6e 6f 77 20  ater: It is now 
8560: 61 6c 73 6f 20 65 78 74 65 6e 64 65 64 20 74 6f  also extended to
8570: 20 72 65 67 69 73 74 65 72 20 74 68 65 20 61 67   register the ag
8580: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
8590: 0a 2a 2a 20 22 6c 65 67 61 63 79 5f 63 6f 75 6e  .** "legacy_coun
85a0: 74 28 29 22 20 77 69 74 68 20 74 68 65 20 73 75  t()" with the su
85b0: 70 70 6c 69 65 64 20 64 61 74 61 62 61 73 65 20  pplied database 
85c0: 68 61 6e 64 6c 65 2e 20 54 68 69 73 20 69 73 20  handle. This is 
85d0: 75 73 65 64 0a 2a 2a 20 74 6f 20 74 65 73 74 20  used.** to test 
85e0: 74 68 65 20 64 65 70 72 65 63 61 74 65 64 20 73  the deprecated s
85f0: 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61 74 65  qlite3_aggregate
8600: 5f 63 6f 75 6e 74 28 29 20 41 50 49 2e 0a 2a 2f  _count() API..*/
8610: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
8620: 5f 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74  _create_aggregat
8630: 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  e(.  void *NotUs
8640: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
8650: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
8660: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
8670: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
8680: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
8690: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
86a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
86b0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
86c0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
86d0: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
86e0: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
86f0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
8700: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74  lite3 *db;.  int
8710: 20 72 63 3b 0a 20 20 69 66 28 20 61 72 67 63 21   rc;.  if( argc!
8720: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
8730: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
8740: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
8750: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
8760: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
8770: 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22 2c 20   " FILENAME\"", 
8780: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
8790: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
87a0: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
87b0: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
87c0: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
87d0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
87e0: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
87f0: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 78  _function(db, "x
8800: 5f 63 6f 75 6e 74 22 2c 20 30 2c 20 53 51 4c 49  _count", 0, SQLI
8810: 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 2c 0a 20  TE_UTF8, 0, 0,. 
8820: 20 20 20 20 20 74 31 43 6f 75 6e 74 53 74 65 70       t1CountStep
8830: 2c 74 31 43 6f 75 6e 74 46 69 6e 61 6c 69 7a 65  ,t1CountFinalize
8840: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
8850: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
8860: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
8870: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22  e_function(db, "
8880: 78 5f 63 6f 75 6e 74 22 2c 20 31 2c 20 53 51 4c  x_count", 1, SQL
8890: 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 2c 0a  ITE_UTF8, 0, 0,.
88a0: 20 20 20 20 20 20 20 20 74 31 43 6f 75 6e 74 53          t1CountS
88b0: 74 65 70 2c 74 31 43 6f 75 6e 74 46 69 6e 61 6c  tep,t1CountFinal
88c0: 69 7a 65 29 3b 0a 20 20 7d 0a 23 69 66 6e 64 65  ize);.  }.#ifnde
88d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  f SQLITE_OMIT_DE
88e0: 50 52 45 43 41 54 45 44 0a 20 20 69 66 28 20 72  PRECATED.  if( r
88f0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
8900: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
8910: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
8920: 28 64 62 2c 20 22 6c 65 67 61 63 79 5f 63 6f 75  (db, "legacy_cou
8930: 6e 74 22 2c 20 30 2c 20 53 51 4c 49 54 45 5f 41  nt", 0, SQLITE_A
8940: 4e 59 2c 20 30 2c 20 30 2c 0a 20 20 20 20 20 20  NY, 0, 0,.      
8950: 20 20 6c 65 67 61 63 79 43 6f 75 6e 74 53 74 65    legacyCountSte
8960: 70 2c 20 6c 65 67 61 63 79 43 6f 75 6e 74 46 69  p, legacyCountFi
8970: 6e 61 6c 69 7a 65 0a 20 20 20 20 29 3b 0a 20 20  nalize.    );.  
8980: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 73  }.#endif.  if( s
8990: 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
89a0: 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63  e(interp, db, rc
89b0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
89c0: 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 52  RROR;.  Tcl_SetR
89d0: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
89e0: 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d  har *)t1ErrorNam
89f0: 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74  e(rc), 0);.  ret
8a00: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a  urn TCL_OK;.}...
8a10: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 70 72  /*.** Usage:  pr
8a20: 69 6e 74 66 20 54 45 58 54 0a 2a 2a 0a 2a 2a 20  intf TEXT.**.** 
8a30: 53 65 6e 64 20 6f 75 74 70 75 74 20 74 6f 20 70  Send output to p
8a40: 72 69 6e 74 66 2e 20 20 55 73 65 20 74 68 69 73  rintf.  Use this
8a50: 20 72 61 74 68 65 72 20 74 68 61 6e 20 70 75 74   rather than put
8a60: 73 20 74 6f 20 6d 65 72 67 65 20 74 68 65 20 6f  s to merge the o
8a70: 75 74 70 75 74 0a 2a 2a 20 69 6e 20 74 68 65 20  utput.** in the 
8a80: 63 6f 72 72 65 63 74 20 73 65 71 75 65 6e 63 65  correct sequence
8a90: 20 77 69 74 68 20 64 65 62 75 67 67 69 6e 67 20   with debugging 
8aa0: 70 72 69 6e 74 66 73 20 69 6e 73 65 72 74 65 64  printfs inserted
8ab0: 20 69 6e 74 6f 20 43 20 63 6f 64 65 2e 0a 2a 2a   into C code..**
8ac0: 20 50 75 74 73 20 75 73 65 73 20 61 20 73 65 70   Puts uses a sep
8ad0: 61 72 61 74 65 20 62 75 66 66 65 72 20 61 6e 64  arate buffer and
8ae0: 20 64 65 62 75 67 67 69 6e 67 20 73 74 61 74 65   debugging state
8af0: 6d 65 6e 74 73 20 77 69 6c 6c 20 62 65 20 6f 75  ments will be ou
8b00: 74 20 6f 66 0a 2a 2a 20 73 65 71 75 65 6e 63 65  t of.** sequence
8b10: 20 69 66 20 69 74 20 69 73 20 75 73 65 64 2e 0a   if it is used..
8b20: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
8b30: 73 74 5f 70 72 69 6e 74 66 28 0a 20 20 76 6f 69  st_printf(.  voi
8b40: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
8b50: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
8b60: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
8b70: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
8b80: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
8b90: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
8ba0: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
8bb0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
8bc0: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
8bd0: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
8be0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
8bf0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
8c00: 0a 29 7b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  .){.  if( argc!=
8c10: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
8c20: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
8c30: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
8c40: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
8c50: 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
8c60: 22 20 54 45 58 54 5c 22 22 2c 20 30 29 3b 0a 20  " TEXT\"", 0);. 
8c70: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
8c80: 52 4f 52 3b 0a 20 20 7d 0a 20 20 70 72 69 6e 74  ROR;.  }.  print
8c90: 66 28 22 25 73 5c 6e 22 2c 20 61 72 67 76 5b 31  f("%s\n", argv[1
8ca0: 5d 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ]);.  return TCL
8cb0: 5f 4f 4b 3b 0a 7d 0a 0a 0a 0a 2f 2a 0a 2a 2a 20  _OK;.}..../*.** 
8cc0: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
8cd0: 6d 70 72 69 6e 74 66 5f 69 6e 74 20 46 4f 52 4d  mprintf_int FORM
8ce0: 41 54 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47  AT INTEGER INTEG
8cf0: 45 52 20 49 4e 54 45 47 45 52 0a 2a 2a 0a 2a 2a  ER INTEGER.**.**
8d00: 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69   Call mprintf wi
8d10: 74 68 20 74 68 72 65 65 20 69 6e 74 65 67 65 72  th three integer
8d20: 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74   arguments.*/.st
8d30: 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33  atic int sqlite3
8d40: 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 28 0a 20 20  _mprintf_int(.  
8d50: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
8d60: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
8d70: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
8d80: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
8d90: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
8da0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
8db0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
8dc0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
8dd0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
8de0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
8df0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
8e00: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
8e10: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33   */.){.  int a[3
8e20: 5d 2c 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 3b  ], i;.  char *z;
8e30: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 35 20 29  .  if( argc!=5 )
8e40: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
8e50: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
8e60: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
8e70: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
8e80: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
8e90: 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 49 4e  ORMAT INT INT IN
8ea0: 54 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  T\"", 0);.    re
8eb0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
8ec0: 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69    }.  for(i=2; i
8ed0: 3c 35 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  <5; i++){.    if
8ee0: 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74  ( Tcl_GetInt(int
8ef0: 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26 61  erp, argv[i], &a
8f00: 5b 69 2d 32 5d 29 20 29 20 72 65 74 75 72 6e 20  [i-2]) ) return 
8f10: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
8f20: 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72   z = sqlite3_mpr
8f30: 69 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b  intf(argv[1], a[
8f40: 30 5d 2c 20 61 5b 31 5d 2c 20 61 5b 32 5d 29 3b  0], a[1], a[2]);
8f50: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
8f60: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30  ult(interp, z, 0
8f70: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
8f80: 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  e(z);.  return T
8f90: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
8fa0: 49 66 20 7a 4e 75 6d 20 72 65 70 72 65 73 65 6e  If zNum represen
8fb0: 74 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68  ts an integer th
8fc0: 61 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 36  at will fit in 6
8fd0: 34 2d 62 69 74 73 2c 20 74 68 65 6e 20 73 65 74  4-bits, then set
8fe0: 0a 2a 2a 20 2a 70 56 61 6c 75 65 20 74 6f 20 74  .** *pValue to t
8ff0: 68 61 74 20 69 6e 74 65 67 65 72 20 61 6e 64 20  hat integer and 
9000: 72 65 74 75 72 6e 20 74 72 75 65 2e 20 20 4f 74  return true.  Ot
9010: 68 65 72 77 69 73 65 20 72 65 74 75 72 6e 20 66  herwise return f
9020: 61 6c 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  alse..*/.static 
9030: 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e  int sqlite3GetIn
9040: 74 36 34 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  t64(const char *
9050: 7a 4e 75 6d 2c 20 69 36 34 20 2a 70 56 61 6c 75  zNum, i64 *pValu
9060: 65 29 7b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  e){.  if( sqlite
9070: 33 46 69 74 73 49 6e 36 34 42 69 74 73 28 7a 4e  3FitsIn64Bits(zN
9080: 75 6d 2c 20 30 29 20 29 7b 0a 20 20 20 20 73 71  um, 0) ){.    sq
9090: 6c 69 74 65 33 41 74 6f 69 36 34 28 7a 4e 75 6d  lite3Atoi64(zNum
90a0: 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 20 20 72  , pValue);.    r
90b0: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72  eturn 1;.  }.  r
90c0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 0;.}../*.*
90d0: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
90e0: 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34 20  3_mprintf_int64 
90f0: 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52 20 49  FORMAT INTEGER I
9100: 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 0a 2a  NTEGER INTEGER.*
9110: 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74  *.** Call mprint
9120: 66 20 77 69 74 68 20 74 68 72 65 65 20 36 34 2d  f with three 64-
9130: 62 69 74 20 69 6e 74 65 67 65 72 20 61 72 67 75  bit integer argu
9140: 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61 74 69 63 20  ments.*/.static 
9150: 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  int sqlite3_mpri
9160: 6e 74 66 5f 69 6e 74 36 34 28 0a 20 20 76 6f 69  ntf_int64(.  voi
9170: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
9180: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
9190: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
91a0: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
91b0: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
91c0: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
91d0: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
91e0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
91f0: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
9200: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
9210: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
9220: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
9230: 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  .){.  int i;.  s
9240: 71 6c 69 74 65 5f 69 6e 74 36 34 20 61 5b 33 5d  qlite_int64 a[3]
9250: 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  ;.  char *z;.  i
9260: 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20 20  f( argc!=5 ){.  
9270: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
9280: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
9290: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
92a0: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
92b0: 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41  ,.       " FORMA
92c0: 54 20 49 4e 54 20 49 4e 54 20 49 4e 54 5c 22 22  T INT INT INT\""
92d0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
92e0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
92f0: 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 35 3b 20    for(i=2; i<5; 
9300: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 21 73  i++){.    if( !s
9310: 71 6c 69 74 65 33 47 65 74 49 6e 74 36 34 28 61  qlite3GetInt64(a
9320: 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29  rgv[i], &a[i-2])
9330: 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41 70   ){.      Tcl_Ap
9340: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
9350: 70 2c 20 22 61 72 67 75 6d 65 6e 74 20 69 73 20  p, "argument is 
9360: 6e 6f 74 20 61 20 76 61 6c 69 64 20 36 34 2d 62  not a valid 64-b
9370: 69 74 20 69 6e 74 65 67 65 72 22 2c 20 30 29 3b  it integer", 0);
9380: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43  .      return TC
9390: 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20  L_ERROR;.    }. 
93a0: 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33   }.  z = sqlite3
93b0: 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d  _mprintf(argv[1]
93c0: 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 5b  , a[0], a[1], a[
93d0: 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  2]);.  Tcl_Appen
93e0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
93f0: 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  z, 0);.  sqlite3
9400: 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75  _free(z);.  retu
9410: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
9420: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
9430: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 6c 6f 6e 67  te3_mprintf_long
9440: 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52 20   FORMAT INTEGER 
9450: 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 0a  INTEGER INTEGER.
9460: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
9470: 74 66 20 77 69 74 68 20 74 68 72 65 65 20 6c 6f  tf with three lo
9480: 6e 67 20 69 6e 74 65 67 65 72 20 61 72 67 75 6d  ng integer argum
9490: 65 6e 74 73 2e 20 20 20 54 68 69 73 20 6d 69 67  ents.   This mig
94a0: 68 74 20 62 65 20 74 68 65 0a 2a 2a 20 73 61 6d  ht be the.** sam
94b0: 65 20 61 73 20 73 71 6c 69 74 65 33 5f 6d 70 72  e as sqlite3_mpr
94c0: 69 6e 74 66 5f 69 6e 74 20 6f 72 20 73 71 6c 69  intf_int or sqli
94d0: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36  te3_mprintf_int6
94e0: 34 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 0a  4, depending on.
94f0: 2a 2a 20 70 6c 61 74 66 6f 72 6d 2e 0a 2a 2f 0a  ** platform..*/.
9500: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
9510: 65 33 5f 6d 70 72 69 6e 74 66 5f 6c 6f 6e 67 28  e3_mprintf_long(
9520: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
9530: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
9540: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
9550: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
9560: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
9570: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
9580: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
9590: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
95a0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
95b0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
95c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
95d0: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
95e0: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ent */.){.  int 
95f0: 69 3b 0a 20 20 6c 6f 6e 67 20 69 6e 74 20 61 5b  i;.  long int a[
9600: 33 5d 3b 0a 20 20 69 6e 74 20 62 5b 33 5d 3b 0a  3];.  int b[3];.
9610: 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28    char *z;.  if(
9620: 20 61 72 67 63 21 3d 35 20 29 7b 0a 20 20 20 20   argc!=5 ){.    
9630: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
9640: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
9650: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
9660: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a  e \"", argv[0],.
9670: 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20         " FORMAT 
9680: 49 4e 54 20 49 4e 54 20 49 4e 54 5c 22 22 2c 20  INT INT INT\"", 
9690: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
96a0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
96b0: 66 6f 72 28 69 3d 32 3b 20 69 3c 35 3b 20 69 2b  for(i=2; i<5; i+
96c0: 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f  +){.    if( Tcl_
96d0: 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61  GetInt(interp, a
96e0: 72 67 76 5b 69 5d 2c 20 26 62 5b 69 2d 32 5d 29  rgv[i], &b[i-2])
96f0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
9700: 52 4f 52 3b 0a 20 20 20 20 61 5b 69 2d 32 5d 20  ROR;.    a[i-2] 
9710: 3d 20 28 6c 6f 6e 67 20 69 6e 74 29 62 5b 69 2d  = (long int)b[i-
9720: 32 5d 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71  2];.  }.  z = sq
9730: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72  lite3_mprintf(ar
9740: 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31  gv[1], a[0], a[1
9750: 5d 2c 20 61 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f  ], a[2]);.  Tcl_
9760: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
9770: 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71  erp, z, 0);.  sq
9780: 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20  lite3_free(z);. 
9790: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
97a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
97b0: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
97c0: 5f 73 74 72 20 46 4f 52 4d 41 54 20 49 4e 54 45  _str FORMAT INTE
97d0: 47 45 52 20 49 4e 54 45 47 45 52 20 53 54 52 49  GER INTEGER STRI
97e0: 4e 47 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70  NG.**.** Call mp
97f0: 72 69 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69  rintf with two i
9800: 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73  nteger arguments
9810: 20 61 6e 64 20 6f 6e 65 20 73 74 72 69 6e 67 20   and one string 
9820: 61 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74  argument.*/.stat
9830: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d  ic int sqlite3_m
9840: 70 72 69 6e 74 66 5f 73 74 72 28 0a 20 20 76 6f  printf_str(.  vo
9850: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
9860: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
9870: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
9880: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
9890: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
98a0: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
98b0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
98c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
98d0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
98e0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
98f0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
9900: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
9910: 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c  /.){.  int a[3],
9920: 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20   i;.  char *z;. 
9930: 20 69 66 28 20 61 72 67 63 3c 34 20 7c 7c 20 61   if( argc<4 || a
9940: 72 67 63 3e 35 20 29 7b 0a 20 20 20 20 54 63 6c  rgc>5 ){.    Tcl
9950: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
9960: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
9970: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
9980: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
9990: 20 20 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54      " FORMAT INT
99a0: 20 49 4e 54 20 3f 53 54 52 49 4e 47 3f 5c 22 22   INT ?STRING?\""
99b0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
99c0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
99d0: 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 34 3b 20    for(i=2; i<4; 
99e0: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63  i++){.    if( Tc
99f0: 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c  l_GetInt(interp,
9a00: 20 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32   argv[i], &a[i-2
9a10: 5d 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  ]) ) return TCL_
9a20: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d  ERROR;.  }.  z =
9a30: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
9a40: 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20  (argv[1], a[0], 
9a50: 61 5b 31 5d 2c 20 61 72 67 63 3e 34 20 3f 20 61  a[1], argc>4 ? a
9a60: 72 67 76 5b 34 5d 20 3a 20 4e 55 4c 4c 29 3b 0a  rgv[4] : NULL);.
9a70: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
9a80: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29  lt(interp, z, 0)
9a90: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
9aa0: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  (z);.  return TC
9ab0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
9ac0: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 73  sage:  sqlite3_s
9ad0: 6e 70 72 69 6e 74 66 5f 73 74 72 20 49 4e 54 45  nprintf_str INTE
9ae0: 47 45 52 20 46 4f 52 4d 41 54 20 49 4e 54 45 47  GER FORMAT INTEG
9af0: 45 52 20 49 4e 54 45 47 45 52 20 53 54 52 49 4e  ER INTEGER STRIN
9b00: 47 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72  G.**.** Call mpr
9b10: 69 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e  intf with two in
9b20: 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20  teger arguments 
9b30: 61 6e 64 20 6f 6e 65 20 73 74 72 69 6e 67 20 61  and one string a
9b40: 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69  rgument.*/.stati
9b50: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6e  c int sqlite3_sn
9b60: 70 72 69 6e 74 66 5f 73 74 72 28 0a 20 20 76 6f  printf_str(.  vo
9b70: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
9b80: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
9b90: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
9ba0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
9bb0: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
9bc0: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
9bd0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
9be0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9bf0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
9c00: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
9c10: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
9c20: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
9c30: 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c  /.){.  int a[3],
9c40: 20 69 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 63   i;.  int n;.  c
9c50: 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72  har *z;.  if( ar
9c60: 67 63 3c 35 20 7c 7c 20 61 72 67 63 3e 36 20 29  gc<5 || argc>6 )
9c70: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
9c80: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
9c90: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
9ca0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
9cb0: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 49  v[0],.       " I
9cc0: 4e 54 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e  NT FORMAT INT IN
9cd0: 54 20 3f 53 54 52 49 4e 47 3f 5c 22 22 2c 20 30  T ?STRING?\"", 0
9ce0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
9cf0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
9d00: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e  f( Tcl_GetInt(in
9d10: 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
9d20: 6e 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  n) ) return TCL_
9d30: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 6e 3c 30  ERROR;.  if( n<0
9d40: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
9d50: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
9d60: 20 22 4e 20 6d 75 73 74 20 62 65 20 6e 6f 6e 2d   "N must be non-
9d70: 6e 65 67 61 74 69 76 65 22 2c 20 30 29 3b 0a 20  negative", 0);. 
9d80: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
9d90: 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69  ROR;.  }.  for(i
9da0: 3d 33 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a 20  =3; i<5; i++){. 
9db0: 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e     if( Tcl_GetIn
9dc0: 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69  t(interp, argv[i
9dd0: 5d 2c 20 26 61 5b 69 2d 33 5d 29 20 29 20 72 65  ], &a[i-3]) ) re
9de0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
9df0: 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65    }.  z = sqlite
9e00: 33 5f 6d 61 6c 6c 6f 63 28 20 6e 2b 31 20 29 3b  3_malloc( n+1 );
9e10: 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  .  sqlite3_snpri
9e20: 6e 74 66 28 6e 2c 20 7a 2c 20 61 72 67 76 5b 32  ntf(n, z, argv[2
9e30: 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61  ], a[0], a[1], a
9e40: 72 67 63 3e 34 20 3f 20 61 72 67 76 5b 35 5d 20  rgc>4 ? argv[5] 
9e50: 3a 20 4e 55 4c 4c 29 3b 0a 20 20 54 63 6c 5f 41  : NULL);.  Tcl_A
9e60: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
9e70: 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c  rp, z, 0);.  sql
9e80: 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20  ite3_free(z);.  
9e90: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
9ea0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
9eb0: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
9ec0: 64 6f 75 62 6c 65 20 46 4f 52 4d 41 54 20 49 4e  double FORMAT IN
9ed0: 54 45 47 45 52 20 49 4e 54 45 47 45 52 20 44 4f  TEGER INTEGER DO
9ee0: 55 42 4c 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20  UBLE.**.** Call 
9ef0: 6d 70 72 69 6e 74 66 20 77 69 74 68 20 74 77 6f  mprintf with two
9f00: 20 69 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e   integer argumen
9f10: 74 73 20 61 6e 64 20 6f 6e 65 20 64 6f 75 62 6c  ts and one doubl
9f20: 65 20 61 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74  e argument.*/.st
9f30: 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33  atic int sqlite3
9f40: 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 28  _mprintf_double(
9f50: 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64  .  void *NotUsed
9f60: 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
9f70: 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
9f80: 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
9f90: 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
9fa0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
9fb0: 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20   int argc,      
9fc0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
9fd0: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
9fe0: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20  /.  char **argv 
9ff0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
a000: 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d  xt of each argum
a010: 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  ent */.){.  int 
a020: 61 5b 33 5d 2c 20 69 3b 0a 20 20 64 6f 75 62 6c  a[3], i;.  doubl
a030: 65 20 72 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  e r;.  char *z;.
a040: 20 20 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b    if( argc!=5 ){
a050: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
a060: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
a070: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
a080: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
a090: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f  [0],.       " FO
a0a0: 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 44 4f 55  RMAT INT INT DOU
a0b0: 42 4c 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  BLE\"", 0);.    
a0c0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
a0d0: 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b  ;.  }.  for(i=2;
a0e0: 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<4; i++){.    
a0f0: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69  if( Tcl_GetInt(i
a100: 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20  nterp, argv[i], 
a110: 26 61 5b 69 2d 32 5d 29 20 29 20 72 65 74 75 72  &a[i-2]) ) retur
a120: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
a130: 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 44 6f  .  if( Tcl_GetDo
a140: 75 62 6c 65 28 69 6e 74 65 72 70 2c 20 61 72 67  uble(interp, arg
a150: 76 5b 34 5d 2c 20 26 72 29 20 29 20 72 65 74 75  v[4], &r) ) retu
a160: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
a170: 7a 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  z = sqlite3_mpri
a180: 6e 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30  ntf(argv[1], a[0
a190: 5d 2c 20 61 5b 31 5d 2c 20 72 29 3b 0a 20 20 54  ], a[1], r);.  T
a1a0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
a1b0: 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20  interp, z, 0);. 
a1c0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29   sqlite3_free(z)
a1d0: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
a1e0: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
a1f0: 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  e:  sqlite3_mpri
a200: 6e 74 66 5f 73 63 61 6c 65 64 20 46 4f 52 4d 41  ntf_scaled FORMA
a210: 54 20 44 4f 55 42 4c 45 20 44 4f 55 42 4c 45 0a  T DOUBLE DOUBLE.
a220: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
a230: 74 66 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  tf with a single
a240: 20 64 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74   double argument
a250: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 70 72   which is the pr
a260: 6f 64 75 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20  oduct of the.** 
a270: 74 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 67 69  two arguments gi
a280: 76 65 6e 20 61 62 6f 76 65 2e 20 20 54 68 69 73  ven above.  This
a290: 20 69 73 20 75 73 65 64 20 74 6f 20 67 65 6e 65   is used to gene
a2a0: 72 61 74 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e  rate overflow an
a2b0: 64 20 75 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64  d underflow.** d
a2c0: 6f 75 62 6c 65 73 20 74 6f 20 74 65 73 74 20 74  oubles to test t
a2d0: 68 61 74 20 74 68 65 79 20 61 72 65 20 63 6f 6e  hat they are con
a2e0: 76 65 72 74 65 64 20 70 72 6f 70 65 72 6c 79 2e  verted properly.
a2f0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
a300: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73  qlite3_mprintf_s
a310: 63 61 6c 65 64 28 0a 20 20 76 6f 69 64 20 2a 4e  caled(.  void *N
a320: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
a330: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
a340: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
a350: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
a360: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
a370: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
a380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a390: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
a3a0: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
a3b0: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
a3c0: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
a3d0: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
a3e0: 20 20 69 6e 74 20 69 3b 0a 20 20 64 6f 75 62 6c    int i;.  doubl
a3f0: 65 20 72 5b 32 5d 3b 0a 20 20 63 68 61 72 20 2a  e r[2];.  char *
a400: 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34  z;.  if( argc!=4
a410: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
a420: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
a430: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
a440: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61  should be \"", a
a450: 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22  rgv[0],.       "
a460: 20 46 4f 52 4d 41 54 20 44 4f 55 42 4c 45 20 44   FORMAT DOUBLE D
a470: 4f 55 42 4c 45 5c 22 22 2c 20 30 29 3b 0a 20 20  OUBLE\"", 0);.  
a480: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
a490: 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d  OR;.  }.  for(i=
a4a0: 32 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20  2; i<4; i++){.  
a4b0: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75    if( Tcl_GetDou
a4c0: 62 6c 65 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ble(interp, argv
a4d0: 5b 69 5d 2c 20 26 72 5b 69 2d 32 5d 29 20 29 20  [i], &r[i-2]) ) 
a4e0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
a4f0: 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69  ;.  }.  z = sqli
a500: 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76  te3_mprintf(argv
a510: 5b 31 5d 2c 20 72 5b 30 5d 2a 72 5b 31 5d 29 3b  [1], r[0]*r[1]);
a520: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
a530: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30  ult(interp, z, 0
a540: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
a550: 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  e(z);.  return T
a560: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
a570: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
a580: 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 20  mprintf_stronly 
a590: 46 4f 52 4d 41 54 20 53 54 52 49 4e 47 0a 2a 2a  FORMAT STRING.**
a5a0: 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66  .** Call mprintf
a5b0: 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64   with a single d
a5c0: 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77  ouble argument w
a5d0: 68 69 63 68 20 69 73 20 74 68 65 20 70 72 6f 64  hich is the prod
a5e0: 75 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77  uct of the.** tw
a5f0: 6f 20 61 72 67 75 6d 65 6e 74 73 20 67 69 76 65  o arguments give
a600: 6e 20 61 62 6f 76 65 2e 20 20 54 68 69 73 20 69  n above.  This i
a610: 73 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  s used to genera
a620: 74 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20  te overflow and 
a630: 75 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75  underflow.** dou
a640: 62 6c 65 73 20 74 6f 20 74 65 73 74 20 74 68 61  bles to test tha
a650: 74 20 74 68 65 79 20 61 72 65 20 63 6f 6e 76 65  t they are conve
a660: 72 74 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a  rted properly..*
a670: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
a680: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72  ite3_mprintf_str
a690: 6f 6e 6c 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  only(.  void *No
a6a0: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
a6b0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
a6c0: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
a6d0: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
a6e0: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
a6f0: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
a700: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a710: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
a720: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
a730: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
a740: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
a750: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
a760: 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20   char *z;.  if( 
a770: 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  argc!=3 ){.    T
a780: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
a790: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
a7a0: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
a7b0: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
a7c0: 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20 53        " FORMAT S
a7d0: 54 52 49 4e 47 5c 22 22 2c 20 30 29 3b 0a 20 20  TRING\"", 0);.  
a7e0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
a7f0: 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71  OR;.  }.  z = sq
a800: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72  lite3_mprintf(ar
a810: 67 76 5b 31 5d 2c 20 61 72 67 76 5b 32 5d 29 3b  gv[1], argv[2]);
a820: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
a830: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30  ult(interp, z, 0
a840: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
a850: 65 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  e(z);.  return T
a860: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
a870: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
a880: 6d 70 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c  mprintf_hexdoubl
a890: 65 20 46 4f 52 4d 41 54 20 48 45 58 0a 2a 2a 0a  e FORMAT HEX.**.
a8a0: 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20  ** Call mprintf 
a8b0: 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f  with a single do
a8c0: 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68  uble argument wh
a8d0: 69 63 68 20 69 73 20 64 65 72 69 76 65 64 20 66  ich is derived f
a8e0: 72 6f 6d 20 74 68 65 0a 2a 2a 20 68 65 78 61 64  rom the.** hexad
a8f0: 65 63 69 6d 61 6c 20 65 6e 63 6f 64 69 6e 67 20  ecimal encoding 
a900: 6f 66 20 61 6e 20 49 45 45 45 20 64 6f 75 62 6c  of an IEEE doubl
a910: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
a920: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
a930: 5f 68 65 78 64 6f 75 62 6c 65 28 0a 20 20 76 6f  _hexdouble(.  vo
a940: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
a950: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
a960: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
a970: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
a980: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
a990: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
a9a0: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
a9b0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
a9c0: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
a9d0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
a9e0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
a9f0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
aa00: 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  /.){.  char *z;.
aa10: 20 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20 75 6e    double r;.  un
aa20: 73 69 67 6e 65 64 20 69 6e 74 20 78 31 2c 20 78  signed int x1, x
aa30: 32 3b 0a 20 20 73 71 6c 69 74 65 5f 75 69 6e 74  2;.  sqlite_uint
aa40: 36 34 20 64 3b 0a 20 20 69 66 28 20 61 72 67 63  64 d;.  if( argc
aa50: 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=3 ){.    Tcl_A
aa60: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
aa70: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
aa80: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
aa90: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
aaa0: 20 20 22 20 46 4f 52 4d 41 54 20 53 54 52 49 4e    " FORMAT STRIN
aab0: 47 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  G\"", 0);.    re
aac0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
aad0: 20 20 7d 0a 20 20 69 66 28 20 73 73 63 61 6e 66    }.  if( sscanf
aae0: 28 61 72 67 76 5b 32 5d 2c 20 22 25 30 38 78 25  (argv[2], "%08x%
aaf0: 30 38 78 22 2c 20 26 78 32 2c 20 26 78 31 29 21  08x", &x2, &x1)!
ab00: 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
ab10: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
ab20: 70 2c 20 22 32 6e 64 20 61 72 67 75 6d 65 6e 74  p, "2nd argument
ab30: 20 73 68 6f 75 6c 64 20 62 65 20 31 36 2d 63 68   should be 16-ch
ab40: 61 72 61 63 74 65 72 73 20 6f 66 20 68 65 78 22  aracters of hex"
ab50: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
ab60: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
ab70: 20 20 64 20 3d 20 78 32 3b 0a 20 20 64 20 3d 20    d = x2;.  d = 
ab80: 28 64 3c 3c 33 32 29 20 2b 20 78 31 3b 0a 20 20  (d<<32) + x1;.  
ab90: 6d 65 6d 63 70 79 28 26 72 2c 20 26 64 2c 20 73  memcpy(&r, &d, s
aba0: 69 7a 65 6f 66 28 72 29 29 3b 0a 20 20 7a 20 3d  izeof(r));.  z =
abb0: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
abc0: 28 61 72 67 76 5b 31 5d 2c 20 72 29 3b 0a 20 20  (argv[1], r);.  
abd0: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
abe0: 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a  (interp, z, 0);.
abf0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
ac00: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
ac10: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
ac20: 67 65 3a 20 73 71 6c 69 74 65 33 5f 65 6e 61 62  ge: sqlite3_enab
ac30: 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 20  le_shared_cache 
ac40: 3f 42 4f 4f 4c 45 41 4e 3f 0a 2a 2a 0a 2a 2f 0a  ?BOOLEAN?.**.*/.
ac50: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
ac60: 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
ac70: 43 41 43 48 45 29 0a 73 74 61 74 69 63 20 69 6e  CACHE).static in
ac80: 74 20 74 65 73 74 5f 65 6e 61 62 6c 65 5f 73 68  t test_enable_sh
ac90: 61 72 65 64 28 0a 20 20 43 6c 69 65 6e 74 44 61  ared(.  ClientDa
aca0: 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f  ta clientData, /
acb0: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c  * Pointer to sql
acc0: 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20  ite3_enable_XXX 
acd0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63  function */.  Tc
ace0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
acf0: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
ad00: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
ad10: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
ad20: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f  mmand */.  int o
ad30: 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  bjc,            
ad40: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
ad50: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63  rguments */.  Tc
ad60: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
ad70: 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20  v[]  /* Command 
ad80: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a  arguments */.){.
ad90: 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
ada0: 65 6e 61 62 6c 65 3b 0a 20 20 69 6e 74 20 72 65  enable;.  int re
adb0: 74 20 3d 20 30 3b 0a 0a 20 20 69 66 28 20 6f 62  t = 0;..  if( ob
adc0: 6a 63 21 3d 32 20 26 26 20 6f 62 6a 63 21 3d 31  jc!=2 && objc!=1
add0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
ade0: 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
adf0: 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 42 4f 4f 4c   1, objv, "?BOOL
ae00: 45 41 4e 3f 22 29 3b 0a 20 20 20 20 72 65 74 75  EAN?");.    retu
ae10: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
ae20: 7d 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65  }.  ret = sqlite
ae30: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 68  3GlobalConfig.sh
ae40: 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64  aredCacheEnabled
ae50: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d 32  ;..  if( objc==2
ae60: 20 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f   ){.    if( Tcl_
ae70: 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62  GetBooleanFromOb
ae80: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31  j(interp, objv[1
ae90: 5d 2c 20 26 65 6e 61 62 6c 65 29 20 29 7b 0a 20  ], &enable) ){. 
aea0: 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f       return TCL_
aeb0: 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20  ERROR;.    }.   
aec0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 6e   rc = sqlite3_en
aed0: 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68  able_shared_cach
aee0: 65 28 65 6e 61 62 6c 65 29 3b 0a 20 20 20 20 69  e(enable);.    i
aef0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
af00: 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53 65   ){.      Tcl_Se
af10: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
af20: 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45  (char *)sqlite3E
af30: 72 72 53 74 72 28 72 63 29 2c 20 54 43 4c 5f 53  rrStr(rc), TCL_S
af40: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 72 65  TATIC);.      re
af50: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
af60: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 54 63 6c 5f      }.  }.  Tcl_
af70: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
af80: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c  erp, Tcl_NewBool
af90: 65 61 6e 4f 62 6a 28 72 65 74 29 29 3b 0a 20 20  eanObj(ret));.  
afa0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
afb0: 0a 23 65 6e 64 69 66 0a 0a 0a 0a 2f 2a 0a 2a 2a  .#endif..../*.**
afc0: 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
afd0: 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f  extended_result_
afe0: 63 6f 64 65 73 20 20 20 44 42 20 20 20 20 42 4f  codes   DB    BO
aff0: 4f 4c 45 41 4e 0a 2a 2a 0a 2a 2f 0a 73 74 61 74  OLEAN.**.*/.stat
b000: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 78 74 65  ic int test_exte
b010: 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65  nded_result_code
b020: 73 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20  s(.  ClientData 
b030: 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50  clientData, /* P
b040: 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ointer to sqlite
b050: 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e  3_enable_XXX fun
b060: 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49  ction */.  Tcl_I
b070: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
b080: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
b090: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
b0a0: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
b0b0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63  nd */.  int objc
b0c0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
b0d0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
b0e0: 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f  ments */.  Tcl_O
b0f0: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
b100: 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67    /* Command arg
b110: 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69  uments */.){.  i
b120: 6e 74 20 65 6e 61 62 6c 65 3b 0a 20 20 73 71 6c  nt enable;.  sql
b130: 69 74 65 33 20 2a 64 62 3b 0a 0a 20 20 69 66 28  ite3 *db;..  if(
b140: 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20   objc!=3 ){.    
b150: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
b160: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
b170: 2c 20 22 44 42 20 42 4f 4f 4c 45 41 4e 22 29 3b  , "DB BOOLEAN");
b180: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
b190: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
b1a0: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
b1b0: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
b1c0: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
b1d0: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
b1e0: 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
b1f0: 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f  _GetBooleanFromO
b200: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
b210: 32 5d 2c 20 26 65 6e 61 62 6c 65 29 20 29 20 72  2], &enable) ) r
b220: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
b230: 0a 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e  .  sqlite3_exten
b240: 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73  ded_result_codes
b250: 28 64 62 2c 20 65 6e 61 62 6c 65 29 3b 0a 20 20  (db, enable);.  
b260: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
b270: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
b280: 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f  qlite3_libversio
b290: 6e 5f 6e 75 6d 62 65 72 0a 2a 2a 0a 2a 2f 0a 73  n_number.**.*/.s
b2a0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6c  tatic int test_l
b2b0: 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72  ibversion_number
b2c0: 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63  (.  ClientData c
b2d0: 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f  lientData, /* Po
b2e0: 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  inter to sqlite3
b2f0: 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63  _enable_XXX func
b300: 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  tion */.  Tcl_In
b310: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
b320: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
b330: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
b340: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
b350: 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  d */.  int objc,
b360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b370: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
b380: 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62  ents */.  Tcl_Ob
b390: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20  j *CONST objv[] 
b3a0: 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
b3b0: 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63  ments */.){.  Tc
b3c0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
b3d0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
b3e0: 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 6c 69 62  tObj(sqlite3_lib
b3f0: 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29  version_number()
b400: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
b410: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
b420: 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 74 61 62  age: sqlite3_tab
b430: 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
b440: 74 61 20 44 42 20 64 62 6e 61 6d 65 20 74 62 6c  ta DB dbname tbl
b450: 6e 61 6d 65 20 63 6f 6c 6e 61 6d 65 0a 2a 2a 0a  name colname.**.
b460: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
b470: 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d  _ENABLE_COLUMN_M
b480: 45 54 41 44 41 54 41 0a 73 74 61 74 69 63 20 69  ETADATA.static i
b490: 6e 74 20 74 65 73 74 5f 74 61 62 6c 65 5f 63 6f  nt test_table_co
b4a0: 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20  lumn_metadata(. 
b4b0: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
b4c0: 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74  ntData, /* Point
b4d0: 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e  er to sqlite3_en
b4e0: 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f  able_XXX functio
b4f0: 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  n */.  Tcl_Inter
b500: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
b510: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
b520: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
b530: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
b540: 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
b550: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
b560: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
b570: 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
b580: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
b590: 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
b5a0: 74 73 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  ts */.){.  sqlit
b5b0: 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20  e3 *db;.  const 
b5c0: 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 63 6f 6e  char *zDb;.  con
b5d0: 73 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 0a 20  st char *zTbl;. 
b5e0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f   const char *zCo
b5f0: 6c 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 54  l;.  int rc;.  T
b600: 63 6c 5f 4f 62 6a 20 2a 70 52 65 74 3b 0a 0a 20  cl_Obj *pRet;.. 
b610: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61   const char *zDa
b620: 74 61 74 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20  tatype;.  const 
b630: 63 68 61 72 20 2a 7a 43 6f 6c 6c 73 65 71 3b 0a  char *zCollseq;.
b640: 20 20 69 6e 74 20 6e 6f 74 6e 75 6c 6c 3b 0a 20    int notnull;. 
b650: 20 69 6e 74 20 70 72 69 6d 61 72 79 6b 65 79 3b   int primarykey;
b660: 0a 20 20 69 6e 74 20 61 75 74 6f 69 6e 63 72 65  .  int autoincre
b670: 6d 65 6e 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  ment;..  if( obj
b680: 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=5 ){.    Tcl_
b690: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
b6a0: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44  erp, 1, objv, "D
b6b0: 42 20 64 62 6e 61 6d 65 20 74 62 6c 6e 61 6d 65  B dbname tblname
b6c0: 20 63 6f 6c 6e 61 6d 65 22 29 3b 0a 20 20 20 20   colname");.    
b6d0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
b6e0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
b6f0: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
b700: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
b710: 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20  bjv[1]), &db) ) 
b720: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
b730: 3b 0a 20 20 7a 44 62 20 3d 20 54 63 6c 5f 47 65  ;.  zDb = Tcl_Ge
b740: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29  tString(objv[2])
b750: 3b 0a 20 20 7a 54 62 6c 20 3d 20 54 63 6c 5f 47  ;.  zTbl = Tcl_G
b760: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d  etString(objv[3]
b770: 29 3b 0a 20 20 7a 43 6f 6c 20 3d 20 54 63 6c 5f  );.  zCol = Tcl_
b780: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 34  GetString(objv[4
b790: 5d 29 3b 0a 0a 20 20 69 66 28 20 73 74 72 6c 65  ]);..  if( strle
b7a0: 6e 28 7a 44 62 29 3d 3d 30 20 29 20 7a 44 62 20  n(zDb)==0 ) zDb 
b7b0: 3d 20 30 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  = 0;..  rc = sql
b7c0: 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d  ite3_table_colum
b7d0: 6e 5f 6d 65 74 61 64 61 74 61 28 64 62 2c 20 7a  n_metadata(db, z
b7e0: 44 62 2c 20 7a 54 62 6c 2c 20 7a 43 6f 6c 2c 20  Db, zTbl, zCol, 
b7f0: 0a 20 20 20 20 20 20 26 7a 44 61 74 61 74 79 70  .      &zDatatyp
b800: 65 2c 20 26 7a 43 6f 6c 6c 73 65 71 2c 20 26 6e  e, &zCollseq, &n
b810: 6f 74 6e 75 6c 6c 2c 20 26 70 72 69 6d 61 72 79  otnull, &primary
b820: 6b 65 79 2c 20 26 61 75 74 6f 69 6e 63 72 65 6d  key, &autoincrem
b830: 65 6e 74 29 3b 0a 0a 20 20 69 66 28 20 72 63 21  ent);..  if( rc!
b840: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
b850: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
b860: 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c 69 74  lt(interp, sqlit
b870: 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c 20 30  e3_errmsg(db), 0
b880: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
b890: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
b8a0: 70 52 65 74 20 3d 20 54 63 6c 5f 4e 65 77 4f 62  pRet = Tcl_NewOb
b8b0: 6a 28 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  j();.  Tcl_ListO
b8c0: 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
b8d0: 30 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77  0, pRet, Tcl_New
b8e0: 53 74 72 69 6e 67 4f 62 6a 28 7a 44 61 74 61 74  StringObj(zDatat
b8f0: 79 70 65 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c  ype, -1));.  Tcl
b900: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
b910: 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54  ement(0, pRet, T
b920: 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
b930: 7a 43 6f 6c 6c 73 65 71 2c 20 2d 31 29 29 3b 0a  zCollseq, -1));.
b940: 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70    Tcl_ListObjApp
b950: 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52  endElement(0, pR
b960: 65 74 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  et, Tcl_NewIntOb
b970: 6a 28 6e 6f 74 6e 75 6c 6c 29 29 3b 0a 20 20 54  j(notnull));.  T
b980: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
b990: 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c  Element(0, pRet,
b9a0: 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 70   Tcl_NewIntObj(p
b9b0: 72 69 6d 61 72 79 6b 65 79 29 29 3b 0a 20 20 54  rimarykey));.  T
b9c0: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
b9d0: 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c  Element(0, pRet,
b9e0: 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 61   Tcl_NewIntObj(a
b9f0: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 29 29 3b 0a  utoincrement));.
ba00: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
ba10: 6c 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74 29  lt(interp, pRet)
ba20: 3b 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  ;..  return TCL_
ba30: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  OK;.}.#endif..#i
ba40: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
ba50: 54 5f 49 4e 43 52 42 4c 4f 42 0a 0a 2f 2a 0a 2a  T_INCRBLOB../*.*
ba60: 2a 20 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 72  * sqlite3_blob_r
ba70: 65 61 64 20 20 43 48 41 4e 4e 45 4c 20 4f 46 46  ead  CHANNEL OFF
ba80: 53 45 54 20 4e 0a 2a 2a 0a 2a 2a 20 20 20 54 68  SET N.**.**   Th
ba90: 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73  is command is us
baa0: 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20 73  ed to test the s
bab0: 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 72 65 61 64  qlite3_blob_read
bac0: 28 29 20 69 6e 20 77 61 79 73 20 74 68 61 74 0a  () in ways that.
bad0: 2a 2a 20 20 20 74 68 65 20 54 63 6c 20 63 68 61  **   the Tcl cha
bae0: 6e 6e 65 6c 20 69 6e 74 65 72 66 61 63 65 20 64  nnel interface d
baf0: 6f 65 73 20 6e 6f 74 2e 20 54 68 65 20 66 69 72  oes not. The fir
bb00: 73 74 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75  st argument shou
bb10: 6c 64 0a 2a 2a 20 20 20 62 65 20 74 68 65 20 6e  ld.**   be the n
bb20: 61 6d 65 20 6f 66 20 61 20 76 61 6c 69 64 20 63  ame of a valid c
bb30: 68 61 6e 6e 65 6c 20 63 72 65 61 74 65 64 20 62  hannel created b
bb40: 79 20 74 68 65 20 5b 69 6e 63 72 62 6c 6f 62 5d  y the [incrblob]
bb50: 20 6d 65 74 68 6f 64 0a 2a 2a 20 20 20 6f 66 20   method.**   of 
bb60: 61 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  a database handl
bb70: 65 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  e. This function
bb80: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 5f 62   calls sqlite3_b
bb90: 6c 6f 62 5f 72 65 61 64 28 29 0a 2a 2a 20 20 20  lob_read().**   
bba0: 74 6f 20 72 65 61 64 20 4e 20 62 79 74 65 73 20  to read N bytes 
bbb0: 66 72 6f 6d 20 6f 66 66 73 65 74 20 4f 46 46 53  from offset OFFS
bbc0: 45 54 20 66 72 6f 6d 20 74 68 65 20 75 6e 64 65  ET from the unde
bbd0: 72 6c 79 69 6e 67 20 53 51 4c 69 74 65 0a 2a 2a  rlying SQLite.**
bbe0: 20 20 20 62 6c 6f 62 20 68 61 6e 64 6c 65 2e 0a     blob handle..
bbf0: 2a 2a 0a 2a 2a 20 20 20 4f 6e 20 73 75 63 63 65  **.**   On succe
bc00: 73 73 2c 20 61 20 62 79 74 65 2d 61 72 72 61 79  ss, a byte-array
bc10: 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 69   object containi
bc20: 6e 67 20 74 68 65 20 72 65 61 64 20 64 61 74 61  ng the read data
bc30: 20 69 73 20 0a 2a 2a 20 20 20 72 65 74 75 72 6e   is .**   return
bc40: 65 64 2e 20 4f 6e 20 66 61 69 6c 75 72 65 2c 20  ed. On failure, 
bc50: 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20  the interpreter 
bc60: 72 65 73 75 6c 74 20 69 73 20 73 65 74 20 74 6f  result is set to
bc70: 20 74 68 65 0a 2a 2a 20 20 20 74 65 78 74 20 72   the.**   text r
bc80: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
bc90: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 65 72   the returned er
bca0: 72 6f 72 20 63 6f 64 65 20 28 69 2e 65 2e 20 22  ror code (i.e. "
bcb0: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 22 29 0a 2a  SQLITE_NOMEM").*
bcc0: 2a 20 20 20 61 6e 64 20 61 20 54 63 6c 20 65 78  *   and a Tcl ex
bcd0: 63 65 70 74 69 6f 6e 20 69 73 20 74 68 72 6f 77  ception is throw
bce0: 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  n..*/.static int
bcf0: 20 74 65 73 74 5f 62 6c 6f 62 5f 72 65 61 64 28   test_blob_read(
bd00: 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c  .  ClientData cl
bd10: 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 4e 6f 74  ientData, /* Not
bd20: 20 75 73 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49   used */.  Tcl_I
bd30: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
bd40: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
bd50: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
bd60: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
bd70: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63  nd */.  int objc
bd80: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
bd90: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
bda0: 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f  ments */.  Tcl_O
bdb0: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
bdc0: 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67    /* Command arg
bdd0: 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54  uments */.){.  T
bde0: 63 6c 5f 43 68 61 6e 6e 65 6c 20 63 68 61 6e 6e  cl_Channel chann
bdf0: 65 6c 3b 0a 20 20 43 6c 69 65 6e 74 44 61 74 61  el;.  ClientData
be00: 20 69 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 20   instanceData;. 
be10: 20 73 71 6c 69 74 65 33 5f 62 6c 6f 62 20 2a 70   sqlite3_blob *p
be20: 42 6c 6f 62 3b 0a 20 20 69 6e 74 20 6e 6f 74 55  Blob;.  int notU
be30: 73 65 64 3b 0a 20 20 69 6e 74 20 6e 42 79 74 65  sed;.  int nByte
be40: 3b 0a 20 20 69 6e 74 20 69 4f 66 66 73 65 74 3b  ;.  int iOffset;
be50: 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  .  unsigned char
be60: 20 2a 7a 42 75 66 3b 0a 20 20 69 6e 74 20 72 63   *zBuf;.  int rc
be70: 3b 0a 20 20 0a 20 20 69 66 28 20 6f 62 6a 63 21  ;.  .  if( objc!
be80: 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =4 ){.    Tcl_Wr
be90: 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
bea0: 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 43 48 41  p, 1, objv, "CHA
beb0: 4e 4e 45 4c 20 4f 46 46 53 45 54 20 4e 22 29 3b  NNEL OFFSET N");
bec0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
bed0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 63 68  ERROR;.  }..  ch
bee0: 61 6e 6e 65 6c 20 3d 20 54 63 6c 5f 47 65 74 43  annel = Tcl_GetC
bef0: 68 61 6e 6e 65 6c 28 69 6e 74 65 72 70 2c 20 54  hannel(interp, T
bf00: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
bf10: 76 5b 31 5d 29 2c 20 26 6e 6f 74 55 73 65 64 29  v[1]), &notUsed)
bf20: 3b 0a 20 20 69 66 28 20 21 63 68 61 6e 6e 65 6c  ;.  if( !channel
bf30: 0a 20 20 20 7c 7c 20 54 43 4c 5f 4f 4b 21 3d 54  .   || TCL_OK!=T
bf40: 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
bf50: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
bf60: 2c 20 26 69 4f 66 66 73 65 74 29 0a 20 20 20 7c  , &iOffset).   |
bf70: 7c 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65  | TCL_OK!=Tcl_Ge
bf80: 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
bf90: 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 6e 42  rp, objv[3], &nB
bfa0: 79 74 65 29 0a 20 20 20 7c 7c 20 6e 42 79 74 65  yte).   || nByte
bfb0: 3c 30 20 7c 7c 20 69 4f 66 66 73 65 74 3c 30 0a  <0 || iOffset<0.
bfc0: 20 20 29 7b 20 0a 20 20 20 20 72 65 74 75 72 6e    ){ .    return
bfd0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
bfe0: 0a 20 20 69 6e 73 74 61 6e 63 65 44 61 74 61 20  .  instanceData 
bff0: 3d 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c  = Tcl_GetChannel
c000: 49 6e 73 74 61 6e 63 65 44 61 74 61 28 63 68 61  InstanceData(cha
c010: 6e 6e 65 6c 29 3b 0a 20 20 70 42 6c 6f 62 20 3d  nnel);.  pBlob =
c020: 20 2a 28 28 73 71 6c 69 74 65 33 5f 62 6c 6f 62   *((sqlite3_blob
c030: 20 2a 2a 29 69 6e 73 74 61 6e 63 65 44 61 74 61   **)instanceData
c040: 29 3b 0a 0a 20 20 7a 42 75 66 20 3d 20 28 75 6e  );..  zBuf = (un
c050: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 54 63  signed char *)Tc
c060: 6c 5f 41 6c 6c 6f 63 28 6e 42 79 74 65 29 3b 0a  l_Alloc(nByte);.
c070: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62    rc = sqlite3_b
c080: 6c 6f 62 5f 72 65 61 64 28 70 42 6c 6f 62 2c 20  lob_read(pBlob, 
c090: 7a 42 75 66 2c 20 6e 42 79 74 65 2c 20 69 4f 66  zBuf, nByte, iOf
c0a0: 66 73 65 74 29 3b 0a 20 20 69 66 28 20 72 63 3d  fset);.  if( rc=
c0b0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
c0c0: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
c0d0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
c0e0: 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28 7a  ewByteArrayObj(z
c0f0: 42 75 66 2c 20 6e 42 79 74 65 29 29 3b 0a 20 20  Buf, nByte));.  
c100: 7d 65 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 53  }else{.    Tcl_S
c110: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
c120: 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33   (char *)sqlite3
c130: 54 65 73 74 45 72 72 6f 72 4e 61 6d 65 28 72 63  TestErrorName(rc
c140: 29 2c 20 54 43 4c 5f 56 4f 4c 41 54 49 4c 45 29  ), TCL_VOLATILE)
c150: 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 46 72 65 65  ;.  }.  Tcl_Free
c160: 28 28 63 68 61 72 20 2a 29 7a 42 75 66 29 3b 0a  ((char *)zBuf);.
c170: 0a 20 20 72 65 74 75 72 6e 20 28 72 63 3d 3d 53  .  return (rc==S
c180: 51 4c 49 54 45 5f 4f 4b 20 3f 20 54 43 4c 5f 4f  QLITE_OK ? TCL_O
c190: 4b 20 3a 20 54 43 4c 5f 45 52 52 4f 52 29 3b 0a  K : TCL_ERROR);.
c1a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  }../*.** sqlite3
c1b0: 5f 62 6c 6f 62 5f 77 72 69 74 65 20 43 48 41 4e  _blob_write CHAN
c1c0: 4e 45 4c 20 4f 46 46 53 45 54 20 44 41 54 41 20  NEL OFFSET DATA 
c1d0: 3f 4e 44 41 54 41 3f 0a 2a 2a 0a 2a 2a 20 20 20  ?NDATA?.**.**   
c1e0: 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20  This command is 
c1f0: 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65  used to test the
c200: 20 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 77 72   sqlite3_blob_wr
c210: 69 74 65 28 29 20 69 6e 20 77 61 79 73 20 74 68  ite() in ways th
c220: 61 74 0a 2a 2a 20 20 20 74 68 65 20 54 63 6c 20  at.**   the Tcl 
c230: 63 68 61 6e 6e 65 6c 20 69 6e 74 65 72 66 61 63  channel interfac
c240: 65 20 64 6f 65 73 20 6e 6f 74 2e 20 54 68 65 20  e does not. The 
c250: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 73  first argument s
c260: 68 6f 75 6c 64 0a 2a 2a 20 20 20 62 65 20 74 68  hould.**   be th
c270: 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 61 6c 69  e name of a vali
c280: 64 20 63 68 61 6e 6e 65 6c 20 63 72 65 61 74 65  d channel create
c290: 64 20 62 79 20 74 68 65 20 5b 69 6e 63 72 62 6c  d by the [incrbl
c2a0: 6f 62 5d 20 6d 65 74 68 6f 64 0a 2a 2a 20 20 20  ob] method.**   
c2b0: 6f 66 20 61 20 64 61 74 61 62 61 73 65 20 68 61  of a database ha
c2c0: 6e 64 6c 65 2e 20 54 68 69 73 20 66 75 6e 63 74  ndle. This funct
c2d0: 69 6f 6e 20 63 61 6c 6c 73 20 73 71 6c 69 74 65  ion calls sqlite
c2e0: 33 5f 62 6c 6f 62 5f 77 72 69 74 65 28 29 0a 2a  3_blob_write().*
c2f0: 2a 20 20 20 74 6f 20 77 72 69 74 65 20 74 68 65  *   to write the
c300: 20 44 41 54 41 20 62 79 74 65 2d 61 72 72 61 79   DATA byte-array
c310: 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69   to the underlyi
c320: 6e 67 20 53 51 4c 69 74 65 20 62 6c 6f 62 20 68  ng SQLite blob h
c330: 61 6e 64 6c 65 2e 0a 2a 2a 20 20 20 61 74 20 6f  andle..**   at o
c340: 66 66 73 65 74 20 4f 46 46 53 45 54 2e 0a 2a 2a  ffset OFFSET..**
c350: 0a 2a 2a 20 20 20 4f 6e 20 73 75 63 63 65 73 73  .**   On success
c360: 2c 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e  , an empty strin
c370: 67 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 4f  g is returned. O
c380: 6e 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 69  n failure, the i
c390: 6e 74 65 72 70 72 65 74 65 72 0a 2a 2a 20 20 20  nterpreter.**   
c3a0: 72 65 73 75 6c 74 20 69 73 20 73 65 74 20 74 6f  result is set to
c3b0: 20 74 68 65 20 74 65 78 74 20 72 65 70 72 65 73   the text repres
c3c0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
c3d0: 72 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 63  returned error c
c3e0: 6f 64 65 20 0a 2a 2a 20 20 20 28 69 2e 65 2e 20  ode .**   (i.e. 
c3f0: 22 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 22 29 20  "SQLITE_NOMEM") 
c400: 61 6e 64 20 61 20 54 63 6c 20 65 78 63 65 70 74  and a Tcl except
c410: 69 6f 6e 20 69 73 20 74 68 72 6f 77 6e 2e 0a 2a  ion is thrown..*
c420: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
c430: 74 5f 62 6c 6f 62 5f 77 72 69 74 65 28 0a 20 20  t_blob_write(.  
c440: 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
c450: 74 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75 73  tData, /* Not us
c460: 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  ed */.  Tcl_Inte
c470: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
c480: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
c490: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
c4a0: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
c4b0: 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20  */.  int objc,  
c4c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c4d0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
c4e0: 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20  ts */.  Tcl_Obj 
c4f0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f  *CONST objv[]  /
c500: 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65  * Command argume
c510: 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f  nts */.){.  Tcl_
c520: 43 68 61 6e 6e 65 6c 20 63 68 61 6e 6e 65 6c 3b  Channel channel;
c530: 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 6e  .  ClientData in
c540: 73 74 61 6e 63 65 44 61 74 61 3b 0a 20 20 73 71  stanceData;.  sq
c550: 6c 69 74 65 33 5f 62 6c 6f 62 20 2a 70 42 6c 6f  lite3_blob *pBlo
c560: 62 3b 0a 20 20 69 6e 74 20 6e 6f 74 55 73 65 64  b;.  int notUsed
c570: 3b 0a 20 20 69 6e 74 20 69 4f 66 66 73 65 74 3b  ;.  int iOffset;
c580: 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 75 6e  .  int rc;..  un
c590: 73 69 67 6e 65 64 20 63 68 61 72 20 2a 7a 42 75  signed char *zBu
c5a0: 66 3b 0a 20 20 69 6e 74 20 6e 42 75 66 3b 0a 20  f;.  int nBuf;. 
c5b0: 20 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20   .  if( objc!=4 
c5c0: 26 26 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20  && objc!=5 ){.  
c5d0: 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
c5e0: 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
c5f0: 6a 76 2c 20 22 43 48 41 4e 4e 45 4c 20 4f 46 46  jv, "CHANNEL OFF
c600: 53 45 54 20 44 41 54 41 20 3f 4e 44 41 54 41 3f  SET DATA ?NDATA?
c610: 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
c620: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
c630: 20 63 68 61 6e 6e 65 6c 20 3d 20 54 63 6c 5f 47   channel = Tcl_G
c640: 65 74 43 68 61 6e 6e 65 6c 28 69 6e 74 65 72 70  etChannel(interp
c650: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
c660: 6f 62 6a 76 5b 31 5d 29 2c 20 26 6e 6f 74 55 73  objv[1]), &notUs
c670: 65 64 29 3b 0a 20 20 69 66 28 20 21 63 68 61 6e  ed);.  if( !chan
c680: 6e 65 6c 20 7c 7c 20 54 43 4c 5f 4f 4b 21 3d 54  nel || TCL_OK!=T
c690: 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
c6a0: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
c6b0: 2c 20 26 69 4f 66 66 73 65 74 29 20 29 7b 20 0a  , &iOffset) ){ .
c6c0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
c6d0: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 6e 73  RROR;.  }..  ins
c6e0: 74 61 6e 63 65 44 61 74 61 20 3d 20 54 63 6c 5f  tanceData = Tcl_
c6f0: 47 65 74 43 68 61 6e 6e 65 6c 49 6e 73 74 61 6e  GetChannelInstan
c700: 63 65 44 61 74 61 28 63 68 61 6e 6e 65 6c 29 3b  ceData(channel);
c710: 0a 20 20 70 42 6c 6f 62 20 3d 20 2a 28 28 73 71  .  pBlob = *((sq
c720: 6c 69 74 65 33 5f 62 6c 6f 62 20 2a 2a 29 69 6e  lite3_blob **)in
c730: 73 74 61 6e 63 65 44 61 74 61 29 3b 0a 0a 20 20  stanceData);..  
c740: 7a 42 75 66 20 3d 20 54 63 6c 5f 47 65 74 42 79  zBuf = Tcl_GetBy
c750: 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f  teArrayFromObj(o
c760: 62 6a 76 5b 33 5d 2c 20 26 6e 42 75 66 29 3b 0a  bjv[3], &nBuf);.
c770: 20 20 69 66 28 20 6f 62 6a 63 3d 3d 35 20 26 26    if( objc==5 &&
c780: 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
c790: 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
c7a0: 34 5d 2c 20 26 6e 42 75 66 29 20 29 7b 0a 20 20  4], &nBuf) ){.  
c7b0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
c7c0: 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  OR;.  }.  rc = s
c7d0: 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 77 72 69 74  qlite3_blob_writ
c7e0: 65 28 70 42 6c 6f 62 2c 20 7a 42 75 66 2c 20 6e  e(pBlob, zBuf, n
c7f0: 42 75 66 2c 20 69 4f 66 66 73 65 74 29 3b 0a 20  Buf, iOffset);. 
c800: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
c810: 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65  OK ){.    Tcl_Se
c820: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
c830: 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 54  (char *)sqlite3T
c840: 65 73 74 45 72 72 6f 72 4e 61 6d 65 28 72 63 29  estErrorName(rc)
c850: 2c 20 54 43 4c 5f 56 4f 4c 41 54 49 4c 45 29 3b  , TCL_VOLATILE);
c860: 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 28  .  }..  return (
c870: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 3f 20  rc==SQLITE_OK ? 
c880: 54 43 4c 5f 4f 4b 20 3a 20 54 43 4c 5f 45 52 52  TCL_OK : TCL_ERR
c890: 4f 52 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  OR);.}.#endif../
c8a0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
c8b0: 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
c8c0: 74 69 6f 6e 5f 76 32 20 44 42 2d 48 41 4e 44 4c  tion_v2 DB-HANDL
c8d0: 45 20 4e 41 4d 45 20 43 4d 50 2d 50 52 4f 43 20  E NAME CMP-PROC 
c8e0: 44 45 4c 2d 50 52 4f 43 0a 2a 2a 0a 2a 2a 20 20  DEL-PROC.**.**  
c8f0: 20 54 68 69 73 20 54 63 6c 20 70 72 6f 63 20 69   This Tcl proc i
c900: 73 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69  s used for testi
c910: 6e 67 20 74 68 65 20 65 78 70 65 72 69 6d 65 6e  ng the experimen
c920: 74 61 6c 0a 2a 2a 20 20 20 73 71 6c 69 74 65 33  tal.**   sqlite3
c930: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
c940: 6e 5f 76 32 28 29 20 69 6e 74 65 72 66 61 63 65  n_v2() interface
c950: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 65 73 74  ..*/.struct Test
c960: 43 6f 6c 6c 61 74 69 6f 6e 58 20 7b 0a 20 20 54  CollationX {.  T
c970: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
c980: 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 43  p;.  Tcl_Obj *pC
c990: 6d 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70  mp;.  Tcl_Obj *p
c9a0: 44 65 6c 3b 0a 7d 3b 0a 74 79 70 65 64 65 66 20  Del;.};.typedef 
c9b0: 73 74 72 75 63 74 20 54 65 73 74 43 6f 6c 6c 61  struct TestColla
c9c0: 74 69 6f 6e 58 20 54 65 73 74 43 6f 6c 6c 61 74  tionX TestCollat
c9d0: 69 6f 6e 58 3b 0a 73 74 61 74 69 63 20 76 6f 69  ionX;.static voi
c9e0: 64 20 74 65 73 74 43 72 65 61 74 65 43 6f 6c 6c  d testCreateColl
c9f0: 61 74 69 6f 6e 44 65 6c 28 76 6f 69 64 20 2a 70  ationDel(void *p
ca00: 43 74 78 29 7b 0a 20 20 54 65 73 74 43 6f 6c 6c  Ctx){.  TestColl
ca10: 61 74 69 6f 6e 58 20 2a 70 20 3d 20 28 54 65 73  ationX *p = (Tes
ca20: 74 43 6f 6c 6c 61 74 69 6f 6e 58 20 2a 29 70 43  tCollationX *)pC
ca30: 74 78 3b 0a 0a 20 20 69 6e 74 20 72 63 20 3d 20  tx;..  int rc = 
ca40: 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 70 2d  Tcl_EvalObjEx(p-
ca50: 3e 69 6e 74 65 72 70 2c 20 70 2d 3e 70 44 65 6c  >interp, p->pDel
ca60: 2c 20 54 43 4c 5f 45 56 41 4c 5f 44 49 52 45 43  , TCL_EVAL_DIREC
ca70: 54 7c 54 43 4c 5f 45 56 41 4c 5f 47 4c 4f 42 41  T|TCL_EVAL_GLOBA
ca80: 4c 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 54 43  L);.  if( rc!=TC
ca90: 4c 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f  L_OK ){.    Tcl_
caa0: 42 61 63 6b 67 72 6f 75 6e 64 45 72 72 6f 72 28  BackgroundError(
cab0: 70 2d 3e 69 6e 74 65 72 70 29 3b 0a 20 20 7d 0a  p->interp);.  }.
cac0: 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f  .  Tcl_DecrRefCo
cad0: 75 6e 74 28 70 2d 3e 70 43 6d 70 29 3b 0a 20 20  unt(p->pCmp);.  
cae0: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
caf0: 28 70 2d 3e 70 44 65 6c 29 3b 0a 20 20 73 71 6c  (p->pDel);.  sql
cb00: 69 74 65 33 5f 66 72 65 65 28 28 76 6f 69 64 20  ite3_free((void 
cb10: 2a 29 70 29 3b 0a 7d 0a 73 74 61 74 69 63 20 69  *)p);.}.static i
cb20: 6e 74 20 74 65 73 74 43 72 65 61 74 65 43 6f 6c  nt testCreateCol
cb30: 6c 61 74 69 6f 6e 43 6d 70 28 0a 20 20 76 6f 69  lationCmp(.  voi
cb40: 64 20 2a 70 43 74 78 2c 0a 20 20 69 6e 74 20 6e  d *pCtx,.  int n
cb50: 4c 65 66 74 2c 0a 20 20 63 6f 6e 73 74 20 76 6f  Left,.  const vo
cb60: 69 64 20 2a 7a 4c 65 66 74 2c 0a 20 20 69 6e 74  id *zLeft,.  int
cb70: 20 6e 52 69 67 68 74 2c 0a 20 20 63 6f 6e 73 74   nRight,.  const
cb80: 20 76 6f 69 64 20 2a 7a 52 69 67 68 74 0a 29 7b   void *zRight.){
cb90: 0a 20 20 54 65 73 74 43 6f 6c 6c 61 74 69 6f 6e  .  TestCollation
cba0: 58 20 2a 70 20 3d 20 28 54 65 73 74 43 6f 6c 6c  X *p = (TestColl
cbb0: 61 74 69 6f 6e 58 20 2a 29 70 43 74 78 3b 0a 20  ationX *)pCtx;. 
cbc0: 20 54 63 6c 5f 4f 62 6a 20 2a 70 53 63 72 69 70   Tcl_Obj *pScrip
cbd0: 74 20 3d 20 54 63 6c 5f 44 75 70 6c 69 63 61 74  t = Tcl_Duplicat
cbe0: 65 4f 62 6a 28 70 2d 3e 70 43 6d 70 29 3b 0a 20  eObj(p->pCmp);. 
cbf0: 20 69 6e 74 20 69 52 65 73 20 3d 20 30 3b 0a 0a   int iRes = 0;..
cc00: 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75    Tcl_IncrRefCou
cc10: 6e 74 28 70 53 63 72 69 70 74 29 3b 0a 20 20 54  nt(pScript);.  T
cc20: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
cc30: 45 6c 65 6d 65 6e 74 28 30 2c 20 70 53 63 72 69  Element(0, pScri
cc40: 70 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  pt, Tcl_NewStrin
cc50: 67 4f 62 6a 28 28 63 68 61 72 20 2a 29 7a 4c 65  gObj((char *)zLe
cc60: 66 74 2c 20 6e 4c 65 66 74 29 29 3b 0a 20 20 54  ft, nLeft));.  T
cc70: 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
cc80: 45 6c 65 6d 65 6e 74 28 30 2c 20 70 53 63 72 69  Element(0, pScri
cc90: 70 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  pt, Tcl_NewStrin
cca0: 67 4f 62 6a 28 28 63 68 61 72 20 2a 29 7a 52 69  gObj((char *)zRi
ccb0: 67 68 74 2c 6e 52 69 67 68 74 29 29 3b 0a 0a 20  ght,nRight));.. 
ccc0: 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c   if( TCL_OK!=Tcl
ccd0: 5f 45 76 61 6c 4f 62 6a 45 78 28 70 2d 3e 69 6e  _EvalObjEx(p->in
cce0: 74 65 72 70 2c 20 70 53 63 72 69 70 74 2c 20 54  terp, pScript, T
ccf0: 43 4c 5f 45 56 41 4c 5f 44 49 52 45 43 54 7c 54  CL_EVAL_DIRECT|T
cd00: 43 4c 5f 45 56 41 4c 5f 47 4c 4f 42 41 4c 29 0a  CL_EVAL_GLOBAL).
cd10: 20 20 20 7c 7c 20 54 43 4c 5f 4f 4b 21 3d 54 63     || TCL_OK!=Tc
cd20: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
cd30: 70 2d 3e 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  p->interp, Tcl_G
cd40: 65 74 4f 62 6a 52 65 73 75 6c 74 28 70 2d 3e 69  etObjResult(p->i
cd50: 6e 74 65 72 70 29 2c 20 26 69 52 65 73 29 0a 20  nterp), &iRes). 
cd60: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 42 61 63 6b   ){.    Tcl_Back
cd70: 67 72 6f 75 6e 64 45 72 72 6f 72 28 70 2d 3e 69  groundError(p->i
cd80: 6e 74 65 72 70 29 3b 0a 20 20 7d 0a 20 20 54 63  nterp);.  }.  Tc
cd90: 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70  l_DecrRefCount(p
cda0: 53 63 72 69 70 74 29 3b 0a 0a 20 20 72 65 74 75  Script);..  retu
cdb0: 72 6e 20 69 52 65 73 3b 0a 7d 0a 73 74 61 74 69  rn iRes;.}.stati
cdc0: 63 20 69 6e 74 20 74 65 73 74 5f 63 72 65 61 74  c int test_creat
cdd0: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 76 32 28 0a  e_collation_v2(.
cde0: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69    ClientData cli
cdf0: 65 6e 74 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20  entData, /* Not 
ce00: 75 73 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  used */.  Tcl_In
ce10: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
ce20: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
ce30: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
ce40: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
ce50: 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  d */.  int objc,
ce60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ce70: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
ce80: 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62  ents */.  Tcl_Ob
ce90: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20  j *CONST objv[] 
cea0: 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
ceb0: 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 65  ments */.){.  Te
cec0: 73 74 43 6f 6c 6c 61 74 69 6f 6e 58 20 2a 70 3b  stCollationX *p;
ced0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
cee0: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
cef0: 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20   objc!=5 ){.    
cf00: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
cf10: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
cf20: 2c 20 22 44 42 2d 48 41 4e 44 4c 45 20 4e 41 4d  , "DB-HANDLE NAM
cf30: 45 20 43 4d 50 2d 50 52 4f 43 20 44 45 4c 2d 50  E CMP-PROC DEL-P
cf40: 52 4f 43 22 29 3b 0a 20 20 20 20 72 65 74 75 72  ROC");.    retur
cf50: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
cf60: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
cf70: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
cf80: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
cf90: 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  ]), &db) ) retur
cfa0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
cfb0: 70 20 3d 20 28 54 65 73 74 43 6f 6c 6c 61 74 69  p = (TestCollati
cfc0: 6f 6e 58 20 2a 29 73 71 6c 69 74 65 33 5f 6d 61  onX *)sqlite3_ma
cfd0: 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 54 65 73 74  lloc(sizeof(Test
cfe0: 43 6f 6c 6c 61 74 69 6f 6e 58 29 29 3b 0a 20 20  CollationX));.  
cff0: 70 2d 3e 70 43 6d 70 20 3d 20 6f 62 6a 76 5b 33  p->pCmp = objv[3
d000: 5d 3b 0a 20 20 70 2d 3e 70 44 65 6c 20 3d 20 6f  ];.  p->pDel = o
d010: 62 6a 76 5b 34 5d 3b 0a 20 20 70 2d 3e 69 6e 74  bjv[4];.  p->int
d020: 65 72 70 20 3d 20 69 6e 74 65 72 70 3b 0a 20 20  erp = interp;.  
d030: 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74  Tcl_IncrRefCount
d040: 28 70 2d 3e 70 43 6d 70 29 3b 0a 20 20 54 63 6c  (p->pCmp);.  Tcl
d050: 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 2d  _IncrRefCount(p-
d060: 3e 70 44 65 6c 29 3b 0a 0a 20 20 72 63 20 3d 20  >pDel);..  rc = 
d070: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
d080: 6f 6c 6c 61 74 69 6f 6e 5f 76 32 28 64 62 2c 20  ollation_v2(db, 
d090: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
d0a0: 6a 76 5b 32 5d 29 2c 20 31 36 2c 20 0a 20 20 20  jv[2]), 16, .   
d0b0: 20 20 20 28 76 6f 69 64 20 2a 29 70 2c 20 74 65     (void *)p, te
d0c0: 73 74 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f  stCreateCollatio
d0d0: 6e 43 6d 70 2c 20 74 65 73 74 43 72 65 61 74 65  nCmp, testCreate
d0e0: 43 6f 6c 6c 61 74 69 6f 6e 44 65 6c 0a 20 20 29  CollationDel.  )
d0f0: 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
d100: 54 45 5f 4d 49 53 55 53 45 20 29 7b 0a 20 20 20  TE_MISUSE ){.   
d110: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
d120: 74 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  t(interp, "sqlit
d130: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
d140: 65 5f 76 32 28 29 20 66 61 69 6c 65 64 20 74 6f  e_v2() failed to
d150: 20 64 65 74 65 63 74 20 22 0a 20 20 20 20 20 20   detect ".      
d160: 22 61 6e 20 69 6e 76 61 6c 69 64 20 65 6e 63 6f  "an invalid enco
d170: 64 69 6e 67 22 2c 20 28 63 68 61 72 2a 29 30 29  ding", (char*)0)
d180: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
d190: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63  _ERROR;.  }.  rc
d1a0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
d1b0: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 76 32 28 64  e_collation_v2(d
d1c0: 62 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  b, Tcl_GetString
d1d0: 28 6f 62 6a 76 5b 32 5d 29 2c 20 53 51 4c 49 54  (objv[2]), SQLIT
d1e0: 45 5f 55 54 46 38 2c 20 0a 20 20 20 20 20 20 28  E_UTF8, .      (
d1f0: 76 6f 69 64 20 2a 29 70 2c 20 74 65 73 74 43 72  void *)p, testCr
d200: 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 43 6d 70  eateCollationCmp
d210: 2c 20 74 65 73 74 43 72 65 61 74 65 43 6f 6c 6c  , testCreateColl
d220: 61 74 69 6f 6e 44 65 6c 0a 20 20 29 3b 0a 20 20  ationDel.  );.  
d230: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
d240: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
d250: 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65  qlite3_load_exte
d260: 6e 73 69 6f 6e 20 44 42 2d 48 41 4e 44 4c 45 20  nsion DB-HANDLE 
d270: 46 49 4c 45 20 3f 50 52 4f 43 3f 0a 2a 2f 0a 73  FILE ?PROC?.*/.s
d280: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6c  tatic int test_l
d290: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0a 20  oad_extension(. 
d2a0: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
d2b0: 6e 74 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75  ntData, /* Not u
d2c0: 73 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74  sed */.  Tcl_Int
d2d0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
d2e0: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
d2f0: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
d300: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
d310: 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20   */.  int objc, 
d320: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d330: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
d340: 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a  nts */.  Tcl_Obj
d350: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20   *CONST objv[]  
d360: 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d  /* Command argum
d370: 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c  ents */.){.  Tcl
d380: 5f 43 6d 64 49 6e 66 6f 20 63 6d 64 49 6e 66 6f  _CmdInfo cmdInfo
d390: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  ;.  sqlite3 *db;
d3a0: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61  .  int rc;.  cha
d3b0: 72 20 2a 7a 44 62 3b 0a 20 20 63 68 61 72 20 2a  r *zDb;.  char *
d3c0: 7a 46 69 6c 65 3b 0a 20 20 63 68 61 72 20 2a 7a  zFile;.  char *z
d3d0: 50 72 6f 63 20 3d 20 30 3b 0a 20 20 63 68 61 72  Proc = 0;.  char
d3e0: 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 0a 20 20 69   *zErr = 0;..  i
d3f0: 66 28 20 6f 62 6a 63 21 3d 34 20 26 26 20 6f 62  f( objc!=4 && ob
d400: 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
d410: 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
d420: 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
d430: 44 42 2d 48 41 4e 44 4c 45 20 46 49 4c 45 20 3f  DB-HANDLE FILE ?
d440: 50 52 4f 43 3f 22 29 3b 0a 20 20 20 20 72 65 74  PROC?");.    ret
d450: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
d460: 20 7d 0a 20 20 7a 44 62 20 3d 20 54 63 6c 5f 47   }.  zDb = Tcl_G
d470: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
d480: 29 3b 0a 20 20 7a 46 69 6c 65 20 3d 20 54 63 6c  );.  zFile = Tcl
d490: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
d4a0: 32 5d 29 3b 0a 20 20 69 66 28 20 6f 62 6a 63 3d  2]);.  if( objc=
d4b0: 3d 34 20 29 7b 0a 20 20 20 20 7a 50 72 6f 63 20  =4 ){.    zProc 
d4c0: 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  = Tcl_GetString(
d4d0: 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 7d 0a 0a 20  objv[3]);.  }.. 
d4e0: 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20   /* Extract the 
d4f0: 43 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  C database handl
d500: 65 20 66 72 6f 6d 20 74 68 65 20 54 63 6c 20 63  e from the Tcl c
d510: 6f 6d 6d 61 6e 64 20 6e 61 6d 65 20 2a 2f 0a 20  ommand name */. 
d520: 20 69 66 28 20 21 54 63 6c 5f 47 65 74 43 6f 6d   if( !Tcl_GetCom
d530: 6d 61 6e 64 49 6e 66 6f 28 69 6e 74 65 72 70 2c  mandInfo(interp,
d540: 20 7a 44 62 2c 20 26 63 6d 64 49 6e 66 6f 29 20   zDb, &cmdInfo) 
d550: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
d560: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
d570: 22 63 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f 75  "command not fou
d580: 6e 64 3a 20 22 2c 20 7a 44 62 2c 20 28 63 68 61  nd: ", zDb, (cha
d590: 72 2a 29 30 29 3b 0a 20 20 20 20 72 65 74 75 72  r*)0);.    retur
d5a0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
d5b0: 0a 20 20 64 62 20 3d 20 28 28 73 74 72 75 63 74  .  db = ((struct
d5c0: 20 53 71 6c 69 74 65 44 62 2a 29 63 6d 64 49 6e   SqliteDb*)cmdIn
d5d0: 66 6f 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74 61  fo.objClientData
d5e0: 29 2d 3e 64 62 3b 0a 20 20 61 73 73 65 72 74 28  )->db;.  assert(
d5f0: 64 62 29 3b 0a 0a 20 20 2f 2a 20 43 61 6c 6c 20  db);..  /* Call 
d600: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 43  the underlying C
d610: 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 61 6e   function. If an
d620: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 73   error occurs, s
d630: 65 74 20 72 63 20 74 6f 20 0a 20 20 2a 2a 20 54  et rc to .  ** T
d640: 43 4c 5f 45 52 52 4f 52 20 61 6e 64 20 6c 6f 61  CL_ERROR and loa
d650: 64 20 61 6e 79 20 65 72 72 6f 72 20 73 74 72 69  d any error stri
d660: 6e 67 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65  ng into the inte
d670: 72 70 72 65 74 65 72 2e 20 49 66 20 6e 6f 20 0a  rpreter. If no .
d680: 20 20 2a 2a 20 65 72 72 6f 72 20 6f 63 63 75 72    ** error occur
d690: 73 2c 20 73 65 74 20 72 63 20 74 6f 20 54 43 4c  s, set rc to TCL
d6a0: 5f 4f 4b 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66  _OK..  */.#ifdef
d6b0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
d6c0: 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 72 63  D_EXTENSION.  rc
d6d0: 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
d6e0: 0a 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65  .  zErr = sqlite
d6f0: 33 5f 6d 70 72 69 6e 74 66 28 22 74 68 69 73 20  3_mprintf("this 
d700: 62 75 69 6c 64 20 6f 6d 69 74 73 20 73 71 6c 69  build omits sqli
d710: 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  te3_load_extensi
d720: 6f 6e 28 29 22 29 3b 0a 23 65 6c 73 65 0a 20 20  on()");.#else.  
d730: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6c 6f 61  rc = sqlite3_loa
d740: 64 5f 65 78 74 65 6e 73 69 6f 6e 28 64 62 2c 20  d_extension(db, 
d750: 7a 46 69 6c 65 2c 20 7a 50 72 6f 63 2c 20 26 7a  zFile, zProc, &z
d760: 45 72 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69  Err);.#endif.  i
d770: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
d780: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52   ){.    Tcl_SetR
d790: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 45  esult(interp, zE
d7a0: 72 72 20 3f 20 7a 45 72 72 20 3a 20 22 22 2c 20  rr ? zErr : "", 
d7b0: 54 43 4c 5f 56 4f 4c 41 54 49 4c 45 29 3b 0a 20  TCL_VOLATILE);. 
d7c0: 20 20 20 72 63 20 3d 20 54 43 4c 5f 45 52 52 4f     rc = TCL_ERRO
d7d0: 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  R;.  }else{.    
d7e0: 72 63 20 3d 20 54 43 4c 5f 4f 4b 3b 0a 20 20 7d  rc = TCL_OK;.  }
d7f0: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
d800: 7a 45 72 72 29 3b 0a 0a 20 20 72 65 74 75 72 6e  zErr);..  return
d810: 20 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73   rc;.}../*.** Us
d820: 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 65 6e 61  age: sqlite3_ena
d830: 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble_load_extensi
d840: 6f 6e 20 44 42 2d 48 41 4e 44 4c 45 20 4f 4e 4f  on DB-HANDLE ONO
d850: 46 46 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  FF.*/.static int
d860: 20 74 65 73 74 5f 65 6e 61 62 6c 65 5f 6c 6f 61   test_enable_loa
d870: 64 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20  d(.  ClientData 
d880: 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 4e  clientData, /* N
d890: 6f 74 20 75 73 65 64 20 2a 2f 0a 20 20 54 63 6c  ot used */.  Tcl
d8a0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
d8b0: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
d8c0: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
d8d0: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
d8e0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62  mand */.  int ob
d8f0: 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  jc,             
d900: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
d910: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c  guments */.  Tcl
d920: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
d930: 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61  []  /* Command a
d940: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20  rguments */.){. 
d950: 20 54 63 6c 5f 43 6d 64 49 6e 66 6f 20 63 6d 64   Tcl_CmdInfo cmd
d960: 49 6e 66 6f 3b 0a 20 20 73 71 6c 69 74 65 33 20  Info;.  sqlite3 
d970: 2a 64 62 3b 0a 20 20 63 68 61 72 20 2a 7a 44 62  *db;.  char *zDb
d980: 3b 0a 20 20 69 6e 74 20 6f 6e 6f 66 66 3b 0a 0a  ;.  int onoff;..
d990: 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b    if( objc!=3 ){
d9a0: 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75  .    Tcl_WrongNu
d9b0: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
d9c0: 20 6f 62 6a 76 2c 20 22 44 42 2d 48 41 4e 44 4c   objv, "DB-HANDL
d9d0: 45 20 4f 4e 4f 46 46 22 29 3b 0a 20 20 20 20 72  E ONOFF");.    r
d9e0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
d9f0: 0a 20 20 7d 0a 20 20 7a 44 62 20 3d 20 54 63 6c  .  }.  zDb = Tcl
da00: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
da10: 31 5d 29 3b 0a 0a 20 20 2f 2a 20 45 78 74 72 61  1]);..  /* Extra
da20: 63 74 20 74 68 65 20 43 20 64 61 74 61 62 61 73  ct the C databas
da30: 65 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74 68  e handle from th
da40: 65 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 20 6e 61  e Tcl command na
da50: 6d 65 20 2a 2f 0a 20 20 69 66 28 20 21 54 63 6c  me */.  if( !Tcl
da60: 5f 47 65 74 43 6f 6d 6d 61 6e 64 49 6e 66 6f 28  _GetCommandInfo(
da70: 69 6e 74 65 72 70 2c 20 7a 44 62 2c 20 26 63 6d  interp, zDb, &cm
da80: 64 49 6e 66 6f 29 20 29 7b 0a 20 20 20 20 54 63  dInfo) ){.    Tc
da90: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
daa0: 6e 74 65 72 70 2c 20 22 63 6f 6d 6d 61 6e 64 20  nterp, "command 
dab0: 6e 6f 74 20 66 6f 75 6e 64 3a 20 22 2c 20 7a 44  not found: ", zD
dac0: 62 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20  b, (char*)0);.  
dad0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
dae0: 4f 52 3b 0a 20 20 7d 0a 20 20 64 62 20 3d 20 28  OR;.  }.  db = (
daf0: 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 44 62  (struct SqliteDb
db00: 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62 6a 43 6c 69  *)cmdInfo.objCli
db10: 65 6e 74 44 61 74 61 29 2d 3e 64 62 3b 0a 20 20  entData)->db;.  
db20: 61 73 73 65 72 74 28 64 62 29 3b 0a 0a 20 20 2f  assert(db);..  /
db30: 2a 20 47 65 74 20 74 68 65 20 6f 6e 6f 66 66 20  * Get the onoff 
db40: 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 69  parameter */.  i
db50: 66 28 20 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61  f( Tcl_GetBoolea
db60: 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  nFromObj(interp,
db70: 20 6f 62 6a 76 5b 32 5d 2c 20 26 6f 6e 6f 66 66   objv[2], &onoff
db80: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
db90: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
dba0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
dbb0: 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
dbc0: 4e 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  N.  Tcl_AppendRe
dbd0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 74 68  sult(interp, "th
dbe0: 69 73 20 62 75 69 6c 64 20 6f 6d 69 74 73 20 73  is build omits s
dbf0: 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65  qlite3_load_exte
dc00: 6e 73 69 6f 6e 28 29 22 29 3b 0a 20 20 72 65 74  nsion()");.  ret
dc10: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 23  urn TCL_ERROR;.#
dc20: 65 6c 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 65  else.  sqlite3_e
dc30: 6e 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e  nable_load_exten
dc40: 73 69 6f 6e 28 64 62 2c 20 6f 6e 6f 66 66 29 3b  sion(db, onoff);
dc50: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
dc60: 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a  ;.#endif.}../*.*
dc70: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
dc80: 5f 61 62 6f 72 74 0a 2a 2a 0a 2a 2a 20 53 68 75  _abort.**.** Shu
dc90: 74 64 6f 77 6e 20 74 68 65 20 70 72 6f 63 65 73  tdown the proces
dca0: 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  s immediately.  
dcb0: 54 68 69 73 20 69 73 20 6e 6f 74 20 61 20 63 6c  This is not a cl
dcc0: 65 61 6e 20 73 68 75 74 64 6f 77 6e 2e 0a 2a 2a  ean shutdown..**
dcd0: 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73   This command is
dce0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68   used to test th
dcf0: 65 20 72 65 63 6f 76 65 72 61 62 69 6c 69 74 79  e recoverability
dd00: 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 20 69   of a database i
dd10: 6e 0a 2a 2a 20 74 68 65 20 65 76 65 6e 74 20 6f  n.** the event o
dd20: 66 20 61 20 70 72 6f 67 72 61 6d 20 63 72 61 73  f a program cras
dd30: 68 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  h..*/.static int
dd40: 20 73 71 6c 69 74 65 5f 61 62 6f 72 74 28 0a 20   sqlite_abort(. 
dd50: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
dd60: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
dd70: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
dd80: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
dd90: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
dda0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
ddb0: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
ddc0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
ddd0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
dde0: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
ddf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
de00: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
de10: 74 20 2a 2f 0a 29 7b 0a 20 20 61 73 73 65 72 74  t */.){.  assert
de20: 28 20 69 6e 74 65 72 70 3d 3d 30 20 29 3b 20 20  ( interp==0 );  
de30: 20 2f 2a 20 54 68 69 73 20 77 69 6c 6c 20 61 6c   /* This will al
de40: 77 61 79 73 20 66 61 69 6c 20 2a 2f 0a 20 20 72  ways fail */.  r
de50: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
de60: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
de70: 77 69 6e 67 20 72 6f 75 74 69 6e 65 20 69 73 20  wing routine is 
de80: 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 53  a user-defined S
de90: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 77 68 6f 73  QL function whos
dea0: 65 20 70 75 72 70 6f 73 65 0a 2a 2a 20 69 73 20  e purpose.** is 
deb0: 74 6f 20 74 65 73 74 20 74 68 65 20 73 71 6c 69  to test the sqli
dec0: 74 65 5f 73 65 74 5f 72 65 73 75 6c 74 28 29 20  te_set_result() 
ded0: 41 50 49 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  API..*/.static v
dee0: 6f 69 64 20 74 65 73 74 46 75 6e 63 28 73 71 6c  oid testFunc(sql
def0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f  ite3_context *co
df00: 6e 74 65 78 74 2c 20 69 6e 74 20 61 72 67 63 2c  ntext, int argc,
df10: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
df20: 2a 61 72 67 76 29 7b 0a 20 20 77 68 69 6c 65 28  *argv){.  while(
df30: 20 61 72 67 63 3e 3d 32 20 29 7b 0a 20 20 20 20   argc>=2 ){.    
df40: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67  const char *zArg
df50: 30 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74  0 = (char*)sqlit
df60: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72  e3_value_text(ar
df70: 67 76 5b 30 5d 29 3b 0a 20 20 20 20 69 66 28 20  gv[0]);.    if( 
df80: 7a 41 72 67 30 20 29 7b 0a 20 20 20 20 20 20 69  zArg0 ){.      i
df90: 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72  f( 0==sqlite3Str
dfa0: 49 43 6d 70 28 7a 41 72 67 30 2c 20 22 69 6e 74  ICmp(zArg0, "int
dfb0: 22 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  ") ){.        sq
dfc0: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74  lite3_result_int
dfd0: 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69 74 65  (context, sqlite
dfe0: 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72 67 76  3_value_int(argv
dff0: 5b 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c  [1]));.      }el
e000: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
e010: 72 49 43 6d 70 28 7a 41 72 67 30 2c 22 69 6e 74  rICmp(zArg0,"int
e020: 36 34 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  64")==0 ){.     
e030: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
e040: 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c  t_int64(context,
e050: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69   sqlite3_value_i
e060: 6e 74 36 34 28 61 72 67 76 5b 31 5d 29 29 3b 0a  nt64(argv[1]));.
e070: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
e080: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
e090: 41 72 67 30 2c 22 73 74 72 69 6e 67 22 29 3d 3d  Arg0,"string")==
e0a0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
e0b0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
e0c0: 28 63 6f 6e 74 65 78 74 2c 20 28 63 68 61 72 2a  (context, (char*
e0d0: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
e0e0: 65 78 74 28 61 72 67 76 5b 31 5d 29 2c 20 2d 31  ext(argv[1]), -1
e0f0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ,.            SQ
e100: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
e110: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
e120: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
e130: 7a 41 72 67 30 2c 22 64 6f 75 62 6c 65 22 29 3d  zArg0,"double")=
e140: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
e150: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
e160: 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c  ble(context, sql
e170: 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c  ite3_value_doubl
e180: 65 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20  e(argv[1]));.   
e190: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
e1a0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67  ite3StrICmp(zArg
e1b0: 30 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a  0,"null")==0 ){.
e1c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
e1d0: 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74  result_null(cont
e1e0: 65 78 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ext);.      }els
e1f0: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
e200: 49 43 6d 70 28 7a 41 72 67 30 2c 22 76 61 6c 75  ICmp(zArg0,"valu
e210: 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  e")==0 ){.      
e220: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
e230: 5f 76 61 6c 75 65 28 63 6f 6e 74 65 78 74 2c 20  _value(context, 
e240: 61 72 67 76 5b 73 71 6c 69 74 65 33 5f 76 61 6c  argv[sqlite3_val
e250: 75 65 5f 69 6e 74 28 61 72 67 76 5b 31 5d 29 5d  ue_int(argv[1])]
e260: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
e270: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 65 72 72          goto err
e280: 6f 72 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  or_out;.      }.
e290: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e2a0: 20 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b   goto error_out;
e2b0: 0a 20 20 20 20 7d 0a 20 20 20 20 61 72 67 63 20  .    }.    argc 
e2c0: 2d 3d 20 32 3b 0a 20 20 20 20 61 72 67 76 20 2b  -= 2;.    argv +
e2d0: 3d 20 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  = 2;.  }.  retur
e2e0: 6e 3b 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a 20  n;..error_out:. 
e2f0: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
e300: 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 22 66  error(context,"f
e310: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 73 68  irst argument sh
e320: 6f 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20  ould be one of: 
e330: 22 0a 20 20 20 20 20 20 22 69 6e 74 20 69 6e 74  ".      "int int
e340: 36 34 20 73 74 72 69 6e 67 20 64 6f 75 62 6c 65  64 string double
e350: 20 6e 75 6c 6c 20 76 61 6c 75 65 22 2c 20 2d 31   null value", -1
e360: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  );.}../*.** Usag
e370: 65 3a 20 20 20 73 71 6c 69 74 65 5f 72 65 67 69  e:   sqlite_regi
e380: 73 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69  ster_test_functi
e390: 6f 6e 20 20 44 42 20 20 4e 41 4d 45 0a 2a 2a 0a  on  DB  NAME.**.
e3a0: 2a 2a 20 52 65 67 69 73 74 65 72 20 74 68 65 20  ** Register the 
e3b0: 74 65 73 74 20 53 51 4c 20 66 75 6e 63 74 69 6f  test SQL functio
e3c0: 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  n on the databas
e3d0: 65 20 44 42 20 75 6e 64 65 72 20 74 68 65 20 6e  e DB under the n
e3e0: 61 6d 65 20 4e 41 4d 45 2e 0a 2a 2f 0a 73 74 61  ame NAME..*/.sta
e3f0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65 67  tic int test_reg
e400: 69 73 74 65 72 5f 66 75 6e 63 28 0a 20 20 76 6f  ister_func(.  vo
e410: 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54  id *NotUsed,.  T
e420: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
e430: 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
e440: 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
e450: 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
e460: 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
e470: 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20  argc,           
e480: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
e490: 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63  arguments */.  c
e4a0: 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20  har **argv      
e4b0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
e4c0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a   each argument *
e4d0: 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  /.){.  sqlite3 *
e4e0: 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  db;.  int rc;.  
e4f0: 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20  if( argc!=3 ){. 
e500: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
e510: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
e520: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
e530: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
e540: 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 20  ], .       " DB 
e550: 46 55 4e 43 54 49 4f 4e 2d 4e 41 4d 45 22 2c 20  FUNCTION-NAME", 
e560: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
e570: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
e580: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
e590: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
e5a0: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
e5b0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
e5c0: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
e5d0: 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 61 72  _function(db, ar
e5e0: 67 76 5b 32 5d 2c 20 2d 31 2c 20 53 51 4c 49 54  gv[2], -1, SQLIT
e5f0: 45 5f 55 54 46 38 2c 20 30 2c 20 0a 20 20 20 20  E_UTF8, 0, .    
e600: 20 20 74 65 73 74 46 75 6e 63 2c 20 30 2c 20 30    testFunc, 0, 0
e610: 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 30 20 29  );.  if( rc!=0 )
e620: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
e630: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73  Result(interp, s
e640: 71 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29  qlite3ErrStr(rc)
e650: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
e660: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
e670: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
e680: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
e690: 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
e6a0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
e6b0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
e6c0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
e6d0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
e6e0: 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 46 69 6e   STMT .**.** Fin
e6f0: 61 6c 69 7a 65 20 61 20 73 74 61 74 65 6d 65 6e  alize a statemen
e700: 74 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73 74 61  t handle..*/.sta
e710: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 66 69 6e  tic int test_fin
e720: 61 6c 69 7a 65 28 0a 20 20 76 6f 69 64 20 2a 20  alize(.  void * 
e730: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
e740: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
e750: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
e760: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
e770: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
e780: 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
e790: 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69    int rc;.  sqli
e7a0: 74 65 33 20 2a 64 62 20 3d 20 30 3b 0a 0a 20 20  te3 *db = 0;..  
e7b0: 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20  if( objc!=2 ){. 
e7c0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
e7d0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
e7e0: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
e7f0: 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
e800: 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
e810: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
e820: 30 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30  0), " <STMT>", 0
e830: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
e840: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
e850: 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
e860: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
e870: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
e880: 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
e890: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
e8a0: 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20    if( pStmt ){. 
e8b0: 20 20 20 64 62 20 3d 20 53 74 6d 74 54 6f 44 62     db = StmtToDb
e8c0: 28 70 53 74 6d 74 29 3b 0a 20 20 7d 0a 20 20 72  (pStmt);.  }.  r
e8d0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  c = sqlite3_fina
e8e0: 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 54  lize(pStmt);.  T
e8f0: 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
e900: 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45  erp, (char *)t1E
e910: 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43  rrorName(rc), TC
e920: 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 69 66 28  L_STATIC);.  if(
e930: 20 64 62 20 26 26 20 73 71 6c 69 74 65 33 54 65   db && sqlite3Te
e940: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
e950: 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
e960: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
e970: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
e980: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
e990: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61  sqlite3_stmt_sta
e9a0: 74 75 73 20 20 53 54 4d 54 20 20 43 4f 44 45 20  tus  STMT  CODE 
e9b0: 20 52 45 53 45 54 46 4c 41 47 0a 2a 2a 0a 2a 2a   RESETFLAG.**.**
e9c0: 20 47 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   Get the value o
e9d0: 66 20 61 20 73 74 61 74 75 73 20 63 6f 75 6e 74  f a status count
e9e0: 65 72 20 66 72 6f 6d 20 61 20 73 74 61 74 65 6d  er from a statem
e9f0: 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ent..*/.static i
ea00: 6e 74 20 74 65 73 74 5f 73 74 6d 74 5f 73 74 61  nt test_stmt_sta
ea10: 74 75 73 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  tus(.  void * cl
ea20: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
ea30: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
ea40: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
ea50: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
ea60: 76 5b 5d 0a 29 7b 0a 20 20 69 6e 74 20 69 56 61  v[].){.  int iVa
ea70: 6c 75 65 3b 0a 20 20 69 6e 74 20 69 2c 20 6f 70  lue;.  int i, op
ea80: 2c 20 72 65 73 65 74 46 6c 61 67 3b 0a 20 20 63  , resetFlag;.  c
ea90: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 4e 61  onst char *zOpNa
eaa0: 6d 65 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  me;.  sqlite3_st
eab0: 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 73 74  mt *pStmt;..  st
eac0: 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63  atic const struc
ead0: 74 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68  t {.    const ch
eae0: 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 69  ar *zName;.    i
eaf0: 6e 74 20 6f 70 3b 0a 20 20 7d 20 61 4f 70 5b 5d  nt op;.  } aOp[]
eb00: 20 3d 20 7b 0a 20 20 20 20 7b 20 22 53 51 4c 49   = {.    { "SQLI
eb10: 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 46 55  TE_STMTSTATUS_FU
eb20: 4c 4c 53 43 41 4e 5f 53 54 45 50 22 2c 20 20 20  LLSCAN_STEP",   
eb30: 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
eb40: 53 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 20  S_FULLSCAN_STEP 
eb50: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 53 51 4c 49    },.    { "SQLI
eb60: 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f  TE_STMTSTATUS_SO
eb70: 52 54 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  RT",            
eb80: 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
eb90: 53 5f 53 4f 52 54 20 20 20 20 20 20 20 20 20 20  S_SORT          
eba0: 20 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69 66 28 20    },.  };.  if( 
ebb0: 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54  objc!=4 ){.    T
ebc0: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
ebd0: 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
ebe0: 20 22 53 54 4d 54 20 50 41 52 41 4d 45 54 45 52   "STMT PARAMETER
ebf0: 20 52 45 53 45 54 46 4c 41 47 22 29 3b 0a 20 20   RESETFLAG");.  
ec00: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
ec10: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
ec20: 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
ec30: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
ec40: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
ec50: 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
ec60: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 4f 70 4e 61  L_ERROR;.  zOpNa
ec70: 6d 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  me = Tcl_GetStri
ec80: 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20 66  ng(objv[2]);.  f
ec90: 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53  or(i=0; i<ArrayS
eca0: 69 7a 65 28 61 4f 70 29 3b 20 69 2b 2b 29 7b 0a  ize(aOp); i++){.
ecb0: 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61      if( strcmp(a
ecc0: 4f 70 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 7a 4f 70  Op[i].zName, zOp
ecd0: 4e 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Name)==0 ){.    
ece0: 20 20 6f 70 20 3d 20 61 4f 70 5b 69 5d 2e 6f 70    op = aOp[i].op
ecf0: 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
ed00: 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69     }.  }.  if( i
ed10: 3e 3d 41 72 72 61 79 53 69 7a 65 28 61 4f 70 29  >=ArraySize(aOp)
ed20: 20 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f   ){.    if( Tcl_
ed30: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
ed40: 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
ed50: 6f 70 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  op) ) return TCL
ed60: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
ed70: 28 20 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e  ( Tcl_GetBoolean
ed80: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
ed90: 6f 62 6a 76 5b 33 5d 2c 20 26 72 65 73 65 74 46  objv[3], &resetF
eda0: 6c 61 67 29 20 29 20 72 65 74 75 72 6e 20 54 43  lag) ) return TC
edb0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 56 61 6c 75  L_ERROR;.  iValu
edc0: 65 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  e = sqlite3_stmt
edd0: 5f 73 74 61 74 75 73 28 70 53 74 6d 74 2c 20 6f  _status(pStmt, o
ede0: 70 2c 20 72 65 73 65 74 46 6c 61 67 29 3b 0a 20  p, resetFlag);. 
edf0: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
ee00: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
ee10: 77 49 6e 74 4f 62 6a 28 69 56 61 6c 75 65 29 29  wIntObj(iValue))
ee20: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
ee30: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
ee40: 65 3a 20 20 73 71 6c 69 74 65 33 5f 6e 65 78 74  e:  sqlite3_next
ee50: 5f 73 74 6d 74 20 20 44 42 20 20 53 54 4d 54 0a  _stmt  DB  STMT.
ee60: 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
ee70: 20 6e 65 78 74 20 73 74 61 74 6d 65 6e 74 20 69   next statment i
ee80: 6e 20 73 65 71 75 65 6e 63 65 20 61 66 74 65 72  n sequence after
ee90: 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69 63   STMT..*/.static
eea0: 20 69 6e 74 20 74 65 73 74 5f 6e 65 78 74 5f 73   int test_next_s
eeb0: 74 6d 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  tmt(.  void * cl
eec0: 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
eed0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
eee0: 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
eef0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
ef00: 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
ef10: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
ef20: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 30 3b  sqlite3 *db = 0;
ef30: 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d  .  char zBuf[50]
ef40: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  ;..  if( objc!=3
ef50: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
ef60: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
ef70: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
ef80: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
ef90: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
efa0: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
efb0: 5b 30 5d 2c 20 30 29 2c 20 22 20 44 42 20 53 54  [0], 0), " DB ST
efc0: 4d 54 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  MT", 0);.    ret
efd0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
efe0: 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 44 62 50   }..  if( getDbP
eff0: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
f000: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
f010: 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
f020: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
f030: 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
f040: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
f050: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
f060: 32 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  2]), &pStmt) ) r
f070: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
f080: 0a 20 20 70 53 74 6d 74 20 3d 20 73 71 6c 69 74  .  pStmt = sqlit
f090: 65 33 5f 6e 65 78 74 5f 73 74 6d 74 28 64 62 2c  e3_next_stmt(db,
f0a0: 20 70 53 74 6d 74 29 3b 0a 20 20 69 66 28 20 70   pStmt);.  if( p
f0b0: 53 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28 20  Stmt ){.    if( 
f0c0: 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50  sqlite3TestMakeP
f0d0: 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70  ointerStr(interp
f0e0: 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20 29  , zBuf, pStmt) )
f0f0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f100: 52 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  R;.    Tcl_Appen
f110: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
f120: 7a 42 75 66 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  zBuf, 0);.  }.  
f130: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
f140: 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  .../*.** Usage: 
f150: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 20   sqlite3_reset  
f160: 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 73 65  STMT .**.** Rese
f170: 74 20 61 20 73 74 61 74 65 6d 65 6e 74 20 68 61  t a statement ha
f180: 6e 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ndle..*/.static 
f190: 69 6e 74 20 74 65 73 74 5f 72 65 73 65 74 28 0a  int test_reset(.
f1a0: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
f1b0: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
f1c0: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
f1d0: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
f1e0: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
f1f0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
f200: 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72   *pStmt;.  int r
f210: 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
f220: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
f230: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
f240: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
f250: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
f260: 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53          Tcl_GetS
f270: 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
f280: 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54 4d  v[0], 0), " <STM
f290: 54 3e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  T>", 0);.    ret
f2a0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
f2b0: 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
f2c0: 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
f2d0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
f2e0: 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
f2f0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
f300: 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
f310: 69 74 65 33 5f 72 65 73 65 74 28 70 53 74 6d 74  ite3_reset(pStmt
f320: 29 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 20 26  );.  if( pStmt &
f330: 26 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  & sqlite3TestErr
f340: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d  Code(interp, Stm
f350: 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63  tToDb(pStmt), rc
f360: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
f370: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
f380: 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
f390: 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74  nterp, (char *)t
f3a0: 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  1ErrorName(rc), 
f3b0: 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 2f 2a 0a  TCL_STATIC);./*.
f3c0: 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
f3d0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f3e0: 3b 0a 20 20 7d 0a 2a 2f 0a 20 20 72 65 74 75 72  ;.  }.*/.  retur
f3f0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
f400: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
f410: 65 33 5f 65 78 70 69 72 65 64 20 53 54 4d 54 20  e3_expired STMT 
f420: 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52  .**.** Return TR
f430: 55 45 20 69 66 20 61 20 72 65 63 6f 6d 70 69 6c  UE if a recompil
f440: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74 61  ation of the sta
f450: 74 65 6d 65 6e 74 20 69 73 20 72 65 63 6f 6d 6d  tement is recomm
f460: 65 6e 64 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  ended..*/.static
f470: 20 69 6e 74 20 74 65 73 74 5f 65 78 70 69 72 65   int test_expire
f480: 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  d(.  void * clie
f490: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
f4a0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
f4b0: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
f4c0: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
f4d0: 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ].){.#ifndef SQL
f4e0: 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41  ITE_OMIT_DEPRECA
f4f0: 54 45 44 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  TED.  sqlite3_st
f500: 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 66 28  mt *pStmt;.  if(
f510: 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20   objc!=2 ){.    
f520: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
f530: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
f540: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
f550: 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54  e \"",.        T
f560: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
f570: 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c  Obj(objv[0], 0),
f580: 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b 0a   " <STMT>", 0);.
f590: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
f5a0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
f5b0: 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
f5c0: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
f5d0: 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
f5e0: 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
f5f0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
f600: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
f610: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f  terp, Tcl_NewBoo
f620: 6c 65 61 6e 4f 62 6a 28 73 71 6c 69 74 65 33 5f  leanObj(sqlite3_
f630: 65 78 70 69 72 65 64 28 70 53 74 6d 74 29 29 29  expired(pStmt)))
f640: 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
f650: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
f660: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
f670: 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64  e3_transfer_bind
f680: 69 6e 67 73 20 46 52 4f 4d 53 54 4d 54 20 54 4f  ings FROMSTMT TO
f690: 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  STMT.**.** Trans
f6a0: 66 65 72 20 61 6c 6c 20 62 69 6e 64 69 6e 67 73  fer all bindings
f6b0: 20 66 72 6f 6d 20 46 52 4f 4d 53 54 4d 54 20 6f   from FROMSTMT o
f6c0: 76 65 72 20 74 6f 20 54 4f 53 54 4d 54 0a 2a 2f  ver to TOSTMT.*/
f6d0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
f6e0: 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 28 0a  _transfer_bind(.
f6f0: 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
f700: 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
f710: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
f720: 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
f730: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
f740: 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
f750: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
f760: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
f770: 2a 70 53 74 6d 74 31 2c 20 2a 70 53 74 6d 74 32  *pStmt1, *pStmt2
f780: 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ;.  if( objc!=3 
f790: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
f7a0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
f7b0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
f7c0: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
f7d0: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
f7e0: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
f7f0: 30 5d 2c 20 30 29 2c 20 22 20 46 52 4f 4d 2d 53  0], 0), " FROM-S
f800: 54 4d 54 20 54 4f 2d 53 54 4d 54 22 2c 20 30 29  TMT TO-STMT", 0)
f810: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
f820: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
f830: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
f840: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
f850: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
f860: 20 26 70 53 74 6d 74 31 29 29 20 72 65 74 75 72   &pStmt1)) retur
f870: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
f880: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
f890: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
f8a0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29  tString(objv[2])
f8b0: 2c 20 26 70 53 74 6d 74 32 29 29 20 72 65 74 75  , &pStmt2)) retu
f8c0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
f8d0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
f8e0: 28 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54  (interp, .     T
f8f0: 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
f900: 69 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69  ite3_transfer_bi
f910: 6e 64 69 6e 67 73 28 70 53 74 6d 74 31 2c 70 53  ndings(pStmt1,pS
f920: 74 6d 74 32 29 29 29 3b 0a 23 65 6e 64 69 66 0a  tmt2)));.#endif.
f930: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
f940: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
f950: 20 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65    sqlite3_change
f960: 73 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  s DB.**.** Retur
f970: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
f980: 63 68 61 6e 67 65 73 20 6d 61 64 65 20 74 6f 20  changes made to 
f990: 74 68 65 20 64 61 74 61 62 61 73 65 20 62 79 20  the database by 
f9a0: 74 68 65 20 6c 61 73 74 20 53 51 4c 0a 2a 2a 20  the last SQL.** 
f9b0: 65 78 65 63 75 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  execution..*/.st
f9c0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 68  atic int test_ch
f9d0: 61 6e 67 65 73 28 0a 20 20 76 6f 69 64 20 2a 20  anges(.  void * 
f9e0: 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
f9f0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
fa00: 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
fa10: 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
fa20: 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
fa30: 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 6f 62  e3 *db;.  if( ob
fa40: 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
fa50: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
fa60: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
fa70: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
fa80: 22 22 2c 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  "",.       Tcl_G
fa90: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
faa0: 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20  ), " DB", 0);.  
fab0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
fac0: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
fad0: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
fae0: 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
faf0: 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20  (objv[1]), &db) 
fb00: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
fb10: 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  OR;.  Tcl_SetObj
fb20: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
fb30: 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
fb40: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 64 62 29  ite3_changes(db)
fb50: 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
fb60: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  _OK;.}../*.** Th
fb70: 69 73 20 69 73 20 74 68 65 20 22 73 74 61 74 69  is is the "stati
fb80: 63 5f 62 69 6e 64 5f 76 61 6c 75 65 22 20 74 68  c_bind_value" th
fb90: 61 74 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  at variables are
fba0: 20 62 6f 75 6e 64 20 74 6f 20 77 68 65 6e 0a 2a   bound to when.*
fbb0: 2a 20 74 68 65 20 46 4c 41 47 20 6f 70 74 69 6f  * the FLAG optio
fbc0: 6e 20 6f 66 20 73 71 6c 69 74 65 33 5f 62 69 6e  n of sqlite3_bin
fbd0: 64 20 69 73 20 22 73 74 61 74 69 63 22 0a 2a 2f  d is "static".*/
fbe0: 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 73 71  .static char *sq
fbf0: 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64  lite_static_bind
fc00: 5f 76 61 6c 75 65 20 3d 20 30 3b 0a 73 74 61 74  _value = 0;.stat
fc10: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 5f 73 74  ic int sqlite_st
fc20: 61 74 69 63 5f 62 69 6e 64 5f 6e 62 79 74 65 20  atic_bind_nbyte 
fc30: 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  = 0;../*.** Usag
fc40: 65 3a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  e:  sqlite3_bind
fc50: 20 20 56 4d 20 20 49 44 58 20 20 56 41 4c 55 45    VM  IDX  VALUE
fc60: 20 20 46 4c 41 47 53 0a 2a 2a 0a 2a 2a 20 53 65    FLAGS.**.** Se
fc70: 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ts the value of 
fc80: 74 68 65 20 49 44 58 2d 74 68 20 6f 63 63 75 72  the IDX-th occur
fc90: 61 6e 63 65 20 6f 66 20 22 3f 22 20 69 6e 20 74  ance of "?" in t
fca0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 0a  he original SQL.
fcb0: 2a 2a 20 73 74 72 69 6e 67 2e 20 20 56 41 4c 55  ** string.  VALU
fcc0: 45 20 69 73 20 74 68 65 20 6e 65 77 20 76 61 6c  E is the new val
fcd0: 75 65 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d 22  ue.  If FLAGS=="
fce0: 6e 75 6c 6c 22 20 74 68 65 6e 20 56 41 4c 55 45  null" then VALUE
fcf0: 20 69 73 0a 2a 2a 20 69 67 6e 6f 72 65 64 20 61   is.** ignored a
fd00: 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  nd the value is 
fd10: 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 49 66  set to NULL.  If
fd20: 20 46 4c 41 47 53 3d 3d 22 73 74 61 74 69 63 22   FLAGS=="static"
fd30: 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 76 61 6c   then.** the val
fd40: 75 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  ue is set to the
fd50: 20 76 61 6c 75 65 20 6f 66 20 61 20 73 74 61 74   value of a stat
fd60: 69 63 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  ic variable name
fd70: 64 0a 2a 2a 20 22 73 71 6c 69 74 65 5f 73 74 61  d.** "sqlite_sta
fd80: 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 22 2e  tic_bind_value".
fd90: 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e 6f 72    If FLAGS=="nor
fda0: 6d 61 6c 22 20 74 68 65 6e 20 61 20 63 6f 70 79  mal" then a copy
fdb0: 0a 2a 2a 20 6f 66 20 74 68 65 20 56 41 4c 55 45  .** of the VALUE
fdc0: 20 69 73 20 6d 61 64 65 2e 20 20 49 66 20 46 4c   is made.  If FL
fdd0: 41 47 53 3d 3d 22 62 6c 6f 62 31 30 22 20 74 68  AGS=="blob10" th
fde0: 65 6e 20 61 20 56 41 4c 55 45 20 69 73 20 69 67  en a VALUE is ig
fdf0: 6e 6f 72 65 64 0a 2a 2a 20 61 6e 20 61 20 31 30  nored.** an a 10
fe00: 2d 62 79 74 65 20 62 6c 6f 62 20 22 61 62 63 5c  -byte blob "abc\
fe10: 30 30 30 78 79 7a 5c 30 30 30 70 71 22 20 69 73  000xyz\000pq" is
fe20: 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a 73 74   inserted..*/.st
fe30: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69  atic int test_bi
fe40: 6e 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  nd(.  void *NotU
fe50: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
fe60: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
fe70: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
fe80: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
fe90: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
fea0: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
feb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
fec0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
fed0: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
fee0: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
fef0: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
ff00: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73  gument */.){.  s
ff10: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
ff20: 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20  mt;.  int rc;.  
ff30: 69 6e 74 20 69 64 78 3b 0a 20 20 69 66 28 20 61  int idx;.  if( a
ff40: 72 67 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63  rgc!=5 ){.    Tc
ff50: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
ff60: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
ff70: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
ff80: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20  \"", argv[0], . 
ff90: 20 20 20 20 20 20 22 20 56 4d 20 49 44 58 20 56        " VM IDX V
ffa0: 41 4c 55 45 20 28 6e 75 6c 6c 7c 73 74 61 74 69  ALUE (null|stati
ffb0: 63 7c 6e 6f 72 6d 61 6c 29 5c 22 22 2c 20 30 29  c|normal)\"", 0)
ffc0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
ffd0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
ffe0: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
fff0: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
10000 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
10010 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
10020 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69  if( Tcl_GetInt(i
10030 6e 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20  nterp, argv[2], 
10040 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
10050 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
10060 73 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22  strcmp(argv[4],"
10070 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20  null")==0 ){.   
10080 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69   rc = sqlite3_bi
10090 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69  nd_null(pStmt, i
100a0 64 78 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  dx);.  }else if(
100b0 20 73 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c   strcmp(argv[4],
100c0 22 73 74 61 74 69 63 22 29 3d 3d 30 20 29 7b 0a  "static")==0 ){.
100d0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
100e0 5f 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74  _bind_text(pStmt
100f0 2c 20 69 64 78 2c 20 73 71 6c 69 74 65 5f 73 74  , idx, sqlite_st
10100 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 2c  atic_bind_value,
10110 20 2d 31 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65   -1, 0);.  }else
10120 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76   if( strcmp(argv
10130 5b 34 5d 2c 22 73 74 61 74 69 63 2d 6e 62 79 74  [4],"static-nbyt
10140 65 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  es")==0 ){.    r
10150 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
10160 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78  _text(pStmt, idx
10170 2c 20 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f  , sqlite_static_
10180 62 69 6e 64 5f 76 61 6c 75 65 2c 0a 20 20 20 20  bind_value,.    
10190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101b0 20 20 20 73 71 6c 69 74 65 5f 73 74 61 74 69 63     sqlite_static
101c0 5f 62 69 6e 64 5f 6e 62 79 74 65 2c 20 30 29 3b  _bind_nbyte, 0);
101d0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72  .  }else if( str
101e0 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 6e 6f 72  cmp(argv[4],"nor
101f0 6d 61 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  mal")==0 ){.    
10200 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
10210 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64  d_text(pStmt, id
10220 78 2c 20 61 72 67 76 5b 33 5d 2c 20 2d 31 2c 20  x, argv[3], -1, 
10230 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
10240 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73  );.  }else if( s
10250 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 62  trcmp(argv[4],"b
10260 6c 6f 62 31 30 22 29 3d 3d 30 20 29 7b 0a 20 20  lob10")==0 ){.  
10270 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62    rc = sqlite3_b
10280 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  ind_text(pStmt, 
10290 69 64 78 2c 20 22 61 62 63 5c 30 30 30 78 79 7a  idx, "abc\000xyz
102a0 5c 30 30 30 70 71 22 2c 20 31 30 2c 20 53 51 4c  \000pq", 10, SQL
102b0 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d  ITE_STATIC);.  }
102c0 65 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70  else{.    Tcl_Ap
102d0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
102e0 70 2c 20 22 34 74 68 20 61 72 67 75 6d 65 6e 74  p, "4th argument
102f0 20 73 68 6f 75 6c 64 20 62 65 20 22 0a 20 20 20   should be ".   
10300 20 20 20 20 20 22 5c 22 6e 75 6c 6c 5c 22 20 6f       "\"null\" o
10310 72 20 5c 22 73 74 61 74 69 63 5c 22 20 6f 72 20  r \"static\" or 
10320 5c 22 6e 6f 72 6d 61 6c 5c 22 22 2c 20 30 29 3b  \"normal\"", 0);
10330 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
10340 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
10350 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
10360 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74  ode(interp, Stmt
10370 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29  ToDb(pStmt), rc)
10380 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
10390 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 20 29 7b  ROR;.  if( rc ){
103a0 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 35  .    char zBuf[5
103b0 30 5d 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28  0];.    sprintf(
103c0 7a 42 75 66 2c 20 22 28 25 64 29 20 22 2c 20 72  zBuf, "(%d) ", r
103d0 63 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  c);.    Tcl_Appe
103e0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
103f0 20 7a 42 75 66 2c 20 73 71 6c 69 74 65 33 45 72   zBuf, sqlite3Er
10400 72 53 74 72 28 72 63 29 2c 20 30 29 3b 0a 20 20  rStr(rc), 0);.  
10410 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
10420 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  OR;.  }.  return
10430 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e   TCL_OK;.}..#ifn
10440 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
10450 55 54 46 31 36 0a 2f 2a 0a 2a 2a 20 55 73 61 67  UTF16./*.** Usag
10460 65 3a 20 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c  e: add_test_coll
10470 61 74 65 20 3c 64 62 20 70 74 72 3e 20 3c 75 74  ate <db ptr> <ut
10480 66 38 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75  f8> <utf16le> <u
10490 74 66 31 36 62 65 3e 0a 2a 2a 0a 2a 2a 20 54 68  tf16be>.**.** Th
104a0 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75  is function is u
104b0 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 61 74  sed to test that
104c0 20 53 51 4c 69 74 65 20 73 65 6c 65 63 74 73 20   SQLite selects 
104d0 74 68 65 20 63 6f 72 72 65 63 74 20 63 6f 6c 6c  the correct coll
104e0 61 74 69 6f 6e 0a 2a 2a 20 73 65 71 75 65 6e 63  ation.** sequenc
104f0 65 20 63 61 6c 6c 62 61 63 6b 20 77 68 65 6e 20  e callback when 
10500 6d 75 6c 74 69 70 6c 65 20 76 65 72 73 69 6f 6e  multiple version
10510 73 20 28 66 6f 72 20 64 69 66 66 65 72 65 6e 74  s (for different
10520 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 73 29   text encodings)
10530 0a 2a 2a 20 61 72 65 20 61 76 61 69 6c 61 62 6c  .** are availabl
10540 65 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 69 6e 67  e..**.** Calling
10550 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65   this routine re
10560 67 69 73 74 65 72 73 20 74 68 65 20 63 6f 6c 6c  gisters the coll
10570 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 22  ation sequence "
10580 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 0a 2a 2a  test_collate".**
10590 20 77 69 74 68 20 64 61 74 61 62 61 73 65 20 68   with database h
105a0 61 6e 64 6c 65 20 3c 64 62 3e 2e 20 54 68 65 20  andle <db>. The 
105b0 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20  second argument 
105c0 6d 75 73 74 20 62 65 20 61 20 6c 69 73 74 20 6f  must be a list o
105d0 66 20 74 68 72 65 65 0a 2a 2a 20 62 6f 6f 6c 65  f three.** boole
105e0 61 6e 20 76 61 6c 75 65 73 2e 20 49 66 20 74 68  an values. If th
105f0 65 20 66 69 72 73 74 20 69 73 20 74 72 75 65 2c  e first is true,
10600 20 74 68 65 6e 20 61 20 76 65 72 73 69 6f 6e 20   then a version 
10610 6f 66 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20  of test_collate 
10620 69 73 0a 2a 2a 20 72 65 67 69 73 74 65 72 65 64  is.** registered
10630 20 66 6f 72 20 55 54 46 2d 38 2c 20 69 66 20 74   for UTF-8, if t
10640 68 65 20 73 65 63 6f 6e 64 20 69 73 20 74 72 75  he second is tru
10650 65 2c 20 61 20 76 65 72 73 69 6f 6e 20 69 73 20  e, a version is 
10660 72 65 67 69 73 74 65 72 65 64 20 66 6f 72 0a 2a  registered for.*
10670 2a 20 55 54 46 2d 31 36 6c 65 2c 20 69 66 20 74  * UTF-16le, if t
10680 68 65 20 74 68 69 72 64 20 69 73 20 74 72 75 65  he third is true
10690 2c 20 61 20 55 54 46 2d 31 36 62 65 20 76 65 72  , a UTF-16be ver
106a0 73 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  sion is availabl
106b0 65 2e 0a 2a 2a 20 50 72 65 76 69 6f 75 73 20 76  e..** Previous v
106c0 65 72 73 69 6f 6e 73 20 6f 66 20 74 65 73 74 5f  ersions of test_
106d0 63 6f 6c 6c 61 74 65 20 61 72 65 20 64 65 6c 65  collate are dele
106e0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ted..**.** The c
106f0 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
10700 65 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 69  e test_collate i
10710 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
10720 20 63 61 6c 6c 69 6e 67 20 74 68 65 0a 2a 2a 20   calling the.** 
10730 66 6f 6c 6c 6f 77 69 6e 67 20 54 43 4c 20 73 63  following TCL sc
10740 72 69 70 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 22 74  ript:.**.**   "t
10750 65 73 74 5f 63 6f 6c 6c 61 74 65 20 3c 65 6e 63  est_collate <enc
10760 3e 20 3c 6c 68 73 3e 20 3c 72 68 73 3e 22 0a 2a  > <lhs> <rhs>".*
10770 2a 0a 2a 2a 20 54 68 65 20 3c 6c 68 73 3e 20 61  *.** The <lhs> a
10780 6e 64 20 3c 72 68 73 3e 20 61 72 65 20 74 68 65  nd <rhs> are the
10790 20 74 77 6f 20 76 61 6c 75 65 73 20 62 65 69 6e   two values bein
107a0 67 20 63 6f 6d 70 61 72 65 64 2c 20 65 6e 63 6f  g compared, enco
107b0 64 65 64 20 69 6e 20 55 54 46 2d 38 2e 0a 2a 2a  ded in UTF-8..**
107c0 20 54 68 65 20 3c 65 6e 63 3e 20 70 61 72 61 6d   The <enc> param
107d0 65 74 65 72 20 69 73 20 74 68 65 20 65 6e 63 6f  eter is the enco
107e0 64 69 6e 67 20 6f 66 20 74 68 65 20 63 6f 6c 6c  ding of the coll
107f0 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 74  ation function t
10800 68 61 74 0a 2a 2a 20 53 51 4c 69 74 65 20 73 65  hat.** SQLite se
10810 6c 65 63 74 65 64 20 74 6f 20 63 61 6c 6c 2e 20  lected to call. 
10820 54 68 65 20 54 43 4c 20 74 65 73 74 20 73 63 72  The TCL test scr
10830 69 70 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  ipt implements t
10840 68 65 0a 2a 2a 20 22 74 65 73 74 5f 63 6f 6c 6c  he.** "test_coll
10850 61 74 65 22 20 70 72 6f 63 2e 0a 2a 2a 0a 2a 2a  ate" proc..**.**
10860 20 4e 6f 74 65 20 74 68 61 74 20 74 68 69 73 20   Note that this 
10870 77 69 6c 6c 20 6f 6e 6c 79 20 77 6f 72 6b 20 77  will only work w
10880 69 74 68 20 6f 6e 65 20 69 6e 74 65 70 72 65 74  ith one intepret
10890 65 72 20 61 74 20 61 20 74 69 6d 65 2c 20 61 73  er at a time, as
108a0 20 74 68 65 0a 2a 2a 20 69 6e 74 65 72 70 20 70   the.** interp p
108b0 6f 69 6e 74 65 72 20 74 6f 20 75 73 65 20 77 68  ointer to use wh
108c0 65 6e 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68  en evaluating th
108d0 65 20 54 43 4c 20 73 63 72 69 70 74 20 69 73 20  e TCL script is 
108e0 73 74 6f 72 65 64 20 69 6e 0a 2a 2a 20 70 54 65  stored in.** pTe
108f0 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 2e  stCollateInterp.
10900 0a 2a 2f 0a 73 74 61 74 69 63 20 54 63 6c 5f 49  .*/.static Tcl_I
10910 6e 74 65 72 70 2a 20 70 54 65 73 74 43 6f 6c 6c  nterp* pTestColl
10920 61 74 65 49 6e 74 65 72 70 3b 0a 73 74 61 74 69  ateInterp;.stati
10930 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c 61  c int test_colla
10940 74 65 5f 66 75 6e 63 28 0a 20 20 76 6f 69 64 20  te_func(.  void 
10950 2a 70 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41  *pCtx, .  int nA
10960 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 41  , const void *zA
10970 2c 0a 20 20 69 6e 74 20 6e 42 2c 20 63 6f 6e 73  ,.  int nB, cons
10980 74 20 76 6f 69 64 20 2a 7a 42 0a 29 7b 0a 20 20  t void *zB.){.  
10990 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 20 3d 20  Tcl_Interp *i = 
109a0 70 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65  pTestCollateInte
109b0 72 70 3b 0a 20 20 69 6e 74 20 65 6e 63 69 6e 20  rp;.  int encin 
109c0 3d 20 28 69 6e 74 29 70 43 74 78 3b 0a 20 20 69  = (int)pCtx;.  i
109d0 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 3b  nt res;.  int n;
109e0 0a 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ..  sqlite3_valu
109f0 65 20 2a 70 56 61 6c 3b 0a 20 20 54 63 6c 5f 4f  e *pVal;.  Tcl_O
10a00 62 6a 20 2a 70 58 3b 0a 0a 20 20 70 58 20 3d 20  bj *pX;..  pX = 
10a10 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
10a20 28 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c  ("test_collate",
10a30 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72   -1);.  Tcl_Incr
10a40 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 0a 20  RefCount(pX);.. 
10a50 20 73 77 69 74 63 68 28 20 65 6e 63 69 6e 20 29   switch( encin )
10a60 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  {.    case SQLIT
10a70 45 5f 55 54 46 38 3a 0a 20 20 20 20 20 20 54 63  E_UTF8:.      Tc
10a80 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
10a90 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f  lement(i,pX,Tcl_
10aa0 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54  NewStringObj("UT
10ab0 46 2d 38 22 2c 2d 31 29 29 3b 0a 20 20 20 20 20  F-8",-1));.     
10ac0 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
10ad0 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 3a   SQLITE_UTF16LE:
10ae0 0a 20 20 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f  .      Tcl_ListO
10af0 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
10b00 69 2c 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69  i,pX,Tcl_NewStri
10b10 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 4c 45 22  ngObj("UTF-16LE"
10b20 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20 62 72 65  ,-1));.      bre
10b30 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c  ak;.    case SQL
10b40 49 54 45 5f 55 54 46 31 36 42 45 3a 0a 20 20 20  ITE_UTF16BE:.   
10b50 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70     Tcl_ListObjAp
10b60 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58  pendElement(i,pX
10b70 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62  ,Tcl_NewStringOb
10b80 6a 28 22 55 54 46 2d 31 36 42 45 22 2c 2d 31 29  j("UTF-16BE",-1)
10b90 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
10ba0 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20      default:.   
10bb0 20 20 20 61 73 73 65 72 74 28 30 29 3b 0a 20 20     assert(0);.  
10bc0 7d 0a 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69  }..  pVal = sqli
10bd0 74 65 33 56 61 6c 75 65 4e 65 77 28 30 29 3b 0a  te3ValueNew(0);.
10be0 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
10bf0 74 53 74 72 28 70 56 61 6c 2c 20 6e 41 2c 20 7a  tStr(pVal, nA, z
10c00 41 2c 20 65 6e 63 69 6e 2c 20 53 51 4c 49 54 45  A, encin, SQLITE
10c10 5f 53 54 41 54 49 43 29 3b 0a 20 20 6e 20 3d 20  _STATIC);.  n = 
10c20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
10c30 74 65 73 28 70 56 61 6c 29 3b 0a 20 20 54 63 6c  tes(pVal);.  Tcl
10c40 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
10c50 65 6d 65 6e 74 28 69 2c 70 58 2c 0a 20 20 20 20  ement(i,pX,.    
10c60 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
10c70 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65  bj((char*)sqlite
10c80 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61  3_value_text(pVa
10c90 6c 29 2c 6e 29 29 3b 0a 20 20 73 71 6c 69 74 65  l),n));.  sqlite
10ca0 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61  3ValueSetStr(pVa
10cb0 6c 2c 20 6e 42 2c 20 7a 42 2c 20 65 6e 63 69 6e  l, nB, zB, encin
10cc0 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
10cd0 3b 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f  ;.  n = sqlite3_
10ce0 76 61 6c 75 65 5f 62 79 74 65 73 28 70 56 61 6c  value_bytes(pVal
10cf0 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  );.  Tcl_ListObj
10d00 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c  AppendElement(i,
10d10 70 58 2c 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65  pX,.      Tcl_Ne
10d20 77 53 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72  wStringObj((char
10d30 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
10d40 74 65 78 74 28 70 56 61 6c 29 2c 6e 29 29 3b 0a  text(pVal),n));.
10d50 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72    sqlite3ValueFr
10d60 65 65 28 70 56 61 6c 29 3b 0a 0a 20 20 54 63 6c  ee(pVal);..  Tcl
10d70 5f 45 76 61 6c 4f 62 6a 45 78 28 69 2c 20 70 58  _EvalObjEx(i, pX
10d80 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72  , 0);.  Tcl_Decr
10d90 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20  RefCount(pX);.  
10da0 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
10db0 6a 28 69 2c 20 54 63 6c 5f 47 65 74 4f 62 6a 52  j(i, Tcl_GetObjR
10dc0 65 73 75 6c 74 28 69 29 2c 20 26 72 65 73 29 3b  esult(i), &res);
10dd0 0a 20 20 72 65 74 75 72 6e 20 72 65 73 3b 0a 7d  .  return res;.}
10de0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
10df0 5f 63 6f 6c 6c 61 74 65 28 0a 20 20 76 6f 69 64  _collate(.  void
10e00 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
10e10 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
10e20 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
10e30 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
10e40 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
10e50 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74  lite3 *db;.  int
10e60 20 76 61 6c 3b 0a 20 20 73 71 6c 69 74 65 33 5f   val;.  sqlite3_
10e70 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69  value *pVal;.  i
10e80 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
10e90 6a 63 21 3d 35 20 29 20 67 6f 74 6f 20 62 61 64  jc!=5 ) goto bad
10ea0 5f 61 72 67 73 3b 0a 20 20 70 54 65 73 74 43 6f  _args;.  pTestCo
10eb0 6c 6c 61 74 65 49 6e 74 65 72 70 20 3d 20 69 6e  llateInterp = in
10ec0 74 65 72 70 3b 0a 20 20 69 66 28 20 67 65 74 44  terp;.  if( getD
10ed0 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
10ee0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
10ef0 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20  bjv[1]), &db) ) 
10f00 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
10f10 3b 0a 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21  ;..  if( TCL_OK!
10f20 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46  =Tcl_GetBooleanF
10f30 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
10f40 62 6a 76 5b 32 5d 2c 20 26 76 61 6c 29 20 29 20  bjv[2], &val) ) 
10f50 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
10f60 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
10f70 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
10f80 6e 28 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c  n(db, "test_coll
10f90 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  ate", SQLITE_UTF
10fa0 38 2c 20 0a 20 20 20 20 20 20 20 20 20 20 28 76  8, .          (v
10fb0 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f 55 54 46  oid *)SQLITE_UTF
10fc0 38 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c  8, val?test_coll
10fd0 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20 20 69  ate_func:0);.  i
10fe0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
10ff0 20 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 76 6f   ){.    const vo
11000 69 64 20 2a 7a 55 74 66 31 36 3b 0a 20 20 20 20  id *zUtf16;.    
11010 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f  if( TCL_OK!=Tcl_
11020 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62  GetBooleanFromOb
11030 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33  j(interp, objv[3
11040 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75 72  ], &val) ) retur
11050 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
11060 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
11070 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64  eate_collation(d
11080 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65  b, "test_collate
11090 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  ", SQLITE_UTF16L
110a0 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  E, .            
110b0 28 76 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f 55  (void *)SQLITE_U
110c0 54 46 31 36 4c 45 2c 20 76 61 6c 3f 74 65 73 74  TF16LE, val?test
110d0 5f 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29  _collate_func:0)
110e0 3b 0a 20 20 20 20 69 66 28 20 54 43 4c 5f 4f 4b  ;.    if( TCL_OK
110f0 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e  !=Tcl_GetBoolean
11100 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
11110 6f 62 6a 76 5b 34 5d 2c 20 26 76 61 6c 29 20 29  objv[4], &val) )
11120 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11130 52 3b 0a 0a 23 69 66 20 30 0a 20 20 20 20 69 66  R;..#if 0.    if
11140 28 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f  ( sqlite3_iMallo
11150 63 46 61 69 6c 3e 30 20 29 7b 0a 20 20 20 20 20  cFail>0 ){.     
11160 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63   sqlite3_iMalloc
11170 46 61 69 6c 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65  Fail++;.    }.#e
11180 6e 64 69 66 0a 20 20 20 20 73 71 6c 69 74 65 33  ndif.    sqlite3
11190 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d  _mutex_enter(db-
111a0 3e 6d 75 74 65 78 29 3b 0a 20 20 20 20 70 56 61  >mutex);.    pVa
111b0 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  l = sqlite3Value
111c0 4e 65 77 28 64 62 29 3b 0a 20 20 20 20 73 71 6c  New(db);.    sql
111d0 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
111e0 70 56 61 6c 2c 20 2d 31 2c 20 22 74 65 73 74 5f  pVal, -1, "test_
111f0 63 6f 6c 6c 61 74 65 22 2c 20 53 51 4c 49 54 45  collate", SQLITE
11200 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
11210 41 54 49 43 29 3b 0a 20 20 20 20 7a 55 74 66 31  ATIC);.    zUtf1
11220 36 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  6 = sqlite3Value
11230 54 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54  Text(pVal, SQLIT
11240 45 5f 55 54 46 31 36 4e 41 54 49 56 45 29 3b 0a  E_UTF16NATIVE);.
11250 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c      if( db->mall
11260 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20  ocFailed ){.    
11270 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
11280 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  MEM;.    }else{.
11290 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
112a0 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
112b0 69 6f 6e 31 36 28 64 62 2c 20 7a 55 74 66 31 36  ion16(db, zUtf16
112c0 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  , SQLITE_UTF16BE
112d0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 28 76 6f  , .          (vo
112e0 69 64 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 31  id *)SQLITE_UTF1
112f0 36 42 45 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f  6BE, val?test_co
11300 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20  llate_func:0);. 
11310 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
11320 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b  ValueFree(pVal);
11330 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
11340 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74  ex_leave(db->mut
11350 65 78 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73  ex);.  }.  if( s
11360 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
11370 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63  e(interp, db, rc
11380 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
11390 52 52 4f 52 3b 0a 20 20 0a 20 20 69 66 28 20 72  RROR;.  .  if( r
113a0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
113b0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
113c0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c  sult(interp, sql
113d0 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d  ite3TestErrorNam
113e0 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72  e(rc), 0);.    r
113f0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
11400 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
11410 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f 61 72 67 73 3a  L_OK;..bad_args:
11420 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
11430 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
11440 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
11450 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
11460 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
11470 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
11480 2c 20 22 20 3c 44 42 3e 20 3c 75 74 66 38 3e 20  , " <DB> <utf8> 
11490 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74 66 31 36  <utf16le> <utf16
114a0 62 65 3e 22 2c 20 30 29 3b 0a 20 20 72 65 74 75  be>", 0);.  retu
114b0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a  rn TCL_ERROR;.}.
114c0 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 65 20  ./*.** When the 
114d0 63 6f 6c 6c 61 74 69 6f 6e 20 6e 65 65 64 65 64  collation needed
114e0 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76   callback is inv
114f0 6f 6b 65 64 2c 20 72 65 63 6f 72 64 20 74 68 65  oked, record the
11500 20 6e 61 6d 65 20 6f 66 20 0a 2a 2a 20 74 68 65   name of .** the
11510 20 72 65 71 75 65 73 74 65 64 20 63 6f 6c 6c 61   requested colla
11520 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 68 65  ting function he
11530 72 65 2e 20 20 54 68 65 20 72 65 63 6f 72 64 65  re.  The recorde
11540 64 20 6e 61 6d 65 20 69 73 20 6c 69 6e 6b 65 64  d name is linked
11550 0a 2a 2a 20 74 6f 20 61 20 54 43 4c 20 76 61 72  .** to a TCL var
11560 69 61 62 6c 65 20 61 6e 64 20 75 73 65 64 20 74  iable and used t
11570 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  o make sure that
11580 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20 63   the requested c
11590 6f 6c 6c 61 74 69 6f 6e 0a 2a 2a 20 6e 61 6d 65  ollation.** name
115a0 20 69 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2f 0a   is correct..*/.
115b0 73 74 61 74 69 63 20 63 68 61 72 20 7a 4e 65 65  static char zNee
115c0 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b 32 30 30  dedCollation[200
115d0 5d 3b 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a  ];.static char *
115e0 70 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f  pzNeededCollatio
115f0 6e 20 3d 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61  n = zNeededColla
11600 74 69 6f 6e 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 43 61  tion;.../*.** Ca
11610 6c 6c 65 64 20 77 68 65 6e 20 61 20 63 6f 6c 6c  lled when a coll
11620 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
11630 73 20 6e 65 65 64 65 64 2e 20 20 52 65 67 69 73  s needed.  Regis
11640 74 65 72 65 64 20 75 73 69 6e 67 0a 2a 2a 20 73  tered using.** s
11650 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e  qlite3_collation
11660 5f 6e 65 65 64 65 64 31 36 28 29 2e 0a 2a 2f 0a  _needed16()..*/.
11670 73 74 61 74 69 63 20 76 6f 69 64 20 74 65 73 74  static void test
11680 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 5f  _collate_needed_
11690 63 62 28 0a 20 20 76 6f 69 64 20 2a 70 43 74 78  cb(.  void *pCtx
116a0 2c 20 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  , .  sqlite3 *db
116b0 2c 0a 20 20 69 6e 74 20 65 54 65 78 74 52 65 70  ,.  int eTextRep
116c0 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ,.  const void *
116d0 70 4e 61 6d 65 0a 29 7b 0a 20 20 69 6e 74 20 65  pName.){.  int e
116e0 6e 63 20 3d 20 45 4e 43 28 64 62 29 3b 0a 20 20  nc = ENC(db);.  
116f0 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a  int i;.  char *z
11700 3b 0a 20 20 66 6f 72 28 7a 20 3d 20 28 63 68 61  ;.  for(z = (cha
11710 72 2a 29 70 4e 61 6d 65 2c 20 69 3d 30 3b 20 2a  r*)pName, i=0; *
11720 7a 20 7c 7c 20 7a 5b 31 5d 3b 20 7a 2b 2b 29 7b  z || z[1]; z++){
11730 0a 20 20 20 20 69 66 28 20 2a 7a 20 29 20 7a 4e  .    if( *z ) zN
11740 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b 69  eededCollation[i
11750 2b 2b 5d 20 3d 20 2a 7a 3b 0a 20 20 7d 0a 20 20  ++] = *z;.  }.  
11760 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e  zNeededCollation
11770 5b 69 5d 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  [i] = 0;.  sqlit
11780 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
11790 69 6f 6e 28 0a 20 20 20 20 20 20 64 62 2c 20 22  ion(.      db, "
117a0 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 45  test_collate", E
117b0 4e 43 28 64 62 29 2c 20 28 76 6f 69 64 20 2a 29  NC(db), (void *)
117c0 65 6e 63 2c 20 74 65 73 74 5f 63 6f 6c 6c 61 74  enc, test_collat
117d0 65 5f 66 75 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  e_func);.}../*.*
117e0 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74 65 73  * Usage: add_tes
117f0 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64  t_collate_needed
11800 20 44 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e   DB.*/.static in
11810 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e  t test_collate_n
11820 65 65 64 65 64 28 0a 20 20 76 6f 69 64 20 2a 20  eeded(.  void * 
11830 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
11840 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
11850 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
11860 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
11870 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
11880 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63  e3 *db;.  int rc
11890 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
118a0 20 29 20 67 6f 74 6f 20 62 61 64 5f 61 72 67 73   ) goto bad_args
118b0 3b 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  ;.  if( getDbPoi
118c0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
118d0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
118e0 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
118f0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
11900 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  rc = sqlite3_col
11910 6c 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31 36 28  lation_needed16(
11920 64 62 2c 20 30 2c 20 74 65 73 74 5f 63 6f 6c 6c  db, 0, test_coll
11930 61 74 65 5f 6e 65 65 64 65 64 5f 63 62 29 3b 0a  ate_needed_cb);.
11940 20 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69    zNeededCollati
11950 6f 6e 5b 30 5d 20 3d 20 30 3b 0a 20 20 69 66 28  on[0] = 0;.  if(
11960 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
11970 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
11980 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
11990 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e  _ERROR;.  return
119a0 20 54 43 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f 61 72   TCL_OK;..bad_ar
119b0 67 73 3a 0a 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  gs:.  Tcl_WrongN
119c0 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
119d0 2c 20 6f 62 6a 76 2c 20 22 44 42 22 29 3b 0a 20  , objv, "DB");. 
119e0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
119f0 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63  R;.}../*.** tclc
11a00 6d 64 3a 20 20 20 61 64 64 5f 61 6c 69 67 6e 6d  md:   add_alignm
11a10 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 69  ent_test_collati
11a20 6f 6e 73 20 20 44 42 0a 2a 2a 0a 2a 2a 20 41 64  ons  DB.**.** Ad
11a30 64 20 74 77 6f 20 6e 65 77 20 63 6f 6c 6c 61 74  d two new collat
11a40 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 74 6f  ing sequences to
11a50 20 74 68 65 20 64 61 74 61 62 61 73 65 20 44 42   the database DB
11a60 0a 2a 2a 0a 2a 2a 20 20 20 20 20 75 74 66 31 36  .**.**     utf16
11a70 5f 61 6c 69 67 6e 65 64 0a 2a 2a 20 20 20 20 20  _aligned.**     
11a80 75 74 66 31 36 5f 75 6e 61 6c 69 67 6e 65 64 0a  utf16_unaligned.
11a90 2a 2a 0a 2a 2a 20 42 6f 74 68 20 63 6f 6c 6c 61  **.** Both colla
11aa0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 75  ting sequences u
11ab0 73 65 20 74 68 65 20 73 61 6d 65 20 73 6f 72 74  se the same sort
11ac0 20 6f 72 64 65 72 20 61 73 20 42 49 4e 41 52 59   order as BINARY
11ad0 2e 0a 2a 2a 20 54 68 65 20 6f 6e 6c 79 20 64 69  ..** The only di
11ae0 66 66 65 72 65 6e 63 65 20 69 73 20 74 68 61 74  fference is that
11af0 20 74 68 65 20 75 74 66 31 36 5f 61 6c 69 67 6e   the utf16_align
11b00 65 64 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20  ed collating.** 
11b10 73 65 71 75 65 6e 63 65 20 69 73 20 64 65 63 6c  sequence is decl
11b20 61 72 65 64 20 77 69 74 68 20 74 68 65 20 53 51  ared with the SQ
11b30 4c 49 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e  LITE_UTF16_ALIGN
11b40 45 44 20 66 6c 61 67 2e 0a 2a 2a 20 42 6f 74 68  ED flag..** Both
11b50 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
11b60 69 6f 6e 73 20 69 6e 63 72 65 6d 65 6e 74 20 74  ions increment t
11b70 68 65 20 75 6e 61 6c 69 67 6e 65 64 20 75 74 66  he unaligned utf
11b80 31 36 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 77 68  16 counter.** wh
11b90 65 6e 65 76 65 72 20 74 68 65 79 20 73 65 65 20  enever they see 
11ba0 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 62 65  a string that be
11bb0 67 69 6e 73 20 6f 6e 20 61 6e 20 6f 64 64 20 62  gins on an odd b
11bc0 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 0a 2a 2f  yte boundary..*/
11bd0 0a 73 74 61 74 69 63 20 69 6e 74 20 75 6e 61 6c  .static int unal
11be0 69 67 6e 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75  igned_string_cou
11bf0 6e 74 65 72 20 3d 20 30 3b 0a 73 74 61 74 69 63  nter = 0;.static
11c00 20 69 6e 74 20 61 6c 69 67 6e 6d 65 6e 74 43 6f   int alignmentCo
11c10 6c 6c 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a  llFunc(.  void *
11c20 4e 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e  NotUsed,.  int n
11c30 4b 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64  Key1, const void
11c40 20 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e   *pKey1,.  int n
11c50 4b 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64  Key2, const void
11c60 20 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74   *pKey2.){.  int
11c70 20 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b   rc, n;.  n = nK
11c80 65 79 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79  ey1<nKey2 ? nKey
11c90 31 20 3a 20 6e 4b 65 79 32 3b 0a 20 20 69 66 28  1 : nKey2;.  if(
11ca0 20 6e 4b 65 79 31 3e 30 20 26 26 20 31 3d 3d 28   nKey1>0 && 1==(
11cb0 31 26 28 69 6e 74 29 70 4b 65 79 31 29 20 29 20  1&(int)pKey1) ) 
11cc0 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e 67  unaligned_string
11cd0 5f 63 6f 75 6e 74 65 72 2b 2b 3b 0a 20 20 69 66  _counter++;.  if
11ce0 28 20 6e 4b 65 79 32 3e 30 20 26 26 20 31 3d 3d  ( nKey2>0 && 1==
11cf0 28 31 26 28 69 6e 74 29 70 4b 65 79 32 29 20 29  (1&(int)pKey2) )
11d00 20 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e   unaligned_strin
11d10 67 5f 63 6f 75 6e 74 65 72 2b 2b 3b 0a 20 20 72  g_counter++;.  r
11d20 63 20 3d 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31  c = memcmp(pKey1
11d30 2c 20 70 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69  , pKey2, n);.  i
11d40 66 28 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20  f( rc==0 ){.    
11d50 72 63 20 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65  rc = nKey1 - nKe
11d60 79 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  y2;.  }.  return
11d70 20 72 63 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e   rc;.}.static in
11d80 74 20 61 64 64 5f 61 6c 69 67 6e 6d 65 6e 74 5f  t add_alignment_
11d90 74 65 73 74 5f 63 6f 6c 6c 61 74 69 6f 6e 73 28  test_collations(
11da0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
11db0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
11dc0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
11dd0 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
11de0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
11df0 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
11e00 3b 0a 20 20 69 66 28 20 6f 62 6a 63 3e 3d 32 20  ;.  if( objc>=2 
11e10 29 7b 0a 20 20 20 20 69 66 28 20 67 65 74 44 62  ){.    if( getDb
11e20 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
11e30 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
11e40 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
11e50 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
11e60 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65  .    sqlite3_cre
11e70 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62  ate_collation(db
11e80 2c 20 22 75 74 66 31 36 5f 75 6e 61 6c 69 67 6e  , "utf16_unalign
11e90 65 64 22 2c 0a 20 20 20 20 20 20 20 20 53 51 4c  ed",.        SQL
11ea0 49 54 45 5f 55 54 46 31 36 2c 20 0a 20 20 20 20  ITE_UTF16, .    
11eb0 20 20 20 20 30 2c 20 61 6c 69 67 6e 6d 65 6e 74      0, alignment
11ec0 43 6f 6c 6c 46 75 6e 63 29 3b 0a 20 20 20 20 73  CollFunc);.    s
11ed0 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
11ee0 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22 75 74 66  llation(db, "utf
11ef0 31 36 5f 61 6c 69 67 6e 65 64 22 2c 0a 20 20 20  16_aligned",.   
11f00 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 31       SQLITE_UTF1
11f10 36 20 7c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  6 | SQLITE_UTF16
11f20 5f 41 4c 49 47 4e 45 44 2c 20 0a 20 20 20 20 20  _ALIGNED, .     
11f30 20 20 20 30 2c 20 61 6c 69 67 6e 6d 65 6e 74 43     0, alignmentC
11f40 6f 6c 6c 46 75 6e 63 29 3b 0a 20 20 7d 0a 20 20  ollFunc);.  }.  
11f50 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
11f60 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ;.}.#endif /* !d
11f70 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
11f80 49 54 5f 55 54 46 31 36 29 20 2a 2f 0a 0a 2f 2a  IT_UTF16) */../*
11f90 0a 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74  .** Usage: add_t
11fa0 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 3c 64 62  est_function <db
11fb0 20 70 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75 74   ptr> <utf8> <ut
11fc0 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e  f16le> <utf16be>
11fd0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  .**.** This func
11fe0 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
11ff0 74 65 73 74 20 74 68 61 74 20 53 51 4c 69 74 65  test that SQLite
12000 20 73 65 6c 65 63 74 73 20 74 68 65 20 63 6f 72   selects the cor
12010 72 65 63 74 20 75 73 65 72 0a 2a 2a 20 66 75 6e  rect user.** fun
12020 63 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 77  ction callback w
12030 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 76 65 72  hen multiple ver
12040 73 69 6f 6e 73 20 28 66 6f 72 20 64 69 66 66 65  sions (for diffe
12050 72 65 6e 74 20 74 65 78 74 20 65 6e 63 6f 64 69  rent text encodi
12060 6e 67 73 29 0a 2a 2a 20 61 72 65 20 61 76 61 69  ngs).** are avai
12070 6c 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c  lable..**.** Cal
12080 6c 69 6e 67 20 74 68 69 73 20 72 6f 75 74 69 6e  ling this routin
12090 65 20 72 65 67 69 73 74 65 72 73 20 75 70 20 74  e registers up t
120a0 6f 20 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73  o three versions
120b0 20 6f 66 20 74 68 65 20 75 73 65 72 20 66 75 6e   of the user fun
120c0 63 74 69 6f 6e 0a 2a 2a 20 22 74 65 73 74 5f 66  ction.** "test_f
120d0 75 6e 63 74 69 6f 6e 22 20 77 69 74 68 20 64 61  unction" with da
120e0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 64  tabase handle <d
120f0 62 3e 2e 20 20 49 66 20 74 68 65 20 73 65 63 6f  b>.  If the seco
12100 6e 64 20 61 72 67 75 6d 65 6e 74 20 69 73 0a 2a  nd argument is.*
12110 2a 20 74 72 75 65 2c 20 74 68 65 6e 20 61 20 76  * true, then a v
12120 65 72 73 69 6f 6e 20 6f 66 20 74 65 73 74 5f 66  ersion of test_f
12130 75 6e 63 74 69 6f 6e 20 69 73 20 72 65 67 69 73  unction is regis
12140 74 65 72 65 64 20 66 6f 72 20 55 54 46 2d 38 2c  tered for UTF-8,
12150 20 69 66 20 74 68 65 0a 2a 2a 20 74 68 69 72 64   if the.** third
12160 20 69 73 20 74 72 75 65 2c 20 61 20 76 65 72 73   is true, a vers
12170 69 6f 6e 20 69 73 20 72 65 67 69 73 74 65 72 65  ion is registere
12180 64 20 66 6f 72 20 55 54 46 2d 31 36 6c 65 2c 20  d for UTF-16le, 
12190 69 66 20 74 68 65 20 66 6f 75 72 74 68 20 69 73  if the fourth is
121a0 0a 2a 2a 20 74 72 75 65 2c 20 61 20 55 54 46 2d  .** true, a UTF-
121b0 31 36 62 65 20 76 65 72 73 69 6f 6e 20 69 73 20  16be version is 
121c0 61 76 61 69 6c 61 62 6c 65 2e 20 20 50 72 65 76  available.  Prev
121d0 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66  ious versions of
121e0 0a 2a 2a 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  .** test_functio
121f0 6e 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a  n are deleted..*
12200 2a 0a 2a 2a 20 54 68 65 20 75 73 65 72 20 66 75  *.** The user fu
12210 6e 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d  nction is implem
12220 65 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67  ented by calling
12230 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 54   the following T
12240 43 4c 20 73 63 72 69 70 74 3a 0a 2a 2a 0a 2a 2a  CL script:.**.**
12250 20 20 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f     "test_functio
12260 6e 20 3c 65 6e 63 3e 20 3c 61 72 67 3e 22 0a 2a  n <enc> <arg>".*
12270 2a 0a 2a 2a 20 57 68 65 72 65 20 3c 65 6e 63 3e  *.** Where <enc>
12280 20 69 73 20 6f 6e 65 20 6f 66 20 55 54 46 2d 38   is one of UTF-8
12290 2c 20 55 54 46 2d 31 36 4c 45 20 6f 72 20 55 54  , UTF-16LE or UT
122a0 46 31 36 42 45 2c 20 61 6e 64 20 3c 61 72 67 3e  F16BE, and <arg>
122b0 20 69 73 20 74 68 65 0a 2a 2a 20 73 69 6e 67 6c   is the.** singl
122c0 65 20 61 72 67 75 6d 65 6e 74 20 70 61 73 73 65  e argument passe
122d0 64 20 74 6f 20 74 68 65 20 53 51 4c 20 66 75 6e  d to the SQL fun
122e0 63 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65  ction. The value
122f0 20 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20   returned by.** 
12300 74 68 65 20 54 43 4c 20 73 63 72 69 70 74 20 69  the TCL script i
12310 73 20 75 73 65 64 20 61 73 20 74 68 65 20 72 65  s used as the re
12320 74 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 74 68  turn value of th
12330 65 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20  e SQL function. 
12340 49 74 0a 2a 2a 20 69 73 20 70 61 73 73 65 64 20  It.** is passed 
12350 74 6f 20 53 51 4c 69 74 65 20 75 73 69 6e 67 20  to SQLite using 
12360 55 54 46 2d 31 36 42 45 20 66 6f 72 20 61 20 55  UTF-16BE for a U
12370 54 46 2d 38 20 74 65 73 74 5f 66 75 6e 63 74 69  TF-8 test_functi
12380 6f 6e 28 29 2c 20 55 54 46 2d 38 0a 2a 2a 20 66  on(), UTF-8.** f
12390 6f 72 20 61 20 55 54 46 2d 31 36 4c 45 20 74 65  or a UTF-16LE te
123a0 73 74 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20 61  st_function(), a
123b0 6e 64 20 55 54 46 2d 31 36 4c 45 20 66 6f 72 20  nd UTF-16LE for 
123c0 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  an implementatio
123d0 6e 20 74 68 61 74 0a 2a 2a 20 70 72 65 66 65 72  n that.** prefer
123e0 73 20 55 54 46 2d 31 36 42 45 2e 0a 2a 2f 0a 23  s UTF-16BE..*/.#
123f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
12400 49 54 5f 55 54 46 31 36 0a 73 74 61 74 69 63 20  IT_UTF16.static 
12410 76 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69  void test_functi
12420 6f 6e 5f 75 74 66 38 28 0a 20 20 73 71 6c 69 74  on_utf8(.  sqlit
12430 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
12440 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20  , .  int nArg,. 
12450 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
12460 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49  *argv.){.  Tcl_I
12470 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20  nterp *interp;. 
12480 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20   Tcl_Obj *pX;.  
12490 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70  sqlite3_value *p
124a0 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20  Val;.  interp = 
124b0 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71  (Tcl_Interp *)sq
124c0 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
124d0 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20 54 63  pCtx);.  pX = Tc
124e0 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22  l_NewStringObj("
124f0 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  test_function", 
12500 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52  -1);.  Tcl_IncrR
12510 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54  efCount(pX);.  T
12520 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
12530 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
12540 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  pX, Tcl_NewStrin
12550 67 4f 62 6a 28 22 55 54 46 2d 38 22 2c 20 2d 31  gObj("UTF-8", -1
12560 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
12570 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
12580 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20  nterp, pX, .    
12590 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
125a0 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65  bj((char*)sqlite
125b0 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
125c0 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54  v[0]), -1));.  T
125d0 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74  cl_EvalObjEx(int
125e0 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54  erp, pX, 0);.  T
125f0 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
12600 70 58 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72  pX);.  sqlite3_r
12610 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78 2c  esult_text(pCtx,
12620 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65   Tcl_GetStringRe
12630 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 2d 31  sult(interp), -1
12640 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
12650 4e 54 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71  NT);.  pVal = sq
12660 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 30 29  lite3ValueNew(0)
12670 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ;.  sqlite3Value
12680 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c  SetStr(pVal, -1,
12690 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65   Tcl_GetStringRe
126a0 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20  sult(interp), . 
126b0 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38       SQLITE_UTF8
126c0 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
126d0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75  ;.  sqlite3_resu
126e0 6c 74 5f 74 65 78 74 31 36 62 65 28 70 43 74 78  lt_text16be(pCtx
126f0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
12700 74 65 78 74 31 36 62 65 28 70 56 61 6c 29 2c 0a  text16be(pVal),.
12710 20 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45        -1, SQLITE
12720 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73  _TRANSIENT);.  s
12730 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
12740 70 56 61 6c 29 3b 0a 7d 0a 73 74 61 74 69 63 20  pVal);.}.static 
12750 76 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69  void test_functi
12760 6f 6e 5f 75 74 66 31 36 6c 65 28 0a 20 20 73 71  on_utf16le(.  sq
12770 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
12780 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67  Ctx, .  int nArg
12790 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ,.  sqlite3_valu
127a0 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63  e **argv.){.  Tc
127b0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
127c0 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b  ;.  Tcl_Obj *pX;
127d0 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
127e0 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70   *pVal;.  interp
127f0 20 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a   = (Tcl_Interp *
12800 29 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  )sqlite3_user_da
12810 74 61 28 70 43 74 78 29 3b 0a 20 20 70 58 20 3d  ta(pCtx);.  pX =
12820 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
12830 6a 28 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  j("test_function
12840 22 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e  ", -1);.  Tcl_In
12850 63 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a  crRefCount(pX);.
12860 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70    Tcl_ListObjApp
12870 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
12880 70 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74  p, pX, Tcl_NewSt
12890 72 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 4c  ringObj("UTF-16L
128a0 45 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f  E", -1));.  Tcl_
128b0 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
128c0 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c  ment(interp, pX,
128d0 20 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53   .      Tcl_NewS
128e0 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29  tringObj((char*)
128f0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
12900 78 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29  xt(argv[0]), -1)
12910 29 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a  );.  Tcl_EvalObj
12920 45 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30  Ex(interp, pX, 0
12930 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66  );.  Tcl_DecrRef
12940 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 70 56 61  Count(pX);.  pVa
12950 6c 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65  l = sqlite3Value
12960 4e 65 77 28 30 29 3b 0a 20 20 73 71 6c 69 74 65  New(0);.  sqlite
12970 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61  3ValueSetStr(pVa
12980 6c 2c 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74  l, -1, Tcl_GetSt
12990 72 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72  ringResult(inter
129a0 70 29 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54  p), .      SQLIT
129b0 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53  E_UTF8, SQLITE_S
129c0 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65  TATIC);.  sqlite
129d0 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43  3_result_text(pC
129e0 74 78 2c 28 63 68 61 72 2a 29 73 71 6c 69 74 65  tx,(char*)sqlite
129f0 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61  3_value_text(pVa
12a00 6c 29 2c 2d 31 2c 53 51 4c 49 54 45 5f 54 52 41  l),-1,SQLITE_TRA
12a10 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74  NSIENT);.  sqlit
12a20 65 33 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c  e3ValueFree(pVal
12a30 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64  );.}.static void
12a40 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75   test_function_u
12a50 74 66 31 36 62 65 28 0a 20 20 73 71 6c 69 74 65  tf16be(.  sqlite
12a60 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
12a70 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20   .  int nArg,.  
12a80 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
12a90 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e  argv.){.  Tcl_In
12aa0 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20  terp *interp;.  
12ab0 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73  Tcl_Obj *pX;.  s
12ac0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
12ad0 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20 28  al;.  interp = (
12ae0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c  Tcl_Interp *)sql
12af0 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 70  ite3_user_data(p
12b00 43 74 78 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c  Ctx);.  pX = Tcl
12b10 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74  _NewStringObj("t
12b20 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d  est_function", -
12b30 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65  1);.  Tcl_IncrRe
12b40 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63  fCount(pX);.  Tc
12b50 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
12b60 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70  lement(interp, p
12b70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  X, Tcl_NewString
12b80 4f 62 6a 28 22 55 54 46 2d 31 36 42 45 22 2c 20  Obj("UTF-16BE", 
12b90 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74  -1));.  Tcl_List
12ba0 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
12bb0 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20  (interp, pX, .  
12bc0 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e      Tcl_NewStrin
12bd0 67 4f 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69  gObj((char*)sqli
12be0 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61  te3_value_text(a
12bf0 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20  rgv[0]), -1));. 
12c00 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69   Tcl_EvalObjEx(i
12c10 6e 74 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20  nterp, pX, 0);. 
12c20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e   Tcl_DecrRefCoun
12c30 74 28 70 58 29 3b 0a 20 20 70 56 61 6c 20 3d 20  t(pX);.  pVal = 
12c40 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
12c50 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c  0);.  sqlite3Val
12c60 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d  ueSetStr(pVal, -
12c70 31 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  1, Tcl_GetString
12c80 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20  Result(interp), 
12c90 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54  .      SQLITE_UT
12ca0 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
12cb0 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  C);.  sqlite3_re
12cc0 73 75 6c 74 5f 74 65 78 74 31 36 28 70 43 74 78  sult_text16(pCtx
12cd0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
12ce0 74 65 78 74 31 36 6c 65 28 70 56 61 6c 29 2c 0a  text16le(pVal),.
12cf0 20 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45        -1, SQLITE
12d00 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73  _TRANSIENT);.  s
12d10 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
12d20 78 74 31 36 62 65 28 70 43 74 78 2c 20 73 71 6c  xt16be(pCtx, sql
12d30 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31  ite3_value_text1
12d40 36 6c 65 28 70 56 61 6c 29 2c 0a 20 20 20 20 20  6le(pVal),.     
12d50 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e   -1, SQLITE_TRAN
12d60 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65  SIENT);.  sqlite
12d70 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36 6c  3_result_text16l
12d80 65 28 70 43 74 78 2c 20 73 71 6c 69 74 65 33 5f  e(pCtx, sqlite3_
12d90 76 61 6c 75 65 5f 74 65 78 74 31 36 6c 65 28 70  value_text16le(p
12da0 56 61 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c 20  Val),.      -1, 
12db0 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
12dc0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75  );.  sqlite3Valu
12dd0 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a 23  eFree(pVal);.}.#
12de0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
12df0 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 73 74  OMIT_UTF16 */.st
12e00 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 66 75  atic int test_fu
12e10 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a  nction(.  void *
12e20 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
12e30 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
12e40 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
12e50 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
12e60 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65  objv[].){.#ifnde
12e70 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
12e80 46 31 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  F16.  sqlite3 *d
12e90 62 3b 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 0a 20  b;.  int val;.. 
12ea0 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 20 67   if( objc!=5 ) g
12eb0 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20 20  oto bad_args;.  
12ec0 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
12ed0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
12ee0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
12ef0 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
12f00 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66 28  CL_ERROR;..  if(
12f10 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74   TCL_OK!=Tcl_Get
12f20 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69  BooleanFromObj(i
12f30 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
12f40 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54  &val) ) return T
12f50 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
12f60 76 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  val ){.    sqlit
12f70 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
12f80 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e  on(db, "test_fun
12f90 63 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54  ction", 1, SQLIT
12fa0 45 5f 55 54 46 38 2c 20 0a 20 20 20 20 20 20 20  E_UTF8, .       
12fb0 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66 75   interp, test_fu
12fc0 6e 63 74 69 6f 6e 5f 75 74 66 38 2c 20 30 2c 20  nction_utf8, 0, 
12fd0 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 43  0);.  }.  if( TC
12fe0 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f  L_OK!=Tcl_GetBoo
12ff0 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  leanFromObj(inte
13000 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61  rp, objv[3], &va
13010 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  l) ) return TCL_
13020 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61 6c  ERROR;.  if( val
13030 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
13040 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
13050 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74 69  db, "test_functi
13060 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55  on", 1, SQLITE_U
13070 54 46 31 36 4c 45 2c 20 0a 20 20 20 20 20 20 20  TF16LE, .       
13080 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66 75   interp, test_fu
13090 6e 63 74 69 6f 6e 5f 75 74 66 31 36 6c 65 2c 20  nction_utf16le, 
130a0 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28  0, 0);.  }.  if(
130b0 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74   TCL_OK!=Tcl_Get
130c0 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69  BooleanFromObj(i
130d0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20  nterp, objv[4], 
130e0 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54  &val) ) return T
130f0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
13100 76 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  val ){.    sqlit
13110 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
13120 6f 6e 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e  on(db, "test_fun
13130 63 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54  ction", 1, SQLIT
13140 45 5f 55 54 46 31 36 42 45 2c 20 0a 20 20 20 20  E_UTF16BE, .    
13150 20 20 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74      interp, test
13160 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 62  _function_utf16b
13170 65 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20  e, 0, 0);.  }.. 
13180 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
13190 62 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f  bad_args:.  Tcl_
131a0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
131b0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
131c0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
131d0 22 2c 0a 20 20 20 20 20 20 54 63 6c 5f 47 65 74  ",.      Tcl_Get
131e0 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
131f0 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44 42  jv[0], 0), " <DB
13200 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c  > <utf8> <utf16l
13210 65 3e 20 3c 75 74 66 31 36 62 65 3e 22 2c 20 30  e> <utf16be>", 0
13220 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  );.#endif /* SQL
13230 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
13240 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  /.  return TCL_E
13250 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  RROR;.}../*.** U
13260 73 61 67 65 3a 20 20 20 20 20 20 20 20 20 74 65  sage:         te
13270 73 74 5f 65 72 72 73 74 72 20 3c 65 72 72 20 63  st_errstr <err c
13280 6f 64 65 3e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20  ode>.**.** Test 
13290 74 68 61 74 20 74 68 65 20 65 6e 67 6c 69 73 68  that the english
132a0 20 6c 61 6e 67 75 61 67 65 20 73 74 72 69 6e 67   language string
132b0 20 65 71 75 69 76 61 6c 65 6e 74 73 20 66 6f 72   equivalents for
132c0 20 73 71 6c 69 74 65 20 65 72 72 6f 72 20 63 6f   sqlite error co
132d0 64 65 73 0a 2a 2a 20 61 72 65 20 73 61 6e 65 2e  des.** are sane.
132e0 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 69   The parameter i
132f0 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70  s an integer rep
13300 72 65 73 65 6e 74 69 6e 67 20 61 6e 20 73 71 6c  resenting an sql
13310 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a  ite error code..
13320 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73  ** The result is
13330 20 61 20 6c 69 73 74 20 6f 66 20 74 77 6f 20 65   a list of two e
13340 6c 65 6d 65 6e 74 73 2c 20 74 68 65 20 73 74 72  lements, the str
13350 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
13360 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 65 72 72  on of the.** err
13370 6f 72 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20  or code and the 
13380 65 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65  english language
13390 20 65 78 70 6c 61 6e 61 74 69 6f 6e 2e 0a 2a 2f   explanation..*/
133a0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
133b0 5f 65 72 72 73 74 72 28 0a 20 20 76 6f 69 64 20  _errstr(.  void 
133c0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
133d0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
133e0 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
133f0 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
13400 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 68 61   objv[].){.  cha
13410 72 20 2a 7a 43 6f 64 65 3b 0a 20 20 69 6e 74 20  r *zCode;.  int 
13420 69 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 31  i;.  if( objc!=1
13430 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
13440 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
13450 20 31 2c 20 6f 62 6a 76 2c 20 22 3c 65 72 72 6f   1, objv, "<erro
13460 72 20 63 6f 64 65 3e 22 29 3b 0a 20 20 7d 0a 0a  r code>");.  }..
13470 20 20 7a 43 6f 64 65 20 3d 20 54 63 6c 5f 47 65    zCode = Tcl_Ge
13480 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
13490 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 32  ;.  for(i=0; i<2
134a0 30 30 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  00; i++){.    if
134b0 28 20 30 3d 3d 73 74 72 63 6d 70 28 74 31 45 72  ( 0==strcmp(t1Er
134c0 72 6f 72 4e 61 6d 65 28 69 29 2c 20 7a 43 6f 64  rorName(i), zCod
134d0 65 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  e) ) break;.  }.
134e0 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
134f0 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29  interp, (char *)
13500 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 29  sqlite3ErrStr(i)
13510 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
13520 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
13530 55 73 61 67 65 3a 20 20 20 20 62 72 65 61 6b 70  Usage:    breakp
13540 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  oint.**.** This 
13550 72 6f 75 74 69 6e 65 20 65 78 69 73 74 73 20 66  routine exists f
13560 6f 72 20 6f 6e 65 20 70 75 72 70 6f 73 65 20 2d  or one purpose -
13570 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 70 6c   to provide a pl
13580 61 63 65 20 74 6f 20 70 75 74 20 61 0a 2a 2a 20  ace to put a.** 
13590 62 72 65 61 6b 70 6f 69 6e 74 20 77 69 74 68 20  breakpoint with 
135a0 47 44 42 20 74 68 61 74 20 63 61 6e 20 62 65 20  GDB that can be 
135b0 74 72 69 67 67 65 72 65 64 20 75 73 69 6e 67 20  triggered using 
135c0 54 43 4c 20 63 6f 64 65 2e 20 20 54 68 65 20 75  TCL code.  The u
135d0 73 65 0a 2a 2a 20 66 6f 72 20 74 68 69 73 20 69  se.** for this i
135e0 73 20 77 68 65 6e 20 61 20 70 61 72 74 69 63 75  s when a particu
135f0 6c 61 72 20 74 65 73 74 20 66 61 69 6c 73 20 6f  lar test fails o
13600 6e 20 28 73 61 79 29 20 74 68 65 20 31 34 38 35  n (say) the 1485
13610 74 68 20 69 74 65 72 61 74 69 6f 6e 2e 0a 2a 2a  th iteration..**
13620 20 49 6e 20 74 68 65 20 54 43 4c 20 74 65 73 74   In the TCL test
13630 20 73 63 72 69 70 74 2c 20 77 65 20 63 61 6e 20   script, we can 
13640 61 64 64 20 63 6f 64 65 20 6c 69 6b 65 20 74 68  add code like th
13650 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 69 66  is:.**.**     if
13660 20 7b 24 69 3d 3d 31 34 38 35 7d 20 62 72 65 61   {$i==1485} brea
13670 6b 70 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 65  kpoint.**.** The
13680 6e 20 72 75 6e 20 74 65 73 74 66 69 78 74 75 72  n run testfixtur
13690 65 20 69 6e 20 74 68 65 20 64 65 62 75 67 67 65  e in the debugge
136a0 72 20 61 6e 64 20 77 61 69 74 20 66 6f 72 20 74  r and wait for t
136b0 68 65 20 62 72 65 61 6b 70 6f 69 6e 74 20 74 6f  he breakpoint to
136c0 0a 2a 2a 20 66 69 72 65 2e 20 20 54 68 65 6e 20  .** fire.  Then 
136d0 61 64 64 69 74 69 6f 6e 61 6c 20 62 72 65 61 6b  additional break
136e0 70 6f 69 6e 74 73 20 63 61 6e 20 62 65 20 73 65  points can be se
136f0 74 20 74 6f 20 74 72 61 63 65 20 64 6f 77 6e 20  t to trace down 
13700 74 68 65 20 62 75 67 2e 0a 2a 2f 0a 73 74 61 74  the bug..*/.stat
13710 69 63 20 69 6e 74 20 74 65 73 74 5f 62 72 65 61  ic int test_brea
13720 6b 70 6f 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a  kpoint(.  void *
13730 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
13740 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
13750 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
13760 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
13770 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
13780 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
13790 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
137a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
137b0 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
137c0 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
137d0 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
137e0 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
137f0 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
13800 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20  ;         /* Do 
13810 6e 6f 74 68 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f 2a  nothing */.}../*
13820 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c  .** Usage:   sql
13830 69 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c  ite3_bind_zerobl
13840 6f 62 20 20 53 54 4d 54 20 49 44 58 20 4e 0a 2a  ob  STMT IDX N.*
13850 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71  *.** Test the sq
13860 6c 69 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62  lite3_bind_zerob
13870 6c 6f 62 20 69 6e 74 65 72 66 61 63 65 2e 20 20  lob interface.  
13880 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72  STMT is a prepar
13890 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  ed statement..**
138a0 20 49 44 58 20 69 73 20 74 68 65 20 69 6e 64 65   IDX is the inde
138b0 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20  x of a wildcard 
138c0 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
138d0 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73  statement.  This
138e0 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64   command.** bind
138f0 73 20 61 20 4e 2d 62 79 74 65 20 7a 65 72 6f 2d  s a N-byte zero-
13900 66 69 6c 6c 65 64 20 42 4c 4f 42 20 74 6f 20 74  filled BLOB to t
13910 68 65 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a  he wildcard..*/.
13920 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
13930 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62 28 0a 20  bind_zeroblob(. 
13940 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
13950 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
13960 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
13970 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
13980 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
13990 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
139a0 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64  *pStmt;.  int id
139b0 78 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e  x;.  int n;.  in
139c0 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
139d0 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=4 ){.    Tcl_
139e0 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
139f0 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53  erp, 1, objv, "S
13a00 54 4d 54 20 49 44 58 20 4e 22 29 3b 0a 20 20 20  TMT IDX N");.   
13a10 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
13a20 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
13a30 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
13a40 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
13a50 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
13a60 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
13a70 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
13a80 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
13a90 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
13aa0 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e  , &idx) ) return
13ab0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
13ac0 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
13ad0 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
13ae0 5b 33 5d 2c 20 26 6e 29 20 29 20 72 65 74 75 72  [3], &n) ) retur
13af0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
13b00 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
13b10 64 5f 7a 65 72 6f 62 6c 6f 62 28 70 53 74 6d 74  d_zeroblob(pStmt
13b20 2c 20 69 64 78 2c 20 6e 29 3b 0a 20 20 69 66 28  , idx, n);.  if(
13b30 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
13b40 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74  ode(interp, Stmt
13b50 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29  ToDb(pStmt), rc)
13b60 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
13b70 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  ROR;.  if( rc!=S
13b80 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
13b90 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13ba0 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20  ;.  }..  return 
13bb0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
13bc0 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65   Usage:   sqlite
13bd0 33 5f 62 69 6e 64 5f 69 6e 74 20 20 53 54 4d 54  3_bind_int  STMT
13be0 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54   N VALUE.**.** T
13bf0 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f  est the sqlite3_
13c00 62 69 6e 64 5f 69 6e 74 20 69 6e 74 65 72 66 61  bind_int interfa
13c10 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70  ce.  STMT is a p
13c20 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
13c30 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69  t..** N is the i
13c40 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61  ndex of a wildca
13c50 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  rd in the prepar
13c60 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  ed statement.  T
13c70 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62  his command.** b
13c80 69 6e 64 73 20 61 20 33 32 2d 62 69 74 20 69 6e  inds a 32-bit in
13c90 74 65 67 65 72 20 56 41 4c 55 45 20 74 6f 20 74  teger VALUE to t
13ca0 68 61 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f  hat wildcard..*/
13cb0 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
13cc0 5f 62 69 6e 64 5f 69 6e 74 28 0a 20 20 76 6f 69  _bind_int(.  voi
13cd0 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
13ce0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
13cf0 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
13d00 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
13d10 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
13d20 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
13d30 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  mt;.  int idx;. 
13d40 20 69 6e 74 20 76 61 6c 75 65 3b 0a 20 20 69 6e   int value;.  in
13d50 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
13d60 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=4 ){.    Tcl_
13d70 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
13d80 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
13d90 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
13da0 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
13db0 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
13dc0 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53  objv[0], 0), " S
13dd0 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20 30 29  TMT N VALUE", 0)
13de0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
13df0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
13e00 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
13e10 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
13e20 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
13e30 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
13e40 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
13e50 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
13e60 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
13e70 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72  jv[2], &idx) ) r
13e80 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
13e90 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
13ea0 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
13eb0 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75 65   objv[3], &value
13ec0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
13ed0 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71  RROR;..  rc = sq
13ee0 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 70  lite3_bind_int(p
13ef0 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65  Stmt, idx, value
13f00 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
13f10 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
13f20 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
13f30 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
13f40 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
13f50 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
13f60 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
13f70 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
13f80 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
13f90 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  }.../*.** Usage:
13fa0 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
13fb0 69 6e 74 36 34 20 20 53 54 4d 54 20 4e 20 56 41  int64  STMT N VA
13fc0 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74  LUE.**.** Test t
13fd0 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  he sqlite3_bind_
13fe0 69 6e 74 36 34 20 69 6e 74 65 72 66 61 63 65 2e  int64 interface.
13ff0 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70    STMT is a prep
14000 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ared statement..
14010 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65  ** N is the inde
14020 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20  x of a wildcard 
14030 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
14040 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73  statement.  This
14050 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64   command.** bind
14060 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  s a 64-bit integ
14070 65 72 20 56 41 4c 55 45 20 74 6f 20 74 68 61 74  er VALUE to that
14080 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74   wildcard..*/.st
14090 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69  atic int test_bi
140a0 6e 64 5f 69 6e 74 36 34 28 0a 20 20 76 6f 69 64  nd_int64(.  void
140b0 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
140c0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
140d0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
140e0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
140f0 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
14100 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
14110 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  t;.  int idx;.  
14120 69 36 34 20 76 61 6c 75 65 3b 0a 20 20 69 6e 74  i64 value;.  int
14130 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
14140 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=4 ){.    Tcl_A
14150 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
14160 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
14170 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
14180 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
14190 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
141a0 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54  bjv[0], 0), " ST
141b0 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20 30 29 3b  MT N VALUE", 0);
141c0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
141d0 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
141e0 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
141f0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
14200 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
14210 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
14220 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
14230 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
14240 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
14250 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65  v[2], &idx) ) re
14260 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
14270 20 20 69 66 28 20 54 63 6c 5f 47 65 74 57 69 64    if( Tcl_GetWid
14280 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  eIntFromObj(inte
14290 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61  rp, objv[3], &va
142a0 6c 75 65 29 20 29 20 72 65 74 75 72 6e 20 54 43  lue) ) return TC
142b0 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d  L_ERROR;..  rc =
142c0 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e   sqlite3_bind_in
142d0 74 36 34 28 70 53 74 6d 74 2c 20 69 64 78 2c 20  t64(pStmt, idx, 
142e0 76 61 6c 75 65 29 3b 0a 20 20 69 66 28 20 73 71  value);.  if( sq
142f0 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
14300 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44  (interp, StmtToD
14310 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20  b(pStmt), rc) ) 
14320 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
14330 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
14340 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
14350 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
14360 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   }..  return TCL
14370 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55  _OK;.}.../*.** U
14380 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f  sage:   sqlite3_
14390 62 69 6e 64 5f 64 6f 75 62 6c 65 20 20 53 54 4d  bind_double  STM
143a0 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20  T N VALUE.**.** 
143b0 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33  Test the sqlite3
143c0 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 20 69 6e 74  _bind_double int
143d0 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73  erface.  STMT is
143e0 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74   a prepared stat
143f0 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74  ement..** N is t
14400 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69  he index of a wi
14410 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72  ldcard in the pr
14420 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
14430 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a  .  This command.
14440 2a 2a 20 62 69 6e 64 73 20 61 20 36 34 2d 62 69  ** binds a 64-bi
14450 74 20 69 6e 74 65 67 65 72 20 56 41 4c 55 45 20  t integer VALUE 
14460 74 6f 20 74 68 61 74 20 77 69 6c 64 63 61 72 64  to that wildcard
14470 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
14480 74 65 73 74 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  test_bind_double
14490 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
144a0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
144b0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
144c0 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
144d0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
144e0 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
144f0 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74  mt *pStmt;.  int
14500 20 69 64 78 3b 0a 20 20 64 6f 75 62 6c 65 20 76   idx;.  double v
14510 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  alue;.  int rc;.
14520 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56    const char *zV
14530 61 6c 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  al;.  int i;.  s
14540 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75  tatic const stru
14550 63 74 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  ct {.    const c
14560 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
14570 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 73  /* Name of the s
14580 70 65 63 69 61 6c 20 66 6c 6f 61 74 69 6e 67 20  pecial floating 
14590 70 6f 69 6e 74 20 76 61 6c 75 65 20 2a 2f 0a 20  point value */. 
145a0 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20     unsigned int 
145b0 69 55 70 70 65 72 3b 20 20 20 2f 2a 20 55 70 70  iUpper;   /* Upp
145c0 65 72 20 33 32 20 62 69 74 73 20 2a 2f 0a 20 20  er 32 bits */.  
145d0 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 69    unsigned int i
145e0 4c 6f 77 65 72 3b 20 20 20 2f 2a 20 4c 6f 77 65  Lower;   /* Lowe
145f0 72 20 33 32 20 62 69 74 73 20 2a 2f 0a 20 20 7d  r 32 bits */.  }
14600 20 61 53 70 65 63 69 61 6c 46 70 5b 5d 20 3d 20   aSpecialFp[] = 
14610 7b 0a 20 20 20 20 7b 20 20 22 4e 61 4e 22 2c 20  {.    {  "NaN", 
14620 20 20 20 20 20 30 78 37 66 66 66 66 66 66 66 2c       0x7fffffff,
14630 20 30 78 66 66 66 66 66 66 66 66 20 7d 2c 0a 20   0xffffffff },. 
14640 20 20 20 7b 20 20 22 53 4e 61 4e 22 2c 20 20 20     {  "SNaN",   
14650 20 20 30 78 37 66 66 37 66 66 66 66 2c 20 30 78    0x7ff7ffff, 0x
14660 66 66 66 66 66 66 66 66 20 7d 2c 0a 20 20 20 20  ffffffff },.    
14670 7b 20 20 22 2d 4e 61 4e 22 2c 20 20 20 20 20 30  {  "-NaN",     0
14680 78 66 66 66 66 66 66 66 66 2c 20 30 78 66 66 66  xffffffff, 0xfff
14690 66 66 66 66 66 20 7d 2c 0a 20 20 20 20 7b 20 20  fffff },.    {  
146a0 22 2d 53 4e 61 4e 22 2c 20 20 20 20 30 78 66 66  "-SNaN",    0xff
146b0 66 37 66 66 66 66 2c 20 30 78 66 66 66 66 66 66  f7ffff, 0xffffff
146c0 66 66 20 7d 2c 0a 20 20 20 20 7b 20 20 22 2b 49  ff },.    {  "+I
146d0 6e 66 22 2c 20 20 20 20 20 30 78 37 66 66 30 30  nf",     0x7ff00
146e0 30 30 30 2c 20 30 78 30 30 30 30 30 30 30 30 20  000, 0x00000000 
146f0 7d 2c 0a 20 20 20 20 7b 20 20 22 2d 49 6e 66 22  },.    {  "-Inf"
14700 2c 20 20 20 20 20 30 78 66 66 66 30 30 30 30 30  ,     0xfff00000
14710 2c 20 30 78 30 30 30 30 30 30 30 30 20 7d 2c 0a  , 0x00000000 },.
14720 20 20 20 20 7b 20 20 22 45 70 73 69 6c 6f 6e 22      {  "Epsilon"
14730 2c 20 20 30 78 30 30 30 30 30 30 30 30 2c 20 30  ,  0x00000000, 0
14740 78 30 30 30 30 30 30 30 31 20 7d 2c 0a 20 20 20  x00000001 },.   
14750 20 7b 20 20 22 2d 45 70 73 69 6c 6f 6e 22 2c 20   {  "-Epsilon", 
14760 30 78 38 30 30 30 30 30 30 30 2c 20 30 78 30 30  0x80000000, 0x00
14770 30 30 30 30 30 31 20 7d 2c 0a 20 20 20 20 7b 20  000001 },.    { 
14780 20 22 4e 61 4e 30 22 2c 20 20 20 20 20 30 78 37   "NaN0",     0x7
14790 66 66 38 30 30 30 30 2c 20 30 78 30 30 30 30 30  ff80000, 0x00000
147a0 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20 20 22 2d  000 },.    {  "-
147b0 4e 61 4e 30 22 2c 20 20 20 20 30 78 66 66 66 38  NaN0",    0xfff8
147c0 30 30 30 30 2c 20 30 78 30 30 30 30 30 30 30 30  0000, 0x00000000
147d0 20 7d 2c 0a 20 20 7d 3b 0a 0a 20 20 69 66 28 20   },.  };..  if( 
147e0 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54  objc!=4 ){.    T
147f0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
14800 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
14810 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
14820 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
14830 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
14840 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
14850 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c  " STMT N VALUE",
14860 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
14870 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
14880 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
14890 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
148a0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
148b0 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
148c0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
148d0 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
148e0 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
148f0 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20   objv[2], &idx) 
14900 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
14910 4f 52 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65 72 63  OR;..  /* Interc
14920 65 70 74 20 74 68 65 20 73 74 72 69 6e 67 20 22  ept the string "
14930 4e 61 4e 22 20 61 6e 64 20 67 65 6e 65 72 61 74  NaN" and generat
14940 65 20 61 20 4e 61 4e 20 76 61 6c 75 65 20 66 6f  e a NaN value fo
14950 72 20 69 74 2e 0a 20 20 2a 2a 20 41 6c 6c 20 6f  r it..  ** All o
14960 74 68 65 72 20 73 74 72 69 6e 67 73 20 61 72 65  ther strings are
14970 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 20   passed through 
14980 74 6f 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65  to Tcl_GetDouble
14990 46 72 6f 6d 4f 62 6a 28 29 2e 0a 20 20 2a 2a 20  FromObj()..  ** 
149a0 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65 46 72 6f  Tcl_GetDoubleFro
149b0 6d 4f 62 6a 28 29 20 73 68 6f 75 6c 64 20 75 6e  mObj() should un
149c0 64 65 72 73 74 61 6e 64 20 22 4e 61 4e 22 20 62  derstand "NaN" b
149d0 75 74 20 73 6f 6d 65 20 76 65 72 73 69 6f 6e 73  ut some versions
149e0 0a 20 20 2a 2a 20 63 6f 6e 74 61 69 6e 20 61 20  .  ** contain a 
149f0 62 75 67 2e 0a 20 20 2a 2f 0a 20 20 7a 56 61 6c  bug..  */.  zVal
14a00 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
14a10 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 66 6f 72  (objv[3]);.  for
14a20 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 61  (i=0; i<sizeof(a
14a30 53 70 65 63 69 61 6c 46 70 29 2f 73 69 7a 65 6f  SpecialFp)/sizeo
14a40 66 28 61 53 70 65 63 69 61 6c 46 70 5b 30 5d 29  f(aSpecialFp[0])
14a50 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20  ; i++){.    if( 
14a60 73 74 72 63 6d 70 28 61 53 70 65 63 69 61 6c 46  strcmp(aSpecialF
14a70 70 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 7a 56 61 6c  p[i].zName, zVal
14a80 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  )==0 ){.      sq
14a90 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 78 3b 0a  lite3_uint64 x;.
14aa0 20 20 20 20 20 20 78 20 3d 20 61 53 70 65 63 69        x = aSpeci
14ab0 61 6c 46 70 5b 69 5d 2e 69 55 70 70 65 72 3b 0a  alFp[i].iUpper;.
14ac0 20 20 20 20 20 20 78 20 3c 3c 3d 20 33 32 3b 0a        x <<= 32;.
14ad0 20 20 20 20 20 20 78 20 7c 3d 20 61 53 70 65 63        x |= aSpec
14ae0 69 61 6c 46 70 5b 69 5d 2e 69 4c 6f 77 65 72 3b  ialFp[i].iLower;
14af0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
14b00 69 7a 65 6f 66 28 76 61 6c 75 65 29 3d 3d 38 20  izeof(value)==8 
14b10 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
14b20 20 73 69 7a 65 6f 66 28 78 29 3d 3d 38 20 29 3b   sizeof(x)==8 );
14b30 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 76  .      memcpy(&v
14b40 61 6c 75 65 2c 20 26 78 2c 20 38 29 3b 0a 20 20  alue, &x, 8);.  
14b50 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
14b60 0a 20 20 7d 0a 20 20 69 66 28 20 69 3e 3d 73 69  .  }.  if( i>=si
14b70 7a 65 6f 66 28 61 53 70 65 63 69 61 6c 46 70 29  zeof(aSpecialFp)
14b80 2f 73 69 7a 65 6f 66 28 61 53 70 65 63 69 61 6c  /sizeof(aSpecial
14b90 46 70 5b 30 5d 29 20 26 26 0a 20 20 20 20 20 20  Fp[0]) &&.      
14ba0 20 20 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65     Tcl_GetDouble
14bb0 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
14bc0 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29  objv[3], &value)
14bd0 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
14be0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
14bf0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
14c00 64 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20  d_double(pStmt, 
14c10 69 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69  idx, value);.  i
14c20 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
14c30 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74  rCode(interp, St
14c40 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72  mtToDb(pStmt), r
14c50 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
14c60 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21  ERROR;.  if( rc!
14c70 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
14c80 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
14c90 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72  OR;.  }..  retur
14ca0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
14cb0 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
14cc0 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 20 53  te3_bind_null  S
14cd0 54 4d 54 20 4e 0a 2a 2a 0a 2a 2a 20 54 65 73 74  TMT N.**.** Test
14ce0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e   the sqlite3_bin
14cf0 64 5f 6e 75 6c 6c 20 69 6e 74 65 72 66 61 63 65  d_null interface
14d00 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65  .  STMT is a pre
14d10 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
14d20 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64  .** N is the ind
14d30 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64  ex of a wildcard
14d40 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
14d50 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69   statement.  Thi
14d60 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e  s command.** bin
14d70 64 73 20 61 20 4e 55 4c 4c 20 74 6f 20 74 68 65  ds a NULL to the
14d80 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74   wildcard..*/.st
14d90 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69  atic int test_bi
14da0 6e 64 5f 6e 75 6c 6c 28 0a 20 20 76 6f 69 64 20  nd_null(.  void 
14db0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
14dc0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
14dd0 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
14de0 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
14df0 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
14e00 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
14e10 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69  ;.  int idx;.  i
14e20 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
14e30 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=3 ){.    Tcl
14e40 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
14e50 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
14e60 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
14e70 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  "",.        Tcl_
14e80 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
14e90 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20  (objv[0], 0), " 
14ea0 53 54 4d 54 20 4e 22 2c 20 30 29 3b 0a 20 20 20  STMT N", 0);.   
14eb0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
14ec0 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
14ed0 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
14ee0 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
14ef0 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
14f00 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
14f10 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
14f20 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
14f30 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
14f40 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e  , &idx) ) return
14f50 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
14f60 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
14f70 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64 78  _null(pStmt, idx
14f80 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
14f90 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
14fa0 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
14fb0 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
14fc0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
14fd0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
14fe0 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
14ff0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
15000 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
15010 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
15020 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74    sqlite3_bind_t
15030 65 78 74 20 20 53 54 4d 54 20 4e 20 53 54 52 49  ext  STMT N STRI
15040 4e 47 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54  NG BYTES.**.** T
15050 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f  est the sqlite3_
15060 62 69 6e 64 5f 74 65 78 74 20 69 6e 74 65 72 66  bind_text interf
15070 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20  ace.  STMT is a 
15080 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
15090 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20  nt..** N is the 
150a0 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63  index of a wildc
150b0 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61  ard in the prepa
150c0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  red statement.  
150d0 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20  This command.** 
150e0 62 69 6e 64 73 20 61 20 55 54 46 2d 38 20 73 74  binds a UTF-8 st
150f0 72 69 6e 67 20 53 54 52 49 4e 47 20 74 6f 20 74  ring STRING to t
15100 68 65 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68  he wildcard.  Th
15110 65 20 73 74 72 69 6e 67 20 69 73 20 42 59 54 45  e string is BYTE
15120 53 20 62 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e  S bytes.** long.
15130 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
15140 65 73 74 5f 62 69 6e 64 5f 74 65 78 74 28 0a 20  est_bind_text(. 
15150 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
15160 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
15170 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
15180 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
15190 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
151a0 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
151b0 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64  *pStmt;.  int id
151c0 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a  x;.  int bytes;.
151d0 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20    char *value;. 
151e0 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
151f0 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54  objc!=5 ){.    T
15200 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
15210 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
15220 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
15230 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
15240 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
15250 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
15260 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 20 42  " STMT N VALUE B
15270 59 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20 72  YTES", 0);.    r
15280 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
15290 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
152a0 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
152b0 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
152c0 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
152d0 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
152e0 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
152f0 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
15300 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
15310 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
15320 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75  CL_ERROR;.  valu
15330 65 20 3d 20 28 63 68 61 72 2a 29 54 63 6c 5f 47  e = (char*)Tcl_G
15340 65 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f  etByteArrayFromO
15350 62 6a 28 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74  bj(objv[3], &byt
15360 65 73 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  es);.  if( Tcl_G
15370 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
15380 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 62  erp, objv[4], &b
15390 79 74 65 73 29 20 29 20 72 65 74 75 72 6e 20 54  ytes) ) return T
153a0 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20  CL_ERROR;..  rc 
153b0 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  = sqlite3_bind_t
153c0 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20  ext(pStmt, idx, 
153d0 76 61 6c 75 65 2c 20 62 79 74 65 73 2c 20 53 51  value, bytes, SQ
153e0 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
153f0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
15400 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
15410 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74  , StmtToDb(pStmt
15420 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  ), rc) ) return 
15430 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
15440 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
15450 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
15460 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73  Result(interp, s
15470 71 6c 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e  qlite3TestErrorN
15480 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 20  ame(rc), 0);.   
15490 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
154a0 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  R;.  }..  return
154b0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
154c0 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
154d0 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 3f  e3_bind_text16 ?
154e0 2d 73 74 61 74 69 63 3f 20 53 54 4d 54 20 4e 20  -static? STMT N 
154f0 53 54 52 49 4e 47 20 42 59 54 45 53 0a 2a 2a 0a  STRING BYTES.**.
15500 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69  ** Test the sqli
15510 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 20  te3_bind_text16 
15520 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54  interface.  STMT
15530 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73   is a prepared s
15540 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69  tatement..** N i
15550 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
15560 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65   wildcard in the
15570 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
15580 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61  ent.  This comma
15590 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55 54  nd.** binds a UT
155a0 46 2d 31 36 20 73 74 72 69 6e 67 20 53 54 52 49  F-16 string STRI
155b0 4e 47 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61  NG to the wildca
155c0 72 64 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20  rd.  The string 
155d0 69 73 20 42 59 54 45 53 20 62 79 74 65 73 0a 2a  is BYTES bytes.*
155e0 2a 20 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69  * long..*/.stati
155f0 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
15600 74 65 78 74 31 36 28 0a 20 20 76 6f 69 64 20 2a  text16(.  void *
15610 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
15620 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
15630 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
15640 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
15650 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65  objv[].){.#ifnde
15660 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
15670 46 31 36 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  F16.  sqlite3_st
15680 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74  mt *pStmt;.  int
15690 20 69 64 78 3b 0a 20 20 69 6e 74 20 62 79 74 65   idx;.  int byte
156a0 73 3b 0a 20 20 63 68 61 72 20 2a 76 61 6c 75 65  s;.  char *value
156b0 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 76  ;.  int rc;..  v
156c0 6f 69 64 20 28 2a 78 44 65 6c 29 28 29 20 3d 20  oid (*xDel)() = 
156d0 28 6f 62 6a 63 3d 3d 36 3f 53 51 4c 49 54 45 5f  (objc==6?SQLITE_
156e0 53 54 41 54 49 43 3a 53 51 4c 49 54 45 5f 54 52  STATIC:SQLITE_TR
156f0 41 4e 53 49 45 4e 54 29 3b 0a 20 20 54 63 6c 5f  ANSIENT);.  Tcl_
15700 4f 62 6a 20 2a 6f 53 74 6d 74 20 20 20 20 3d 20  Obj *oStmt    = 
15710 6f 62 6a 76 5b 6f 62 6a 63 2d 34 5d 3b 0a 20 20  objv[objc-4];.  
15720 54 63 6c 5f 4f 62 6a 20 2a 6f 4e 20 20 20 20 20  Tcl_Obj *oN     
15730 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 33 5d    = objv[objc-3]
15740 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 53 74  ;.  Tcl_Obj *oSt
15750 72 69 6e 67 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a  ring  = objv[obj
15760 63 2d 32 5d 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20  c-2];.  Tcl_Obj 
15770 2a 6f 42 79 74 65 73 20 20 20 3d 20 6f 62 6a 76  *oBytes   = objv
15780 5b 6f 62 6a 63 2d 31 5d 3b 0a 0a 20 20 69 66 28  [objc-1];..  if(
15790 20 6f 62 6a 63 21 3d 35 20 26 26 20 6f 62 6a 63   objc!=5 && objc
157a0 21 3d 36 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  !=6){.    Tcl_Ap
157b0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
157c0 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
157d0 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
157e0 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  .        Tcl_Get
157f0 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
15800 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d  jv[0], 0), " STM
15810 54 20 4e 20 56 41 4c 55 45 20 42 59 54 45 53 22  T N VALUE BYTES"
15820 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
15830 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
15840 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
15850 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
15860 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 53 74 6d  l_GetString(oStm
15870 74 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  t), &pStmt) ) re
15880 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
15890 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
158a0 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
158b0 6f 4e 2c 20 26 69 64 78 29 20 29 20 72 65 74 75  oN, &idx) ) retu
158c0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
158d0 76 61 6c 75 65 20 3d 20 28 63 68 61 72 2a 29 54  value = (char*)T
158e0 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79 46  cl_GetByteArrayF
158f0 72 6f 6d 4f 62 6a 28 6f 53 74 72 69 6e 67 2c 20  romObj(oString, 
15900 30 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  0);.  if( Tcl_Ge
15910 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
15920 72 70 2c 20 6f 42 79 74 65 73 2c 20 26 62 79 74  rp, oBytes, &byt
15930 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  es) ) return TCL
15940 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
15950 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
15960 74 31 36 28 70 53 74 6d 74 2c 20 69 64 78 2c 20  t16(pStmt, idx, 
15970 28 76 6f 69 64 20 2a 29 76 61 6c 75 65 2c 20 62  (void *)value, b
15980 79 74 65 73 2c 20 78 44 65 6c 29 3b 0a 20 20 69  ytes, xDel);.  i
15990 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
159a0 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74  rCode(interp, St
159b0 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72  mtToDb(pStmt), r
159c0 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
159d0 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21  ERROR;.  if( rc!
159e0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
159f0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
15a00 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c 69 74  lt(interp, sqlit
15a10 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65 28  e3TestErrorName(
15a20 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  rc), 0);.    ret
15a30 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
15a40 20 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51   }..#endif /* SQ
15a50 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
15a60 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
15a70 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
15a80 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69  ge:   sqlite3_bi
15a90 6e 64 5f 62 6c 6f 62 20 3f 2d 73 74 61 74 69 63  nd_blob ?-static
15aa0 3f 20 53 54 4d 54 20 4e 20 44 41 54 41 20 42 59  ? STMT N DATA BY
15ab0 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74  TES.**.** Test t
15ac0 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  he sqlite3_bind_
15ad0 62 6c 6f 62 20 69 6e 74 65 72 66 61 63 65 2e 20  blob interface. 
15ae0 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61   STMT is a prepa
15af0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  red statement..*
15b00 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78  * N is the index
15b10 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69   of a wildcard i
15b20 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
15b30 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20  tatement.  This 
15b40 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73  command.** binds
15b50 20 61 20 42 4c 4f 42 20 74 6f 20 74 68 65 20 77   a BLOB to the w
15b60 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20 42 4c  ildcard.  The BL
15b70 4f 42 20 69 73 20 42 59 54 45 53 20 62 79 74 65  OB is BYTES byte
15b80 73 20 69 6e 20 73 69 7a 65 2e 0a 2a 2f 0a 73 74  s in size..*/.st
15b90 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69  atic int test_bi
15ba0 6e 64 5f 62 6c 6f 62 28 0a 20 20 76 6f 69 64 20  nd_blob(.  void 
15bb0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
15bc0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
15bd0 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
15be0 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
15bf0 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
15c00 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
15c10 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69  ;.  int idx;.  i
15c20 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 68 61 72  nt bytes;.  char
15c30 20 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72   *value;.  int r
15c40 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 64 65 73  c;.  sqlite3_des
15c50 74 72 75 63 74 6f 72 5f 74 79 70 65 20 78 44 65  tructor_type xDe
15c60 73 74 72 75 63 74 6f 72 20 3d 20 53 51 4c 49 54  structor = SQLIT
15c70 45 5f 54 52 41 4e 53 49 45 4e 54 3b 0a 0a 20 20  E_TRANSIENT;..  
15c80 69 66 28 20 6f 62 6a 63 21 3d 35 20 26 26 20 6f  if( objc!=5 && o
15c90 62 6a 63 21 3d 36 20 29 7b 0a 20 20 20 20 54 63  bjc!=6 ){.    Tc
15ca0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
15cb0 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
15cc0 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
15cd0 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c  \"",.        Tcl
15ce0 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
15cf0 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
15d00 20 53 54 4d 54 20 4e 20 44 41 54 41 20 42 59 54   STMT N DATA BYT
15d10 45 53 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  ES", 0);.    ret
15d20 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
15d30 20 7d 0a 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d   }..  if( objc==
15d40 36 20 29 7b 0a 20 20 20 20 78 44 65 73 74 72 75  6 ){.    xDestru
15d50 63 74 6f 72 20 3d 20 53 51 4c 49 54 45 5f 53 54  ctor = SQLITE_ST
15d60 41 54 49 43 3b 0a 20 20 20 20 6f 62 6a 76 2b 2b  ATIC;.    objv++
15d70 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
15d80 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
15d90 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
15da0 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
15db0 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
15dc0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
15dd0 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
15de0 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
15df0 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20   &idx) ) return 
15e00 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c  TCL_ERROR;.  val
15e10 75 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69  ue = Tcl_GetStri
15e20 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 69  ng(objv[3]);.  i
15e30 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
15e40 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
15e50 76 5b 34 5d 2c 20 26 62 79 74 65 73 29 20 29 20  v[4], &bytes) ) 
15e60 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
15e70 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
15e80 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 70 53 74 6d  3_bind_blob(pStm
15e90 74 2c 20 69 64 78 2c 20 76 61 6c 75 65 2c 20 62  t, idx, value, b
15ea0 79 74 65 73 2c 20 78 44 65 73 74 72 75 63 74 6f  ytes, xDestructo
15eb0 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  r);.  if( sqlite
15ec0 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
15ed0 65 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53  erp, StmtToDb(pS
15ee0 74 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75  tmt), rc) ) retu
15ef0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
15f00 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
15f10 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
15f20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
15f30 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
15f40 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
15f50 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
15f60 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 20  parameter_count 
15f70 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 52 65 74 75   STMT.**.** Retu
15f80 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
15f90 20 77 69 6c 64 63 61 72 64 73 20 69 6e 20 74 68   wildcards in th
15fa0 65 20 67 69 76 65 6e 20 73 74 61 74 65 6d 65 6e  e given statemen
15fb0 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  t..*/.static int
15fc0 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d   test_bind_param
15fd0 65 74 65 72 5f 63 6f 75 6e 74 28 0a 20 20 76 6f  eter_count(.  vo
15fe0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
15ff0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
16000 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
16010 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
16020 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
16030 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
16040 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  tmt;..  if( objc
16050 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=2 ){.    Tcl_W
16060 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
16070 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54  rp, 1, objv, "ST
16080 4d 54 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  MT");.    return
16090 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
160a0 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
160b0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
160c0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
160d0 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
160e0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
160f0 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
16100 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
16110 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65  NewIntObj(sqlite
16120 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
16130 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 29 29 3b  _count(pStmt)));
16140 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
16150 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
16160 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  :   sqlite3_bind
16170 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 20  _parameter_name 
16180 20 53 54 4d 54 20 20 4e 0a 2a 2a 0a 2a 2a 20 52   STMT  N.**.** R
16190 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f  eturn the name o
161a0 66 20 74 68 65 20 4e 74 68 20 77 69 6c 64 63 61  f the Nth wildca
161b0 72 64 2e 20 20 54 68 65 20 66 69 72 73 74 20 77  rd.  The first w
161c0 69 6c 64 63 61 72 64 20 69 73 20 31 2e 0a 2a 2a  ildcard is 1..**
161d0 20 41 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   An empty string
161e0 20 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20   is returned if 
161f0 4e 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67  N is out of rang
16200 65 20 6f 72 20 69 66 20 74 68 65 20 77 69 6c 64  e or if the wild
16210 63 61 72 64 0a 2a 2a 20 69 73 20 6e 61 6d 65 6c  card.** is namel
16220 65 73 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ess..*/.static i
16230 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72  nt test_bind_par
16240 61 6d 65 74 65 72 5f 6e 61 6d 65 28 0a 20 20 76  ameter_name(.  v
16250 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
16260 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
16270 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
16280 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
16290 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
162a0 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
162b0 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a  Stmt;.  int i;..
162c0 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b    if( objc!=3 ){
162d0 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75  .    Tcl_WrongNu
162e0 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
162f0 20 6f 62 6a 76 2c 20 22 53 54 4d 54 20 4e 22 29   objv, "STMT N")
16300 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
16310 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
16320 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
16330 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
16340 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
16350 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
16360 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
16370 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
16380 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
16390 76 5b 32 5d 2c 20 26 69 29 20 29 20 72 65 74 75  v[2], &i) ) retu
163a0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
163b0 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
163c0 28 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54  (interp, .     T
163d0 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
163e0 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
163f0 61 6d 65 74 65 72 5f 6e 61 6d 65 28 70 53 74 6d  ameter_name(pStm
16400 74 2c 69 29 2c 2d 31 29 0a 20 20 29 3b 0a 20 20  t,i),-1).  );.  
16410 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
16420 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
16430 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
16440 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 20 20 53  rameter_index  S
16450 54 4d 54 20 20 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20  TMT  NAME.**.** 
16460 52 65 74 75 72 6e 20 74 68 65 20 69 6e 64 65 78  Return the index
16470 20 6f 66 20 74 68 65 20 77 69 6c 64 63 61 72 64   of the wildcard
16480 20 63 61 6c 6c 65 64 20 4e 41 4d 45 2e 20 20 52   called NAME.  R
16490 65 74 75 72 6e 20 30 20 69 66 20 74 68 65 72 65  eturn 0 if there
164a0 20 69 73 0a 2a 2a 20 6e 6f 20 73 75 63 68 20 77   is.** no such w
164b0 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74  ildcard..*/.stat
164c0 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64  ic int test_bind
164d0 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78  _parameter_index
164e0 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
164f0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
16500 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
16510 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
16520 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
16530 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
16540 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66  mt *pStmt;..  if
16550 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
16560 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
16570 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
16580 76 2c 20 22 53 54 4d 54 20 4e 41 4d 45 22 29 3b  v, "STMT NAME");
16590 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
165a0 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
165b0 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
165c0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
165d0 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
165e0 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
165f0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63   TCL_ERROR;.  Tc
16600 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
16610 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63 6c  nterp, .     Tcl
16620 5f 4e 65 77 49 6e 74 4f 62 6a 28 0a 20 20 20 20  _NewIntObj(.    
16630 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
16640 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28  parameter_index(
16650 70 53 74 6d 74 2c 54 63 6c 5f 47 65 74 53 74 72  pStmt,Tcl_GetStr
16660 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 0a 20 20  ing(objv[2])).  
16670 20 20 20 29 0a 20 20 29 3b 0a 20 20 72 65 74 75     ).  );.  retu
16680 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
16690 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c  .** Usage:   sql
166a0 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
166b0 6e 67 73 20 53 54 4d 54 0a 2a 2a 0a 2a 2f 0a 73  ngs STMT.**.*/.s
166c0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
166d0 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 0a 20  lear_bindings(. 
166e0 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
166f0 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
16700 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
16710 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
16720 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
16730 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
16740 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f  *pStmt;..  if( o
16750 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
16760 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
16770 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
16780 22 53 54 4d 54 22 29 3b 0a 20 20 20 20 72 65 74  "STMT");.    ret
16790 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
167a0 20 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74   }.  if( getStmt
167b0 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
167c0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
167d0 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
167e0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
167f0 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  OR;.  Tcl_SetObj
16800 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
16810 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
16820 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69  ite3_clear_bindi
16830 6e 67 73 28 70 53 74 6d 74 29 29 29 3b 0a 20 20  ngs(pStmt)));.  
16840 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
16850 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
16860 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20 4d   sqlite3_sleep M
16870 49 4c 4c 49 53 45 43 4f 4e 44 53 0a 2a 2f 0a 73  ILLISECONDS.*/.s
16880 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
16890 6c 65 65 70 28 0a 20 20 76 6f 69 64 20 2a 20 63  leep(.  void * c
168a0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
168b0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
168c0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
168d0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
168e0 6a 76 5b 5d 0a 29 7b 0a 20 20 69 6e 74 20 6d 73  jv[].){.  int ms
168f0 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
16900 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
16910 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
16920 20 31 2c 20 6f 62 6a 76 2c 20 22 4d 49 4c 4c 49   1, objv, "MILLI
16930 53 45 43 4f 4e 44 53 22 29 3b 0a 20 20 20 20 72  SECONDS");.    r
16940 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
16950 0a 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47  .  }.  if( Tcl_G
16960 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
16970 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 6d  erp, objv[1], &m
16980 73 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  s) ){.    return
16990 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
169a0 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
169b0 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
169c0 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
169d0 5f 73 6c 65 65 70 28 6d 73 29 29 29 3b 0a 20 20  _sleep(ms)));.  
169e0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
169f0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
16a00 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
16a10 65 72 72 63 6f 64 65 20 44 42 0a 2a 2a 0a 2a 2a  errcode DB.**.**
16a20 20 52 65 74 75 72 6e 20 74 68 65 20 73 74 72 69   Return the stri
16a30 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ng representatio
16a40 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65  n of the most re
16a50 63 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20 41  cent sqlite3_* A
16a60 50 49 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65  PI.** error code
16a70 2e 20 65 2e 67 2e 20 22 53 51 4c 49 54 45 5f 45  . e.g. "SQLITE_E
16a80 52 52 4f 52 22 2e 0a 2a 2f 0a 73 74 61 74 69 63  RROR"..*/.static
16a90 20 69 6e 74 20 74 65 73 74 5f 65 78 5f 65 72 72   int test_ex_err
16aa0 63 6f 64 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  code(.  void * c
16ab0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
16ac0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
16ad0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
16ae0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
16af0 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
16b00 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
16b10 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
16b20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
16b30 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
16b40 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
16b50 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
16b60 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
16b70 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
16b80 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  DB", 0);.    ret
16b90 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
16ba0 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
16bb0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
16bc0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
16bd0 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
16be0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
16bf0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
16c00 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 64  tended_errcode(d
16c10 62 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  b);.  Tcl_Append
16c20 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
16c30 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61  char *)t1ErrorNa
16c40 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 72 65  me(rc), 0);.  re
16c50 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
16c60 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
16c70 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 44 42  lite3_errcode DB
16c80 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
16c90 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65  e string represe
16ca0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d  ntation of the m
16cb0 6f 73 74 20 72 65 63 65 6e 74 20 73 71 6c 69 74  ost recent sqlit
16cc0 65 33 5f 2a 20 41 50 49 0a 2a 2a 20 65 72 72 6f  e3_* API.** erro
16cd0 72 20 63 6f 64 65 2e 20 65 2e 67 2e 20 22 53 51  r code. e.g. "SQ
16ce0 4c 49 54 45 5f 45 52 52 4f 52 22 2e 0a 2a 2f 0a  LITE_ERROR"..*/.
16cf0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
16d00 65 72 72 63 6f 64 65 28 0a 20 20 76 6f 69 64 20  errcode(.  void 
16d10 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
16d20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
16d30 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
16d40 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
16d50 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
16d60 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
16d70 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
16d80 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
16d90 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
16da0 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
16db0 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
16dc0 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
16dd0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
16de0 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20   " DB", 0);.    
16df0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
16e00 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
16e10 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
16e20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
16e30 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20  bjv[1]), &db) ) 
16e40 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
16e50 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
16e60 5f 65 72 72 63 6f 64 65 28 64 62 29 3b 0a 20 20  _errcode(db);.  
16e70 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
16e80 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
16e90 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29  )t1ErrorName(rc)
16ea0 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
16eb0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
16ec0 55 73 61 67 65 3a 20 20 20 74 65 73 74 5f 65 72  Usage:   test_er
16ed0 72 6d 73 67 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65  rmsg DB.**.** Re
16ee0 74 75 72 6e 73 20 74 68 65 20 55 54 46 2d 38 20  turns the UTF-8 
16ef0 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
16f00 66 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  f the error mess
16f10 61 67 65 20 73 74 72 69 6e 67 20 66 6f 72 20 74  age string for t
16f20 68 65 0a 2a 2a 20 6d 6f 73 74 20 72 65 63 65 6e  he.** most recen
16f30 74 20 73 71 6c 69 74 65 33 5f 2a 20 41 50 49 20  t sqlite3_* API 
16f40 63 61 6c 6c 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  call..*/.static 
16f50 69 6e 74 20 74 65 73 74 5f 65 72 72 6d 73 67 28  int test_errmsg(
16f60 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
16f70 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
16f80 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
16f90 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
16fa0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
16fb0 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
16fc0 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
16fd0 7a 45 72 72 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  zErr;..  if( obj
16fe0 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
16ff0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
17000 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
17010 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
17020 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
17030 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
17040 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20  ), " DB", 0);.  
17050 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
17060 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
17070 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
17080 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
17090 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20  (objv[1]), &db) 
170a0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
170b0 4f 52 3b 0a 0a 20 20 7a 45 72 72 20 3d 20 73 71  OR;..  zErr = sq
170c0 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29  lite3_errmsg(db)
170d0 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
170e0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
170f0 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 45  _NewStringObj(zE
17100 72 72 2c 20 2d 31 29 29 3b 0a 20 20 72 65 74 75  rr, -1));.  retu
17110 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
17120 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 74 65 73  .** Usage:   tes
17130 74 5f 65 72 72 6d 73 67 31 36 20 44 42 0a 2a 2a  t_errmsg16 DB.**
17140 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20  .** Returns the 
17150 55 54 46 2d 31 36 20 72 65 70 72 65 73 65 6e 74  UTF-16 represent
17160 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 72 72  ation of the err
17170 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e  or message strin
17180 67 20 66 6f 72 20 74 68 65 0a 2a 2a 20 6d 6f 73  g for the.** mos
17190 74 20 72 65 63 65 6e 74 20 73 71 6c 69 74 65 33  t recent sqlite3
171a0 5f 2a 20 41 50 49 20 63 61 6c 6c 2e 20 54 68 69  _* API call. Thi
171b0 73 20 69 73 20 61 20 62 79 74 65 20 61 72 72 61  s is a byte arra
171c0 79 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20  y object at the 
171d0 54 43 4c 20 0a 2a 2a 20 6c 65 76 65 6c 2c 20 61  TCL .** level, a
171e0 6e 64 20 69 74 20 69 6e 63 6c 75 64 65 73 20 74  nd it includes t
171f0 68 65 20 30 78 30 30 20 30 78 30 30 20 74 65 72  he 0x00 0x00 ter
17200 6d 69 6e 61 74 6f 72 20 62 79 74 65 73 20 61 74  minator bytes at
17210 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a   the end of the.
17220 2a 2a 20 55 54 46 2d 31 36 20 73 74 72 69 6e 67  ** UTF-16 string
17230 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
17240 74 65 73 74 5f 65 72 72 6d 73 67 31 36 28 0a 20  test_errmsg16(. 
17250 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
17260 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
17270 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
17280 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
17290 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
172a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
172b0 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c  OMIT_UTF16.  sql
172c0 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73  ite3 *db;.  cons
172d0 74 20 76 6f 69 64 20 2a 7a 45 72 72 3b 0a 20 20  t void *zErr;.  
172e0 69 6e 74 20 62 79 74 65 73 20 3d 20 30 3b 0a 0a  int bytes = 0;..
172f0 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
17300 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
17310 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
17320 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
17330 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
17340 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
17350 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42  g(objv[0]), " DB
17360 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
17370 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
17380 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
17390 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
173a0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
173b0 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  ]), &db) ) retur
173c0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
173d0 7a 45 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 65  zErr = sqlite3_e
173e0 72 72 6d 73 67 31 36 28 64 62 29 3b 0a 20 20 69  rrmsg16(db);.  i
173f0 66 28 20 7a 45 72 72 20 29 7b 0a 20 20 20 20 62  f( zErr ){.    b
17400 79 74 65 73 20 3d 20 73 71 6c 69 74 65 33 55 74  ytes = sqlite3Ut
17410 66 31 36 42 79 74 65 4c 65 6e 28 7a 45 72 72 2c  f16ByteLen(zErr,
17420 20 2d 31 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f   -1);.  }.  Tcl_
17430 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
17440 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42 79 74 65  erp, Tcl_NewByte
17450 41 72 72 61 79 4f 62 6a 28 7a 45 72 72 2c 20 62  ArrayObj(zErr, b
17460 79 74 65 73 29 29 3b 0a 23 65 6e 64 69 66 20 2f  ytes));.#endif /
17470 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
17480 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20  F16 */.  return 
17490 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
174a0 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
174b0 70 72 65 70 61 72 65 20 44 42 20 73 71 6c 20 62  prepare DB sql b
174c0 79 74 65 73 20 3f 74 61 69 6c 76 61 72 3f 0a 2a  ytes ?tailvar?.*
174d0 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 75 70 20  *.** Compile up 
174e0 74 6f 20 3c 62 79 74 65 73 3e 20 62 79 74 65 73  to <bytes> bytes
174f0 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65 64   of the supplied
17500 20 53 51 4c 20 73 74 72 69 6e 67 20 3c 73 71 6c   SQL string <sql
17510 3e 20 75 73 69 6e 67 0a 2a 2a 20 64 61 74 61 62  > using.** datab
17520 61 73 65 20 68 61 6e 64 6c 65 20 3c 44 42 3e 2e  ase handle <DB>.
17530 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 3c   The parameter <
17540 74 61 69 6c 76 61 6c 3e 20 69 73 20 74 68 65 20  tailval> is the 
17550 6e 61 6d 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c  name of a global
17560 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 74 68 61  .** variable tha
17570 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
17580 75 6e 75 73 65 64 20 70 6f 72 74 69 6f 6e 20 6f  unused portion o
17590 66 20 3c 73 71 6c 3e 20 28 69 66 20 61 6e 79 29  f <sql> (if any)
175a0 2e 20 41 0a 2a 2a 20 53 54 4d 54 20 68 61 6e 64  . A.** STMT hand
175b0 6c 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a  le is returned..
175c0 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
175d0 73 74 5f 70 72 65 70 61 72 65 28 0a 20 20 76 6f  st_prepare(.  vo
175e0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
175f0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
17600 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
17610 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
17620 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
17630 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63  sqlite3 *db;.  c
17640 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b  onst char *zSql;
17650 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 20 20  .  int bytes;.  
17660 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69  const char *zTai
17670 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33  l = 0;.  sqlite3
17680 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30  _stmt *pStmt = 0
17690 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30  ;.  char zBuf[50
176a0 5d 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  ];.  int rc;..  
176b0 69 66 28 20 6f 62 6a 63 21 3d 35 20 26 26 20 6f  if( objc!=5 && o
176c0 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63  bjc!=4 ){.    Tc
176d0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
176e0 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
176f0 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
17700 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
17710 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
17720 30 5d 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79  0]), " DB sql by
17730 74 65 73 20 3f 74 61 69 6c 76 61 72 3f 22 2c 20  tes ?tailvar?", 
17740 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
17750 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
17760 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
17770 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
17780 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
17790 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
177a0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c  CL_ERROR;.  zSql
177b0 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
177c0 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20 69 66 28  (objv[2]);.  if(
177d0 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
177e0 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
177f0 33 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65  3], &bytes) ) re
17800 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
17810 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
17820 70 72 65 70 61 72 65 28 64 62 2c 20 7a 53 71 6c  prepare(db, zSql
17830 2c 20 62 79 74 65 73 2c 20 26 70 53 74 6d 74 2c  , bytes, &pStmt,
17840 20 6f 62 6a 63 3e 3d 35 20 3f 20 26 7a 54 61 69   objc>=5 ? &zTai
17850 6c 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 73 71  l : 0);.  if( sq
17860 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
17870 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
17880 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
17890 52 4f 52 3b 0a 20 20 69 66 28 20 7a 54 61 69 6c  ROR;.  if( zTail
178a0 20 26 26 20 6f 62 6a 63 3e 3d 35 20 29 7b 0a 20   && objc>=5 ){. 
178b0 20 20 20 69 66 28 20 62 79 74 65 73 3e 3d 30 20     if( bytes>=0 
178c0 29 7b 0a 20 20 20 20 20 20 62 79 74 65 73 20 3d  ){.      bytes =
178d0 20 62 79 74 65 73 20 2d 20 28 7a 54 61 69 6c 2d   bytes - (zTail-
178e0 7a 53 71 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zSql);.    }.   
178f0 20 69 66 28 20 73 74 72 6c 65 6e 28 7a 54 61 69   if( strlen(zTai
17900 6c 29 3c 62 79 74 65 73 20 29 7b 0a 20 20 20 20  l)<bytes ){.    
17910 20 20 62 79 74 65 73 20 3d 20 73 74 72 6c 65 6e    bytes = strlen
17920 28 7a 54 61 69 6c 29 3b 0a 20 20 20 20 7d 0a 20  (zTail);.    }. 
17930 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72     Tcl_ObjSetVar
17940 32 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34  2(interp, objv[4
17950 5d 2c 20 30 2c 20 54 63 6c 5f 4e 65 77 53 74 72  ], 0, Tcl_NewStr
17960 69 6e 67 4f 62 6a 28 7a 54 61 69 6c 2c 20 62 79  ingObj(zTail, by
17970 74 65 73 29 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  tes), 0);.  }.  
17980 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
17990 4b 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  K ){.    assert(
179a0 20 70 53 74 6d 74 3d 3d 30 20 29 3b 0a 20 20 20   pStmt==0 );.   
179b0 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22   sprintf(zBuf, "
179c0 28 25 64 29 20 22 2c 20 72 63 29 3b 0a 20 20 20  (%d) ", rc);.   
179d0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
179e0 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
179f0 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64  sqlite3_errmsg(d
17a00 62 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  b), 0);.    retu
17a10 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
17a20 7d 0a 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29  }..  if( pStmt )
17a30 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  {.    if( sqlite
17a40 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72  3TestMakePointer
17a50 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  Str(interp, zBuf
17a60 2c 20 70 53 74 6d 74 29 20 29 20 72 65 74 75 72  , pStmt) ) retur
17a70 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
17a80 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
17a90 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
17aa0 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  0);.  }.  return
17ab0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
17ac0 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
17ad0 5f 70 72 65 70 61 72 65 5f 76 32 20 44 42 20 73  _prepare_v2 DB s
17ae0 71 6c 20 62 79 74 65 73 20 3f 74 61 69 6c 76 61  ql bytes ?tailva
17af0 72 3f 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65  r?.**.** Compile
17b00 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e 20 62   up to <bytes> b
17b10 79 74 65 73 20 6f 66 20 74 68 65 20 73 75 70 70  ytes of the supp
17b20 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e 67 20  lied SQL string 
17b30 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20 64  <sql> using.** d
17b40 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c  atabase handle <
17b50 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d 65 74  DB>. The paramet
17b60 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69 73 20  er <tailval> is 
17b70 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 67 6c  the name of a gl
17b80 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62 6c 65  obal.** variable
17b90 20 74 68 61 74 20 69 73 20 73 65 74 20 74 6f 20   that is set to 
17ba0 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72 74 69  the unused porti
17bb0 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69 66 20  on of <sql> (if 
17bc0 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d 54 20  any). A.** STMT 
17bd0 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75 72 6e  handle is return
17be0 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ed..*/.static in
17bf0 74 20 74 65 73 74 5f 70 72 65 70 61 72 65 5f 76  t test_prepare_v
17c00 32 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  2(.  void * clie
17c10 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
17c20 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
17c30 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
17c40 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
17c50 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ].){.  sqlite3 *
17c60 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  db;.  const char
17c70 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e 74 20 62 79   *zSql;.  int by
17c80 74 65 73 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  tes;.  const cha
17c90 72 20 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20  r *zTail = 0;.  
17ca0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
17cb0 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20  tmt = 0;.  char 
17cc0 7a 42 75 66 5b 35 30 5d 3b 0a 20 20 69 6e 74 20  zBuf[50];.  int 
17cd0 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
17ce0 3d 35 20 26 26 20 6f 62 6a 63 21 3d 34 20 29 7b  =5 && objc!=4 ){
17cf0 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
17d00 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
17d10 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
17d20 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
17d30 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
17d40 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42  g(objv[0]), " DB
17d50 20 73 71 6c 20 62 79 74 65 73 20 74 61 69 6c 76   sql bytes tailv
17d60 61 72 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  ar", 0);.    ret
17d70 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
17d80 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
17d90 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
17da0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
17db0 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
17dc0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
17dd0 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65 74 53   zSql = Tcl_GetS
17de0 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a  tring(objv[2]);.
17df0 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
17e00 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
17e10 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74 65 73 29  objv[3], &bytes)
17e20 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
17e30 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
17e40 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
17e50 64 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c  db, zSql, bytes,
17e60 20 26 70 53 74 6d 74 2c 20 6f 62 6a 63 3e 3d 35   &pStmt, objc>=5
17e70 20 3f 20 26 7a 54 61 69 6c 20 3a 20 30 29 3b 0a   ? &zTail : 0);.
17e80 20 20 61 73 73 65 72 74 28 72 63 3d 3d 53 51 4c    assert(rc==SQL
17e90 49 54 45 5f 4f 4b 20 7c 7c 20 70 53 74 6d 74 3d  ITE_OK || pStmt=
17ea0 3d 30 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  =0);.  if( sqlit
17eb0 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e  e3TestErrCode(in
17ec0 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20  terp, db, rc) ) 
17ed0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
17ee0 3b 0a 20 20 69 66 28 20 7a 54 61 69 6c 20 26 26  ;.  if( zTail &&
17ef0 20 6f 62 6a 63 3e 3d 35 20 29 7b 0a 20 20 20 20   objc>=5 ){.    
17f00 69 66 28 20 62 79 74 65 73 3e 3d 30 20 29 7b 0a  if( bytes>=0 ){.
17f10 20 20 20 20 20 20 62 79 74 65 73 20 3d 20 62 79        bytes = by
17f20 74 65 73 20 2d 20 28 7a 54 61 69 6c 2d 7a 53 71  tes - (zTail-zSq
17f30 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54 63  l);.    }.    Tc
17f40 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e 74  l_ObjSetVar2(int
17f50 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30 2c  erp, objv[4], 0,
17f60 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
17f70 6a 28 7a 54 61 69 6c 2c 20 62 79 74 65 73 29 2c  j(zTail, bytes),
17f80 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72   0);.  }.  if( r
17f90 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
17fa0 20 20 20 20 61 73 73 65 72 74 28 20 70 53 74 6d      assert( pStm
17fb0 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 70 72 69  t==0 );.    spri
17fc0 6e 74 66 28 7a 42 75 66 2c 20 22 28 25 64 29 20  ntf(zBuf, "(%d) 
17fd0 22 2c 20 72 63 29 3b 0a 20 20 20 20 54 63 6c 5f  ", rc);.    Tcl_
17fe0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
17ff0 65 72 70 2c 20 7a 42 75 66 2c 20 73 71 6c 69 74  erp, zBuf, sqlit
18000 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c 20 30  e3_errmsg(db), 0
18010 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
18020 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
18030 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20  if( pStmt ){.   
18040 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
18050 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69  MakePointerStr(i
18060 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70 53 74  nterp, zBuf, pSt
18070 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
18080 5f 45 52 52 4f 52 3b 0a 20 20 20 20 54 63 6c 5f  _ERROR;.    Tcl_
18090 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
180a0 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20  erp, zBuf, 0);. 
180b0 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f   }.  return TCL_
180c0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
180d0 67 65 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ge: sqlite3_prep
180e0 61 72 65 5f 74 6b 74 33 31 33 34 20 44 42 0a 2a  are_tkt3134 DB.*
180f0 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 20  *.** Generate a 
18100 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
18110 6e 74 20 66 6f 72 20 61 20 7a 65 72 6f 2d 62 79  nt for a zero-by
18120 74 65 20 73 74 72 69 6e 67 20 61 73 20 61 20 74  te string as a t
18130 65 73 74 0a 2a 2a 20 66 6f 72 20 74 69 63 6b 65  est.** for ticke
18140 74 20 23 33 31 33 34 2e 20 20 54 68 65 20 73 74  t #3134.  The st
18150 72 69 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 70  ring should be p
18160 72 65 63 65 65 64 65 64 20 62 79 20 61 20 7a 65  receeded by a ze
18170 72 6f 20 62 79 74 65 2e 0a 2a 2f 0a 73 74 61 74  ro byte..*/.stat
18180 69 63 20 69 6e 74 20 74 65 73 74 5f 70 72 65 70  ic int test_prep
18190 61 72 65 5f 74 6b 74 33 31 33 34 28 0a 20 20 76  are_tkt3134(.  v
181a0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
181b0 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
181c0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
181d0 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
181e0 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
181f0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
18200 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
18210 72 20 7a 53 71 6c 5b 5d 20 3d 20 22 5c 30 30 30  r zSql[] = "\000
18220 53 45 4c 45 43 54 20 31 22 3b 0a 20 20 73 71 6c  SELECT 1";.  sql
18230 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
18240 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 42 75   = 0;.  char zBu
18250 66 5b 35 30 5d 3b 0a 20 20 69 6e 74 20 72 63 3b  f[50];.  int rc;
18260 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
18270 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
18280 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
18290 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
182a0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
182b0 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
182c0 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
182d0 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61 69  DB sql bytes tai
182e0 6c 76 61 72 22 2c 20 30 29 3b 0a 20 20 20 20 72  lvar", 0);.    r
182f0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
18300 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
18310 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
18320 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
18330 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
18340 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
18350 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
18360 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20 26  prepare_v2(db, &
18370 7a 53 71 6c 5b 31 5d 2c 20 30 2c 20 26 70 53 74  zSql[1], 0, &pSt
18380 6d 74 2c 20 30 29 3b 0a 20 20 61 73 73 65 72 74  mt, 0);.  assert
18390 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c  (rc==SQLITE_OK |
183a0 7c 20 70 53 74 6d 74 3d 3d 30 29 3b 0a 20 20 69  | pStmt==0);.  i
183b0 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
183c0 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
183d0 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
183e0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
183f0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
18400 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 53 74  .    assert( pSt
18410 6d 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 70 72  mt==0 );.    spr
18420 69 6e 74 66 28 7a 42 75 66 2c 20 22 28 25 64 29  intf(zBuf, "(%d)
18430 20 22 2c 20 72 63 29 3b 0a 20 20 20 20 54 63 6c   ", rc);.    Tcl
18440 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
18450 74 65 72 70 2c 20 7a 42 75 66 2c 20 73 71 6c 69  terp, zBuf, sqli
18460 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c 20  te3_errmsg(db), 
18470 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
18480 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
18490 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20   if( pStmt ){.  
184a0 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
184b0 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28  tMakePointerStr(
184c0 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70 53  interp, zBuf, pS
184d0 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
184e0 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 54 63 6c  L_ERROR;.    Tcl
184f0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
18500 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a  terp, zBuf, 0);.
18510 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c    }.  return TCL
18520 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
18530 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 70 72 65  age: sqlite3_pre
18540 70 61 72 65 31 36 20 44 42 20 73 71 6c 20 62 79  pare16 DB sql by
18550 74 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a  tes tailvar.**.*
18560 2a 20 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f 20  * Compile up to 
18570 3c 62 79 74 65 73 3e 20 62 79 74 65 73 20 6f 66  <bytes> bytes of
18580 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 53 51   the supplied SQ
18590 4c 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20 75  L string <sql> u
185a0 73 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73 65  sing.** database
185b0 20 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54 68   handle <DB>. Th
185c0 65 20 70 61 72 61 6d 65 74 65 72 20 3c 74 61 69  e parameter <tai
185d0 6c 76 61 6c 3e 20 69 73 20 74 68 65 20 6e 61 6d  lval> is the nam
185e0 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a  e of a global.**
185f0 20 76 61 72 69 61 62 6c 65 20 74 68 61 74 20 69   variable that i
18600 73 20 73 65 74 20 74 6f 20 74 68 65 20 75 6e 75  s set to the unu
18610 73 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20 3c  sed portion of <
18620 73 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20 41  sql> (if any). A
18630 0a 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65 20  .** STMT handle 
18640 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a  is returned..*/.
18650 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
18660 70 72 65 70 61 72 65 31 36 28 0a 20 20 76 6f 69  prepare16(.  voi
18670 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
18680 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
18690 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
186a0 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
186b0 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66  ST objv[].){.#if
186c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
186d0 5f 55 54 46 31 36 0a 20 20 73 71 6c 69 74 65 33  _UTF16.  sqlite3
186e0 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 76 6f   *db;.  const vo
186f0 69 64 20 2a 7a 53 71 6c 3b 0a 20 20 63 6f 6e 73  id *zSql;.  cons
18700 74 20 76 6f 69 64 20 2a 7a 54 61 69 6c 20 3d 20  t void *zTail = 
18710 30 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 54  0;.  Tcl_Obj *pT
18720 61 69 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  ail = 0;.  sqlit
18730 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d  e3_stmt *pStmt =
18740 20 30 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b   0;.  char zBuf[
18750 35 30 5d 3b 20 0a 20 20 69 6e 74 20 72 63 3b 0a  50]; .  int rc;.
18760 20 20 69 6e 74 20 62 79 74 65 73 3b 20 20 20 20    int bytes;    
18770 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
18780 68 65 20 69 6e 74 65 67 65 72 20 73 70 65 63 69  he integer speci
18790 66 69 65 64 20 61 73 20 61 72 67 20 33 20 2a 2f  fied as arg 3 */
187a0 0a 20 20 69 6e 74 20 6f 62 6a 6c 65 6e 3b 20 20  .  int objlen;  
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
187c0 54 68 65 20 62 79 74 65 2d 61 72 72 61 79 20 6c  The byte-array l
187d0 65 6e 67 74 68 20 6f 66 20 61 72 67 20 32 20 2a  ength of arg 2 *
187e0 2f 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35  /..  if( objc!=5
187f0 20 26 26 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20   && objc!=4 ){. 
18800 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
18810 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
18820 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
18830 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
18840 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
18850 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 20 73  objv[0]), " DB s
18860 71 6c 20 62 79 74 65 73 20 3f 74 61 69 6c 76 61  ql bytes ?tailva
18870 72 3f 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  r?", 0);.    ret
18880 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
18890 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
188a0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
188b0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
188c0 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
188d0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
188e0 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65 74 42   zSql = Tcl_GetB
188f0 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28  yteArrayFromObj(
18900 6f 62 6a 76 5b 32 5d 2c 20 26 6f 62 6a 6c 65 6e  objv[2], &objlen
18910 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  );.  if( Tcl_Get
18920 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
18930 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74  p, objv[3], &byt
18940 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  es) ) return TCL
18950 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
18960 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31  sqlite3_prepare1
18970 36 28 64 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65  6(db, zSql, byte
18980 73 2c 20 26 70 53 74 6d 74 2c 20 6f 62 6a 63 3e  s, &pStmt, objc>
18990 3d 35 20 3f 20 26 7a 54 61 69 6c 20 3a 20 30 29  =5 ? &zTail : 0)
189a0 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
189b0 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
189c0 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74  p, db, rc) ) ret
189d0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
189e0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 72   if( rc ){.    r
189f0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
18a00 0a 20 20 7d 0a 0a 20 20 69 66 28 20 6f 62 6a 63  .  }..  if( objc
18a10 3e 3d 35 20 29 7b 0a 20 20 20 20 69 66 28 20 7a  >=5 ){.    if( z
18a20 54 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 6f 62  Tail ){.      ob
18a30 6a 6c 65 6e 20 3d 20 6f 62 6a 6c 65 6e 20 2d 20  jlen = objlen - 
18a40 28 28 75 38 20 2a 29 7a 54 61 69 6c 2d 28 75 38  ((u8 *)zTail-(u8
18a50 20 2a 29 7a 53 71 6c 29 3b 0a 20 20 20 20 7d 65   *)zSql);.    }e
18a60 6c 73 65 7b 0a 20 20 20 20 20 20 6f 62 6a 6c 65  lse{.      objle
18a70 6e 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  n = 0;.    }.   
18a80 20 70 54 61 69 6c 20 3d 20 54 63 6c 5f 4e 65 77   pTail = Tcl_New
18a90 42 79 74 65 41 72 72 61 79 4f 62 6a 28 28 75 38  ByteArrayObj((u8
18aa0 20 2a 29 7a 54 61 69 6c 2c 20 6f 62 6a 6c 65 6e   *)zTail, objlen
18ab0 29 3b 0a 20 20 20 20 54 63 6c 5f 49 6e 63 72 52  );.    Tcl_IncrR
18ac0 65 66 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a  efCount(pTail);.
18ad0 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61      Tcl_ObjSetVa
18ae0 72 32 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  r2(interp, objv[
18af0 34 5d 2c 20 30 2c 20 70 54 61 69 6c 2c 20 30 29  4], 0, pTail, 0)
18b00 3b 0a 20 20 20 20 54 63 6c 5f 44 65 63 72 52 65  ;.    Tcl_DecrRe
18b10 66 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a 20  fCount(pTail);. 
18b20 20 7d 0a 0a 20 20 69 66 28 20 70 53 74 6d 74 20   }..  if( pStmt 
18b30 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ){.    if( sqlit
18b40 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65  e3TestMakePointe
18b50 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75  rStr(interp, zBu
18b60 66 2c 20 70 53 74 6d 74 29 20 29 20 72 65 74 75  f, pStmt) ) retu
18b70 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
18b80 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  }.  Tcl_AppendRe
18b90 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
18ba0 66 2c 20 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  f, 0);.#endif /*
18bb0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
18bc0 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54  16 */.  return T
18bd0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
18be0 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 70  Usage: sqlite3_p
18bf0 72 65 70 61 72 65 31 36 5f 76 32 20 44 42 20 73  repare16_v2 DB s
18c00 71 6c 20 62 79 74 65 73 20 3f 74 61 69 6c 76 61  ql bytes ?tailva
18c10 72 3f 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65  r?.**.** Compile
18c20 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e 20 62   up to <bytes> b
18c30 79 74 65 73 20 6f 66 20 74 68 65 20 73 75 70 70  ytes of the supp
18c40 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e 67 20  lied SQL string 
18c50 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20 64  <sql> using.** d
18c60 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c  atabase handle <
18c70 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d 65 74  DB>. The paramet
18c80 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69 73 20  er <tailval> is 
18c90 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 67 6c  the name of a gl
18ca0 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62 6c 65  obal.** variable
18cb0 20 74 68 61 74 20 69 73 20 73 65 74 20 74 6f 20   that is set to 
18cc0 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72 74 69  the unused porti
18cd0 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69 66 20  on of <sql> (if 
18ce0 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d 54 20  any). A.** STMT 
18cf0 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75 72 6e  handle is return
18d00 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ed..*/.static in
18d10 74 20 74 65 73 74 5f 70 72 65 70 61 72 65 31 36  t test_prepare16
18d20 5f 76 32 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  _v2(.  void * cl
18d30 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
18d40 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
18d50 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
18d60 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
18d70 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53  v[].){.#ifndef S
18d80 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
18d90 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
18da0 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 53    const void *zS
18db0 71 6c 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  ql;.  const void
18dc0 20 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20 20 54   *zTail = 0;.  T
18dd0 63 6c 5f 4f 62 6a 20 2a 70 54 61 69 6c 20 3d 20  cl_Obj *pTail = 
18de0 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  0;.  sqlite3_stm
18df0 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20  t *pStmt = 0;.  
18e00 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 20 0a  char zBuf[50]; .
18e10 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20    int rc;.  int 
18e20 62 79 74 65 73 3b 20 20 20 20 20 20 20 20 20 20  bytes;          
18e30 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74        /* The int
18e40 65 67 65 72 20 73 70 65 63 69 66 69 65 64 20 61  eger specified a
18e50 73 20 61 72 67 20 33 20 2a 2f 0a 20 20 69 6e 74  s arg 3 */.  int
18e60 20 6f 62 6a 6c 65 6e 3b 20 20 20 20 20 20 20 20   objlen;        
18e70 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 62 79         /* The by
18e80 74 65 2d 61 72 72 61 79 20 6c 65 6e 67 74 68 20  te-array length 
18e90 6f 66 20 61 72 67 20 32 20 2a 2f 0a 0a 20 20 69  of arg 2 */..  i
18ea0 66 28 20 6f 62 6a 63 21 3d 35 20 26 26 20 6f 62  f( objc!=5 && ob
18eb0 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=4 ){.    Tcl
18ec0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
18ed0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
18ee0 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
18ef0 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f  "", .       Tcl_
18f00 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30  GetString(objv[0
18f10 5d 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79 74  ]), " DB sql byt
18f20 65 73 20 3f 74 61 69 6c 76 61 72 3f 22 2c 20 30  es ?tailvar?", 0
18f30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
18f40 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
18f50 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
18f60 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
18f70 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
18f80 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
18f90 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20  L_ERROR;.  zSql 
18fa0 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72  = Tcl_GetByteArr
18fb0 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32  ayFromObj(objv[2
18fc0 5d 2c 20 26 6f 62 6a 6c 65 6e 29 3b 0a 20 20 69  ], &objlen);.  i
18fd0 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
18fe0 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
18ff0 76 5b 33 5d 2c 20 26 62 79 74 65 73 29 20 29 20  v[3], &bytes) ) 
19000 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
19010 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
19020 33 5f 70 72 65 70 61 72 65 31 36 5f 76 32 28 64  3_prepare16_v2(d
19030 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c 20  b, zSql, bytes, 
19040 26 70 53 74 6d 74 2c 20 6f 62 6a 63 3e 3d 35 20  &pStmt, objc>=5 
19050 3f 20 26 7a 54 61 69 6c 20 3a 20 30 29 3b 0a 20  ? &zTail : 0);. 
19060 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
19070 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
19080 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
19090 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
190a0 28 20 72 63 20 29 7b 0a 20 20 20 20 72 65 74 75  ( rc ){.    retu
190b0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
190c0 7d 0a 0a 20 20 69 66 28 20 6f 62 6a 63 3e 3d 35  }..  if( objc>=5
190d0 20 29 7b 0a 20 20 20 20 69 66 28 20 7a 54 61 69   ){.    if( zTai
190e0 6c 20 29 7b 0a 20 20 20 20 20 20 6f 62 6a 6c 65  l ){.      objle
190f0 6e 20 3d 20 6f 62 6a 6c 65 6e 20 2d 20 28 28 75  n = objlen - ((u
19100 38 20 2a 29 7a 54 61 69 6c 2d 28 75 38 20 2a 29  8 *)zTail-(u8 *)
19110 7a 53 71 6c 29 3b 0a 20 20 20 20 7d 65 6c 73 65  zSql);.    }else
19120 7b 0a 20 20 20 20 20 20 6f 62 6a 6c 65 6e 20 3d  {.      objlen =
19130 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 54   0;.    }.    pT
19140 61 69 6c 20 3d 20 54 63 6c 5f 4e 65 77 42 79 74  ail = Tcl_NewByt
19150 65 41 72 72 61 79 4f 62 6a 28 28 75 38 20 2a 29  eArrayObj((u8 *)
19160 7a 54 61 69 6c 2c 20 6f 62 6a 6c 65 6e 29 3b 0a  zTail, objlen);.
19170 20 20 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43      Tcl_IncrRefC
19180 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a 20 20 20  ount(pTail);.   
19190 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28   Tcl_ObjSetVar2(
191a0 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c  interp, objv[4],
191b0 20 30 2c 20 70 54 61 69 6c 2c 20 30 29 3b 0a 20   0, pTail, 0);. 
191c0 20 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f     Tcl_DecrRefCo
191d0 75 6e 74 28 70 54 61 69 6c 29 3b 0a 20 20 7d 0a  unt(pTail);.  }.
191e0 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a  .  if( pStmt ){.
191f0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54      if( sqlite3T
19200 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74  estMakePointerSt
19210 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  r(interp, zBuf, 
19220 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
19230 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
19240 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
19250 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
19260 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  0);.#endif /* SQ
19270 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
19280 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
19290 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
192a0 67 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  ge: sqlite3_open
192b0 20 66 69 6c 65 6e 61 6d 65 20 3f 6f 70 74 69 6f   filename ?optio
192c0 6e 73 2d 6c 69 73 74 3f 0a 2a 2f 0a 73 74 61 74  ns-list?.*/.stat
192d0 69 63 20 69 6e 74 20 74 65 73 74 5f 6f 70 65 6e  ic int test_open
192e0 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
192f0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
19300 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
19310 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
19320 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
19330 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  .){.  const char
19340 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20 20 73   *zFilename;.  s
19350 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
19360 74 20 72 63 3b 0a 20 20 63 68 61 72 20 7a 42 75  t rc;.  char zBu
19370 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f  f[100];..  if( o
19380 62 6a 63 21 3d 33 20 26 26 20 6f 62 6a 63 21 3d  bjc!=3 && objc!=
19390 32 20 26 26 20 6f 62 6a 63 21 3d 31 20 29 7b 0a  2 && objc!=1 ){.
193a0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
193b0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
193c0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
193d0 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
193e0 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
193f0 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66 69 6c  (objv[0]), " fil
19400 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73 2d 6c 69  ename options-li
19410 73 74 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  st", 0);.    ret
19420 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
19430 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20   }..  zFilename 
19440 3d 20 6f 62 6a 63 3e 31 20 3f 20 54 63 6c 5f 47  = objc>1 ? Tcl_G
19450 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
19460 29 20 3a 20 30 3b 0a 20 20 72 63 20 3d 20 73 71  ) : 0;.  rc = sq
19470 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 46 69 6c 65  lite3_open(zFile
19480 6e 61 6d 65 2c 20 26 64 62 29 3b 0a 20 20 0a 20  name, &db);.  . 
19490 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
194a0 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69  MakePointerStr(i
194b0 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 64 62 29  nterp, zBuf, db)
194c0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
194d0 52 4f 52 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  ROR;.  Tcl_Appen
194e0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
194f0 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65 74 75  zBuf, 0);.  retu
19500 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
19510 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
19520 65 33 5f 6f 70 65 6e 31 36 20 66 69 6c 65 6e 61  e3_open16 filena
19530 6d 65 20 6f 70 74 69 6f 6e 73 0a 2a 2f 0a 73 74  me options.*/.st
19540 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6f 70  atic int test_op
19550 65 6e 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63  en16(.  void * c
19560 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
19570 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
19580 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
19590 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
195a0 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
195b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
195c0 36 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  6.  const void *
195d0 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20 20 73 71 6c  zFilename;.  sql
195e0 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
195f0 72 63 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b  rc;.  char zBuf[
19600 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  100];..  if( obj
19610 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
19620 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
19630 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
19640 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
19650 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
19660 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
19670 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65 20 6f 70  ), " filename op
19680 74 69 6f 6e 73 2d 6c 69 73 74 22 2c 20 30 29 3b  tions-list", 0);
19690 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
196a0 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 46  ERROR;.  }..  zF
196b0 69 6c 65 6e 61 6d 65 20 3d 20 54 63 6c 5f 47 65  ilename = Tcl_Ge
196c0 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62  tByteArrayFromOb
196d0 6a 28 6f 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a 20  j(objv[1], 0);. 
196e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70   rc = sqlite3_op
196f0 65 6e 31 36 28 7a 46 69 6c 65 6e 61 6d 65 2c 20  en16(zFilename, 
19700 26 64 62 29 3b 0a 20 20 0a 20 20 69 66 28 20 73  &db);.  .  if( s
19710 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
19720 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c  interStr(interp,
19730 20 7a 42 75 66 2c 20 64 62 29 20 29 20 72 65 74   zBuf, db) ) ret
19740 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
19750 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
19760 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  t(interp, zBuf, 
19770 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  0);.#endif /* SQ
19780 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
19790 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
197a0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
197b0 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70  ge: sqlite3_comp
197c0 6c 65 74 65 31 36 20 3c 55 54 46 2d 31 36 20 73  lete16 <UTF-16 s
197d0 74 72 69 6e 67 3e 0a 2a 2a 0a 2a 2a 20 52 65 74  tring>.**.** Ret
197e0 75 72 6e 20 31 20 69 66 20 74 68 65 20 73 75 70  urn 1 if the sup
197f0 70 6c 69 65 64 20 61 72 67 75 6d 65 6e 74 20 69  plied argument i
19800 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 53 51 4c  s a complete SQL
19810 20 73 74 61 74 65 6d 65 6e 74 2c 20 6f 72 20 7a   statement, or z
19820 65 72 6f 0a 2a 2a 20 6f 74 68 65 72 77 69 73 65  ero.** otherwise
19830 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
19840 74 65 73 74 5f 63 6f 6d 70 6c 65 74 65 31 36 28  test_complete16(
19850 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
19860 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
19870 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
19880 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
19890 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
198a0 29 7b 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ){.#if !defined(
198b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
198c0 4c 45 54 45 29 20 26 26 20 21 64 65 66 69 6e 65  LETE) && !define
198d0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  d(SQLITE_OMIT_UT
198e0 46 31 36 29 0a 20 20 63 68 61 72 20 2a 7a 42 75  F16).  char *zBu
198f0 66 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  f;..  if( objc!=
19900 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  2 ){.    Tcl_Wro
19910 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
19920 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3c 75 74 66  , 1, objv, "<utf
19930 2d 31 36 20 73 71 6c 3e 22 29 3b 0a 20 20 20 20  -16 sql>");.    
19940 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
19950 3b 0a 20 20 7d 0a 0a 20 20 7a 42 75 66 20 3d 20  ;.  }..  zBuf = 
19960 28 63 68 61 72 2a 29 54 63 6c 5f 47 65 74 42 79  (char*)Tcl_GetBy
19970 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f  teArrayFromObj(o
19980 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a 20 20 54 63  bjv[1], 0);.  Tc
19990 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
199a0 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
199b0 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 6f 6d  tObj(sqlite3_com
199c0 70 6c 65 74 65 31 36 28 7a 42 75 66 29 29 29 3b  plete16(zBuf)));
199d0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
199e0 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 20  E_OMIT_COMPLETE 
199f0 26 26 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  && SQLITE_OMIT_U
19a00 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e  TF16 */.  return
19a10 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
19a20 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
19a30 5f 73 74 65 70 20 53 54 4d 54 0a 2a 2a 0a 2a 2a  _step STMT.**.**
19a40 20 41 64 76 61 6e 63 65 20 74 68 65 20 73 74 61   Advance the sta
19a50 74 65 6d 65 6e 74 20 74 6f 20 74 68 65 20 6e 65  tement to the ne
19a60 78 74 20 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74 69  xt row..*/.stati
19a70 63 20 69 6e 74 20 74 65 73 74 5f 73 74 65 70 28  c int test_step(
19a80 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
19a90 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
19aa0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
19ab0 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
19ac0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
19ad0 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
19ae0 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
19af0 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
19b00 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
19b10 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
19b20 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
19b30 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
19b40 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
19b50 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
19b60 20 22 20 53 54 4d 54 22 2c 20 30 29 3b 0a 20 20   " STMT", 0);.  
19b70 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
19b80 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
19b90 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
19ba0 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
19bb0 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
19bc0 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
19bd0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
19be0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53   sqlite3_step(pS
19bf0 74 6d 74 29 3b 0a 0a 20 20 2f 2a 20 69 66 28 20  tmt);..  /* if( 
19c00 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc!=SQLITE_DONE 
19c10 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 52 4f  && rc!=SQLITE_RO
19c20 57 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  W ) return TCL_E
19c30 52 52 4f 52 3b 20 2a 2f 0a 20 20 54 63 6c 5f 53  RROR; */.  Tcl_S
19c40 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
19c50 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72   (char *)t1Error
19c60 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20  Name(rc), 0);.  
19c70 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
19c80 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
19c90 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
19ca0 75 6e 74 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20  unt STMT .**.** 
19cb0 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
19cc0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74  r of columns ret
19cd0 75 72 6e 65 64 20 62 79 20 74 68 65 20 73 71 6c  urned by the sql
19ce0 20 73 74 61 74 65 6d 65 6e 74 20 53 54 4d 54 2e   statement STMT.
19cf0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
19d00 65 73 74 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  est_column_count
19d10 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
19d20 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
19d30 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
19d40 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
19d50 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
19d60 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
19d70 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66  mt *pStmt;..  if
19d80 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
19d90 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
19da0 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
19db0 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
19dc0 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
19dd0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
19de0 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
19df0 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
19e00 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
19e10 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
19e20 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
19e30 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
19e40 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
19e50 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
19e60 5f 45 52 52 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53  _ERROR;..  Tcl_S
19e70 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
19e80 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
19e90 6a 28 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  j(sqlite3_column
19ea0 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 29 29 3b  _count(pStmt)));
19eb0 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
19ec0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
19ed0 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
19ee0 5f 74 79 70 65 20 53 54 4d 54 20 63 6f 6c 75 6d  _type STMT colum
19ef0 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  n.**.** Return t
19f00 68 65 20 74 79 70 65 20 6f 66 20 74 68 65 20 64  he type of the d
19f10 61 74 61 20 69 6e 20 63 6f 6c 75 6d 6e 20 27 63  ata in column 'c
19f20 6f 6c 75 6d 6e 27 20 6f 66 20 74 68 65 20 63 75  olumn' of the cu
19f30 72 72 65 6e 74 20 72 6f 77 2e 0a 2a 2f 0a 73 74  rrent row..*/.st
19f40 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f  atic int test_co
19f50 6c 75 6d 6e 5f 74 79 70 65 28 0a 20 20 76 6f 69  lumn_type(.  voi
19f60 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
19f70 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
19f80 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
19f90 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
19fa0 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
19fb0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
19fc0 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20  mt;.  int col;. 
19fd0 20 69 6e 74 20 74 70 3b 0a 0a 20 20 69 66 28 20   int tp;..  if( 
19fe0 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
19ff0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
1a000 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
1a010 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
1a020 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
1a030 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
1a040 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c  [0]), " STMT col
1a050 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  umn", 0);.    re
1a060 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1a070 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
1a080 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
1a090 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
1a0a0 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
1a0b0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
1a0c0 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
1a0d0 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
1a0e0 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
1a0f0 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  col) ) return TC
1a100 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 74 70 20 3d  L_ERROR;..  tp =
1a110 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1a120 74 79 70 65 28 70 53 74 6d 74 2c 20 63 6f 6c 29  type(pStmt, col)
1a130 3b 0a 20 20 73 77 69 74 63 68 28 20 74 70 20 29  ;.  switch( tp )
1a140 7b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  {.    case SQLIT
1a150 45 5f 49 4e 54 45 47 45 52 3a 20 0a 20 20 20 20  E_INTEGER: .    
1a160 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
1a170 69 6e 74 65 72 70 2c 20 22 49 4e 54 45 47 45 52  interp, "INTEGER
1a180 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20  ", TCL_STATIC); 
1a190 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
1a1a0 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 55    case SQLITE_NU
1a1b0 4c 4c 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53 65  LL:.      Tcl_Se
1a1c0 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
1a1d0 22 4e 55 4c 4c 22 2c 20 54 43 4c 5f 53 54 41 54  "NULL", TCL_STAT
1a1e0 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72 65 61  IC); .      brea
1a1f0 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1a200 54 45 5f 46 4c 4f 41 54 3a 0a 20 20 20 20 20 20  TE_FLOAT:.      
1a210 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
1a220 74 65 72 70 2c 20 22 46 4c 4f 41 54 22 2c 20 54  terp, "FLOAT", T
1a230 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20  CL_STATIC); .   
1a240 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
1a250 73 65 20 53 51 4c 49 54 45 5f 54 45 58 54 3a 0a  se SQLITE_TEXT:.
1a260 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73        Tcl_SetRes
1a270 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 54 45 58  ult(interp, "TEX
1a280 54 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  T", TCL_STATIC);
1a290 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20   .      break;. 
1a2a0 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 42     case SQLITE_B
1a2b0 4c 4f 42 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53  LOB:.      Tcl_S
1a2c0 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
1a2d0 20 22 42 4c 4f 42 22 2c 20 54 43 4c 5f 53 54 41   "BLOB", TCL_STA
1a2e0 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72 65  TIC); .      bre
1a2f0 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a  ak;.    default:
1a300 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 30 29  .      assert(0)
1a310 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20  ;.  }..  return 
1a320 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
1a330 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
1a340 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 20 53 54 4d  column_int64 STM
1a350 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52  T column.**.** R
1a360 65 74 75 72 6e 20 74 68 65 20 64 61 74 61 20 69  eturn the data i
1a370 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e  n column 'column
1a380 27 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  ' of the current
1a390 20 72 6f 77 20 63 61 73 74 20 61 73 20 61 6e 0a   row cast as an.
1a3a0 2a 2a 20 77 69 64 65 20 28 36 34 2d 62 69 74 29  ** wide (64-bit)
1a3b0 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 73 74 61   integer..*/.sta
1a3c0 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c  tic int test_col
1a3d0 75 6d 6e 5f 69 6e 74 36 34 28 0a 20 20 76 6f 69  umn_int64(.  voi
1a3e0 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
1a3f0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
1a400 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
1a410 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
1a420 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
1a430 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
1a440 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20  mt;.  int col;. 
1a450 20 69 36 34 20 69 56 61 6c 3b 0a 0a 20 20 69 66   i64 iVal;..  if
1a460 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
1a470 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
1a480 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
1a490 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
1a4a0 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
1a4b0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
1a4c0 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
1a4d0 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
1a4e0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1a4f0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
1a500 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
1a510 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
1a520 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
1a530 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
1a540 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
1a550 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
1a560 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
1a570 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20   &col) ) return 
1a580 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 56  TCL_ERROR;..  iV
1a590 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  al = sqlite3_col
1a5a0 75 6d 6e 5f 69 6e 74 36 34 28 70 53 74 6d 74 2c  umn_int64(pStmt,
1a5b0 20 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53 65 74   col);.  Tcl_Set
1a5c0 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
1a5d0 2c 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e 74  , Tcl_NewWideInt
1a5e0 4f 62 6a 28 69 56 61 6c 29 29 3b 0a 20 20 72 65  Obj(iVal));.  re
1a5f0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
1a600 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
1a610 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
1a620 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a   STMT column.*/.
1a630 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
1a640 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 0a 20 20 76  column_blob(.  v
1a650 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
1a660 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
1a670 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
1a680 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
1a690 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
1a6a0 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
1a6b0 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b  Stmt;.  int col;
1a6c0 0a 0a 20 20 69 6e 74 20 6c 65 6e 3b 0a 20 20 63  ..  int len;.  c
1a6d0 6f 6e 73 74 20 76 6f 69 64 20 2a 70 42 6c 6f 62  onst void *pBlob
1a6e0 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  ;..  if( objc!=3
1a6f0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
1a700 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
1a710 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
1a720 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
1a730 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
1a740 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
1a750 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30   STMT column", 0
1a760 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
1a770 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
1a780 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
1a790 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
1a7a0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
1a7b0 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
1a7c0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1a7d0 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
1a7e0 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
1a7f0 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20  bjv[2], &col) ) 
1a800 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1a810 3b 0a 0a 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74  ;..  len = sqlit
1a820 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28  e3_column_bytes(
1a830 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 70  pStmt, col);.  p
1a840 42 6c 6f 62 20 3d 20 73 71 6c 69 74 65 33 5f 63  Blob = sqlite3_c
1a850 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d 74  olumn_blob(pStmt
1a860 2c 20 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53 65  , col);.  Tcl_Se
1a870 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
1a880 70 2c 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72  p, Tcl_NewByteAr
1a890 72 61 79 4f 62 6a 28 70 42 6c 6f 62 2c 20 6c 65  rayObj(pBlob, le
1a8a0 6e 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  n));.  return TC
1a8b0 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
1a8c0 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
1a8d0 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20 53 54 4d 54  lumn_double STMT
1a8e0 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65   column.**.** Re
1a8f0 74 75 72 6e 20 74 68 65 20 64 61 74 61 20 69 6e  turn the data in
1a900 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27   column 'column'
1a910 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
1a920 72 6f 77 20 63 61 73 74 20 61 73 20 61 20 64 6f  row cast as a do
1a930 75 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  uble..*/.static 
1a940 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f  int test_column_
1a950 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a  double(.  void *
1a960 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
1a970 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1a980 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
1a990 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
1a9a0 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
1a9b0 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
1a9c0 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 64 6f  .  int col;.  do
1a9d0 75 62 6c 65 20 72 56 61 6c 3b 0a 0a 20 20 69 66  uble rVal;..  if
1a9e0 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20  ( objc!=3 ){.   
1a9f0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
1aa00 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
1aa10 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
1aa20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20  be \"", .       
1aa30 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
1aa40 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63  jv[0]), " STMT c
1aa50 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20  olumn", 0);.    
1aa60 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1aa70 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
1aa80 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
1aa90 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
1aaa0 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
1aab0 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
1aac0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
1aad0 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
1aae0 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
1aaf0 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20   &col) ) return 
1ab00 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 56  TCL_ERROR;..  rV
1ab10 61 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  al = sqlite3_col
1ab20 75 6d 6e 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74  umn_double(pStmt
1ab30 2c 20 63 6f 6c 29 3b 0a 20 20 54 63 6c 5f 53 65  , col);.  Tcl_Se
1ab40 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
1ab50 70 2c 20 54 63 6c 5f 4e 65 77 44 6f 75 62 6c 65  p, Tcl_NewDouble
1ab60 4f 62 6a 28 72 56 61 6c 29 29 3b 0a 20 20 72 65  Obj(rVal));.  re
1ab70 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
1ab80 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
1ab90 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 20  ite3_data_count 
1aba0 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75  STMT .**.** Retu
1abb0 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
1abc0 20 63 6f 6c 75 6d 6e 73 20 72 65 74 75 72 6e 65   columns returne
1abd0 64 20 62 79 20 74 68 65 20 73 71 6c 20 73 74 61  d by the sql sta
1abe0 74 65 6d 65 6e 74 20 53 54 4d 54 2e 0a 2a 2f 0a  tement STMT..*/.
1abf0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
1ac00 64 61 74 61 5f 63 6f 75 6e 74 28 0a 20 20 76 6f  data_count(.  vo
1ac10 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
1ac20 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1ac30 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
1ac40 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
1ac50 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
1ac60 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
1ac70 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  tmt;..  if( objc
1ac80 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
1ac90 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
1aca0 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
1acb0 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
1acc0 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
1acd0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
1ace0 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22  , " STMT column"
1acf0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
1ad00 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
1ad10 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
1ad20 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
1ad30 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
1ad40 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
1ad50 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1ad60 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  ;..  Tcl_SetObjR
1ad70 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
1ad80 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69  l_NewIntObj(sqli
1ad90 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e 74 28 70  te3_data_count(p
1ada0 53 74 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72  Stmt)));.  retur
1adb0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
1adc0 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
1add0 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 53 54  3_column_text ST
1ade0 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20  MT column.**.** 
1adf0 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63  Usage: sqlite3_c
1ae00 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 53  olumn_decltype S
1ae10 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a  TMT column.**.**
1ae20 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
1ae30 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 53 54 4d 54  column_name STMT
1ae40 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69   column.*/.stati
1ae50 63 20 69 6e 74 20 74 65 73 74 5f 73 74 6d 74 5f  c int test_stmt_
1ae60 75 74 66 38 28 0a 20 20 76 6f 69 64 20 2a 20 63  utf8(.  void * c
1ae70 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20 20  lientData,      
1ae80 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
1ae90 53 51 4c 69 74 65 20 41 50 49 20 66 75 6e 63 74  SQLite API funct
1aea0 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  ion to be invoke
1aeb0 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
1aec0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
1aed0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
1aee0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
1aef0 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
1af00 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f  *pStmt;.  int co
1af10 6c 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  l;.  const char 
1af20 2a 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65  *(*xFunc)(sqlite
1af30 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 3b 0a 20  3_stmt*, int);. 
1af40 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 65   const char *zRe
1af50 74 3b 0a 0a 20 20 78 46 75 6e 63 20 3d 20 28 63  t;..  xFunc = (c
1af60 6f 6e 73 74 20 63 68 61 72 20 2a 28 2a 29 28 73  onst char *(*)(s
1af70 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 20 69 6e  qlite3_stmt*, in
1af80 74 29 29 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20  t))clientData;. 
1af90 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
1afa0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
1afb0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
1afc0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
1afd0 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
1afe0 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
1aff0 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d  (objv[0]), " STM
1b000 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20  T column", 0);. 
1b010 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
1b020 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
1b030 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
1b040 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
1b050 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
1b060 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
1b070 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
1b080 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
1b090 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
1b0a0 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75  2], &col) ) retu
1b0b0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1b0c0 7a 52 65 74 20 3d 20 78 46 75 6e 63 28 70 53 74  zRet = xFunc(pSt
1b0d0 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 69 66 28 20  mt, col);.  if( 
1b0e0 7a 52 65 74 20 29 7b 0a 20 20 20 20 54 63 6c 5f  zRet ){.    Tcl_
1b0f0 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
1b100 2c 20 28 63 68 61 72 20 2a 29 7a 52 65 74 2c 20  , (char *)zRet, 
1b110 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  0);.  }.  return
1b120 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74   TCL_OK;.}..stat
1b130 69 63 20 69 6e 74 20 74 65 73 74 5f 67 6c 6f 62  ic int test_glob
1b140 61 6c 5f 72 65 63 6f 76 65 72 28 0a 20 20 76 6f  al_recover(.  vo
1b150 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
1b160 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1b170 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
1b180 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
1b190 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69  NST objv[].){.#i
1b1a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1b1b0 54 5f 47 4c 4f 42 41 4c 52 45 43 4f 56 45 52 0a  T_GLOBALRECOVER.
1b1c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1b1d0 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a 20  MIT_DEPRECATED. 
1b1e0 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 6f   int rc;.  if( o
1b1f0 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20 20 54 63  bjc!=1 ){.    Tc
1b200 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
1b210 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
1b220 22 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  "");.    return 
1b230 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
1b240 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 67 6c   rc = sqlite3_gl
1b250 6f 62 61 6c 5f 72 65 63 6f 76 65 72 28 29 3b 0a  obal_recover();.
1b260 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28    Tcl_SetResult(
1b270 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29  interp, (char *)
1b280 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  t1ErrorName(rc),
1b290 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 23 65   TCL_STATIC);.#e
1b2a0 6e 64 69 66 0a 23 65 6e 64 69 66 0a 20 20 72 65  ndif.#endif.  re
1b2b0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
1b2c0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
1b2d0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
1b2e0 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a   STMT column.**.
1b2f0 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
1b300 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  3_column_decltyp
1b310 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a  e STMT column.**
1b320 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
1b330 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 53  e3_column_name S
1b340 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74  TMT column.*/.st
1b350 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 74  atic int test_st
1b360 6d 74 5f 75 74 66 31 36 28 0a 20 20 76 6f 69 64  mt_utf16(.  void
1b370 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20   * clientData,  
1b380 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
1b390 20 53 51 4c 69 74 65 20 41 50 49 20 66 75 6e 63   SQLite API func
1b3a0 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b  tion to be invok
1b3b0 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  ed */.  Tcl_Inte
1b3c0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
1b3d0 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
1b3e0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
1b3f0 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
1b400 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 73  E_OMIT_UTF16.  s
1b410 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
1b420 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20  mt;.  int col;. 
1b430 20 54 63 6c 5f 4f 62 6a 20 2a 70 52 65 74 3b 0a   Tcl_Obj *pRet;.
1b440 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 4e    const void *zN
1b450 61 6d 65 31 36 3b 0a 20 20 63 6f 6e 73 74 20 76  ame16;.  const v
1b460 6f 69 64 20 2a 28 2a 78 46 75 6e 63 29 28 73 71  oid *(*xFunc)(sq
1b470 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 20 69 6e 74  lite3_stmt*, int
1b480 29 3b 0a 0a 20 20 78 46 75 6e 63 20 3d 20 28 63  );..  xFunc = (c
1b490 6f 6e 73 74 20 76 6f 69 64 20 2a 28 2a 29 28 73  onst void *(*)(s
1b4a0 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 20 69 6e  qlite3_stmt*, in
1b4b0 74 29 29 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20  t))clientData;. 
1b4c0 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
1b4d0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
1b4e0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
1b4f0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
1b500 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
1b510 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
1b520 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d  (objv[0]), " STM
1b530 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20  T column", 0);. 
1b540 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
1b550 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
1b560 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
1b570 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
1b580 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
1b590 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
1b5a0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
1b5b0 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
1b5c0 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
1b5d0 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75  2], &col) ) retu
1b5e0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
1b5f0 20 7a 4e 61 6d 65 31 36 20 3d 20 78 46 75 6e 63   zName16 = xFunc
1b600 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20  (pStmt, col);.  
1b610 69 66 28 20 7a 4e 61 6d 65 31 36 20 29 7b 0a 20  if( zName16 ){. 
1b620 20 20 20 70 52 65 74 20 3d 20 54 63 6c 5f 4e 65     pRet = Tcl_Ne
1b630 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28 7a 4e  wByteArrayObj(zN
1b640 61 6d 65 31 36 2c 20 73 71 6c 69 74 65 33 55 74  ame16, sqlite3Ut
1b650 66 31 36 42 79 74 65 4c 65 6e 28 7a 4e 61 6d 65  f16ByteLen(zName
1b660 31 36 2c 20 2d 31 29 2b 32 29 3b 0a 20 20 20 20  16, -1)+2);.    
1b670 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
1b680 28 69 6e 74 65 72 70 2c 20 70 52 65 74 29 3b 0a  (interp, pRet);.
1b690 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
1b6a0 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
1b6b0 2a 2f 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  */..  return TCL
1b6c0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
1b6d0 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
1b6e0 75 6d 6e 5f 69 6e 74 20 53 54 4d 54 20 63 6f 6c  umn_int STMT col
1b6f0 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a  umn.**.** Usage:
1b700 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1b710 62 79 74 65 73 20 53 54 4d 54 20 63 6f 6c 75 6d  bytes STMT colum
1b720 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  n.**.** Usage: s
1b730 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
1b740 74 65 73 31 36 20 53 54 4d 54 20 63 6f 6c 75 6d  tes16 STMT colum
1b750 6e 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63 20 69  n.**.*/.static i
1b760 6e 74 20 74 65 73 74 5f 73 74 6d 74 5f 69 6e 74  nt test_stmt_int
1b770 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
1b780 74 44 61 74 61 2c 20 20 20 20 2f 2a 20 50 6f 69  tData,    /* Poi
1b790 6e 74 65 72 20 74 6f 20 53 51 4c 69 74 65 20 41  nter to SQLite A
1b7a0 50 49 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62  PI function to b
1b7b0 65 20 69 6e 76 6f 6b 65 64 20 2a 2f 0a 20 20 54  e invoked */.  T
1b7c0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1b7d0 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
1b7e0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
1b7f0 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
1b800 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
1b810 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 6e  .  int col;.  in
1b820 74 20 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74  t (*xFunc)(sqlit
1b830 65 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 3b 0a  e3_stmt*, int);.
1b840 0a 20 20 78 46 75 6e 63 20 3d 20 28 69 6e 74 20  .  xFunc = (int 
1b850 28 2a 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  (*)(sqlite3_stmt
1b860 2a 2c 20 69 6e 74 29 29 63 6c 69 65 6e 74 44 61  *, int))clientDa
1b870 74 61 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  ta;.  if( objc!=
1b880 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
1b890 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
1b8a0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
1b8b0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
1b8c0 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
1b8d0 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
1b8e0 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20  " STMT column", 
1b8f0 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
1b900 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
1b910 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
1b920 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
1b930 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
1b940 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
1b950 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1b960 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
1b970 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
1b980 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29  objv[2], &col) )
1b990 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1b9a0 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  R;..  Tcl_SetObj
1b9b0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
1b9c0 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 78 46 75  cl_NewIntObj(xFu
1b9d0 6e 63 28 70 53 74 6d 74 2c 20 63 6f 6c 29 29 29  nc(pStmt, col)))
1b9e0 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
1b9f0 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
1ba00 65 3a 20 20 73 71 6c 69 74 65 5f 73 65 74 5f 6d  e:  sqlite_set_m
1ba10 61 67 69 63 20 20 44 42 20 20 4d 41 47 49 43 2d  agic  DB  MAGIC-
1ba20 4e 55 4d 42 45 52 0a 2a 2a 0a 2a 2a 20 53 65 74  NUMBER.**.** Set
1ba30 20 74 68 65 20 64 62 2d 3e 6d 61 67 69 63 20 76   the db->magic v
1ba40 61 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20 75  alue.  This is u
1ba50 73 65 64 20 74 6f 20 74 65 73 74 20 65 72 72 6f  sed to test erro
1ba60 72 20 72 65 63 6f 76 65 72 79 20 6c 6f 67 69 63  r recovery logic
1ba70 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1ba80 73 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69 63  sqlite_set_magic
1ba90 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
1baa0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
1bab0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
1bac0 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20  nt argc,.  char 
1bad0 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69  **argv.){.  sqli
1bae0 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61  te3 *db;.  if( a
1baf0 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  rgc!=3 ){.    Tc
1bb00 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
1bb10 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
1bb20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
1bb30 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
1bb40 20 20 20 20 20 20 20 22 20 44 42 20 4d 41 47 49         " DB MAGI
1bb50 43 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  C", 0);.    retu
1bb60 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1bb70 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
1bb80 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
1bb90 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
1bba0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1bbb0 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76   if( strcmp(argv
1bbc0 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41 47  [2], "SQLITE_MAG
1bbd0 49 43 5f 4f 50 45 4e 22 29 3d 3d 30 20 29 7b 0a  IC_OPEN")==0 ){.
1bbe0 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20      db->magic = 
1bbf0 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45  SQLITE_MAGIC_OPE
1bc00 4e 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73  N;.  }else if( s
1bc10 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22  trcmp(argv[2], "
1bc20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
1bc30 53 45 44 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  SED")==0 ){.    
1bc40 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
1bc50 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 3b  TE_MAGIC_CLOSED;
1bc60 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72  .  }else if( str
1bc70 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53 51  cmp(argv[2], "SQ
1bc80 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 22  LITE_MAGIC_BUSY"
1bc90 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e  )==0 ){.    db->
1bca0 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d  magic = SQLITE_M
1bcb0 41 47 49 43 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  AGIC_BUSY;.  }el
1bcc0 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72  se if( strcmp(ar
1bcd0 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d  gv[2], "SQLITE_M
1bce0 41 47 49 43 5f 45 52 52 4f 52 22 29 3d 3d 30 20  AGIC_ERROR")==0 
1bcf0 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63  ){.    db->magic
1bd00 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
1bd10 45 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 20 69  ERROR;.  }else i
1bd20 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e  f( Tcl_GetInt(in
1bd30 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 28  terp, argv[2], (
1bd40 69 6e 74 2a 29 26 64 62 2d 3e 6d 61 67 69 63 29  int*)&db->magic)
1bd50 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
1bd60 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
1bd70 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
1bd80 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
1bd90 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
1bda0 74 20 20 44 42 20 0a 2a 2a 0a 2a 2a 20 54 72 69  t  DB .**.** Tri
1bdb0 67 67 65 72 20 61 6e 20 69 6e 74 65 72 72 75 70  gger an interrup
1bdc0 74 20 6f 6e 20 44 42 0a 2a 2f 0a 73 74 61 74 69  t on DB.*/.stati
1bdd0 63 20 69 6e 74 20 74 65 73 74 5f 69 6e 74 65 72  c int test_inter
1bde0 72 75 70 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  rupt(.  void * c
1bdf0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
1be00 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
1be10 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63  .  int argc,.  c
1be20 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  har **argv.){.  
1be30 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
1be40 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20  f( argc!=2 ){.  
1be50 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
1be60 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
1be70 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
1be80 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
1be90 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20  , " DB", 0);.   
1bea0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1beb0 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
1bec0 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
1bed0 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20  , argv[1], &db) 
1bee0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
1bef0 4f 52 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e  OR;.  sqlite3_in
1bf00 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 72  terrupt(db);.  r
1bf10 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
1bf20 0a 73 74 61 74 69 63 20 75 38 20 2a 73 71 6c 69  .static u8 *sqli
1bf30 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69  te3_stack_baseli
1bf40 6e 65 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 46  ne = 0;../*.** F
1bf50 69 6c 6c 20 74 68 65 20 73 74 61 63 6b 20 77 69  ill the stack wi
1bf60 74 68 20 61 20 6b 6e 6f 77 6e 20 62 69 74 70 61  th a known bitpa
1bf70 74 74 65 72 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63  ttern..*/.static
1bf80 20 76 6f 69 64 20 70 72 65 70 53 74 61 63 6b 28   void prepStack(
1bf90 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 69 3b 0a  void){.  int i;.
1bfa0 20 20 75 33 32 20 62 69 67 42 75 66 5b 36 35 35    u32 bigBuf[655
1bfb0 33 36 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  36];.  for(i=0; 
1bfc0 69 3c 73 69 7a 65 6f 66 28 62 69 67 42 75 66 29  i<sizeof(bigBuf)
1bfd0 3b 20 69 2b 2b 29 20 62 69 67 42 75 66 5b 69 5d  ; i++) bigBuf[i]
1bfe0 20 3d 20 30 78 64 65 61 64 62 65 65 66 3b 0a 20   = 0xdeadbeef;. 
1bff0 20 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62   sqlite3_stack_b
1c000 61 73 65 6c 69 6e 65 20 3d 20 28 75 38 2a 29 26  aseline = (u8*)&
1c010 62 69 67 42 75 66 5b 36 35 35 33 36 5d 3b 0a 7d  bigBuf[65536];.}
1c020 0a 0a 2f 2a 0a 2a 2a 20 47 65 74 20 74 68 65 20  ../*.** Get the 
1c030 63 75 72 72 65 6e 74 20 73 74 61 63 6b 20 64 65  current stack de
1c040 70 74 68 2e 20 20 55 73 65 64 20 66 6f 72 20 64  pth.  Used for d
1c050 65 62 75 67 67 69 6e 67 20 6f 6e 6c 79 2e 0a 2a  ebugging only..*
1c060 2f 0a 75 36 34 20 73 71 6c 69 74 65 33 53 74 61  /.u64 sqlite3Sta
1c070 63 6b 44 65 70 74 68 28 76 6f 69 64 29 7b 0a 20  ckDepth(void){. 
1c080 20 75 38 20 78 3b 0a 20 20 72 65 74 75 72 6e 20   u8 x;.  return 
1c090 28 75 36 34 29 28 73 71 6c 69 74 65 33 5f 73 74  (u64)(sqlite3_st
1c0a0 61 63 6b 5f 62 61 73 65 6c 69 6e 65 20 2d 20 26  ack_baseline - &
1c0b0 78 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  x);.}../*.** Usa
1c0c0 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 73 74 61  ge:  sqlite3_sta
1c0d0 63 6b 5f 75 73 65 64 20 44 42 20 53 51 4c 0a 2a  ck_used DB SQL.*
1c0e0 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 6d 65 61 73  *.** Try to meas
1c0f0 75 72 65 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f  ure the amount o
1c100 66 20 73 74 61 63 6b 20 73 70 61 63 65 20 75 73  f stack space us
1c110 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20  ed by a call to 
1c120 73 71 6c 69 74 65 33 5f 65 78 65 63 0a 2a 2f 0a  sqlite3_exec.*/.
1c130 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
1c140 73 74 61 63 6b 5f 75 73 65 64 28 0a 20 20 76 6f  stack_used(.  vo
1c150 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
1c160 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1c170 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67  nterp,.  int arg
1c180 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  c,.  char **argv
1c190 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
1c1a0 62 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66  b;.  int i;.  if
1c1b0 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20  ( argc!=3 ){.   
1c1c0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
1c1d0 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
1c1e0 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
1c1f0 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
1c200 20 0a 20 20 20 20 20 20 20 20 22 20 44 42 20 53   .        " DB S
1c210 51 4c 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  QL", 0);.    ret
1c220 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1c230 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
1c240 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
1c250 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
1c260 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1c270 20 20 70 72 65 70 53 74 61 63 6b 28 29 3b 0a 20    prepStack();. 
1c280 20 28 76 6f 69 64 29 73 71 6c 69 74 65 33 5f 65   (void)sqlite3_e
1c290 78 65 63 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c  xec(db, argv[2],
1c2a0 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 66 6f 72   0, 0, 0);.  for
1c2b0 28 69 3d 36 35 35 33 35 3b 20 69 3e 3d 30 20 26  (i=65535; i>=0 &
1c2c0 26 20 28 28 75 33 32 2a 29 73 71 6c 69 74 65 33  & ((u32*)sqlite3
1c2d0 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65 29  _stack_baseline)
1c2e0 5b 2d 69 5d 3d 3d 30 78 64 65 61 64 62 65 65 66  [-i]==0xdeadbeef
1c2f0 3b 20 69 2d 2d 29 7b 7d 0a 20 20 54 63 6c 5f 53  ; i--){}.  Tcl_S
1c300 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
1c310 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
1c320 6a 28 69 2a 34 29 29 3b 0a 20 20 72 65 74 75 72  j(i*4));.  retur
1c330 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
1c340 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
1c350 5f 64 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e  _delete_function
1c360 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d   DB function-nam
1c370 65 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74  e.**.** Delete t
1c380 68 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  he user function
1c390 20 27 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 27   'function-name'
1c3a0 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 68   from database h
1c3b0 61 6e 64 6c 65 20 44 42 2e 20 49 74 0a 2a 2a 20  andle DB. It.** 
1c3c0 69 73 20 61 73 73 75 6d 65 64 20 74 68 61 74 20  is assumed that 
1c3d0 74 68 65 20 75 73 65 72 20 66 75 6e 63 74 69 6f  the user functio
1c3e0 6e 20 77 61 73 20 63 72 65 61 74 65 64 20 61 73  n was created as
1c3f0 20 55 54 46 38 2c 20 61 6e 79 20 6e 75 6d 62 65   UTF8, any numbe
1c400 72 20 6f 66 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  r of.** argument
1c410 73 20 28 74 68 65 20 77 61 79 20 74 68 65 20 54  s (the way the T
1c420 43 4c 20 69 6e 74 65 72 66 61 63 65 20 64 6f 65  CL interface doe
1c430 73 20 69 74 29 2e 0a 2a 2f 0a 73 74 61 74 69 63  s it)..*/.static
1c440 20 69 6e 74 20 64 65 6c 65 74 65 5f 66 75 6e 63   int delete_func
1c450 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63  tion(.  void * c
1c460 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
1c470 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
1c480 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63  .  int argc,.  c
1c490 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  har **argv.){.  
1c4a0 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65  int rc;.  sqlite
1c4b0 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67  3 *db;.  if( arg
1c4c0 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
1c4d0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
1c4e0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
1c4f0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
1c500 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20  ", argv[0], .   
1c510 20 20 20 20 20 22 20 44 42 20 66 75 6e 63 74 69       " DB functi
1c520 6f 6e 2d 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20  on-name", 0);.  
1c530 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
1c540 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
1c550 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
1c560 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
1c570 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
1c580 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
1c590 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
1c5a0 69 6f 6e 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c  ion(db, argv[2],
1c5b0 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38   -1, SQLITE_UTF8
1c5c0 2c 20 30 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20  , 0, 0, 0, 0);. 
1c5d0 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
1c5e0 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74  nterp, (char *)t
1c5f0 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  1ErrorName(rc), 
1c600 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20 20 72  TCL_STATIC);.  r
1c610 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
1c620 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
1c630 6c 69 74 65 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c  lite_delete_coll
1c640 61 74 69 6f 6e 20 44 42 20 63 6f 6c 6c 61 74 69  ation DB collati
1c650 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65  on-name.**.** De
1c660 6c 65 74 65 20 74 68 65 20 63 6f 6c 6c 61 74 69  lete the collati
1c670 6f 6e 20 73 65 71 75 65 6e 63 65 20 27 63 6f 6c  on sequence 'col
1c680 6c 61 74 69 6f 6e 2d 6e 61 6d 65 27 20 66 72 6f  lation-name' fro
1c690 6d 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  m database handl
1c6a0 65 20 0a 2a 2a 20 44 42 2e 20 49 74 20 69 73 20  e .** DB. It is 
1c6b0 61 73 73 75 6d 65 64 20 74 68 61 74 20 74 68 65  assumed that the
1c6c0 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
1c6d0 6e 63 65 20 77 61 73 20 63 72 65 61 74 65 64 20  nce was created 
1c6e0 61 73 20 55 54 46 38 20 28 74 68 65 20 0a 2a 2a  as UTF8 (the .**
1c6f0 20 77 61 79 20 74 68 65 20 54 43 4c 20 69 6e 74   way the TCL int
1c700 65 72 66 61 63 65 20 64 6f 65 73 20 69 74 29 2e  erface does it).
1c710 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 64  .*/.static int d
1c720 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  elete_collation(
1c730 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
1c740 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
1c750 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
1c760 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
1c770 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20 72  *argv.){.  int r
1c780 63 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  c;.  sqlite3 *db
1c790 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20  ;.  if( argc!=3 
1c7a0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
1c7b0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
1c7c0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
1c7d0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
1c7e0 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20  gv[0], .        
1c7f0 22 20 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e 61  " DB function-na
1c800 6d 65 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  me", 0);.    ret
1c810 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1c820 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
1c830 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
1c840 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
1c850 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1c860 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
1c870 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28  reate_collation(
1c880 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20 53 51 4c  db, argv[2], SQL
1c890 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 29 3b  ITE_UTF8, 0, 0);
1c8a0 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74  .  Tcl_SetResult
1c8b0 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
1c8c0 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29  )t1ErrorName(rc)
1c8d0 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a 20  , TCL_STATIC);. 
1c8e0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
1c8f0 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
1c900 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
1c910 63 6f 6d 6d 69 74 20 44 42 0a 2a 2a 0a 2a 2a 20  commit DB.**.** 
1c920 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 74  Return true if t
1c930 68 65 20 64 61 74 61 62 61 73 65 20 44 42 20 69  he database DB i
1c940 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 61  s currently in a
1c950 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e  uto-commit mode.
1c960 0a 2a 2a 20 52 65 74 75 72 6e 20 66 61 6c 73 65  .** Return false
1c970 20 69 66 20 6e 6f 74 2e 0a 2a 2f 0a 73 74 61 74   if not..*/.stat
1c980 69 63 20 69 6e 74 20 67 65 74 5f 61 75 74 6f 63  ic int get_autoc
1c990 6f 6d 6d 69 74 28 0a 20 20 76 6f 69 64 20 2a 20  ommit(.  void * 
1c9a0 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
1c9b0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
1c9c0 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20  ,.  int argc,.  
1c9d0 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20  char **argv.){. 
1c9e0 20 63 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a   char zBuf[30];.
1c9f0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
1ca00 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a   if( argc!=2 ){.
1ca10 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
1ca20 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
1ca30 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
1ca40 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
1ca50 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44  0], .        " D
1ca60 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  B", 0);.    retu
1ca70 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1ca80 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
1ca90 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
1caa0 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
1cab0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1cac0 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22   sprintf(zBuf, "
1cad0 25 64 22 2c 20 73 71 6c 69 74 65 33 5f 67 65 74  %d", sqlite3_get
1cae0 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 64 62 29 29  _autocommit(db))
1caf0 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  ;.  Tcl_AppendRe
1cb00 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
1cb10 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  f, 0);.  return 
1cb20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
1cb30 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
1cb40 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 44 42 20  busy_timeout DB 
1cb50 4d 53 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65  MS.**.** Set the
1cb60 20 62 75 73 79 20 74 69 6d 65 6f 75 74 2e 20 20   busy timeout.  
1cb70 54 68 69 73 20 69 73 20 6d 6f 72 65 20 65 61 73  This is more eas
1cb80 69 6c 79 20 64 6f 6e 65 20 75 73 69 6e 67 20 74  ily done using t
1cb90 68 65 20 74 69 6d 65 6f 75 74 0a 2a 2a 20 6d 65  he timeout.** me
1cba0 74 68 6f 64 20 6f 66 20 74 68 65 20 54 43 4c 20  thod of the TCL 
1cbb0 69 6e 74 65 72 66 61 63 65 2e 20 20 42 75 74 20  interface.  But 
1cbc0 77 65 20 6e 65 65 64 20 61 20 77 61 79 20 74 6f  we need a way to
1cbd0 20 74 65 73 74 20 74 68 65 20 63 61 73 65 0a 2a   test the case.*
1cbe0 2a 20 77 68 65 72 65 20 69 74 20 72 65 74 75 72  * where it retur
1cbf0 6e 73 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  ns SQLITE_MISUSE
1cc00 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1cc10 74 65 73 74 5f 62 75 73 79 5f 74 69 6d 65 6f 75  test_busy_timeou
1cc20 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  t(.  void * clie
1cc30 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
1cc40 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
1cc50 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72  int argc,.  char
1cc60 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74   **argv.){.  int
1cc70 20 72 63 2c 20 6d 73 3b 0a 20 20 73 71 6c 69 74   rc, ms;.  sqlit
1cc80 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72  e3 *db;.  if( ar
1cc90 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
1cca0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
1ccb0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
1ccc0 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
1ccd0 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20  "", argv[0], .  
1cce0 20 20 20 20 20 20 22 20 44 42 22 2c 20 30 29 3b        " DB", 0);
1ccf0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
1cd00 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
1cd10 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
1cd20 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
1cd30 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
1cd40 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
1cd50 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c  l_GetInt(interp,
1cd60 20 61 72 67 76 5b 32 5d 2c 20 26 6d 73 29 20 29   argv[2], &ms) )
1cd70 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1cd80 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
1cd90 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64  3_busy_timeout(d
1cda0 62 2c 20 6d 73 29 3b 0a 20 20 54 63 6c 5f 41 70  b, ms);.  Tcl_Ap
1cdb0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
1cdc0 70 2c 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  p, sqlite3TestEr
1cdd0 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b  rorName(rc), 0);
1cde0 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
1cdf0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
1ce00 3a 20 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f  :  tcl_variable_
1ce10 74 79 70 65 20 56 41 52 49 41 42 4c 45 4e 41 4d  type VARIABLENAM
1ce20 45 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  E.**.** Return t
1ce30 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 69  he name of the i
1ce40 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
1ce50 74 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 0a 2a  tation for the.*
1ce60 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 67  * value of the g
1ce70 69 76 65 6e 20 76 61 72 69 61 62 6c 65 2e 0a 2a  iven variable..*
1ce80 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 63 6c  /.static int tcl
1ce90 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65 28 0a  _variable_type(.
1cea0 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
1ceb0 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
1cec0 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
1ced0 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
1cee0 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
1cef0 7b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 56 61  {.  Tcl_Obj *pVa
1cf00 72 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  r;.  if( objc!=2
1cf10 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
1cf20 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
1cf30 20 31 2c 20 6f 62 6a 76 2c 20 22 56 41 52 49 41   1, objv, "VARIA
1cf40 42 4c 45 22 29 3b 0a 20 20 20 20 72 65 74 75 72  BLE");.    retur
1cf50 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
1cf60 0a 20 20 70 56 61 72 20 3d 20 54 63 6c 5f 47 65  .  pVar = Tcl_Ge
1cf70 74 56 61 72 32 45 78 28 69 6e 74 65 72 70 2c 20  tVar2Ex(interp, 
1cf80 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
1cf90 6a 76 5b 31 5d 29 2c 20 30 2c 20 54 43 4c 5f 4c  jv[1]), 0, TCL_L
1cfa0 45 41 56 45 5f 45 52 52 5f 4d 53 47 29 3b 0a 20  EAVE_ERR_MSG);. 
1cfb0 20 69 66 28 20 70 56 61 72 3d 3d 30 20 29 20 72   if( pVar==0 ) r
1cfc0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1cfd0 0a 20 20 69 66 28 20 70 56 61 72 2d 3e 74 79 70  .  if( pVar->typ
1cfe0 65 50 74 72 20 29 7b 0a 20 20 20 20 54 63 6c 5f  ePtr ){.    Tcl_
1cff0 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
1d000 65 72 70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  erp, Tcl_NewStri
1d010 6e 67 4f 62 6a 28 70 56 61 72 2d 3e 74 79 70 65  ngObj(pVar->type
1d020 50 74 72 2d 3e 6e 61 6d 65 2c 20 2d 31 29 29 3b  Ptr->name, -1));
1d030 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
1d040 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
1d050 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 72  sage:  sqlite3_r
1d060 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 20 3f 4e  elease_memory ?N
1d070 3f 0a 2a 2a 0a 2a 2a 20 41 74 74 65 6d 70 74 20  ?.**.** Attempt 
1d080 74 6f 20 72 65 6c 65 61 73 65 20 6d 65 6d 6f 72  to release memor
1d090 79 20 63 75 72 72 65 6e 74 6c 79 20 68 65 6c 64  y currently held
1d0a0 20 62 75 74 20 6e 6f 74 20 61 63 74 75 61 6c 6c   but not actuall
1d0b0 79 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 20 54  y required..** T
1d0c0 68 65 20 69 6e 74 65 67 65 72 20 4e 20 69 73 20  he integer N is 
1d0d0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
1d0e0 74 65 73 20 77 65 20 61 72 65 20 74 72 79 69 6e  tes we are tryin
1d0f0 67 20 74 6f 20 72 65 6c 65 61 73 65 2e 20 20 54  g to release.  T
1d100 68 65 20 0a 2a 2a 20 72 65 74 75 72 6e 20 76 61  he .** return va
1d110 6c 75 65 20 69 73 20 74 68 65 20 61 6d 6f 75 6e  lue is the amoun
1d120 74 20 6f 66 20 6d 65 6d 6f 72 79 20 61 63 74 75  t of memory actu
1d130 61 6c 6c 79 20 72 65 6c 65 61 73 65 64 2e 0a 2a  ally released..*
1d140 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
1d150 74 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  t_release_memory
1d160 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
1d170 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
1d180 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
1d190 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
1d1a0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
1d1b0 0a 29 7b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .){.#if defined(
1d1c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
1d1d0 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 29  MORY_MANAGEMENT)
1d1e0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1d1f0 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 29  ITE_OMIT_DISKIO)
1d200 0a 20 20 69 6e 74 20 4e 3b 0a 20 20 69 6e 74 20  .  int N;.  int 
1d210 61 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21  amt;.  if( objc!
1d220 3d 31 20 26 26 20 6f 62 6a 63 21 3d 32 20 29 7b  =1 && objc!=2 ){
1d230 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75  .    Tcl_WrongNu
1d240 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
1d250 20 6f 62 6a 76 2c 20 22 3f 4e 3f 22 29 3b 0a 20   objv, "?N?");. 
1d260 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
1d270 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6f  ROR;.  }.  if( o
1d280 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20 20 69 66  bjc==2 ){.    if
1d290 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
1d2a0 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
1d2b0 5b 31 5d 2c 20 26 4e 29 20 29 20 72 65 74 75 72  [1], &N) ) retur
1d2c0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
1d2d0 65 6c 73 65 7b 0a 20 20 20 20 4e 20 3d 20 2d 31  else{.    N = -1
1d2e0 3b 0a 20 20 7d 0a 20 20 61 6d 74 20 3d 20 73 71  ;.  }.  amt = sq
1d2f0 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65  lite3_release_me
1d300 6d 6f 72 79 28 4e 29 3b 0a 20 20 54 63 6c 5f 53  mory(N);.  Tcl_S
1d310 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
1d320 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
1d330 6a 28 61 6d 74 29 29 3b 0a 23 65 6e 64 69 66 0a  j(amt));.#endif.
1d340 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
1d350 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
1d360 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68    sqlite3_soft_h
1d370 65 61 70 5f 6c 69 6d 69 74 20 3f 4e 3f 0a 2a 2a  eap_limit ?N?.**
1d380 0a 2a 2a 20 51 75 65 72 79 20 6f 72 20 73 65 74  .** Query or set
1d390 20 74 68 65 20 73 6f 66 74 20 68 65 61 70 20 6c   the soft heap l
1d3a0 69 6d 69 74 20 66 6f 72 20 74 68 65 20 63 75 72  imit for the cur
1d3b0 72 65 6e 74 20 74 68 72 65 61 64 2e 20 20 54 68  rent thread.  Th
1d3c0 65 0a 2a 2a 20 6c 69 6d 69 74 20 69 73 20 6f 6e  e.** limit is on
1d3d0 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20 74 68  ly changed if th
1d3e0 65 20 4e 20 69 73 20 70 72 65 73 65 6e 74 2e 20  e N is present. 
1d3f0 20 54 68 65 20 70 72 65 76 69 6f 75 73 20 6c 69   The previous li
1d400 6d 69 74 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  mit.** is return
1d410 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ed..*/.static in
1d420 74 20 74 65 73 74 5f 73 6f 66 74 5f 68 65 61 70  t test_soft_heap
1d430 5f 6c 69 6d 69 74 28 0a 20 20 76 6f 69 64 20 2a  _limit(.  void *
1d440 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
1d450 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1d460 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
1d470 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
1d480 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 74 61 74  objv[].){.  stat
1d490 69 63 20 69 6e 74 20 73 6f 66 74 48 65 61 70 4c  ic int softHeapL
1d4a0 69 6d 69 74 20 3d 20 30 3b 0a 20 20 69 6e 74 20  imit = 0;.  int 
1d4b0 61 6d 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21  amt;.  if( objc!
1d4c0 3d 31 20 26 26 20 6f 62 6a 63 21 3d 32 20 29 7b  =1 && objc!=2 ){
1d4d0 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75  .    Tcl_WrongNu
1d4e0 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
1d4f0 20 6f 62 6a 76 2c 20 22 3f 4e 3f 22 29 3b 0a 20   objv, "?N?");. 
1d500 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
1d510 52 4f 52 3b 0a 20 20 7d 0a 20 20 61 6d 74 20 3d  ROR;.  }.  amt =
1d520 20 73 6f 66 74 48 65 61 70 4c 69 6d 69 74 3b 0a   softHeapLimit;.
1d530 20 20 69 66 28 20 6f 62 6a 63 3d 3d 32 20 29 7b    if( objc==2 ){
1d540 0a 20 20 20 20 69 6e 74 20 4e 3b 0a 20 20 20 20  .    int N;.    
1d550 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
1d560 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
1d570 6a 76 5b 31 5d 2c 20 26 4e 29 20 29 20 72 65 74  jv[1], &N) ) ret
1d580 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1d590 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f     sqlite3_soft_
1d5a0 68 65 61 70 5f 6c 69 6d 69 74 28 4e 29 3b 0a 20  heap_limit(N);. 
1d5b0 20 20 20 73 6f 66 74 48 65 61 70 4c 69 6d 69 74     softHeapLimit
1d5c0 20 3d 20 4e 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f   = N;.  }.  Tcl_
1d5d0 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
1d5e0 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
1d5f0 62 6a 28 61 6d 74 29 29 3b 0a 20 20 72 65 74 75  bj(amt));.  retu
1d600 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
1d610 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c  .** Usage:   sql
1d620 69 74 65 33 5f 74 68 72 65 61 64 5f 63 6c 65 61  ite3_thread_clea
1d630 6e 75 70 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 74  nup.**.** Call t
1d640 68 65 20 73 71 6c 69 74 65 33 5f 74 68 72 65 61  he sqlite3_threa
1d650 64 5f 63 6c 65 61 6e 75 70 20 41 50 49 2e 0a 2a  d_cleanup API..*
1d660 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
1d670 74 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70  t_thread_cleanup
1d680 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
1d690 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
1d6a0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
1d6b0 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
1d6c0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
1d6d0 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .){.#ifndef SQLI
1d6e0 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
1d6f0 45 44 0a 20 20 73 71 6c 69 74 65 33 5f 74 68 72  ED.  sqlite3_thr
1d700 65 61 64 5f 63 6c 65 61 6e 75 70 28 29 3b 0a 23  ead_cleanup();.#
1d710 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54  endif.  return T
1d720 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
1d730 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
1d740 5f 70 61 67 65 72 5f 72 65 66 63 6f 75 6e 74 73  _pager_refcounts
1d750 20 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72    DB.**.** Retur
1d760 6e 20 61 20 6c 69 73 74 20 6f 66 20 6e 75 6d 62  n a list of numb
1d770 65 72 73 20 77 68 69 63 68 20 61 72 65 20 74 68  ers which are th
1d780 65 20 50 61 67 65 72 52 65 66 63 6f 75 6e 74 20  e PagerRefcount 
1d790 66 6f 72 20 61 6c 6c 0a 2a 2a 20 70 61 67 65 72  for all.** pager
1d7a0 73 20 6f 6e 20 65 61 63 68 20 64 61 74 61 62 61  s on each databa
1d7b0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a  se connection..*
1d7c0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
1d7d0 74 5f 70 61 67 65 72 5f 72 65 66 63 6f 75 6e 74  t_pager_refcount
1d7e0 73 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  s(.  void * clie
1d7f0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
1d800 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
1d810 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
1d820 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
1d830 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ].){.  sqlite3 *
1d840 64 62 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69  db;.  int i;.  i
1d850 6e 74 20 76 2c 20 2a 61 3b 0a 20 20 54 63 6c 5f  nt v, *a;.  Tcl_
1d860 4f 62 6a 20 2a 70 52 65 73 75 6c 74 3b 0a 0a 20  Obj *pResult;.. 
1d870 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
1d880 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
1d890 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
1d8a0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
1d8b0 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
1d8c0 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
1d8d0 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
1d8e0 20 30 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a   0), " DB", 0);.
1d8f0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
1d900 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
1d910 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
1d920 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
1d930 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
1d940 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
1d950 52 52 4f 52 3b 0a 20 20 70 52 65 73 75 6c 74 20  RROR;.  pResult 
1d960 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a  = Tcl_NewObj();.
1d970 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d    for(i=0; i<db-
1d980 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nDb; i++){.    
1d990 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  if( db->aDb[i].p
1d9a0 42 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 76  Bt==0 ){.      v
1d9b0 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65   = -1;.    }else
1d9c0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
1d9d0 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e  mutex_enter(db->
1d9e0 6d 75 74 65 78 29 3b 0a 20 20 20 20 20 20 61 20  mutex);.      a 
1d9f0 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 74  = sqlite3PagerSt
1da00 61 74 73 28 73 71 6c 69 74 65 33 42 74 72 65 65  ats(sqlite3Btree
1da10 50 61 67 65 72 28 64 62 2d 3e 61 44 62 5b 69 5d  Pager(db->aDb[i]
1da20 2e 70 42 74 29 29 3b 0a 20 20 20 20 20 20 76 20  .pBt));.      v 
1da30 3d 20 61 5b 30 5d 3b 0a 20 20 20 20 20 20 73 71  = a[0];.      sq
1da40 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
1da50 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  e(db->mutex);.  
1da60 20 20 7d 0a 20 20 20 20 54 63 6c 5f 4c 69 73 74    }.    Tcl_List
1da70 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
1da80 28 30 2c 20 70 52 65 73 75 6c 74 2c 20 54 63 6c  (0, pResult, Tcl
1da90 5f 4e 65 77 49 6e 74 4f 62 6a 28 76 29 29 3b 0a  _NewIntObj(v));.
1daa0 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a    }.  Tcl_SetObj
1dab0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 70  Result(interp, p
1dac0 52 65 73 75 6c 74 29 3b 0a 20 20 72 65 74 75 72  Result);.  retur
1dad0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a  n TCL_OK;.}.../*
1dae0 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20 20 20 77 6f  .** tclcmd:   wo
1daf0 72 6b 69 6e 67 5f 36 34 62 69 74 5f 69 6e 74 0a  rking_64bit_int.
1db00 2a 2a 0a 2a 2a 20 53 6f 6d 65 20 54 43 4c 20 62  **.** Some TCL b
1db10 75 69 6c 64 73 20 28 65 78 3a 20 63 79 67 77 69  uilds (ex: cygwi
1db20 6e 29 20 64 6f 20 6e 6f 74 20 73 75 70 70 6f 72  n) do not suppor
1db30 74 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  t 64-bit integer
1db40 73 2e 20 20 54 68 69 73 0a 2a 2a 20 6c 65 61 64  s.  This.** lead
1db50 73 20 74 6f 20 61 20 6e 75 6d 62 65 72 20 6f 66  s to a number of
1db60 20 74 65 73 74 20 66 61 69 6c 75 72 65 73 2e 20   test failures. 
1db70 20 54 68 65 20 70 72 65 73 65 6e 74 20 63 6f 6d   The present com
1db80 6d 61 6e 64 20 63 68 65 63 6b 73 20 74 68 65 0a  mand checks the.
1db90 2a 2a 20 54 43 4c 20 62 75 69 6c 64 20 74 6f 20  ** TCL build to 
1dba0 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  see whether or n
1dbb0 6f 74 20 69 74 20 73 75 70 70 6f 72 74 73 20 36  ot it supports 6
1dbc0 34 2d 62 69 74 20 69 6e 74 65 67 65 72 73 2e 20  4-bit integers. 
1dbd0 20 49 74 0a 2a 2a 20 72 65 74 75 72 6e 73 20 54   It.** returns T
1dbe0 52 55 45 20 69 66 20 69 74 20 64 6f 65 73 20 61  RUE if it does a
1dbf0 6e 64 20 46 41 4c 53 45 20 69 66 20 6e 6f 74 2e  nd FALSE if not.
1dc00 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 63 6f 6d 6d  .**.** This comm
1dc10 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20 77  and is used to w
1dc20 61 72 6e 20 75 73 65 72 73 20 74 68 61 74 20 74  arn users that t
1dc30 68 65 69 72 20 54 43 4c 20 62 75 69 6c 64 20 69  heir TCL build i
1dc40 73 20 64 65 66 65 63 74 69 76 65 0a 2a 2a 20 61  s defective.** a
1dc50 6e 64 20 74 68 61 74 20 74 68 65 20 65 72 72 6f  nd that the erro
1dc60 72 73 20 74 68 65 79 20 61 72 65 20 73 65 65 69  rs they are seei
1dc70 6e 67 20 69 6e 20 74 68 65 20 74 65 73 74 20 73  ng in the test s
1dc80 63 72 69 70 74 73 20 6d 69 67 68 74 20 62 65 0a  cripts might be.
1dc90 2a 2a 20 61 20 72 65 73 75 6c 74 20 6f 66 20 74  ** a result of t
1dca0 68 65 69 72 20 64 65 66 65 63 74 69 76 65 20 54  heir defective T
1dcb0 43 4c 20 72 61 74 68 65 72 20 74 68 61 6e 20 70  CL rather than p
1dcc0 72 6f 62 6c 65 6d 73 20 69 6e 20 53 51 4c 69 74  roblems in SQLit
1dcd0 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
1dce0 20 77 6f 72 6b 69 6e 67 5f 36 34 62 69 74 5f 69   working_64bit_i
1dcf0 6e 74 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61  nt(.  ClientData
1dd00 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20   clientData, /* 
1dd10 50 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74  Pointer to sqlit
1dd20 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75  e3_enable_XXX fu
1dd30 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f  nction */.  Tcl_
1dd40 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
1dd50 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
1dd60 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
1dd70 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
1dd80 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a  and */.  int obj
1dd90 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
1dda0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
1ddb0 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f  uments */.  Tcl_
1ddc0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
1ddd0 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72  ]  /* Command ar
1dde0 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20  guments */.){.  
1ddf0 54 63 6c 5f 4f 62 6a 20 2a 70 54 65 73 74 4f 62  Tcl_Obj *pTestOb
1de00 6a 3b 0a 20 20 69 6e 74 20 77 6f 72 6b 69 6e 67  j;.  int working
1de10 20 3d 20 30 3b 0a 0a 20 20 70 54 65 73 74 4f 62   = 0;..  pTestOb
1de20 6a 20 3d 20 54 63 6c 5f 4e 65 77 57 69 64 65 49  j = Tcl_NewWideI
1de30 6e 74 4f 62 6a 28 31 30 30 30 30 30 30 2a 28 69  ntObj(1000000*(i
1de40 36 34 29 31 32 33 34 35 36 37 38 39 30 29 3b 0a  64)1234567890);.
1de50 20 20 77 6f 72 6b 69 6e 67 20 3d 20 73 74 72 63    working = strc
1de60 6d 70 28 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  mp(Tcl_GetString
1de70 28 70 54 65 73 74 4f 62 6a 29 2c 20 22 31 32 33  (pTestObj), "123
1de80 34 35 36 37 38 39 30 30 30 30 30 30 30 22 29 3d  4567890000000")=
1de90 3d 30 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65  =0;.  Tcl_DecrRe
1dea0 66 43 6f 75 6e 74 28 70 54 65 73 74 4f 62 6a 29  fCount(pTestObj)
1deb0 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
1dec0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
1ded0 5f 4e 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 77  _NewBooleanObj(w
1dee0 6f 72 6b 69 6e 67 29 29 3b 0a 20 20 72 65 74 75  orking));.  retu
1def0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f  rn TCL_OK;.}.../
1df00 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20 20 20 76  *.** tclcmd:   v
1df10 66 73 5f 75 6e 6c 69 6e 6b 5f 74 65 73 74 0a 2a  fs_unlink_test.*
1df20 2a 0a 2a 2a 20 54 68 69 73 20 54 43 4c 20 63 6f  *.** This TCL co
1df30 6d 6d 61 6e 64 20 75 6e 72 65 67 69 73 74 65 72  mmand unregister
1df40 73 20 74 68 65 20 70 72 69 6d 61 72 79 20 56 46  s the primary VF
1df50 53 20 61 6e 64 20 74 68 65 6e 20 72 65 67 69 73  S and then regis
1df60 74 65 72 73 0a 2a 2a 20 69 74 20 62 61 63 6b 20  ters.** it back 
1df70 61 67 61 69 6e 2e 20 20 54 68 69 73 20 69 73 20  again.  This is 
1df80 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65  used to test the
1df90 20 61 62 69 6c 69 74 79 20 74 6f 20 72 65 67 69   ability to regi
1dfa0 73 74 65 72 20 61 0a 2a 2a 20 56 46 53 20 77 68  ster a.** VFS wh
1dfb0 65 6e 20 6e 6f 6e 65 20 61 72 65 20 70 72 65 76  en none are prev
1dfc0 69 6f 75 73 6c 79 20 72 65 67 69 73 74 65 72 65  iously registere
1dfd0 64 2c 20 61 6e 64 20 74 68 65 20 61 62 69 6c 69  d, and the abili
1dfe0 74 79 20 74 6f 20 0a 2a 2a 20 75 6e 72 65 67 69  ty to .** unregi
1dff0 73 74 65 72 20 74 68 65 20 6f 6e 6c 79 20 61 76  ster the only av
1e000 61 69 6c 61 62 6c 65 20 56 46 53 2e 20 20 54 69  ailable VFS.  Ti
1e010 63 6b 65 74 20 23 32 37 33 38 0a 2a 2f 0a 73 74  cket #2738.*/.st
1e020 61 74 69 63 20 69 6e 74 20 76 66 73 5f 75 6e 6c  atic int vfs_unl
1e030 69 6e 6b 5f 74 65 73 74 28 0a 20 20 43 6c 69 65  ink_test(.  Clie
1e040 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74  ntData clientDat
1e050 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  a, /* Pointer to
1e060 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f   sqlite3_enable_
1e070 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  XXX function */.
1e080 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
1e090 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
1e0a0 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
1e0b0 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
1e0c0 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
1e0d0 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20  nt objc,        
1e0e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1e0f0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
1e100 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
1e110 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d   objv[]  /* Comm
1e120 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f  and arguments */
1e130 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  .){.  int i;.  s
1e140 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 4d 61 69  qlite3_vfs *pMai
1e150 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73  n;.  sqlite3_vfs
1e160 20 2a 61 70 56 66 73 5b 32 30 5d 3b 0a 20 20 73   *apVfs[20];.  s
1e170 71 6c 69 74 65 33 5f 76 66 73 20 6f 6e 65 2c 20  qlite3_vfs one, 
1e180 74 77 6f 3b 0a 0a 20 20 73 71 6c 69 74 65 33 5f  two;..  sqlite3_
1e190 76 66 73 5f 75 6e 72 65 67 69 73 74 65 72 28 30  vfs_unregister(0
1e1a0 29 3b 20 20 20 2f 2a 20 55 6e 72 65 67 69 73 74  );   /* Unregist
1e1b0 65 72 20 6f 66 20 4e 55 4c 4c 20 69 73 20 68 61  er of NULL is ha
1e1c0 72 6d 6c 65 73 73 20 2a 2f 0a 20 20 6f 6e 65 2e  rmless */.  one.
1e1d0 7a 4e 61 6d 65 20 3d 20 22 5f 5f 6f 6e 65 22 3b  zName = "__one";
1e1e0 0a 20 20 74 77 6f 2e 7a 4e 61 6d 65 20 3d 20 22  .  two.zName = "
1e1f0 5f 5f 74 77 6f 22 3b 0a 0a 20 20 2f 2a 20 43 61  __two";..  /* Ca
1e200 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 5f 76 66  lling sqlite3_vf
1e210 73 5f 72 65 67 69 73 74 65 72 20 77 69 74 68 20  s_register with 
1e220 32 6e 64 20 61 72 67 75 6d 65 6e 74 20 6f 66 20  2nd argument of 
1e230 30 20 64 6f 65 73 20 6e 6f 74 0a 20 20 2a 2a 20  0 does not.  ** 
1e240 63 68 61 6e 67 65 20 74 68 65 20 64 65 66 61 75  change the defau
1e250 6c 74 20 56 46 53 0a 20 20 2a 2f 0a 20 20 70 4d  lt VFS.  */.  pM
1e260 61 69 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76 66  ain = sqlite3_vf
1e270 73 5f 66 69 6e 64 28 30 29 3b 0a 20 20 73 71 6c  s_find(0);.  sql
1e280 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73 74 65  ite3_vfs_registe
1e290 72 28 26 6f 6e 65 2c 20 30 29 3b 0a 20 20 61 73  r(&one, 0);.  as
1e2a0 73 65 72 74 28 20 70 4d 61 69 6e 3d 3d 30 20 7c  sert( pMain==0 |
1e2b0 7c 20 70 4d 61 69 6e 3d 3d 73 71 6c 69 74 65 33  | pMain==sqlite3
1e2c0 5f 76 66 73 5f 66 69 6e 64 28 30 29 20 29 3b 0a  _vfs_find(0) );.
1e2d0 20 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 72 65    sqlite3_vfs_re
1e2e0 67 69 73 74 65 72 28 26 74 77 6f 2c 20 30 29 3b  gister(&two, 0);
1e2f0 0a 20 20 61 73 73 65 72 74 28 20 70 4d 61 69 6e  .  assert( pMain
1e300 3d 3d 30 20 7c 7c 20 70 4d 61 69 6e 3d 3d 73 71  ==0 || pMain==sq
1e310 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 30  lite3_vfs_find(0
1e320 29 20 29 3b 0a 0a 20 20 2f 2a 20 57 65 20 63 61  ) );..  /* We ca
1e330 6e 20 66 69 6e 64 20 61 20 56 46 53 20 62 79 20  n find a VFS by 
1e340 69 74 73 20 6e 61 6d 65 20 2a 2f 0a 20 20 61 73  its name */.  as
1e350 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 76 66  sert( sqlite3_vf
1e360 73 5f 66 69 6e 64 28 22 5f 5f 6f 6e 65 22 29 3d  s_find("__one")=
1e370 3d 26 6f 6e 65 20 29 3b 0a 20 20 61 73 73 65 72  =&one );.  asser
1e380 74 28 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66  t( sqlite3_vfs_f
1e390 69 6e 64 28 22 5f 5f 74 77 6f 22 29 3d 3d 26 74  ind("__two")==&t
1e3a0 77 6f 20 29 3b 0a 0a 20 20 2f 2a 20 43 61 6c 6c  wo );..  /* Call
1e3b0 69 6e 67 20 73 71 6c 69 74 65 5f 76 66 73 5f 72  ing sqlite_vfs_r
1e3c0 65 67 69 73 74 65 72 20 77 69 74 68 20 6e 6f 6e  egister with non
1e3d0 2d 7a 65 72 6f 20 73 65 63 6f 6e 64 20 70 61 72  -zero second par
1e3e0 61 6d 65 74 65 72 20 63 68 61 6e 67 65 73 20 74  ameter changes t
1e3f0 68 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20  he.  ** default 
1e400 56 46 53 2c 20 65 76 65 6e 20 69 66 20 74 68 65  VFS, even if the
1e410 20 31 73 74 20 70 61 72 61 6d 65 74 65 72 20 69   1st parameter i
1e420 73 20 61 6e 20 65 78 69 73 74 69 67 20 56 46 53  s an existig VFS
1e430 20 74 68 61 74 20 69 73 0a 20 20 2a 2a 20 70 72   that is.  ** pr
1e440 65 76 69 6f 75 73 6c 79 20 72 65 67 69 73 74 65  eviously registe
1e450 72 65 64 20 61 73 20 74 68 65 20 6e 6f 6e 2d 64  red as the non-d
1e460 65 66 61 75 6c 74 2e 0a 20 20 2a 2f 0a 20 20 73  efault..  */.  s
1e470 71 6c 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73  qlite3_vfs_regis
1e480 74 65 72 28 26 6f 6e 65 2c 20 31 29 3b 0a 20 20  ter(&one, 1);.  
1e490 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f  assert( sqlite3_
1e4a0 76 66 73 5f 66 69 6e 64 28 22 5f 5f 6f 6e 65 22  vfs_find("__one"
1e4b0 29 3d 3d 26 6f 6e 65 20 29 3b 0a 20 20 61 73 73  )==&one );.  ass
1e4c0 65 72 74 28 20 73 71 6c 69 74 65 33 5f 76 66 73  ert( sqlite3_vfs
1e4d0 5f 66 69 6e 64 28 22 5f 5f 74 77 6f 22 29 3d 3d  _find("__two")==
1e4e0 26 74 77 6f 20 29 3b 0a 20 20 61 73 73 65 72 74  &two );.  assert
1e4f0 28 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69  ( sqlite3_vfs_fi
1e500 6e 64 28 30 29 3d 3d 26 6f 6e 65 20 29 3b 0a 20  nd(0)==&one );. 
1e510 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 72 65 67   sqlite3_vfs_reg
1e520 69 73 74 65 72 28 26 74 77 6f 2c 20 31 29 3b 0a  ister(&two, 1);.
1e530 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1e540 33 5f 76 66 73 5f 66 69 6e 64 28 22 5f 5f 6f 6e  3_vfs_find("__on
1e550 65 22 29 3d 3d 26 6f 6e 65 20 29 3b 0a 20 20 61  e")==&one );.  a
1e560 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 76  ssert( sqlite3_v
1e570 66 73 5f 66 69 6e 64 28 22 5f 5f 74 77 6f 22 29  fs_find("__two")
1e580 3d 3d 26 74 77 6f 20 29 3b 0a 20 20 61 73 73 65  ==&two );.  asse
1e590 72 74 28 20 73 71 6c 69 74 65 33 5f 76 66 73 5f  rt( sqlite3_vfs_
1e5a0 66 69 6e 64 28 30 29 3d 3d 26 74 77 6f 20 29 3b  find(0)==&two );
1e5b0 0a 20 20 69 66 28 20 70 4d 61 69 6e 20 29 7b 0a  .  if( pMain ){.
1e5c0 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 5f      sqlite3_vfs_
1e5d0 72 65 67 69 73 74 65 72 28 70 4d 61 69 6e 2c 20  register(pMain, 
1e5e0 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  1);.    assert( 
1e5f0 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
1e600 28 22 5f 5f 6f 6e 65 22 29 3d 3d 26 6f 6e 65 20  ("__one")==&one 
1e610 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  );.    assert( s
1e620 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28  qlite3_vfs_find(
1e630 22 5f 5f 74 77 6f 22 29 3d 3d 26 74 77 6f 20 29  "__two")==&two )
1e640 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  ;.    assert( sq
1e650 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 30  lite3_vfs_find(0
1e660 29 3d 3d 70 4d 61 69 6e 20 29 3b 0a 20 20 7d 0a  )==pMain );.  }.
1e670 20 20 0a 20 20 2f 2a 20 55 6e 6c 69 6e 6b 20 74    .  /* Unlink t
1e680 68 65 20 64 65 66 61 75 6c 74 20 56 46 53 2e 20  he default VFS. 
1e690 20 52 65 70 65 61 74 20 75 6e 74 69 6c 20 74 68   Repeat until th
1e6a0 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
1e6b0 56 46 53 65 73 0a 20 20 2a 2a 20 72 65 67 69 73  VFSes.  ** regis
1e6c0 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 20 20 66 6f  tered..  */.  fo
1e6d0 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28  r(i=0; i<sizeof(
1e6e0 61 70 56 66 73 29 2f 73 69 7a 65 6f 66 28 61 70  apVfs)/sizeof(ap
1e6f0 56 66 73 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20  Vfs[0]); i++){. 
1e700 20 20 20 61 70 56 66 73 5b 69 5d 20 3d 20 73 71     apVfs[i] = sq
1e710 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 30  lite3_vfs_find(0
1e720 29 3b 0a 20 20 20 20 69 66 28 20 61 70 56 66 73  );.    if( apVfs
1e730 5b 69 5d 20 29 7b 0a 20 20 20 20 20 20 61 73 73  [i] ){.      ass
1e740 65 72 74 28 20 61 70 56 66 73 5b 69 5d 3d 3d 73  ert( apVfs[i]==s
1e750 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28  qlite3_vfs_find(
1e760 61 70 56 66 73 5b 69 5d 2d 3e 7a 4e 61 6d 65 29  apVfs[i]->zName)
1e770 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
1e780 33 5f 76 66 73 5f 75 6e 72 65 67 69 73 74 65 72  3_vfs_unregister
1e790 28 61 70 56 66 73 5b 69 5d 29 3b 0a 20 20 20 20  (apVfs[i]);.    
1e7a0 20 20 61 73 73 65 72 74 28 20 30 3d 3d 73 71 6c    assert( 0==sql
1e7b0 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 61 70  ite3_vfs_find(ap
1e7c0 56 66 73 5b 69 5d 2d 3e 7a 4e 61 6d 65 29 20 29  Vfs[i]->zName) )
1e7d0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73  ;.    }.  }.  as
1e7e0 73 65 72 74 28 20 30 3d 3d 73 71 6c 69 74 65 33  sert( 0==sqlite3
1e7f0 5f 76 66 73 5f 66 69 6e 64 28 30 29 20 29 3b 0a  _vfs_find(0) );.
1e800 20 20 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72    .  /* Register
1e810 20 74 68 65 20 6d 61 69 6e 20 56 46 53 20 61 73   the main VFS as
1e820 20 6e 6f 6e 2d 64 65 66 61 75 6c 74 20 28 77 69   non-default (wi
1e830 6c 6c 20 62 65 20 6d 61 64 65 20 64 65 66 61 75  ll be made defau
1e840 6c 74 2c 20 73 69 6e 63 65 0a 20 20 2a 2a 20 69  lt, since.  ** i
1e850 74 27 6c 6c 20 62 65 20 74 68 65 20 6f 6e 6c 79  t'll be the only
1e860 20 6f 6e 65 20 69 6e 20 65 78 69 73 74 65 6e 63   one in existenc
1e870 65 29 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74  e)..  */.  sqlit
1e880 65 33 5f 76 66 73 5f 72 65 67 69 73 74 65 72 28  e3_vfs_register(
1e890 70 4d 61 69 6e 2c 20 30 29 3b 0a 20 20 61 73 73  pMain, 0);.  ass
1e8a0 65 72 74 28 20 73 71 6c 69 74 65 33 5f 76 66 73  ert( sqlite3_vfs
1e8b0 5f 66 69 6e 64 28 30 29 3d 3d 70 4d 61 69 6e 20  _find(0)==pMain 
1e8c0 29 3b 0a 20 20 0a 20 20 2f 2a 20 55 6e 2d 72 65  );.  .  /* Un-re
1e8d0 67 69 73 74 65 72 20 74 68 65 20 6d 61 69 6e 20  gister the main 
1e8e0 56 46 53 20 61 67 61 69 6e 20 74 6f 20 72 65 73  VFS again to res
1e8f0 74 6f 72 65 20 61 6e 20 65 6d 70 74 79 20 56 46  tore an empty VF
1e900 53 20 6c 69 73 74 20 2a 2f 0a 20 20 73 71 6c 69  S list */.  sqli
1e910 74 65 33 5f 76 66 73 5f 75 6e 72 65 67 69 73 74  te3_vfs_unregist
1e920 65 72 28 70 4d 61 69 6e 29 3b 0a 20 20 61 73 73  er(pMain);.  ass
1e930 65 72 74 28 20 30 3d 3d 73 71 6c 69 74 65 33 5f  ert( 0==sqlite3_
1e940 76 66 73 5f 66 69 6e 64 28 30 29 20 29 3b 0a 0a  vfs_find(0) );..
1e950 20 20 2f 2a 20 52 65 6c 69 6e 6b 20 61 6c 6c 20    /* Relink all 
1e960 56 46 53 65 73 20 69 6e 20 72 65 76 65 72 73 65  VFSes in reverse
1e970 20 6f 72 64 65 72 2e 20 2a 2f 20 20 0a 20 20 66   order. */  .  f
1e980 6f 72 28 69 3d 73 69 7a 65 6f 66 28 61 70 56 66  or(i=sizeof(apVf
1e990 73 29 2f 73 69 7a 65 6f 66 28 61 70 56 66 73 5b  s)/sizeof(apVfs[
1e9a0 30 5d 29 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d  0])-1; i>=0; i--
1e9b0 29 7b 0a 20 20 20 20 69 66 28 20 61 70 56 66 73  ){.    if( apVfs
1e9c0 5b 69 5d 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  [i] ){.      sql
1e9d0 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73 74 65  ite3_vfs_registe
1e9e0 72 28 61 70 56 66 73 5b 69 5d 2c 20 31 29 3b 0a  r(apVfs[i], 1);.
1e9f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 61 70        assert( ap
1ea00 56 66 73 5b 69 5d 3d 3d 73 71 6c 69 74 65 33 5f  Vfs[i]==sqlite3_
1ea10 76 66 73 5f 66 69 6e 64 28 30 29 20 29 3b 0a 20  vfs_find(0) );. 
1ea20 20 20 20 20 20 61 73 73 65 72 74 28 20 61 70 56       assert( apV
1ea30 66 73 5b 69 5d 3d 3d 73 71 6c 69 74 65 33 5f 76  fs[i]==sqlite3_v
1ea40 66 73 5f 66 69 6e 64 28 61 70 56 66 73 5b 69 5d  fs_find(apVfs[i]
1ea50 2d 3e 7a 4e 61 6d 65 29 20 29 3b 0a 20 20 20 20  ->zName) );.    
1ea60 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 72 65  }.  }..  /* Unre
1ea70 67 69 73 74 65 72 20 6f 75 74 20 73 61 6d 70 6c  gister out sampl
1ea80 65 20 56 46 53 65 73 2e 20 2a 2f 0a 20 20 73 71  e VFSes. */.  sq
1ea90 6c 69 74 65 33 5f 76 66 73 5f 75 6e 72 65 67 69  lite3_vfs_unregi
1eaa0 73 74 65 72 28 26 6f 6e 65 29 3b 0a 20 20 73 71  ster(&one);.  sq
1eab0 6c 69 74 65 33 5f 76 66 73 5f 75 6e 72 65 67 69  lite3_vfs_unregi
1eac0 73 74 65 72 28 26 74 77 6f 29 3b 0a 0a 20 20 2f  ster(&two);..  /
1ead0 2a 20 55 6e 72 65 67 69 73 74 65 72 69 6e 67 20  * Unregistering 
1eae0 61 20 56 46 53 20 74 68 61 74 20 69 73 20 6e 6f  a VFS that is no
1eaf0 74 20 63 75 72 72 65 6e 74 6c 79 20 72 65 67 69  t currently regi
1eb00 73 74 65 72 65 64 20 69 73 20 68 61 72 6d 6c 65  stered is harmle
1eb10 73 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ss */.  sqlite3_
1eb20 76 66 73 5f 75 6e 72 65 67 69 73 74 65 72 28 26  vfs_unregister(&
1eb30 6f 6e 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  one);.  sqlite3_
1eb40 76 66 73 5f 75 6e 72 65 67 69 73 74 65 72 28 26  vfs_unregister(&
1eb50 74 77 6f 29 3b 0a 20 20 61 73 73 65 72 74 28 20  two);.  assert( 
1eb60 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
1eb70 28 22 5f 5f 6f 6e 65 22 29 3d 3d 30 20 29 3b 0a  ("__one")==0 );.
1eb80 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1eb90 33 5f 76 66 73 5f 66 69 6e 64 28 22 5f 5f 74 77  3_vfs_find("__tw
1eba0 6f 22 29 3d 3d 30 20 29 3b 0a 0a 20 20 2f 2a 20  o")==0 );..  /* 
1ebb0 57 65 20 73 68 6f 75 6c 64 20 62 65 20 6c 65 66  We should be lef
1ebc0 74 20 77 69 74 68 20 74 68 65 20 6f 72 69 67 69  t with the origi
1ebd0 6e 61 6c 20 64 65 66 61 75 6c 74 20 56 46 53 20  nal default VFS 
1ebe0 62 61 63 6b 20 61 73 20 74 68 65 0a 20 20 2a 2a  back as the.  **
1ebf0 20 6f 72 69 67 69 6e 61 6c 20 2a 2f 0a 20 20 61   original */.  a
1ec00 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 76  ssert( sqlite3_v
1ec10 66 73 5f 66 69 6e 64 28 30 29 3d 3d 70 4d 61 69  fs_find(0)==pMai
1ec20 6e 20 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20 54  n );..  return T
1ec30 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
1ec40 74 63 6c 63 6d 64 3a 20 20 20 76 66 73 5f 69 6e  tclcmd:   vfs_in
1ec50 69 74 66 61 69 6c 5f 74 65 73 74 0a 2a 2a 0a 2a  itfail_test.**.*
1ec60 2a 20 54 68 69 73 20 54 43 4c 20 63 6f 6d 6d 61  * This TCL comma
1ec70 6e 64 20 61 74 74 65 6d 70 74 73 20 74 6f 20 76  nd attempts to v
1ec80 66 73 5f 66 69 6e 64 20 61 6e 64 20 76 66 73 5f  fs_find and vfs_
1ec90 72 65 67 69 73 74 65 72 20 77 68 65 6e 20 74 68  register when th
1eca0 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 69 6e 69  e.** sqlite3_ini
1ecb0 74 69 61 6c 69 7a 65 28 29 20 69 6e 74 65 72 66  tialize() interf
1ecc0 61 63 65 20 69 73 20 66 61 69 6c 69 6e 67 2e 20  ace is failing. 
1ecd0 20 41 6c 6c 20 63 61 6c 6c 73 20 73 68 6f 75 6c   All calls shoul
1ece0 64 20 66 61 69 6c 2e 0a 2a 2f 0a 73 74 61 74 69  d fail..*/.stati
1ecf0 63 20 69 6e 74 20 76 66 73 5f 69 6e 69 74 66 61  c int vfs_initfa
1ed00 69 6c 5f 74 65 73 74 28 0a 20 20 43 6c 69 65 6e  il_test(.  Clien
1ed10 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
1ed20 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20  , /* Pointer to 
1ed30 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58  sqlite3_enable_X
1ed40 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  XX function */. 
1ed50 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
1ed60 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
1ed70 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
1ed80 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
1ed90 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
1eda0 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20  t objc,         
1edb0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1edc0 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
1edd0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
1ede0 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61  objv[]  /* Comma
1edf0 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  nd arguments */.
1ee00 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73  ){.  sqlite3_vfs
1ee10 20 6f 6e 65 3b 0a 20 20 6f 6e 65 2e 7a 4e 61 6d   one;.  one.zNam
1ee20 65 20 3d 20 22 5f 5f 6f 6e 65 22 3b 0a 0a 20 20  e = "__one";..  
1ee30 69 66 28 20 73 71 6c 69 74 65 33 5f 76 66 73 5f  if( sqlite3_vfs_
1ee40 66 69 6e 64 28 30 29 20 29 20 72 65 74 75 72 6e  find(0) ) return
1ee50 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 71   TCL_ERROR;.  sq
1ee60 6c 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73 74  lite3_vfs_regist
1ee70 65 72 28 26 6f 6e 65 2c 20 30 29 3b 0a 20 20 69  er(&one, 0);.  i
1ee80 66 28 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66  f( sqlite3_vfs_f
1ee90 69 6e 64 28 30 29 20 29 20 72 65 74 75 72 6e 20  ind(0) ) return 
1eea0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c  TCL_ERROR;.  sql
1eeb0 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73 74 65  ite3_vfs_registe
1eec0 72 28 26 6f 6e 65 2c 20 31 29 3b 0a 20 20 69 66  r(&one, 1);.  if
1eed0 28 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69  ( sqlite3_vfs_fi
1eee0 6e 64 28 30 29 20 29 20 72 65 74 75 72 6e 20 54  nd(0) ) return T
1eef0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75  CL_ERROR;.  retu
1ef00 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
1ef10 0a 2a 2a 20 53 61 76 65 64 20 56 46 53 65 73 0a  .** Saved VFSes.
1ef20 2a 2f 0a 73 74 61 74 69 63 20 73 71 6c 69 74 65  */.static sqlite
1ef30 33 5f 76 66 73 20 2a 61 70 56 66 73 5b 32 30 5d  3_vfs *apVfs[20]
1ef40 3b 0a 73 74 61 74 69 63 20 69 6e 74 20 6e 56 66  ;.static int nVf
1ef50 73 20 3d 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 74 63  s = 0;../*.** tc
1ef60 6c 63 6d 64 3a 20 20 20 76 66 73 5f 75 6e 72 65  lcmd:   vfs_unre
1ef70 67 69 73 74 65 72 5f 61 6c 6c 0a 2a 2a 0a 2a 2a  gister_all.**.**
1ef80 20 55 6e 72 65 67 69 73 74 65 72 20 61 6c 6c 20   Unregister all 
1ef90 56 46 53 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63  VFSes..*/.static
1efa0 20 69 6e 74 20 76 66 73 5f 75 6e 72 65 67 69 73   int vfs_unregis
1efb0 74 65 72 5f 61 6c 6c 28 0a 20 20 43 6c 69 65 6e  ter_all(.  Clien
1efc0 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
1efd0 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20  , /* Pointer to 
1efe0 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58  sqlite3_enable_X
1eff0 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  XX function */. 
1f000 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
1f010 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
1f020 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
1f030 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
1f040 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
1f050 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20  t objc,         
1f060 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f070 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
1f080 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
1f090 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61  objv[]  /* Comma
1f0a0 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  nd arguments */.
1f0b0 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f  ){.  int i;.  fo
1f0c0 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69  r(i=0; i<ArraySi
1f0d0 7a 65 28 61 70 56 66 73 29 3b 20 69 2b 2b 29 7b  ze(apVfs); i++){
1f0e0 0a 20 20 20 20 61 70 56 66 73 5b 69 5d 20 3d 20  .    apVfs[i] = 
1f0f0 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
1f100 28 30 29 3b 0a 20 20 20 20 69 66 28 20 61 70 56  (0);.    if( apV
1f110 66 73 5b 69 5d 3d 3d 30 20 29 20 62 72 65 61 6b  fs[i]==0 ) break
1f120 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66  ;.    sqlite3_vf
1f130 73 5f 75 6e 72 65 67 69 73 74 65 72 28 61 70 56  s_unregister(apV
1f140 66 73 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 6e 56  fs[i]);.  }.  nV
1f150 66 73 20 3d 20 69 3b 0a 20 20 72 65 74 75 72 6e  fs = i;.  return
1f160 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 2f 2a 0a 2a 2a   TCL_OK;.}./*.**
1f170 20 74 63 6c 63 6d 64 3a 20 20 20 76 66 73 5f 72   tclcmd:   vfs_r
1f180 65 72 65 67 69 73 74 65 72 5f 61 6c 6c 0a 2a 2a  eregister_all.**
1f190 0a 2a 2a 20 52 65 73 74 6f 72 65 20 61 6c 6c 20  .** Restore all 
1f1a0 56 46 53 65 73 20 74 68 61 74 20 77 65 72 65 20  VFSes that were 
1f1b0 72 65 6d 6f 76 65 64 20 75 73 69 6e 67 20 76 66  removed using vf
1f1c0 73 5f 75 6e 72 65 67 69 73 74 65 72 5f 61 6c 6c  s_unregister_all
1f1d0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 76  .*/.static int v
1f1e0 66 73 5f 72 65 72 65 67 69 73 74 65 72 5f 61 6c  fs_reregister_al
1f1f0 6c 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20  l(.  ClientData 
1f200 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50  clientData, /* P
1f210 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ointer to sqlite
1f220 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e  3_enable_XXX fun
1f230 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49  ction */.  Tcl_I
1f240 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
1f250 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
1f260 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
1f270 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
1f280 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63  nd */.  int objc
1f290 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1f2a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
1f2b0 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f  ments */.  Tcl_O
1f2c0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
1f2d0 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67    /* Command arg
1f2e0 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69  uments */.){.  i
1f2f0 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  nt i;.  for(i=0;
1f300 20 69 3c 6e 56 66 73 3b 20 69 2b 2b 29 7b 0a 20   i<nVfs; i++){. 
1f310 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 72     sqlite3_vfs_r
1f320 65 67 69 73 74 65 72 28 61 70 56 66 73 5b 69 5d  egister(apVfs[i]
1f330 2c 20 69 3d 3d 30 29 3b 0a 20 20 7d 0a 20 20 72  , i==0);.  }.  r
1f340 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
1f350 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20  ../*.** tclcmd: 
1f360 20 20 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 74    file_control_t
1f370 65 73 74 20 44 42 0a 2a 2a 0a 2a 2a 20 54 68 69  est DB.**.** Thi
1f380 73 20 54 43 4c 20 63 6f 6d 6d 61 6e 64 20 72 75  s TCL command ru
1f390 6e 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 66  ns the sqlite3_f
1f3a0 69 6c 65 5f 63 6f 6e 74 72 6f 6c 20 69 6e 74 65  ile_control inte
1f3b0 72 66 61 63 65 20 61 6e 64 0a 2a 2a 20 76 65 72  rface and.** ver
1f3c0 69 66 69 65 73 20 63 6f 72 72 65 63 74 20 6f 70  ifies correct op
1f3d0 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  eration of the s
1f3e0 61 6d 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ame..*/.static i
1f3f0 6e 74 20 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f  nt file_control_
1f400 74 65 73 74 28 0a 20 20 43 6c 69 65 6e 74 44 61  test(.  ClientDa
1f410 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f  ta clientData, /
1f420 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c  * Pointer to sql
1f430 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20  ite3_enable_XXX 
1f440 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63  function */.  Tc
1f450 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
1f460 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
1f470 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
1f480 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
1f490 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f  mmand */.  int o
1f4a0 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  bjc,            
1f4b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
1f4c0 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63  rguments */.  Tc
1f4d0 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
1f4e0 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20  v[]  /* Command 
1f4f0 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a  arguments */.){.
1f500 20 20 69 6e 74 20 69 41 72 67 20 3d 20 30 3b 0a    int iArg = 0;.
1f510 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
1f520 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
1f530 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
1f540 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
1f550 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
1f560 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
1f570 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
1f580 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
1f590 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
1f5a0 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72  " DB", 0);.    r
1f5b0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1f5c0 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
1f5d0 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
1f5e0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
1f5f0 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
1f600 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1f610 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
1f620 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
1f630 20 30 2c 20 30 2c 20 26 69 41 72 67 29 3b 0a 20   0, 0, &iArg);. 
1f640 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
1f650 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 72  ITE_ERROR );.  r
1f660 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  c = sqlite3_file
1f670 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 22 6e 6f  _control(db, "no
1f680 74 61 64 61 74 61 62 61 73 65 22 2c 20 53 51 4c  tadatabase", SQL
1f690 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54  ITE_FCNTL_LOCKST
1f6a0 41 54 45 2c 20 26 69 41 72 67 29 3b 0a 20 20 61  ATE, &iArg);.  a
1f6b0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
1f6c0 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 72 63 20  E_ERROR );.  rc 
1f6d0 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  = sqlite3_file_c
1f6e0 6f 6e 74 72 6f 6c 28 64 62 2c 20 22 6d 61 69 6e  ontrol(db, "main
1f6f0 22 2c 20 2d 31 2c 20 26 69 41 72 67 29 3b 0a 20  ", -1, &iArg);. 
1f700 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
1f710 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 72  ITE_ERROR );.  r
1f720 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  c = sqlite3_file
1f730 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 22 74 65  _control(db, "te
1f740 6d 70 22 2c 20 2d 31 2c 20 26 69 41 72 67 29 3b  mp", -1, &iArg);
1f750 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
1f760 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 0a  QLITE_ERROR );..
1f770 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
1f780 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d  .}.../*.** tclcm
1f790 64 3a 20 20 20 66 69 6c 65 5f 63 6f 6e 74 72 6f  d:   file_contro
1f7a0 6c 5f 6c 61 73 74 65 72 72 6e 6f 5f 74 65 73 74  l_lasterrno_test
1f7b0 20 44 42 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 54   DB.**.** This T
1f7c0 43 4c 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20  CL command runs 
1f7d0 74 68 65 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  the sqlite3_file
1f7e0 5f 63 6f 6e 74 72 6f 6c 20 69 6e 74 65 72 66 61  _control interfa
1f7f0 63 65 20 61 6e 64 0a 2a 2a 20 76 65 72 69 66 69  ce and.** verifi
1f800 65 73 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  es correct opera
1f810 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 49  tion of the SQLI
1f820 54 45 5f 4c 41 53 54 5f 45 52 52 4e 4f 20 76 65  TE_LAST_ERRNO ve
1f830 72 62 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  rb..*/.static in
1f840 74 20 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 6c  t file_control_l
1f850 61 73 74 65 72 72 6e 6f 5f 74 65 73 74 28 0a 20  asterrno_test(. 
1f860 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
1f870 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74  ntData, /* Point
1f880 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e  er to sqlite3_en
1f890 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f  able_XXX functio
1f8a0 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  n */.  Tcl_Inter
1f8b0 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
1f8c0 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
1f8d0 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
1f8e0 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
1f8f0 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
1f900 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f910 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
1f920 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
1f930 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
1f940 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
1f950 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69  ts */.){.  int i
1f960 41 72 67 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  Arg = 0;.  sqlit
1f970 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63  e3 *db;.  int rc
1f980 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
1f990 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
1f9a0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
1f9b0 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
1f9c0 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
1f9d0 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
1f9e0 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
1f9f0 5b 30 5d 2c 20 30 29 2c 20 22 20 44 42 22 2c 20  [0], 0), " DB", 
1fa00 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
1fa10 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
1fa20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
1fa30 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
1fa40 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
1fa50 20 26 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74   &db) ){.    ret
1fa60 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1fa70 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
1fa80 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
1fa90 62 2c 20 4e 55 4c 4c 2c 20 53 51 4c 49 54 45 5f  b, NULL, SQLITE_
1faa0 4c 41 53 54 5f 45 52 52 4e 4f 2c 20 26 69 41 72  LAST_ERRNO, &iAr
1fab0 67 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 20  g);.  if( rc ){ 
1fac0 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  .    Tcl_SetObjR
1fad0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
1fae0 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 72 63 29 29  l_NewIntObj(rc))
1faf0 3b 20 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ; .    return TC
1fb00 4c 5f 45 52 52 4f 52 3b 20 0a 20 20 7d 0a 20 20  L_ERROR; .  }.  
1fb10 69 66 28 20 69 41 72 67 21 3d 30 20 29 20 7b 0a  if( iArg!=0 ) {.
1fb20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
1fb30 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 55 6e  sult(interp, "Un
1fb40 65 78 70 65 63 74 65 64 20 6e 6f 6e 2d 7a 65 72  expected non-zer
1fb50 6f 20 65 72 72 6e 6f 3a 20 22 2c 0a 20 20 20 20  o errno: ",.    
1fb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb70 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
1fb80 6f 6d 4f 62 6a 28 54 63 6c 5f 4e 65 77 49 6e 74  omObj(Tcl_NewInt
1fb90 4f 62 6a 28 69 41 72 67 29 2c 20 30 29 2c 20 22  Obj(iArg), 0), "
1fba0 20 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75   ", 0);.    retu
1fbb0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1fbc0 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  }.  return TCL_O
1fbd0 4b 3b 20 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63  K;  .}../*.** tc
1fbe0 6c 63 6d 64 3a 20 20 20 66 69 6c 65 5f 63 6f 6e  lcmd:   file_con
1fbf0 74 72 6f 6c 5f 6c 6f 63 6b 70 72 6f 78 79 5f 74  trol_lockproxy_t
1fc00 65 73 74 20 44 42 0a 2a 2a 0a 2a 2a 20 54 68 69  est DB.**.** Thi
1fc10 73 20 54 43 4c 20 63 6f 6d 6d 61 6e 64 20 72 75  s TCL command ru
1fc20 6e 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 66  ns the sqlite3_f
1fc30 69 6c 65 5f 63 6f 6e 74 72 6f 6c 20 69 6e 74 65  ile_control inte
1fc40 72 66 61 63 65 20 61 6e 64 0a 2a 2a 20 76 65 72  rface and.** ver
1fc50 69 66 69 65 73 20 63 6f 72 72 65 63 74 20 6f 70  ifies correct op
1fc60 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53  eration of the S
1fc70 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43 4b 50 52  QLITE_GET_LOCKPR
1fc80 4f 58 59 46 49 4c 45 20 61 6e 64 0a 2a 2a 20 53  OXYFILE and.** S
1fc90 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52  QLITE_SET_LOCKPR
1fca0 4f 58 59 46 49 4c 45 20 76 65 72 62 73 2e 0a 2a  OXYFILE verbs..*
1fcb0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c  /.static int fil
1fcc0 65 5f 63 6f 6e 74 72 6f 6c 5f 6c 6f 63 6b 70 72  e_control_lockpr
1fcd0 6f 78 79 5f 74 65 73 74 28 0a 20 20 43 6c 69 65  oxy_test(.  Clie
1fce0 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74  ntData clientDat
1fcf0 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  a, /* Pointer to
1fd00 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f   sqlite3_enable_
1fd10 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  XXX function */.
1fd20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
1fd30 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
1fd40 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
1fd50 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
1fd60 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
1fd70 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20  nt objc,        
1fd80 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1fd90 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
1fda0 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
1fdb0 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d   objv[]  /* Comm
1fdc0 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f  and arguments */
1fdd0 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
1fde0 62 3b 0a 20 20 0a 20 20 69 66 28 20 6f 62 6a 63  b;.  .  if( objc
1fdf0 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
1fe00 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
1fe10 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
1fe20 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
1fe30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1fe40 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
1fe50 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
1fe60 5b 30 5d 2c 20 30 29 2c 20 22 20 44 42 22 2c 20  [0], 0), " DB", 
1fe70 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
1fe80 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
1fe90 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
1fea0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
1feb0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
1fec0 20 26 64 62 29 20 29 7b 0a 20 20 20 72 65 74 75   &db) ){.   retu
1fed0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1fee0 7d 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e 65  }.  .#if !define
1fef0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1ff00 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 29 0a 23  LOCKING_STYLE).#
1ff10 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 41    if defined(__A
1ff20 50 50 4c 45 5f 5f 29 0a 23 20 20 20 20 64 65 66  PPLE__).#    def
1ff30 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
1ff40 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 20  E_LOCKING_STYLE 
1ff50 31 0a 23 20 20 65 6c 73 65 0a 23 20 20 20 20 64  1.#  else.#    d
1ff60 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
1ff70 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c  BLE_LOCKING_STYL
1ff80 45 20 30 0a 23 20 20 65 6e 64 69 66 0a 23 65 6e  E 0.#  endif.#en
1ff90 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 45  dif.#if SQLITE_E
1ffa0 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54  NABLE_LOCKING_ST
1ffb0 59 4c 45 20 26 26 20 64 65 66 69 6e 65 64 28 5f  YLE && defined(_
1ffc0 5f 41 50 50 4c 45 5f 5f 29 0a 20 20 7b 0a 20 20  _APPLE__).  {.  
1ffd0 20 20 63 68 61 72 20 2a 70 72 6f 78 79 50 61 74    char *proxyPat
1ffe0 68 20 3d 20 22 74 65 73 74 2e 70 72 6f 78 79 22  h = "test.proxy"
1fff0 3b 0a 20 20 20 20 63 68 61 72 20 2a 74 65 73 74  ;.    char *test
20000 50 61 74 68 3b 0a 20 20 20 20 69 6e 74 20 72 63  Path;.    int rc
20010 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
20020 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
20030 64 62 2c 20 4e 55 4c 4c 2c 20 53 51 4c 49 54 45  db, NULL, SQLITE
20040 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
20050 4c 45 2c 20 70 72 6f 78 79 50 61 74 68 29 3b 0a  LE, proxyPath);.
20060 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
20070 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65      Tcl_SetObjRe
20080 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
20090 5f 4e 65 77 49 6e 74 4f 62 6a 28 72 63 29 29 3b  _NewIntObj(rc));
200a0 20 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54   .      return T
200b0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  CL_ERROR;.    }.
200c0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
200d0 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62  _file_control(db
200e0 2c 20 4e 55 4c 4c 2c 20 53 51 4c 49 54 45 5f 47  , NULL, SQLITE_G
200f0 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45  ET_LOCKPROXYFILE
20100 2c 20 26 74 65 73 74 50 61 74 68 29 3b 0a 20 20  , &testPath);.  
20110 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28 70 72    if( strncmp(pr
20120 6f 78 79 50 61 74 68 2c 74 65 73 74 50 61 74 68  oxyPath,testPath
20130 2c 31 31 29 20 29 7b 0a 20 20 20 20 20 20 54 63  ,11) ){.      Tc
20140 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
20150 6e 74 65 72 70 2c 20 22 4c 6f 63 6b 20 70 72 6f  nterp, "Lock pro
20160 78 79 20 66 69 6c 65 20 64 69 64 20 6e 6f 74 20  xy file did not 
20170 6d 61 74 63 68 20 74 68 65 20 22 0a 20 20 20 20  match the ".    
20180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20190 20 20 20 20 20 20 20 20 20 20 20 22 70 72 65 76             "prev
201a0 69 6f 75 73 6c 79 20 61 73 73 69 67 6e 65 64 20  iously assigned 
201b0 76 61 6c 75 65 22 2c 20 30 29 3b 0a 20 20 20 20  value", 0);.    
201c0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
201d0 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  OR;.    }.    if
201e0 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 54 63  ( rc ){.      Tc
201f0 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
20200 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
20210 74 4f 62 6a 28 72 63 29 29 3b 0a 20 20 20 20 20  tObj(rc));.     
20220 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
20230 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20  R;.    }.    rc 
20240 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63  = sqlite3_file_c
20250 6f 6e 74 72 6f 6c 28 64 62 2c 20 4e 55 4c 4c 2c  ontrol(db, NULL,
20260 20 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b   SQLITE_SET_LOCK
20270 50 52 4f 58 59 46 49 4c 45 2c 20 70 72 6f 78 79  PROXYFILE, proxy
20280 50 61 74 68 29 3b 0a 20 20 20 20 69 66 28 20 72  Path);.    if( r
20290 63 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53  c ){.      Tcl_S
202a0 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
202b0 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
202c0 6a 28 72 63 29 29 3b 0a 20 20 20 20 20 20 72 65  j(rc));.      re
202d0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
202e0 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
202f0 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
20300 3b 20 20 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 74 63  ;  .}.../*.** tc
20310 6c 63 6d 64 3a 20 20 20 73 71 6c 69 74 65 33 5f  lcmd:   sqlite3_
20320 76 66 73 5f 6c 69 73 74 0a 2a 2a 0a 2a 2a 20 20  vfs_list.**.**  
20330 20 52 65 74 75 72 6e 20 61 20 74 63 6c 20 6c 69   Return a tcl li
20340 73 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  st containing th
20350 65 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 72  e names of all r
20360 65 67 69 73 74 65 72 65 64 20 76 66 73 27 73 2e  egistered vfs's.
20370 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 76  .*/.static int v
20380 66 73 5f 6c 69 73 74 28 0a 20 20 43 6c 69 65 6e  fs_list(.  Clien
20390 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
203a0 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20  , /* Pointer to 
203b0 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58  sqlite3_enable_X
203c0 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  XX function */. 
203d0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
203e0 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
203f0 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
20400 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
20410 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
20420 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20  t objc,         
20430 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
20440 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
20450 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
20460 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61  objv[]  /* Comma
20470 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  nd arguments */.
20480 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73  ){.  sqlite3_vfs
20490 20 2a 70 56 66 73 3b 0a 20 20 54 63 6c 5f 4f 62   *pVfs;.  Tcl_Ob
204a0 6a 20 2a 70 52 65 74 20 3d 20 54 63 6c 5f 4e 65  j *pRet = Tcl_Ne
204b0 77 4f 62 6a 28 29 3b 0a 20 20 69 66 28 20 6f 62  wObj();.  if( ob
204c0 6a 63 21 3d 31 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=1 ){.    Tcl
204d0 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
204e0 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
204f0 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
20500 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
20510 66 6f 72 28 70 56 66 73 3d 73 71 6c 69 74 65 33  for(pVfs=sqlite3
20520 5f 76 66 73 5f 66 69 6e 64 28 30 29 3b 20 70 56  _vfs_find(0); pV
20530 66 73 3b 20 70 56 66 73 3d 70 56 66 73 2d 3e 70  fs; pVfs=pVfs->p
20540 4e 65 78 74 29 7b 0a 20 20 20 20 54 63 6c 5f 4c  Next){.    Tcl_L
20550 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
20560 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74  ent(interp, pRet
20570 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
20580 62 6a 28 70 56 66 73 2d 3e 7a 4e 61 6d 65 2c 20  bj(pVfs->zName, 
20590 2d 31 29 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  -1));.  }.  Tcl_
205a0 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
205b0 65 72 70 2c 20 70 52 65 74 29 3b 0a 20 20 72 65  erp, pRet);.  re
205c0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 20 20 0a 7d  turn TCL_OK;  .}
205d0 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20  ../*.** tclcmd: 
205e0 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20    sqlite3_limit 
205f0 44 42 20 49 44 20 56 41 4c 55 45 0a 2a 2a 0a 2a  DB ID VALUE.**.*
20600 2a 20 54 68 69 73 20 54 43 4c 20 63 6f 6d 6d 61  * This TCL comma
20610 6e 64 20 72 75 6e 73 20 74 68 65 20 73 71 6c 69  nd runs the sqli
20620 74 65 33 5f 6c 69 6d 69 74 20 69 6e 74 65 72 66  te3_limit interf
20630 61 63 65 20 61 6e 64 0a 2a 2a 20 76 65 72 69 66  ace and.** verif
20640 69 65 73 20 63 6f 72 72 65 63 74 20 6f 70 65 72  ies correct oper
20650 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 61 6d  ation of the sam
20660 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
20670 20 74 65 73 74 5f 6c 69 6d 69 74 28 0a 20 20 43   test_limit(.  C
20680 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
20690 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72  Data, /* Pointer
206a0 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62   to sqlite3_enab
206b0 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20  le_XXX function 
206c0 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  */.  Tcl_Interp 
206d0 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
206e0 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
206f0 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
20700 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
20710 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20    int objc,     
20720 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20730 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
20740 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  */.  Tcl_Obj *CO
20750 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43  NST objv[]  /* C
20760 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73  ommand arguments
20770 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
20780 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   *db;.  int rc;.
20790 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73    static const s
207a0 74 72 75 63 74 20 7b 0a 20 20 20 20 20 63 68 61  truct {.     cha
207b0 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 69  r *zName;.     i
207c0 6e 74 20 69 64 3b 0a 20 20 7d 20 61 49 64 5b 5d  nt id;.  } aId[]
207d0 20 3d 20 7b 0a 20 20 20 20 7b 20 22 53 51 4c 49   = {.    { "SQLI
207e0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 22  TE_LIMIT_LENGTH"
207f0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  ,              S
20800 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
20810 54 48 20 20 20 20 20 20 20 20 20 20 20 20 20 20  TH              
20820 20 7d 2c 0a 20 20 20 20 7b 20 22 53 51 4c 49 54   },.    { "SQLIT
20830 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47  E_LIMIT_SQL_LENG
20840 54 48 22 2c 20 20 20 20 20 20 20 20 20 20 53 51  TH",          SQ
20850 4c 49 54 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c  LITE_LIMIT_SQL_L
20860 45 4e 47 54 48 20 20 20 20 20 20 20 20 20 20 20  ENGTH           
20870 7d 2c 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45  },.    { "SQLITE
20880 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 22 2c 20  _LIMIT_COLUMN", 
20890 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
208a0 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e  ITE_LIMIT_COLUMN
208b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
208c0 2c 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f  ,.    { "SQLITE_
208d0 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45 50 54 48  LIMIT_EXPR_DEPTH
208e0 22 2c 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  ",          SQLI
208f0 54 45 5f 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45  TE_LIMIT_EXPR_DE
20900 50 54 48 20 20 20 20 20 20 20 20 20 20 20 7d 2c  PTH           },
20910 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c  .    { "SQLITE_L
20920 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45  IMIT_COMPOUND_SE
20930 4c 45 43 54 22 2c 20 20 20 20 20 53 51 4c 49 54  LECT",     SQLIT
20940 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44  E_LIMIT_COMPOUND
20950 5f 53 45 4c 45 43 54 20 20 20 20 20 20 7d 2c 0a  _SELECT      },.
20960 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49      { "SQLITE_LI
20970 4d 49 54 5f 56 44 42 45 5f 4f 50 22 2c 20 20 20  MIT_VDBE_OP",   
20980 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
20990 5f 4c 49 4d 49 54 5f 56 44 42 45 5f 4f 50 20 20  _LIMIT_VDBE_OP  
209a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
209b0 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d     { "SQLITE_LIM
209c0 49 54 5f 46 55 4e 43 54 49 4f 4e 5f 41 52 47 22  IT_FUNCTION_ARG"
209d0 2c 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f  ,        SQLITE_
209e0 4c 49 4d 49 54 5f 46 55 4e 43 54 49 4f 4e 5f 41  LIMIT_FUNCTION_A
209f0 52 47 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20  RG         },.  
20a00 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d 49    { "SQLITE_LIMI
20a10 54 5f 41 54 54 41 43 48 45 44 22 2c 20 20 20 20  T_ATTACHED",    
20a20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c          SQLITE_L
20a30 49 4d 49 54 5f 41 54 54 41 43 48 45 44 20 20 20  IMIT_ATTACHED   
20a40 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
20a50 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d 49 54   { "SQLITE_LIMIT
20a60 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45  _LIKE_PATTERN_LE
20a70 4e 47 54 48 22 2c 20 53 51 4c 49 54 45 5f 4c 49  NGTH", SQLITE_LI
20a80 4d 49 54 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e  MIT_LIKE_PATTERN
20a90 5f 4c 45 4e 47 54 48 20 20 7d 2c 0a 20 20 20 20  _LENGTH  },.    
20aa0 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  { "SQLITE_LIMIT_
20ab0 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 22  VARIABLE_NUMBER"
20ac0 2c 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d  ,     SQLITE_LIM
20ad0 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  IT_VARIABLE_NUMB
20ae0 45 52 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 0a  ER      },.    .
20af0 20 20 20 20 2f 2a 20 4f 75 74 20 6f 66 20 72 61      /* Out of ra
20b00 6e 67 65 20 74 65 73 74 20 63 61 73 65 73 20 2a  nge test cases *
20b10 2f 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f  /.    { "SQLITE_
20b20 4c 49 4d 49 54 5f 54 4f 4f 53 4d 41 4c 4c 22 2c  LIMIT_TOOSMALL",
20b30 20 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20              -1, 
20b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
20b60 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c  .    { "SQLITE_L
20b70 49 4d 49 54 5f 54 4f 4f 42 49 47 22 2c 20 20 20  IMIT_TOOBIG",   
20b80 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
20b90 45 5f 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45  E_LIMIT_VARIABLE
20ba0 5f 4e 55 4d 42 45 52 2b 31 20 20 20 20 7d 2c 0a  _NUMBER+1    },.
20bb0 20 20 7d 3b 0a 20 20 69 6e 74 20 69 2c 20 69 64    };.  int i, id
20bc0 3b 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 20 20 63  ;.  int val;.  c
20bd0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 64 3b 0a  onst char *zId;.
20be0 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29  .  if( objc!=4 )
20bf0 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
20c00 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
20c10 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
20c20 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
20c30 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
20c40 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
20c50 5d 2c 20 30 29 2c 20 22 20 44 42 20 49 44 20 56  ], 0), " DB ID V
20c60 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20 72  ALUE", 0);.    r
20c70 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
20c80 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
20c90 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
20ca0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
20cb0 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
20cc0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
20cd0 0a 20 20 7a 49 64 20 3d 20 54 63 6c 5f 47 65 74  .  zId = Tcl_Get
20ce0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b  String(objv[2]);
20cf0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69  .  for(i=0; i<si
20d00 7a 65 6f 66 28 61 49 64 29 2f 73 69 7a 65 6f 66  zeof(aId)/sizeof
20d10 28 61 49 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a  (aId[0]); i++){.
20d20 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
20d30 49 64 2c 20 61 49 64 5b 69 5d 2e 7a 4e 61 6d 65  Id, aId[i].zName
20d40 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 64  )==0 ){.      id
20d50 20 3d 20 61 49 64 5b 69 5d 2e 69 64 3b 0a 20 20   = aId[i].id;.  
20d60 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
20d70 0a 20 20 7d 0a 20 20 69 66 28 20 69 3e 3d 73 69  .  }.  if( i>=si
20d80 7a 65 6f 66 28 61 49 64 29 2f 73 69 7a 65 6f 66  zeof(aId)/sizeof
20d90 28 61 49 64 5b 30 5d 29 20 29 7b 0a 20 20 20 20  (aId[0]) ){.    
20da0 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
20db0 28 69 6e 74 65 72 70 2c 20 22 75 6e 6b 6e 6f 77  (interp, "unknow
20dc0 6e 20 6c 69 6d 69 74 20 74 79 70 65 3a 20 22 2c  n limit type: ",
20dd0 20 7a 49 64 2c 20 28 63 68 61 72 2a 29 30 29 3b   zId, (char*)0);
20de0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
20df0 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
20e00 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
20e10 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
20e20 33 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75  3], &val) ) retu
20e30 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
20e40 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6c 69 6d  rc = sqlite3_lim
20e50 69 74 28 64 62 2c 20 69 64 2c 20 76 61 6c 29 3b  it(db, id, val);
20e60 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
20e70 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
20e80 4e 65 77 49 6e 74 4f 62 6a 28 72 63 29 29 3b 0a  NewIntObj(rc));.
20e90 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
20ea0 20 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63    .}../*.** tclc
20eb0 6d 64 3a 20 20 73 61 76 65 5f 70 72 6e 67 5f 73  md:  save_prng_s
20ec0 74 61 74 65 0a 2a 2a 0a 2a 2a 20 53 61 76 65 20  tate.**.** Save 
20ed0 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
20ee0 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 6e   pseudo-random n
20ef0 75 6d 62 65 72 20 67 65 6e 65 72 61 74 6f 72 2e  umber generator.
20f00 0a 2a 2a 20 41 74 20 74 68 65 20 73 61 6d 65 20  .** At the same 
20f10 74 69 6d 65 2c 20 76 65 72 69 66 79 20 74 68 61  time, verify tha
20f20 74 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  t sqlite3_test_c
20f30 6f 6e 74 72 6f 6c 20 77 6f 72 6b 73 20 65 76 65  ontrol works eve
20f40 6e 20 77 68 65 6e 0a 2a 2a 20 63 61 6c 6c 65 64  n when.** called
20f50 20 77 69 74 68 20 61 6e 20 6f 75 74 2d 6f 66 2d   with an out-of-
20f60 72 61 6e 67 65 20 6f 70 63 6f 64 65 2e 0a 2a 2f  range opcode..*/
20f70 0a 73 74 61 74 69 63 20 69 6e 74 20 73 61 76 65  .static int save
20f80 5f 70 72 6e 67 5f 73 74 61 74 65 28 0a 20 20 43  _prng_state(.  C
20f90 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
20fa0 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72  Data, /* Pointer
20fb0 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62   to sqlite3_enab
20fc0 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20  le_XXX function 
20fd0 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  */.  Tcl_Interp 
20fe0 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
20ff0 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
21000 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
21010 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
21020 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20    int objc,     
21030 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
21040 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
21050 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  */.  Tcl_Obj *CO
21060 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43  NST objv[]  /* C
21070 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73  ommand arguments
21080 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20   */.){.  int rc 
21090 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  = sqlite3_test_c
210a0 6f 6e 74 72 6f 6c 28 39 39 39 39 29 3b 0a 20 20  ontrol(9999);.  
210b0 61 73 73 65 72 74 28 20 72 63 3d 3d 30 20 29 3b  assert( rc==0 );
210c0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
210d0 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 2d 31 29  test_control(-1)
210e0 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
210f0 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 74  0 );.  sqlite3_t
21100 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
21110 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47  TE_TESTCTRL_PRNG
21120 5f 53 41 56 45 29 3b 0a 20 20 72 65 74 75 72 6e  _SAVE);.  return
21130 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 2f 2a 0a 2a 2a   TCL_OK;.}./*.**
21140 20 74 63 6c 63 6d 64 3a 20 20 72 65 73 74 6f 72   tclcmd:  restor
21150 65 5f 70 72 6e 67 5f 73 74 61 74 65 0a 2a 2f 0a  e_prng_state.*/.
21160 73 74 61 74 69 63 20 69 6e 74 20 72 65 73 74 6f  static int resto
21170 72 65 5f 70 72 6e 67 5f 73 74 61 74 65 28 0a 20  re_prng_state(. 
21180 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
21190 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74  ntData, /* Point
211a0 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e  er to sqlite3_en
211b0 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f  able_XXX functio
211c0 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  n */.  Tcl_Inter
211d0 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
211e0 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
211f0 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
21200 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
21210 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
21220 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
21230 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
21240 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
21250 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
21260 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
21270 74 73 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  ts */.){.  sqlit
21280 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
21290 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
212a0 50 52 4e 47 5f 52 45 53 54 4f 52 45 29 3b 0a 20  PRNG_RESTORE);. 
212b0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
212c0 7d 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20  }./*.** tclcmd: 
212d0 20 72 65 73 65 74 5f 70 72 6e 67 5f 73 74 61 74   reset_prng_stat
212e0 65 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  e.*/.static int 
212f0 72 65 73 65 74 5f 70 72 6e 67 5f 73 74 61 74 65  reset_prng_state
21300 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63  (.  ClientData c
21310 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f  lientData, /* Po
21320 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  inter to sqlite3
21330 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63  _enable_XXX func
21340 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  tion */.  Tcl_In
21350 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
21360 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
21370 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
21380 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
21390 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  d */.  int objc,
213a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
213b0 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
213c0 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62  ents */.  Tcl_Ob
213d0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20  j *CONST objv[] 
213e0 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
213f0 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 73 71  ments */.){.  sq
21400 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
21410 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ol(SQLITE_TESTCT
21420 52 4c 5f 50 52 4e 47 5f 52 45 53 45 54 29 3b 0a  RL_PRNG_RESET);.
21430 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
21440 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64  .}../*.** tclcmd
21450 3a 20 20 70 63 61 63 68 65 5f 73 74 61 74 73 0a  :  pcache_stats.
21460 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
21470 73 74 5f 70 63 61 63 68 65 5f 73 74 61 74 73 28  st_pcache_stats(
21480 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c  .  ClientData cl
21490 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69  ientData, /* Poi
214a0 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f  nter to sqlite3_
214b0 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74  enable_XXX funct
214c0 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74  ion */.  Tcl_Int
214d0 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
214e0 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
214f0 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
21500 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
21510 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20   */.  int objc, 
21520 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21530 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
21540 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a  nts */.  Tcl_Obj
21550 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20   *CONST objv[]  
21560 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d  /* Command argum
21570 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ents */.){.  int
21580 20 6e 4d 69 6e 3b 0a 20 20 69 6e 74 20 6e 4d 61   nMin;.  int nMa
21590 78 3b 0a 20 20 69 6e 74 20 6e 43 75 72 72 65 6e  x;.  int nCurren
215a0 74 3b 0a 20 20 69 6e 74 20 6e 52 65 63 79 63 6c  t;.  int nRecycl
215b0 61 62 6c 65 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20  able;.  Tcl_Obj 
215c0 2a 70 52 65 74 3b 0a 0a 20 20 73 71 6c 69 74 65  *pRet;..  sqlite
215d0 33 50 63 61 63 68 65 53 74 61 74 73 28 26 6e 43  3PcacheStats(&nC
215e0 75 72 72 65 6e 74 2c 20 26 6e 4d 61 78 2c 20 26  urrent, &nMax, &
215f0 6e 4d 69 6e 2c 20 26 6e 52 65 63 79 63 6c 61 62  nMin, &nRecyclab
21600 6c 65 29 3b 0a 0a 20 20 70 52 65 74 20 3d 20 54  le);..  pRet = T
21610 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a 20 20 54  cl_NewObj();.  T
21620 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
21630 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
21640 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72  pRet, Tcl_NewStr
21650 69 6e 67 4f 62 6a 28 22 63 75 72 72 65 6e 74 22  ingObj("current"
21660 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69  , -1));.  Tcl_Li
21670 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
21680 6e 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74 2c  nt(interp, pRet,
21690 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e   Tcl_NewIntObj(n
216a0 43 75 72 72 65 6e 74 29 29 3b 0a 20 20 54 63 6c  Current));.  Tcl
216b0 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
216c0 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 52  ement(interp, pR
216d0 65 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  et, Tcl_NewStrin
216e0 67 4f 62 6a 28 22 6d 61 78 22 2c 20 2d 31 29 29  gObj("max", -1))
216f0 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
21700 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
21710 65 72 70 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e  erp, pRet, Tcl_N
21720 65 77 49 6e 74 4f 62 6a 28 6e 4d 61 78 29 29 3b  ewIntObj(nMax));
21730 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  .  Tcl_ListObjAp
21740 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
21750 72 70 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65  rp, pRet, Tcl_Ne
21760 77 53 74 72 69 6e 67 4f 62 6a 28 22 6d 69 6e 22  wStringObj("min"
21770 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69  , -1));.  Tcl_Li
21780 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
21790 6e 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74 2c  nt(interp, pRet,
217a0 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e   Tcl_NewIntObj(n
217b0 4d 69 6e 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73  Min));.  Tcl_Lis
217c0 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
217d0 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74 2c 20  t(interp, pRet, 
217e0 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
217f0 28 22 72 65 63 79 63 6c 61 62 6c 65 22 2c 20 2d  ("recyclable", -
21800 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  1));.  Tcl_ListO
21810 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
21820 69 6e 74 65 72 70 2c 20 70 52 65 74 2c 20 54 63  interp, pRet, Tc
21830 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e 52 65 63  l_NewIntObj(nRec
21840 79 63 6c 61 62 6c 65 29 29 3b 0a 0a 20 20 54 63  yclable));..  Tc
21850 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
21860 6e 74 65 72 70 2c 20 70 52 65 74 29 3b 0a 0a 20  nterp, pRet);.. 
21870 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
21880 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74  }.../*.** Regist
21890 65 72 20 63 6f 6d 6d 61 6e 64 73 20 77 69 74 68  er commands with
218a0 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   the TCL interpr
218b0 65 74 65 72 2e 0a 2a 2f 0a 69 6e 74 20 53 71 6c  eter..*/.int Sql
218c0 69 74 65 74 65 73 74 31 5f 49 6e 69 74 28 54 63  itetest1_Init(Tc
218d0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
218e0 29 7b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  ){.  extern int 
218f0 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
21900 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69  ount;.  extern i
21910 6e 74 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  nt sqlite3_inter
21920 72 75 70 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78  rupt_count;.  ex
21930 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
21940 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74  _open_file_count
21950 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
21960 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
21970 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  t;.  extern int 
21980 73 71 6c 69 74 65 33 5f 63 75 72 72 65 6e 74 5f  sqlite3_current_
21990 74 69 6d 65 3b 0a 23 69 66 20 53 51 4c 49 54 45  time;.#if SQLITE
219a0 5f 4f 53 5f 55 4e 49 58 20 26 26 20 64 65 66 69  _OS_UNIX && defi
219b0 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 20  ned(__APPLE__). 
219c0 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
219d0 74 65 33 5f 68 6f 73 74 69 64 5f 6e 75 6d 3b 0a  te3_hostid_num;.
219e0 23 65 6e 64 69 66 0a 20 20 65 78 74 65 72 6e 20  #endif.  extern 
219f0 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f  int sqlite3_max_
21a00 62 6c 6f 62 73 69 7a 65 3b 0a 20 20 65 78 74 65  blobsize;.  exte
21a10 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 42 74  rn int sqlite3Bt
21a20 72 65 65 53 68 61 72 65 64 43 61 63 68 65 52 65  reeSharedCacheRe
21a30 70 6f 72 74 28 76 6f 69 64 2a 2c 0a 20 20 20 20  port(void*,.    
21a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a60 20 20 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70        Tcl_Interp
21a70 2a 2c 69 6e 74 2c 54 63 6c 5f 4f 62 6a 2a 43 4f  *,int,Tcl_Obj*CO
21a80 4e 53 54 2a 29 3b 0a 20 20 73 74 61 74 69 63 20  NST*);.  static 
21a90 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 63 68  struct {.     ch
21aa0 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20  ar *zName;.     
21ab0 54 63 6c 5f 43 6d 64 50 72 6f 63 20 2a 78 50 72  Tcl_CmdProc *xPr
21ac0 6f 63 3b 0a 20 20 7d 20 61 43 6d 64 5b 5d 20 3d  oc;.  } aCmd[] =
21ad0 20 7b 0a 20 20 20 20 20 7b 20 22 64 62 5f 65 6e   {.     { "db_en
21ae0 74 65 72 22 2c 20 20 20 20 20 20 20 20 20 20 20  ter",           
21af0 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
21b00 43 6d 64 50 72 6f 63 2a 29 64 62 5f 65 6e 74 65  CmdProc*)db_ente
21b10 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
21b20 7d 2c 0a 20 20 20 20 20 7b 20 22 64 62 5f 6c 65  },.     { "db_le
21b30 61 76 65 22 2c 20 20 20 20 20 20 20 20 20 20 20  ave",           
21b40 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
21b50 43 6d 64 50 72 6f 63 2a 29 64 62 5f 6c 65 61 76  CmdProc*)db_leav
21b60 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
21b70 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21b80 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 22 2c  e3_mprintf_int",
21b90 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
21ba0 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
21bb0 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 20 20 20 20  _mprintf_int    
21bc0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21bd0 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34  e3_mprintf_int64
21be0 22 2c 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f  ",         (Tcl_
21bf0 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
21c00 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34 20 20  _mprintf_int64  
21c10 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21c20 65 33 5f 6d 70 72 69 6e 74 66 5f 6c 6f 6e 67 22  e3_mprintf_long"
21c30 2c 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f  ,          (Tcl_
21c40 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
21c50 5f 6d 70 72 69 6e 74 66 5f 6c 6f 6e 67 20 20 20  _mprintf_long   
21c60 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21c70 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 22 2c  e3_mprintf_str",
21c80 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
21c90 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
21ca0 5f 6d 70 72 69 6e 74 66 5f 73 74 72 20 20 20 20  _mprintf_str    
21cb0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21cc0 65 33 5f 73 6e 70 72 69 6e 74 66 5f 73 74 72 22  e3_snprintf_str"
21cd0 2c 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f  ,          (Tcl_
21ce0 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
21cf0 5f 73 6e 70 72 69 6e 74 66 5f 73 74 72 20 20 20  _snprintf_str   
21d00 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21d10 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e  e3_mprintf_stron
21d20 6c 79 22 2c 20 20 20 20 20 20 20 28 54 63 6c 5f  ly",       (Tcl_
21d30 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
21d40 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79  _mprintf_stronly
21d50 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21d60 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c  e3_mprintf_doubl
21d70 65 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  e",        (Tcl_
21d80 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
21d90 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 20  _mprintf_double 
21da0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21db0 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65  e3_mprintf_scale
21dc0 64 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  d",        (Tcl_
21dd0 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
21de0 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65 64 20  _mprintf_scaled 
21df0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21e00 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78 64 6f  e3_mprintf_hexdo
21e10 75 62 6c 65 22 2c 20 20 20 28 54 63 6c 5f 43 6d  uble",   (Tcl_Cm
21e20 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d  dProc*)sqlite3_m
21e30 70 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65  printf_hexdouble
21e40 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21e50 65 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f 74 65 73  e3_mprintf_z_tes
21e60 74 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  t",        (Tcl_
21e70 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6d 70  CmdProc*)test_mp
21e80 72 69 6e 74 66 5f 7a 20 20 20 20 20 20 20 20 7d  rintf_z        }
21e90 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
21ea0 33 5f 6d 70 72 69 6e 74 66 5f 6e 5f 74 65 73 74  3_mprintf_n_test
21eb0 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43  ",        (Tcl_C
21ec0 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6d 70 72  mdProc*)test_mpr
21ed0 69 6e 74 66 5f 6e 20 20 20 20 20 20 20 20 7d 2c  intf_n        },
21ee0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
21ef0 5f 73 6e 70 72 69 6e 74 66 5f 69 6e 74 22 2c 20  _snprintf_int", 
21f00 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
21f10 64 50 72 6f 63 2a 29 74 65 73 74 5f 73 6e 70 72  dProc*)test_snpr
21f20 69 6e 74 66 5f 69 6e 74 20 20 20 20 20 7d 2c 0a  intf_int     },.
21f30 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
21f40 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
21f50 64 22 2c 20 20 20 20 20 28 54 63 6c 5f 43 6d 64  d",     (Tcl_Cmd
21f60 50 72 6f 63 2a 29 74 65 73 74 5f 6c 61 73 74 5f  Proc*)test_last_
21f70 72 6f 77 69 64 20 20 20 20 20 20 20 7d 2c 0a 20  rowid       },. 
21f80 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65      { "sqlite3_e
21f90 78 65 63 5f 70 72 69 6e 74 66 22 2c 20 20 20 20  xec_printf",    
21fa0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
21fb0 72 6f 63 2a 29 74 65 73 74 5f 65 78 65 63 5f 70  roc*)test_exec_p
21fc0 72 69 6e 74 66 20 20 20 20 20 20 7d 2c 0a 20 20  rintf      },.  
21fd0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 78     { "sqlite3_ex
21fe0 65 63 5f 68 65 78 22 2c 20 20 20 20 20 20 20 20  ec_hex",        
21ff0 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
22000 6f 63 2a 29 74 65 73 74 5f 65 78 65 63 5f 68 65  oc*)test_exec_he
22010 78 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20  x         },.   
22020 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 78 65    { "sqlite3_exe
22030 63 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  c",             
22040 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
22050 63 2a 29 74 65 73 74 5f 65 78 65 63 20 20 20 20  c*)test_exec    
22060 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
22070 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 78 65 63   { "sqlite3_exec
22080 5f 6e 72 22 2c 20 20 20 20 20 20 20 20 20 20 20  _nr",           
22090 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
220a0 2a 29 74 65 73 74 5f 65 78 65 63 5f 6e 72 20 20  *)test_exec_nr  
220b0 20 20 20 20 20 20 20 20 7d 2c 0a 23 69 66 6e 64          },.#ifnd
220c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47  ef SQLITE_OMIT_G
220d0 45 54 5f 54 41 42 4c 45 0a 20 20 20 20 20 7b 20  ET_TABLE.     { 
220e0 22 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62  "sqlite3_get_tab
220f0 6c 65 5f 70 72 69 6e 74 66 22 2c 20 20 20 20 20  le_printf",     
22100 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
22110 65 73 74 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72  est_get_table_pr
22120 69 6e 74 66 20 7d 2c 0a 23 65 6e 64 69 66 0a 20  intf },.#endif. 
22130 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
22140 6c 6f 73 65 22 2c 20 20 20 20 20 20 20 20 20 20  lose",          
22150 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
22160 72 6f 63 2a 29 73 71 6c 69 74 65 5f 74 65 73 74  roc*)sqlite_test
22170 5f 63 6c 6f 73 65 20 20 20 20 20 7d 2c 0a 20 20  _close     },.  
22180 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72     { "sqlite3_cr
22190 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 22 2c 20  eate_function", 
221a0 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
221b0 6f 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65 5f  oc*)test_create_
221c0 66 75 6e 63 74 69 6f 6e 20 20 7d 2c 0a 20 20 20  function  },.   
221d0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72 65    { "sqlite3_cre
221e0 61 74 65 5f 61 67 67 72 65 67 61 74 65 22 2c 20  ate_aggregate", 
221f0 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
22200 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65 5f 61  c*)test_create_a
22210 67 67 72 65 67 61 74 65 20 7d 2c 0a 20 20 20 20  ggregate },.    
22220 20 7b 20 22 73 71 6c 69 74 65 5f 72 65 67 69 73   { "sqlite_regis
22230 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  ter_test_functio
22240 6e 22 2c 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63  n", (Tcl_CmdProc
22250 2a 29 74 65 73 74 5f 72 65 67 69 73 74 65 72 5f  *)test_register_
22260 66 75 6e 63 20 20 20 20 7d 2c 0a 20 20 20 20 20  func    },.     
22270 7b 20 22 73 71 6c 69 74 65 5f 61 62 6f 72 74 22  { "sqlite_abort"
22280 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
22290 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
222a0 29 73 71 6c 69 74 65 5f 61 62 6f 72 74 20 20 20  )sqlite_abort   
222b0 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b         },.     {
222c0 20 22 73 71 6c 69 74 65 5f 62 69 6e 64 22 2c 20   "sqlite_bind", 
222d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222e0 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
222f0 74 65 73 74 5f 62 69 6e 64 20 20 20 20 20 20 20  test_bind       
22300 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
22310 22 62 72 65 61 6b 70 6f 69 6e 74 22 2c 20 20 20  "breakpoint",   
22320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22330 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
22340 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 20 20  est_breakpoint  
22350 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
22360 73 71 6c 69 74 65 33 5f 6b 65 79 22 2c 20 20 20  sqlite3_key",   
22370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22380 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
22390 73 74 5f 6b 65 79 20 20 20 20 20 20 20 20 20 20  st_key          
223a0 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
223b0 71 6c 69 74 65 33 5f 72 65 6b 65 79 22 2c 20 20  qlite3_rekey",  
223c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
223d0 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
223e0 74 5f 72 65 6b 65 79 20 20 20 20 20 20 20 20 20  t_rekey         
223f0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
22400 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 22 2c  lite_set_magic",
22410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
22420 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69  cl_CmdProc*)sqli
22430 74 65 5f 73 65 74 5f 6d 61 67 69 63 20 20 20 20  te_set_magic    
22440 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
22450 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 22 2c  ite3_interrupt",
22460 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
22470 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
22480 69 6e 74 65 72 72 75 70 74 20 20 20 20 20 20 20  interrupt       
22490 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
224a0 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e 63 74 69  te_delete_functi
224b0 6f 6e 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c  on",        (Tcl
224c0 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65 74 65  _CmdProc*)delete
224d0 5f 66 75 6e 63 74 69 6f 6e 20 20 20 20 20 20 20  _function       
224e0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
224f0 65 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69  e_delete_collati
22500 6f 6e 22 2c 20 20 20 20 20 20 20 28 54 63 6c 5f  on",       (Tcl_
22510 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65 74 65 5f  CmdProc*)delete_
22520 63 6f 6c 6c 61 74 69 6f 6e 20 20 20 20 20 20 7d  collation      }
22530 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
22540 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
22550 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43  ",        (Tcl_C
22560 6d 64 50 72 6f 63 2a 29 67 65 74 5f 61 75 74 6f  mdProc*)get_auto
22570 63 6f 6d 6d 69 74 20 20 20 20 20 20 20 20 7d 2c  commit        },
22580 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
22590 5f 73 74 61 63 6b 5f 75 73 65 64 22 2c 20 20 20  _stack_used",   
225a0 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
225b0 64 50 72 6f 63 2a 29 74 65 73 74 5f 73 74 61 63  dProc*)test_stac
225c0 6b 5f 75 73 65 64 20 20 20 20 20 20 20 7d 2c 0a  k_used       },.
225d0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
225e0 62 75 73 79 5f 74 69 6d 65 6f 75 74 22 2c 20 20  busy_timeout",  
225f0 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
22600 50 72 6f 63 2a 29 74 65 73 74 5f 62 75 73 79 5f  Proc*)test_busy_
22610 74 69 6d 65 6f 75 74 20 20 20 20 20 7d 2c 0a 20  timeout     },. 
22620 20 20 20 20 7b 20 22 70 72 69 6e 74 66 22 2c 20      { "printf", 
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22640 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
22650 72 6f 63 2a 29 74 65 73 74 5f 70 72 69 6e 74 66  roc*)test_printf
22660 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
22670 20 20 20 7b 20 22 73 71 6c 69 74 65 33 49 6f 54     { "sqlite3IoT
22680 72 61 63 65 22 2c 20 20 20 20 20 20 20 20 20 20  race",          
22690 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
226a0 2a 29 74 65 73 74 5f 69 6f 5f 74 72 61 63 65 20  *)test_io_trace 
226b0 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7d 3b 0a          },.  };.
226c0 20 20 73 74 61 74 69 63 20 73 74 72 75 63 74 20    static struct 
226d0 7b 0a 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  {.     char *zNa
226e0 6d 65 3b 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a  me;.     Tcl_Obj
226f0 43 6d 64 50 72 6f 63 20 2a 78 50 72 6f 63 3b 0a  CmdProc *xProc;.
22700 20 20 20 20 20 76 6f 69 64 20 2a 63 6c 69 65 6e       void *clien
22710 74 44 61 74 61 3b 0a 20 20 7d 20 61 4f 62 6a 43  tData;.  } aObjC
22720 6d 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b 20  md[] = {.     { 
22730 22 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74  "sqlite3_connect
22740 69 6f 6e 5f 70 6f 69 6e 74 65 72 22 2c 20 20 20  ion_pointer",   
22750 20 67 65 74 5f 73 71 6c 69 74 65 5f 70 6f 69 6e   get_sqlite_poin
22760 74 65 72 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b  ter, 0 },.     {
22770 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69   "sqlite3_bind_i
22780 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  nt",            
22790 20 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 2c    test_bind_int,
227a0 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 20 20 20        0 },.     
227b0 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  { "sqlite3_bind_
227c0 7a 65 72 6f 62 6c 6f 62 22 2c 20 20 20 20 20 20  zeroblob",      
227d0 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 7a 65 72     test_bind_zer
227e0 6f 62 6c 6f 62 2c 20 30 20 7d 2c 0a 20 20 20 20  oblob, 0 },.    
227f0 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64   { "sqlite3_bind
22800 5f 69 6e 74 36 34 22 2c 20 20 20 20 20 20 20 20  _int64",        
22810 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e      test_bind_in
22820 74 36 34 2c 20 20 20 20 30 20 7d 2c 0a 20 20 20  t64,    0 },.   
22830 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e    { "sqlite3_bin
22840 64 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20 20 20  d_double",      
22850 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 64       test_bind_d
22860 6f 75 62 6c 65 2c 20 20 20 30 20 7d 2c 0a 20 20  ouble,   0 },.  
22870 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
22880 6e 64 5f 6e 75 6c 6c 22 2c 20 20 20 20 20 20 20  nd_null",       
22890 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f        test_bind_
228a0 6e 75 6c 6c 20 20 20 20 20 2c 30 20 7d 2c 0a 20  null     ,0 },. 
228b0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62      { "sqlite3_b
228c0 69 6e 64 5f 74 65 78 74 22 2c 20 20 20 20 20 20  ind_text",      
228d0 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64         test_bind
228e0 5f 74 65 78 74 20 20 20 20 20 2c 30 20 7d 2c 0a  _text     ,0 },.
228f0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
22900 62 69 6e 64 5f 74 65 78 74 31 36 22 2c 20 20 20  bind_text16",   
22910 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e          test_bin
22920 64 5f 74 65 78 74 31 36 20 20 20 2c 30 20 7d 2c  d_text16   ,0 },
22930 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
22940 5f 62 69 6e 64 5f 62 6c 6f 62 22 2c 20 20 20 20  _bind_blob",    
22950 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69           test_bi
22960 6e 64 5f 62 6c 6f 62 20 20 20 20 20 2c 30 20 7d  nd_blob     ,0 }
22970 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
22980 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
22990 5f 63 6f 75 6e 74 22 2c 20 20 74 65 73 74 5f 62  _count",  test_b
229a0 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f  ind_parameter_co
229b0 75 6e 74 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20  unt, 0},.     { 
229c0 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  "sqlite3_bind_pa
229d0 72 61 6d 65 74 65 72 5f 6e 61 6d 65 22 2c 20 20  rameter_name",  
229e0 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d   test_bind_param
229f0 65 74 65 72 5f 6e 61 6d 65 2c 20 20 30 7d 2c 0a  eter_name,  0},.
22a00 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
22a10 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69  bind_parameter_i
22a20 6e 64 65 78 22 2c 20 20 74 65 73 74 5f 62 69 6e  ndex",  test_bin
22a30 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65  d_parameter_inde
22a40 78 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73  x, 0},.     { "s
22a50 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e  qlite3_clear_bin
22a60 64 69 6e 67 73 22 2c 20 20 20 20 20 20 20 20 74  dings",        t
22a70 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e  est_clear_bindin
22a80 67 73 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22  gs, 0},.     { "
22a90 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 22 2c 20  sqlite3_sleep", 
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ab0 74 65 73 74 5f 73 6c 65 65 70 2c 20 20 20 20 20  test_sleep,     
22ac0 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20       0},.     { 
22ad0 22 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65  "sqlite3_errcode
22ae0 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
22af0 20 74 65 73 74 5f 65 72 72 63 6f 64 65 20 20 20   test_errcode   
22b00 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
22b10 20 22 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64   "sqlite3_extend
22b20 65 64 5f 65 72 72 63 6f 64 65 22 2c 20 20 20 20  ed_errcode",    
22b30 20 20 74 65 73 74 5f 65 78 5f 65 72 72 63 6f 64    test_ex_errcod
22b40 65 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20  e    ,0 },.     
22b50 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72 6d 73  { "sqlite3_errms
22b60 67 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  g",             
22b70 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67 20 20     test_errmsg  
22b80 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20        ,0 },.    
22b90 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72 6d   { "sqlite3_errm
22ba0 73 67 31 36 22 2c 20 20 20 20 20 20 20 20 20 20  sg16",          
22bb0 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67 31      test_errmsg1
22bc0 36 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20  6      ,0 },.   
22bd0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f 70 65    { "sqlite3_ope
22be0 6e 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  n",             
22bf0 20 20 20 20 20 74 65 73 74 5f 6f 70 65 6e 20 20       test_open  
22c00 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20          ,0 },.  
22c10 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f 70     { "sqlite3_op
22c20 65 6e 31 36 22 2c 20 20 20 20 20 20 20 20 20 20  en16",          
22c30 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65 6e 31        test_open1
22c40 36 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20  6        ,0 },. 
22c50 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
22c60 6f 6d 70 6c 65 74 65 31 36 22 2c 20 20 20 20 20  omplete16",     
22c70 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6d 70         test_comp
22c80 6c 65 74 65 31 36 20 20 20 20 2c 30 20 7d 2c 0a  lete16    ,0 },.
22c90 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
22ca0 5f 70 72 65 70 61 72 65 22 2c 20 20 20 20 20 20  _prepare",      
22cb0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 70 72           test_pr
22cc0 65 70 61 72 65 20 20 20 20 20 20 20 2c 30 20 7d  epare       ,0 }
22cd0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
22ce0 33 5f 70 72 65 70 61 72 65 31 36 22 2c 20 20 20  3_prepare16",   
22cf0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 70            test_p
22d00 72 65 70 61 72 65 31 36 20 20 20 20 20 2c 30 20  repare16     ,0 
22d10 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
22d20 65 33 5f 70 72 65 70 61 72 65 5f 76 32 22 2c 20  e3_prepare_v2", 
22d30 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
22d40 70 72 65 70 61 72 65 5f 76 32 20 20 20 20 2c 30  prepare_v2    ,0
22d50 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
22d60 74 65 33 5f 70 72 65 70 61 72 65 5f 74 6b 74 33  te3_prepare_tkt3
22d70 31 33 34 22 2c 20 20 20 20 20 20 20 74 65 73 74  134",       test
22d80 5f 70 72 65 70 61 72 65 5f 74 6b 74 33 31 33 34  _prepare_tkt3134
22d90 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  , 0},.     { "sq
22da0 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36 5f  lite3_prepare16_
22db0 76 32 22 2c 20 20 20 20 20 20 20 20 20 20 74 65  v2",          te
22dc0 73 74 5f 70 72 65 70 61 72 65 31 36 5f 76 32 20  st_prepare16_v2 
22dd0 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
22de0 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 22  qlite3_finalize"
22df0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  ,              t
22e00 65 73 74 5f 66 69 6e 61 6c 69 7a 65 20 20 20 20  est_finalize    
22e10 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
22e20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61  sqlite3_stmt_sta
22e30 74 75 73 22 2c 20 20 20 20 20 20 20 20 20 20 20  tus",           
22e40 74 65 73 74 5f 73 74 6d 74 5f 73 74 61 74 75 73  test_stmt_status
22e50 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
22e60 22 73 71 6c 69 74 65 33 5f 72 65 73 65 74 22 2c  "sqlite3_reset",
22e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e80 20 74 65 73 74 5f 72 65 73 65 74 20 20 20 20 20   test_reset     
22e90 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
22ea0 20 22 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65   "sqlite3_expire
22eb0 64 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  d",             
22ec0 20 20 74 65 73 74 5f 65 78 70 69 72 65 64 20 20    test_expired  
22ed0 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
22ee0 7b 20 22 73 71 6c 69 74 65 33 5f 74 72 61 6e 73  { "sqlite3_trans
22ef0 66 65 72 5f 62 69 6e 64 69 6e 67 73 22 2c 20 20  fer_bindings",  
22f00 20 20 20 74 65 73 74 5f 74 72 61 6e 73 66 65 72     test_transfer
22f10 5f 62 69 6e 64 20 2c 30 20 7d 2c 0a 20 20 20 20  _bind ,0 },.    
22f20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 68 61 6e   { "sqlite3_chan
22f30 67 65 73 22 2c 20 20 20 20 20 20 20 20 20 20 20  ges",           
22f40 20 20 20 20 74 65 73 74 5f 63 68 61 6e 67 65 73      test_changes
22f50 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
22f60 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 73 74 65    { "sqlite3_ste
22f70 70 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  p",             
22f80 20 20 20 20 20 74 65 73 74 5f 73 74 65 70 20 20       test_step  
22f90 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20          ,0 },.  
22fa0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6e 65     { "sqlite3_ne
22fb0 78 74 5f 73 74 6d 74 22 2c 20 20 20 20 20 20 20  xt_stmt",       
22fc0 20 20 20 20 20 20 74 65 73 74 5f 6e 65 78 74 5f        test_next_
22fd0 73 74 6d 74 20 20 20 20 20 2c 30 20 7d 2c 0a 0a  stmt     ,0 },..
22fe0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
22ff0 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 22 2c  release_memory",
23000 20 20 20 20 20 20 20 20 74 65 73 74 5f 72 65 6c          test_rel
23010 65 61 73 65 5f 6d 65 6d 6f 72 79 2c 20 20 20 20  ease_memory,    
23020 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c   0},.     { "sql
23030 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c  ite3_soft_heap_l
23040 69 6d 69 74 22 2c 20 20 20 20 20 20 20 74 65 73  imit",       tes
23050 74 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  t_soft_heap_limi
23060 74 2c 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b  t,    0},.     {
23070 20 22 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64   "sqlite3_thread
23080 5f 63 6c 65 61 6e 75 70 22 2c 20 20 20 20 20 20  _cleanup",      
23090 20 20 74 65 73 74 5f 74 68 72 65 61 64 5f 63 6c    test_thread_cl
230a0 65 61 6e 75 70 2c 20 20 20 20 20 30 7d 2c 0a 20  eanup,     0},. 
230b0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 70      { "sqlite3_p
230c0 61 67 65 72 5f 72 65 66 63 6f 75 6e 74 73 22 2c  ager_refcounts",
230d0 20 20 20 20 20 20 20 74 65 73 74 5f 70 61 67 65         test_page
230e0 72 5f 72 65 66 63 6f 75 6e 74 73 2c 20 20 20 20  r_refcounts,    
230f0 30 7d 2c 0a 0a 20 20 20 20 20 7b 20 22 73 71 6c  0},..     { "sql
23100 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  ite3_load_extens
23110 69 6f 6e 22 2c 20 20 20 20 20 20 20 20 74 65 73  ion",        tes
23120 74 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  t_load_extension
23130 2c 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b  ,     0},.     {
23140 20 22 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65   "sqlite3_enable
23150 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 22  _load_extension"
23160 2c 20 74 65 73 74 5f 65 6e 61 62 6c 65 5f 6c 6f  , test_enable_lo
23170 61 64 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20  ad,        0},. 
23180 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65      { "sqlite3_e
23190 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63  xtended_result_c
231a0 6f 64 65 73 22 2c 20 74 65 73 74 5f 65 78 74 65  odes", test_exte
231b0 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65  nded_result_code
231c0 73 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73  s, 0},.     { "s
231d0 71 6c 69 74 65 33 5f 6c 69 6d 69 74 22 2c 20 20  qlite3_limit",  
231e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
231f0 65 73 74 5f 6c 69 6d 69 74 2c 20 20 20 20 20 20  est_limit,      
23200 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 0a 0a             0},..
23210 20 20 20 20 20 7b 20 22 73 61 76 65 5f 70 72 6e       { "save_prn
23220 67 5f 73 74 61 74 65 22 2c 20 20 20 20 20 20 20  g_state",       
23230 20 20 20 20 20 20 20 20 73 61 76 65 5f 70 72 6e          save_prn
23240 67 5f 73 74 61 74 65 2c 20 20 20 20 30 20 7d 2c  g_state,    0 },
23250 0a 20 20 20 20 20 7b 20 22 72 65 73 74 6f 72 65  .     { "restore
23260 5f 70 72 6e 67 5f 73 74 61 74 65 22 2c 20 20 20  _prng_state",   
23270 20 20 20 20 20 20 20 20 20 72 65 73 74 6f 72 65           restore
23280 5f 70 72 6e 67 5f 73 74 61 74 65 2c 20 30 20 7d  _prng_state, 0 }
23290 2c 0a 20 20 20 20 20 7b 20 22 72 65 73 65 74 5f  ,.     { "reset_
232a0 70 72 6e 67 5f 73 74 61 74 65 22 2c 20 20 20 20  prng_state",    
232b0 20 20 20 20 20 20 20 20 20 20 72 65 73 65 74 5f            reset_
232c0 70 72 6e 67 5f 73 74 61 74 65 2c 20 20 20 30 20  prng_state,   0 
232d0 7d 2c 0a 0a 20 20 20 20 20 2f 2a 20 73 71 6c 69  },..     /* sqli
232e0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 2a 28 29 20 41  te3_column_*() A
232f0 50 49 20 2a 2f 0a 20 20 20 20 20 7b 20 22 73 71  PI */.     { "sq
23300 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75  lite3_column_cou
23310 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 74 65  nt",          te
23320 73 74 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20  st_column_count 
23330 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
23340 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e  qlite3_data_coun
23350 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 74  t",            t
23360 65 73 74 5f 64 61 74 61 5f 63 6f 75 6e 74 20 20  est_data_count  
23370 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
23380 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
23390 79 70 65 22 2c 20 20 20 20 20 20 20 20 20 20 20  ype",           
233a0 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  test_column_type
233b0 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
233c0 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
233d0 62 6c 6f 62 22 2c 20 20 20 20 20 20 20 20 20 20  blob",          
233e0 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f   test_column_blo
233f0 62 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b  b   ,0 },.     {
23400 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
23410 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20 20 20 20  _double",       
23420 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f    test_column_do
23430 75 62 6c 65 20 2c 30 20 7d 2c 0a 20 20 20 20 20  uble ,0 },.     
23440 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
23450 6e 5f 69 6e 74 36 34 22 2c 20 20 20 20 20 20 20  n_int64",       
23460 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69     test_column_i
23470 6e 74 36 34 20 20 2c 30 20 7d 2c 0a 20 20 20 20  nt64  ,0 },.    
23480 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
23490 6d 6e 5f 74 65 78 74 22 2c 20 20 20 74 65 73 74  mn_text",   test
234a0 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 28 76 6f  _stmt_utf8,  (vo
234b0 69 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  id*)sqlite3_colu
234c0 6d 6e 5f 74 65 78 74 20 7d 2c 0a 20 20 20 20 20  mn_text },.     
234d0 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
234e0 6e 5f 6e 61 6d 65 22 2c 20 20 20 74 65 73 74 5f  n_name",   test_
234f0 73 74 6d 74 5f 75 74 66 38 2c 20 20 28 76 6f 69  stmt_utf8,  (voi
23500 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  d*)sqlite3_colum
23510 6e 5f 6e 61 6d 65 20 7d 2c 0a 20 20 20 20 20 7b  n_name },.     {
23520 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
23530 5f 69 6e 74 22 2c 20 20 20 20 74 65 73 74 5f 73  _int",    test_s
23540 74 6d 74 5f 69 6e 74 2c 20 20 20 28 76 6f 69 64  tmt_int,   (void
23550 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
23560 5f 69 6e 74 20 20 7d 2c 0a 20 20 20 20 20 7b 20  _int  },.     { 
23570 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
23580 62 79 74 65 73 22 2c 20 20 74 65 73 74 5f 73 74  bytes",  test_st
23590 6d 74 5f 69 6e 74 2c 20 20 20 28 76 6f 69 64 2a  mt_int,   (void*
235a0 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  )sqlite3_column_
235b0 62 79 74 65 73 7d 2c 0a 23 69 66 6e 64 65 66 20  bytes},.#ifndef 
235c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c  SQLITE_OMIT_DECL
235d0 54 59 50 45 0a 20 20 20 20 20 7b 20 22 73 71 6c  TYPE.     { "sql
235e0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
235f0 74 79 70 65 22 2c 74 65 73 74 5f 73 74 6d 74 5f  type",test_stmt_
23600 75 74 66 38 2c 28 76 6f 69 64 2a 29 73 71 6c 69  utf8,(void*)sqli
23610 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
23620 79 70 65 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66  ype},.#endif.#if
23630 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
23640 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54  E_COLUMN_METADAT
23650 41 0a 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c  A.{ "sqlite3_col
23660 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
23670 65 22 2c 74 65 73 74 5f 73 74 6d 74 5f 75 74 66  e",test_stmt_utf
23680 38 2c 28 76 6f 69 64 2a 29 73 71 6c 69 74 65 33  8,(void*)sqlite3
23690 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
236a0 5f 6e 61 6d 65 7d 2c 0a 7b 20 22 73 71 6c 69 74  _name},.{ "sqlit
236b0 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f  e3_column_table_
236c0 6e 61 6d 65 22 2c 74 65 73 74 5f 73 74 6d 74 5f  name",test_stmt_
236d0 75 74 66 38 2c 28 76 6f 69 64 2a 29 73 71 6c 69  utf8,(void*)sqli
236e0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65  te3_column_table
236f0 5f 6e 61 6d 65 7d 2c 0a 7b 20 22 73 71 6c 69 74  _name},.{ "sqlit
23700 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
23710 5f 6e 61 6d 65 22 2c 74 65 73 74 5f 73 74 6d 74  _name",test_stmt
23720 5f 75 74 66 38 2c 28 76 6f 69 64 2a 29 73 71 6c  _utf8,(void*)sql
23730 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
23740 69 6e 5f 6e 61 6d 65 7d 2c 0a 23 65 6e 64 69 66  in_name},.#endif
23750 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
23760 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 20 20  _OMIT_UTF16.    
23770 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
23780 6d 6e 5f 62 79 74 65 73 31 36 22 2c 20 74 65 73  mn_bytes16", tes
23790 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 28 76 6f 69  t_stmt_int, (voi
237a0 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  d*)sqlite3_colum
237b0 6e 5f 62 79 74 65 73 31 36 20 7d 2c 0a 20 20 20  n_bytes16 },.   
237c0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
237d0 75 6d 6e 5f 74 65 78 74 31 36 22 2c 20 20 74 65  umn_text16",  te
237e0 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 28  st_stmt_utf16, (
237f0 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f  void*)sqlite3_co
23800 6c 75 6d 6e 5f 74 65 78 74 31 36 7d 2c 0a 20 20  lumn_text16},.  
23810 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
23820 6c 75 6d 6e 5f 6e 61 6d 65 31 36 22 2c 20 20 74  lumn_name16",  t
23830 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20  est_stmt_utf16, 
23840 28 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 63  (void*)sqlite3_c
23850 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 7d 2c 0a 20  olumn_name16},. 
23860 20 20 20 20 7b 20 22 61 64 64 5f 61 6c 69 67 6e      { "add_align
23870 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61 74  ment_test_collat
23880 69 6f 6e 73 22 2c 20 61 64 64 5f 61 6c 69 67 6e  ions", add_align
23890 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61 74  ment_test_collat
238a0 69 6f 6e 73 2c 20 30 20 20 20 20 20 20 7d 2c 0a  ions, 0      },.
238b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
238c0 4d 49 54 5f 44 45 43 4c 54 59 50 45 0a 20 20 20  MIT_DECLTYPE.   
238d0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
238e0 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 22 2c  umn_decltype16",
238f0 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c  test_stmt_utf16,
23900 28 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 63  (void*)sqlite3_c
23910 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36  olumn_decltype16
23920 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  },.#endif.#ifdef
23930 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
23940 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 7b  OLUMN_METADATA.{
23950 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
23960 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 22  database_name16"
23970 2c 0a 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74  ,.  test_stmt_ut
23980 66 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c  f16, sqlite3_col
23990 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
239a0 65 31 36 7d 2c 0a 7b 22 73 71 6c 69 74 65 33 5f  e16},.{"sqlite3_
239b0 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
239c0 65 31 36 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f  e16", test_stmt_
239d0 75 74 66 31 36 2c 20 28 76 6f 69 64 2a 29 73 71  utf16, (void*)sq
239e0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
239f0 6c 65 5f 6e 61 6d 65 31 36 7d 2c 0a 7b 22 73 71  le_name16},.{"sq
23a00 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
23a10 67 69 6e 5f 6e 61 6d 65 31 36 22 2c 20 74 65 73  gin_name16", tes
23a20 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 28 76  t_stmt_utf16, (v
23a30 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  oid*)sqlite3_col
23a40 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31  umn_origin_name1
23a50 36 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  6},.#endif.#endi
23a60 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  f.     { "sqlite
23a70 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
23a80 6f 6e 5f 76 32 22 2c 20 74 65 73 74 5f 63 72 65  on_v2", test_cre
23a90 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 76 32  ate_collation_v2
23aa0 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73  , 0 },.     { "s
23ab0 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f 72 65  qlite3_global_re
23ac0 63 6f 76 65 72 22 2c 20 20 20 20 20 74 65 73 74  cover",     test
23ad0 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 2c  _global_recover,
23ae0 20 30 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22   0   },.     { "
23af0 77 6f 72 6b 69 6e 67 5f 36 34 62 69 74 5f 69 6e  working_64bit_in
23b00 74 22 2c 20 20 20 20 20 20 20 20 20 20 77 6f 72  t",          wor
23b10 6b 69 6e 67 5f 36 34 62 69 74 5f 69 6e 74 2c 20  king_64bit_int, 
23b20 20 20 30 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20    0   },.     { 
23b30 22 76 66 73 5f 75 6e 6c 69 6e 6b 5f 74 65 73 74  "vfs_unlink_test
23b40 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 76 66  ",            vf
23b50 73 5f 75 6e 6c 69 6e 6b 5f 74 65 73 74 2c 20 20  s_unlink_test,  
23b60 20 20 20 30 20 20 20 7d 2c 0a 20 20 20 20 20 7b     0   },.     {
23b70 20 22 76 66 73 5f 69 6e 69 74 66 61 69 6c 5f 74   "vfs_initfail_t
23b80 65 73 74 22 2c 20 20 20 20 20 20 20 20 20 20 76  est",          v
23b90 66 73 5f 69 6e 69 74 66 61 69 6c 5f 74 65 73 74  fs_initfail_test
23ba0 2c 20 20 20 30 20 20 20 7d 2c 0a 20 20 20 20 20  ,   0   },.     
23bb0 7b 20 22 76 66 73 5f 75 6e 72 65 67 69 73 74 65  { "vfs_unregiste
23bc0 72 5f 61 6c 6c 22 2c 20 20 20 20 20 20 20 20 20  r_all",         
23bd0 76 66 73 5f 75 6e 72 65 67 69 73 74 65 72 5f 61  vfs_unregister_a
23be0 6c 6c 2c 20 20 30 20 20 20 7d 2c 0a 20 20 20 20  ll,  0   },.    
23bf0 20 7b 20 22 76 66 73 5f 72 65 72 65 67 69 73 74   { "vfs_reregist
23c00 65 72 5f 61 6c 6c 22 2c 20 20 20 20 20 20 20 20  er_all",        
23c10 20 76 66 73 5f 72 65 72 65 67 69 73 74 65 72 5f   vfs_reregister_
23c20 61 6c 6c 2c 20 20 30 20 20 20 7d 2c 0a 20 20 20  all,  0   },.   
23c30 20 20 7b 20 22 66 69 6c 65 5f 63 6f 6e 74 72 6f    { "file_contro
23c40 6c 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20 20  l_test",        
23c50 20 20 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 74    file_control_t
23c60 65 73 74 2c 20 20 20 30 20 20 20 7d 2c 0a 20 20  est,   0   },.  
23c70 20 20 20 7b 20 22 66 69 6c 65 5f 63 6f 6e 74 72     { "file_contr
23c80 6f 6c 5f 6c 61 73 74 65 72 72 6e 6f 5f 74 65 73  ol_lasterrno_tes
23c90 74 22 2c 20 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  t", file_control
23ca0 5f 6c 61 73 74 65 72 72 6e 6f 5f 74 65 73 74 2c  _lasterrno_test,
23cb0 20 20 30 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20    0   },.     { 
23cc0 22 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 6c 6f  "file_control_lo
23cd0 63 6b 70 72 6f 78 79 5f 74 65 73 74 22 2c 20 66  ckproxy_test", f
23ce0 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 6c 6f 63 6b  ile_control_lock
23cf0 70 72 6f 78 79 5f 74 65 73 74 2c 20 20 30 20 20  proxy_test,  0  
23d00 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
23d10 74 65 33 5f 76 66 73 5f 6c 69 73 74 22 2c 20 20  te3_vfs_list",  
23d20 20 20 20 20 20 20 20 20 20 76 66 73 5f 6c 69 73           vfs_lis
23d30 74 2c 20 20 20 20 20 30 20 20 20 7d 2c 0a 0a 20  t,     0   },.. 
23d40 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 73      /* Functions
23d50 20 66 72 6f 6d 20 6f 73 2e 68 20 2a 2f 0a 23 69   from os.h */.#i
23d60 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
23d70 54 5f 55 54 46 31 36 0a 20 20 20 20 20 7b 20 22  T_UTF16.     { "
23d80 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65  add_test_collate
23d90 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 63  ",        test_c
23da0 6f 6c 6c 61 74 65 2c 20 30 20 20 20 20 20 20 20  ollate, 0       
23db0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
23dc0 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 65  add_test_collate
23dd0 5f 6e 65 65 64 65 64 22 2c 20 74 65 73 74 5f 63  _needed", test_c
23de0 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 2c 20 30  ollate_needed, 0
23df0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
23e00 61 64 64 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  add_test_functio
23e10 6e 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f 66  n",       test_f
23e20 75 6e 63 74 69 6f 6e 2c 20 30 20 20 20 20 20 20  unction, 0      
23e30 20 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 20       },.#endif. 
23e40 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 74      { "sqlite3_t
23e50 65 73 74 5f 65 72 72 73 74 72 22 2c 20 20 20 20  est_errstr",    
23e60 20 74 65 73 74 5f 65 72 72 73 74 72 2c 20 30 20   test_errstr, 0 
23e70 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
23e80 20 20 20 20 7b 20 22 74 63 6c 5f 76 61 72 69 61      { "tcl_varia
23e90 62 6c 65 5f 74 79 70 65 22 2c 20 20 20 20 20 20  ble_type",      
23ea0 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79   tcl_variable_ty
23eb0 70 65 2c 20 30 20 20 20 20 20 20 20 7d 2c 0a 23  pe, 0       },.#
23ec0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
23ed0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
23ee0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
23ef0 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61  enable_shared_ca
23f00 63 68 65 22 2c 20 74 65 73 74 5f 65 6e 61 62 6c  che", test_enabl
23f10 65 5f 73 68 61 72 65 64 2c 20 30 20 20 7d 2c 0a  e_shared, 0  },.
23f20 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
23f30 73 68 61 72 65 64 5f 63 61 63 68 65 5f 72 65 70  shared_cache_rep
23f40 6f 72 74 22 2c 20 73 71 6c 69 74 65 33 42 74 72  ort", sqlite3Btr
23f50 65 65 53 68 61 72 65 64 43 61 63 68 65 52 65 70  eeSharedCacheRep
23f60 6f 72 74 2c 20 30 7d 2c 0a 23 65 6e 64 69 66 0a  ort, 0},.#endif.
23f70 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
23f80 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65  libversion_numbe
23f90 72 22 2c 20 74 65 73 74 5f 6c 69 62 76 65 72 73  r", test_libvers
23fa0 69 6f 6e 5f 6e 75 6d 62 65 72 2c 20 30 20 20 7d  ion_number, 0  }
23fb0 2c 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ,.#ifdef SQLITE_
23fc0 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45  ENABLE_COLUMN_ME
23fd0 54 41 44 41 54 41 0a 20 20 20 20 20 7b 20 22 73  TADATA.     { "s
23fe0 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c  qlite3_table_col
23ff0 75 6d 6e 5f 6d 65 74 61 64 61 74 61 22 2c 20 74  umn_metadata", t
24000 65 73 74 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  est_table_column
24010 5f 6d 65 74 61 64 61 74 61 2c 20 30 20 20 7d 2c  _metadata, 0  },
24020 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
24030 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 43 52  SQLITE_OMIT_INCR
24040 42 4c 4f 42 0a 20 20 20 20 20 7b 20 22 73 71 6c  BLOB.     { "sql
24050 69 74 65 33 5f 62 6c 6f 62 5f 72 65 61 64 22 2c  ite3_blob_read",
24060 20 20 74 65 73 74 5f 62 6c 6f 62 5f 72 65 61 64    test_blob_read
24070 2c 20 30 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22  , 0  },.     { "
24080 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 77 72 69  sqlite3_blob_wri
24090 74 65 22 2c 20 74 65 73 74 5f 62 6c 6f 62 5f 77  te", test_blob_w
240a0 72 69 74 65 2c 20 30 20 20 7d 2c 0a 23 65 6e 64  rite, 0  },.#end
240b0 69 66 0a 20 20 20 20 20 7b 20 22 70 63 61 63 68  if.     { "pcach
240c0 65 5f 73 74 61 74 73 22 2c 20 20 20 20 20 20 20  e_stats",       
240d0 74 65 73 74 5f 70 63 61 63 68 65 5f 73 74 61 74  test_pcache_stat
240e0 73 2c 20 30 20 20 7d 2c 0a 20 20 7d 3b 0a 20 20  s, 0  },.  };.  
240f0 73 74 61 74 69 63 20 69 6e 74 20 62 69 74 6d 61  static int bitma
24100 73 6b 5f 73 69 7a 65 20 3d 20 73 69 7a 65 6f 66  sk_size = sizeof
24110 28 42 69 74 6d 61 73 6b 29 2a 38 3b 0a 20 20 69  (Bitmask)*8;.  i
24120 6e 74 20 69 3b 0a 20 20 65 78 74 65 72 6e 20 69  nt i;.  extern i
24130 6e 74 20 73 71 6c 69 74 65 33 5f 73 79 6e 63 5f  nt sqlite3_sync_
24140 63 6f 75 6e 74 2c 20 73 71 6c 69 74 65 33 5f 66  count, sqlite3_f
24150 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 3b 0a 20  ullsync_count;. 
24160 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
24170 74 65 33 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f 75  te3_opentemp_cou
24180 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74  nt;.  extern int
24190 20 73 71 6c 69 74 65 33 5f 6c 69 6b 65 5f 63 6f   sqlite3_like_co
241a0 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  unt;.  extern in
241b0 74 20 73 71 6c 69 74 65 33 5f 78 66 65 72 6f 70  t sqlite3_xferop
241c0 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72  t_count;.  exter
241d0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 70 61  n int sqlite3_pa
241e0 67 65 72 5f 72 65 61 64 64 62 5f 63 6f 75 6e 74  ger_readdb_count
241f0 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
24200 71 6c 69 74 65 33 5f 70 61 67 65 72 5f 77 72 69  qlite3_pager_wri
24210 74 65 64 62 5f 63 6f 75 6e 74 3b 0a 20 20 65 78  tedb_count;.  ex
24220 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
24230 5f 70 61 67 65 72 5f 77 72 69 74 65 6a 5f 63 6f  _pager_writej_co
24240 75 6e 74 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  unt;.#if defined
24250 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 26 26 20 64  (__linux__) && d
24260 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
24270 53 54 29 20 26 26 20 53 51 4c 49 54 45 5f 54 48  ST) && SQLITE_TH
24280 52 45 41 44 53 41 46 45 0a 20 20 65 78 74 65 72  READSAFE.  exter
24290 6e 20 69 6e 74 20 74 68 72 65 61 64 73 4f 76 65  n int threadsOve
242a0 72 72 69 64 65 45 61 63 68 4f 74 68 65 72 73 4c  rrideEachOthersL
242b0 6f 63 6b 73 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ocks;.#endif.#if
242c0 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 20   SQLITE_OS_WIN. 
242d0 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
242e0 74 65 33 5f 6f 73 5f 74 79 70 65 3b 0a 23 65 6e  te3_os_type;.#en
242f0 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
24300 45 5f 44 45 42 55 47 0a 20 20 65 78 74 65 72 6e  E_DEBUG.  extern
24310 20 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72   int sqlite3Wher
24320 65 54 72 61 63 65 3b 0a 20 20 65 78 74 65 72 6e  eTrace;.  extern
24330 20 69 6e 74 20 73 71 6c 69 74 65 33 4f 53 54 72   int sqlite3OSTr
24340 61 63 65 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  ace;.  extern in
24350 74 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  t sqlite3VdbeAdd
24360 6f 70 54 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a  opTrace;.#endif.
24370 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
24380 53 54 0a 20 20 65 78 74 65 72 6e 20 63 68 61 72  ST.  extern char
24390 20 73 71 6c 69 74 65 33 5f 71 75 65 72 79 5f 70   sqlite3_query_p
243a0 6c 61 6e 5b 5d 3b 0a 20 20 73 74 61 74 69 63 20  lan[];.  static 
243b0 63 68 61 72 20 2a 71 75 65 72 79 5f 70 6c 61 6e  char *query_plan
243c0 20 3d 20 73 71 6c 69 74 65 33 5f 71 75 65 72 79   = sqlite3_query
243d0 5f 70 6c 61 6e 3b 0a 23 69 66 64 65 66 20 53 51  _plan;.#ifdef SQ
243e0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
243f0 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71  .  extern int sq
24400 6c 69 74 65 33 5f 66 74 73 33 5f 65 6e 61 62 6c  lite3_fts3_enabl
24410 65 5f 70 61 72 65 6e 74 68 65 73 65 73 3b 0a 23  e_parentheses;.#
24420 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 20 20  endif.#endif..  
24430 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f  for(i=0; i<sizeo
24440 66 28 61 43 6d 64 29 2f 73 69 7a 65 6f 66 28 61  f(aCmd)/sizeof(a
24450 43 6d 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20  Cmd[0]); i++){. 
24460 20 20 20 54 63 6c 5f 43 72 65 61 74 65 43 6f 6d     Tcl_CreateCom
24470 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 61 43 6d  mand(interp, aCm
24480 64 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 61 43 6d 64  d[i].zName, aCmd
24490 5b 69 5d 2e 78 50 72 6f 63 2c 20 30 2c 20 30 29  [i].xProc, 0, 0)
244a0 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b  ;.  }.  for(i=0;
244b0 20 69 3c 73 69 7a 65 6f 66 28 61 4f 62 6a 43 6d   i<sizeof(aObjCm
244c0 64 29 2f 73 69 7a 65 6f 66 28 61 4f 62 6a 43 6d  d)/sizeof(aObjCm
244d0 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20  d[0]); i++){.   
244e0 20 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f   Tcl_CreateObjCo
244f0 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 61 4f  mmand(interp, aO
24500 62 6a 43 6d 64 5b 69 5d 2e 7a 4e 61 6d 65 2c 20  bjCmd[i].zName, 
24510 0a 20 20 20 20 20 20 20 20 61 4f 62 6a 43 6d 64  .        aObjCmd
24520 5b 69 5d 2e 78 50 72 6f 63 2c 20 61 4f 62 6a 43  [i].xProc, aObjC
24530 6d 64 5b 69 5d 2e 63 6c 69 65 6e 74 44 61 74 61  md[i].clientData
24540 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  , 0);.  }.  Tcl_
24550 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
24560 22 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f 63  "sqlite_search_c
24570 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63  ount", .      (c
24580 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 73 65  har*)&sqlite3_se
24590 61 72 63 68 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f  arch_count, TCL_
245a0 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c  LINK_INT);.  Tcl
245b0 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
245c0 20 22 73 71 6c 69 74 65 5f 73 6f 72 74 5f 63 6f   "sqlite_sort_co
245d0 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68  unt", .      (ch
245e0 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 73 6f 72  ar*)&sqlite3_sor
245f0 74 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e  t_count, TCL_LIN
24600 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69  K_INT);.  Tcl_Li
24610 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
24620 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73  qlite3_max_blobs
24630 69 7a 65 22 2c 20 0a 20 20 20 20 20 20 28 63 68  ize", .      (ch
24640 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d 61 78  ar*)&sqlite3_max
24650 5f 62 6c 6f 62 73 69 7a 65 2c 20 54 43 4c 5f 4c  _blobsize, TCL_L
24660 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
24670 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
24680 22 73 71 6c 69 74 65 5f 6c 69 6b 65 5f 63 6f 75  "sqlite_like_cou
24690 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61  nt", .      (cha
246a0 72 2a 29 26 73 71 6c 69 74 65 33 5f 6c 69 6b 65  r*)&sqlite3_like
246b0 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b  _count, TCL_LINK
246c0 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
246d0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
246e0 6c 69 74 65 5f 69 6e 74 65 72 72 75 70 74 5f 63  lite_interrupt_c
246f0 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63  ount", .      (c
24700 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 69 6e  har*)&sqlite3_in
24710 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2c 20 54  terrupt_count, T
24720 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20  CL_LINK_INT);.  
24730 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65  Tcl_LinkVar(inte
24740 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 65 6e  rp, "sqlite_open
24750 5f 66 69 6c 65 5f 63 6f 75 6e 74 22 2c 20 0a 20  _file_count", . 
24760 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
24770 69 74 65 33 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63  ite3_open_file_c
24780 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  ount, TCL_LINK_I
24790 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
247a0 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
247b0 74 65 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65 22  te_current_time"
247c0 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  , .      (char*)
247d0 26 73 71 6c 69 74 65 33 5f 63 75 72 72 65 6e 74  &sqlite3_current
247e0 5f 74 69 6d 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  _time, TCL_LINK_
247f0 49 4e 54 29 3b 0a 23 69 66 20 53 51 4c 49 54 45  INT);.#if SQLITE
24800 5f 4f 53 5f 55 4e 49 58 20 26 26 20 64 65 66 69  _OS_UNIX && defi
24810 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 20  ned(__APPLE__). 
24820 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
24830 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 68 6f 73  erp, "sqlite_hos
24840 74 69 64 5f 6e 75 6d 22 2c 20 0a 20 20 20 20 20  tid_num", .     
24850 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
24860 5f 68 6f 73 74 69 64 5f 6e 75 6d 2c 20 54 43 4c  _hostid_num, TCL
24870 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64  _LINK_INT);.#end
24880 69 66 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  if.  Tcl_LinkVar
24890 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
248a0 33 5f 78 66 65 72 6f 70 74 5f 63 6f 75 6e 74 22  3_xferopt_count"
248b0 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
248c0 73 71 6c 69 74 65 33 5f 78 66 65 72 6f 70 74 5f  sqlite3_xferopt_
248d0 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
248e0 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
248f0 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
24900 69 74 65 33 5f 70 61 67 65 72 5f 72 65 61 64 64  ite3_pager_readd
24910 62 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20  b_count",.      
24920 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
24930 70 61 67 65 72 5f 72 65 61 64 64 62 5f 63 6f 75  pager_readdb_cou
24940 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  nt, TCL_LINK_INT
24950 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
24960 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
24970 33 5f 70 61 67 65 72 5f 77 72 69 74 65 64 62 5f  3_pager_writedb_
24980 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63  count",.      (c
24990 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 70 61  har*)&sqlite3_pa
249a0 67 65 72 5f 77 72 69 74 65 64 62 5f 63 6f 75 6e  ger_writedb_coun
249b0 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
249c0 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
249d0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33  interp, "sqlite3
249e0 5f 70 61 67 65 72 5f 77 72 69 74 65 6a 5f 63 6f  _pager_writej_co
249f0 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61  unt",.      (cha
24a00 72 2a 29 26 73 71 6c 69 74 65 33 5f 70 61 67 65  r*)&sqlite3_page
24a10 72 5f 77 72 69 74 65 6a 5f 63 6f 75 6e 74 2c 20  r_writej_count, 
24a20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23  TCL_LINK_INT);.#
24a30 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
24a40 49 54 5f 55 54 46 31 36 0a 20 20 54 63 6c 5f 4c  IT_UTF16.  Tcl_L
24a50 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
24a60 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e 67  unaligned_string
24a70 5f 63 6f 75 6e 74 65 72 22 2c 0a 20 20 20 20 20  _counter",.     
24a80 20 28 63 68 61 72 2a 29 26 75 6e 61 6c 69 67 6e   (char*)&unalign
24a90 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65  ed_string_counte
24aa0 72 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  r, TCL_LINK_INT)
24ab0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
24ac0 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20  ined(__linux__) 
24ad0 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
24ae0 45 5f 54 45 53 54 29 20 26 26 20 53 51 4c 49 54  E_TEST) && SQLIT
24af0 45 5f 54 48 52 45 41 44 53 41 46 45 0a 20 20 54  E_THREADSAFE.  T
24b00 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
24b10 70 2c 20 22 74 68 72 65 61 64 73 4f 76 65 72 72  p, "threadsOverr
24b20 69 64 65 45 61 63 68 4f 74 68 65 72 73 4c 6f 63  ideEachOthersLoc
24b30 6b 73 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  ks",.      (char
24b40 2a 29 26 74 68 72 65 61 64 73 4f 76 65 72 72 69  *)&threadsOverri
24b50 64 65 45 61 63 68 4f 74 68 65 72 73 4c 6f 63 6b  deEachOthersLock
24b60 73 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  s, TCL_LINK_INT)
24b70 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ;.#endif.#ifndef
24b80 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
24b90 31 36 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  16.  Tcl_LinkVar
24ba0 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
24bb0 5f 6c 61 73 74 5f 6e 65 65 64 65 64 5f 63 6f 6c  _last_needed_col
24bc0 6c 61 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 28  lation",.      (
24bd0 63 68 61 72 2a 29 26 70 7a 4e 65 65 64 65 64 43  char*)&pzNeededC
24be0 6f 6c 6c 61 74 69 6f 6e 2c 20 54 43 4c 5f 4c 49  ollation, TCL_LI
24bf0 4e 4b 5f 53 54 52 49 4e 47 7c 54 43 4c 5f 4c 49  NK_STRING|TCL_LI
24c00 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23  NK_READ_ONLY);.#
24c10 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
24c20 5f 4f 53 5f 57 49 4e 0a 20 20 54 63 6c 5f 4c 69  _OS_WIN.  Tcl_Li
24c30 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
24c40 71 6c 69 74 65 5f 6f 73 5f 74 79 70 65 22 2c 0a  qlite_os_type",.
24c50 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
24c60 6c 69 74 65 33 5f 6f 73 5f 74 79 70 65 2c 20 54  lite3_os_type, T
24c70 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65  CL_LINK_INT);.#e
24c80 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
24c90 54 45 5f 54 45 53 54 0a 20 20 54 63 6c 5f 4c 69  TE_TEST.  Tcl_Li
24ca0 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
24cb0 71 6c 69 74 65 5f 71 75 65 72 79 5f 70 6c 61 6e  qlite_query_plan
24cc0 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
24cd0 26 71 75 65 72 79 5f 70 6c 61 6e 2c 20 54 43 4c  &query_plan, TCL
24ce0 5f 4c 49 4e 4b 5f 53 54 52 49 4e 47 7c 54 43 4c  _LINK_STRING|TCL
24cf0 5f 4c 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29  _LINK_READ_ONLY)
24d00 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
24d10 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 54  SQLITE_DEBUG.  T
24d20 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
24d30 70 2c 20 22 73 71 6c 69 74 65 5f 61 64 64 6f 70  p, "sqlite_addop
24d40 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 20 20 28  _trace",.      (
24d50 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 56 64  char*)&sqlite3Vd
24d60 62 65 41 64 64 6f 70 54 72 61 63 65 2c 20 54 43  beAddopTrace, TC
24d70 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54  L_LINK_INT);.  T
24d80 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
24d90 70 2c 20 22 73 71 6c 69 74 65 5f 77 68 65 72 65  p, "sqlite_where
24da0 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 20 20 28  _trace",.      (
24db0 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 57 68  char*)&sqlite3Wh
24dc0 65 72 65 54 72 61 63 65 2c 20 54 43 4c 5f 4c 49  ereTrace, TCL_LI
24dd0 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c  NK_INT);.  Tcl_L
24de0 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
24df0 73 71 6c 69 74 65 5f 6f 73 5f 74 72 61 63 65 22  sqlite_os_trace"
24e00 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
24e10 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 2c 20  sqlite3OSTrace, 
24e20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23  TCL_LINK_INT);.#
24e30 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
24e40 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f  LITE_OMIT_DISKIO
24e50 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
24e60 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f  nterp, "sqlite_o
24e70 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 22 2c 0a  pentemp_count",.
24e80 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
24e90 6c 69 74 65 33 5f 6f 70 65 6e 74 65 6d 70 5f 63  lite3_opentemp_c
24ea0 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  ount, TCL_LINK_I
24eb0 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 20 20 54 63  NT);.#endif.  Tc
24ec0 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
24ed0 2c 20 22 73 71 6c 69 74 65 5f 73 74 61 74 69 63  , "sqlite_static
24ee0 5f 62 69 6e 64 5f 76 61 6c 75 65 22 2c 0a 20 20  _bind_value",.  
24ef0 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
24f00 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76  te_static_bind_v
24f10 61 6c 75 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53  alue, TCL_LINK_S
24f20 54 52 49 4e 47 29 3b 0a 20 20 54 63 6c 5f 4c 69  TRING);.  Tcl_Li
24f30 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
24f40 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e  qlite_static_bin
24f50 64 5f 6e 62 79 74 65 22 2c 0a 20 20 20 20 20 20  d_nbyte",.      
24f60 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 5f 73  (char*)&sqlite_s
24f70 74 61 74 69 63 5f 62 69 6e 64 5f 6e 62 79 74 65  tatic_bind_nbyte
24f80 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
24f90 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
24fa0 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 74  nterp, "sqlite_t
24fb0 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 22 2c 0a  emp_directory",.
24fc0 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
24fd0 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
24fe0 74 6f 72 79 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53  tory, TCL_LINK_S
24ff0 54 52 49 4e 47 29 3b 0a 20 20 54 63 6c 5f 4c 69  TRING);.  Tcl_Li
25000 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 62  nkVar(interp, "b
25010 69 74 6d 61 73 6b 5f 73 69 7a 65 22 2c 0a 20 20  itmask_size",.  
25020 20 20 20 20 28 63 68 61 72 2a 29 26 62 69 74 6d      (char*)&bitm
25030 61 73 6b 5f 73 69 7a 65 2c 20 54 43 4c 5f 4c 49  ask_size, TCL_LI
25040 4e 4b 5f 49 4e 54 7c 54 43 4c 5f 4c 49 4e 4b 5f  NK_INT|TCL_LINK_
25050 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 20 20 54 63  READ_ONLY);.  Tc
25060 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
25070 2c 20 22 73 71 6c 69 74 65 5f 73 79 6e 63 5f 63  , "sqlite_sync_c
25080 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68  ount",.      (ch
25090 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 73 79 6e  ar*)&sqlite3_syn
250a0 63 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e  c_count, TCL_LIN
250b0 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69  K_INT);.  Tcl_Li
250c0 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
250d0 71 6c 69 74 65 5f 66 75 6c 6c 73 79 6e 63 5f 63  qlite_fullsync_c
250e0 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68  ount",.      (ch
250f0 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 66 75 6c  ar*)&sqlite3_ful
25100 6c 73 79 6e 63 5f 63 6f 75 6e 74 2c 20 54 43 4c  lsync_count, TCL
25110 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 69 66 20  _LINK_INT);.#if 
25120 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
25130 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64  NABLE_FTS3) && d
25140 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
25150 53 54 29 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  ST).  Tcl_LinkVa
25160 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
25170 65 5f 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70 61  e_fts3_enable_pa
25180 72 65 6e 74 68 65 73 65 73 22 2c 0a 20 20 20 20  rentheses",.    
25190 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
251a0 33 5f 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70 61  3_fts3_enable_pa
251b0 72 65 6e 74 68 65 73 65 73 2c 20 54 43 4c 5f 4c  rentheses, TCL_L
251c0 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66  INK_INT);.#endif
251d0 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
251e0 3b 0a 7d 0a                                      ;.}.