/ Hex Artifact Content
Login

Artifact 8d65857cd33db9baa6f276ce6fcd76c98c798261:


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 2f 0a 23  te library..*/.#
0220: 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 49  include "sqliteI
0230: 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  nt.h".#include "
0240: 74 63 6c 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  tcl.h".#include 
0250: 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c  <stdlib.h>.#incl
0260: 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 0a  ude <string.h>..
0270: 2f 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 20  /*.** This is a 
0280: 63 6f 70 79 20 6f 66 20 74 68 65 20 66 69 72 73  copy of the firs
0290: 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 53 71  t part of the Sq
02a0: 6c 69 74 65 44 62 20 73 74 72 75 63 74 75 72 65  liteDb structure
02b0: 20 69 6e 20 0a 2a 2a 20 74 63 6c 73 71 6c 69 74   in .** tclsqlit
02c0: 65 2e 63 2e 20 20 57 65 20 6e 65 65 64 20 69 74  e.c.  We need it
02d0: 20 68 65 72 65 20 73 6f 20 74 68 61 74 20 74 68   here so that th
02e0: 65 20 67 65 74 5f 73 71 6c 69 74 65 5f 70 6f 69  e get_sqlite_poi
02f0: 6e 74 65 72 20 72 6f 75 74 69 6e 65 0a 2a 2a 20  nter routine.** 
0300: 63 61 6e 20 65 78 74 72 61 63 74 20 74 68 65 20  can extract the 
0310: 73 71 6c 69 74 65 33 2a 20 70 6f 69 6e 74 65 72  sqlite3* pointer
0320: 20 66 72 6f 6d 20 61 6e 20 65 78 69 73 74 69 6e   from an existin
0330: 67 20 54 63 6c 20 53 51 4c 69 74 65 0a 2a 2a 20  g Tcl SQLite.** 
0340: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  connection..*/.s
0350: 74 72 75 63 74 20 53 71 6c 69 74 65 44 62 20 7b  truct SqliteDb {
0360: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
0370: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  };../*.** Conver
0380: 74 20 74 65 78 74 20 67 65 6e 65 72 61 74 65 64  t text generated
0390: 20 62 79 20 74 68 65 20 22 25 70 22 20 63 6f 6e   by the "%p" con
03a0: 76 65 72 73 69 6f 6e 20 66 6f 72 6d 61 74 20 62  version format b
03b0: 61 63 6b 20 69 6e 74 6f 0a 2a 2a 20 61 20 70 6f  ack into.** a po
03c0: 69 6e 74 65 72 2e 0a 2a 2f 0a 73 74 61 74 69 63  inter..*/.static
03d0: 20 69 6e 74 20 74 65 73 74 48 65 78 54 6f 49 6e   int testHexToIn
03e0: 74 28 69 6e 74 20 68 29 7b 0a 20 20 69 66 28 20  t(int h){.  if( 
03f0: 68 3e 3d 27 30 27 20 26 26 20 68 3c 3d 27 39 27  h>='0' && h<='9'
0400: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 68   ){.    return h
0410: 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20   - '0';.  }else 
0420: 69 66 28 20 68 3e 3d 27 61 27 20 26 26 20 68 3c  if( h>='a' && h<
0430: 3d 27 66 27 20 29 7b 0a 20 20 20 20 72 65 74 75  ='f' ){.    retu
0440: 72 6e 20 68 20 2d 20 27 61 27 20 2b 20 31 30 3b  rn h - 'a' + 10;
0450: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
0460: 73 65 72 74 28 20 68 3e 3d 27 41 27 20 26 26 20  sert( h>='A' && 
0470: 68 3c 3d 27 46 27 20 29 3b 0a 20 20 20 20 72 65  h<='F' );.    re
0480: 74 75 72 6e 20 68 20 2d 20 27 41 27 20 2b 20 31  turn h - 'A' + 1
0490: 30 3b 0a 20 20 7d 0a 7d 0a 76 6f 69 64 20 2a 73  0;.  }.}.void *s
04a0: 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
04b0: 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  Ptr(const char *
04c0: 7a 29 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20  z){.  void *p;. 
04d0: 20 75 36 34 20 76 3b 0a 20 20 75 33 32 20 76 32   u64 v;.  u32 v2
04e0: 3b 0a 20 20 69 66 28 20 7a 5b 30 5d 3d 3d 27 30  ;.  if( z[0]=='0
04f0: 27 20 26 26 20 7a 5b 31 5d 3d 3d 27 78 27 20 29  ' && z[1]=='x' )
0500: 7b 0a 20 20 20 20 7a 20 2b 3d 20 32 3b 0a 20 20  {.    z += 2;.  
0510: 7d 0a 20 20 76 20 3d 20 30 3b 0a 20 20 77 68 69  }.  v = 0;.  whi
0520: 6c 65 28 20 2a 7a 20 29 7b 0a 20 20 20 20 76 20  le( *z ){.    v 
0530: 3d 20 28 76 3c 3c 34 29 20 2b 20 74 65 73 74 48  = (v<<4) + testH
0540: 65 78 54 6f 49 6e 74 28 2a 7a 29 3b 0a 20 20 20  exToInt(*z);.   
0550: 20 7a 2b 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20   z++;.  }.  if( 
0560: 73 69 7a 65 6f 66 28 70 29 3d 3d 73 69 7a 65 6f  sizeof(p)==sizeo
0570: 66 28 76 29 20 29 7b 0a 20 20 20 20 6d 65 6d 63  f(v) ){.    memc
0580: 70 79 28 26 70 2c 20 26 76 2c 20 73 69 7a 65 6f  py(&p, &v, sizeo
0590: 66 28 70 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  f(p));.  }else{.
05a0: 20 20 20 20 61 73 73 65 72 74 28 20 73 69 7a 65      assert( size
05b0: 6f 66 28 70 29 3d 3d 73 69 7a 65 6f 66 28 76 32  of(p)==sizeof(v2
05c0: 29 20 29 3b 0a 20 20 20 20 76 32 20 3d 20 28 75  ) );.    v2 = (u
05d0: 33 32 29 76 3b 0a 20 20 20 20 6d 65 6d 63 70 79  32)v;.    memcpy
05e0: 28 26 70 2c 20 26 76 32 2c 20 73 69 7a 65 6f 66  (&p, &v2, sizeof
05f0: 28 70 29 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  (p));.  }.  retu
0600: 72 6e 20 70 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  rn p;.}.../*.** 
0610: 41 20 54 43 4c 20 63 6f 6d 6d 61 6e 64 20 74 68  A TCL command th
0620: 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  at returns the a
0630: 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 73 71  ddress of the sq
0640: 6c 69 74 65 2a 20 70 6f 69 6e 74 65 72 0a 2a 2a  lite* pointer.**
0650: 20 66 6f 72 20 61 6e 20 73 71 6c 69 74 65 20 63   for an sqlite c
0660: 6f 6e 6e 65 63 74 69 6f 6e 20 69 6e 73 74 61 6e  onnection instan
0670: 63 65 2e 20 20 42 61 64 20 74 68 69 6e 67 73 20  ce.  Bad things 
0680: 68 61 70 70 65 6e 20 69 66 20 74 68 65 0a 2a 2a  happen if the.**
0690: 20 69 6e 70 75 74 20 69 73 20 6e 6f 74 20 61 6e   input is not an
06a0: 20 73 71 6c 69 74 65 20 63 6f 6e 6e 65 63 74 69   sqlite connecti
06b0: 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  on..*/.static in
06c0: 74 20 67 65 74 5f 73 71 6c 69 74 65 5f 70 6f 69  t get_sqlite_poi
06d0: 6e 74 65 72 28 0a 20 20 76 6f 69 64 20 2a 20 63  nter(.  void * c
06e0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
06f0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
0700: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
0710: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
0720: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 74 72 75 63 74  jv[].){.  struct
0730: 20 53 71 6c 69 74 65 44 62 20 2a 70 3b 0a 20 20   SqliteDb *p;.  
0740: 54 63 6c 5f 43 6d 64 49 6e 66 6f 20 63 6d 64 49  Tcl_CmdInfo cmdI
0750: 6e 66 6f 3b 0a 20 20 63 68 61 72 20 7a 42 75 66  nfo;.  char zBuf
0760: 5b 31 30 30 5d 3b 0a 20 20 69 66 28 20 6f 62 6a  [100];.  if( obj
0770: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
0780: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
0790: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53  erp, 1, objv, "S
07a0: 51 4c 49 54 45 2d 43 4f 4e 4e 45 43 54 49 4f 4e  QLITE-CONNECTION
07b0: 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
07c0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
07d0: 69 66 28 20 21 54 63 6c 5f 47 65 74 43 6f 6d 6d  if( !Tcl_GetComm
07e0: 61 6e 64 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20  andInfo(interp, 
07f0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
0800: 6a 76 5b 31 5d 29 2c 20 26 63 6d 64 49 6e 66 6f  jv[1]), &cmdInfo
0810: 29 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  ) ){.    Tcl_App
0820: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
0830: 2c 20 22 63 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66  , "command not f
0840: 6f 75 6e 64 3a 20 22 2c 0a 20 20 20 20 20 20 20  ound: ",.       
0850: 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
0860: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 28 63 68 61  g(objv[1]), (cha
0870: 72 2a 29 30 29 3b 0a 20 20 20 20 72 65 74 75 72  r*)0);.    retur
0880: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
0890: 0a 20 20 70 20 3d 20 28 73 74 72 75 63 74 20 53  .  p = (struct S
08a0: 71 6c 69 74 65 44 62 2a 29 63 6d 64 49 6e 66 6f  qliteDb*)cmdInfo
08b0: 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74 61 3b 0a  .objClientData;.
08c0: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
08d0: 22 25 70 22 2c 20 70 2d 3e 64 62 29 3b 0a 20 20  "%p", p->db);.  
08e0: 69 66 28 20 73 74 72 6e 63 6d 70 28 7a 42 75 66  if( strncmp(zBuf
08f0: 2c 22 30 78 22 2c 32 29 20 29 7b 0a 20 20 20 20  ,"0x",2) ){.    
0900: 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 30  sprintf(zBuf, "0
0910: 78 25 70 22 2c 20 70 2d 3e 64 62 29 3b 0a 20 20  x%p", p->db);.  
0920: 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65  }.  Tcl_AppendRe
0930: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75  sult(interp, zBu
0940: 66 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  f, 0);.  return 
0950: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
0960: 20 44 65 63 6f 64 65 20 61 20 70 6f 69 6e 74 65   Decode a pointe
0970: 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 20  r to an sqlite3 
0980: 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 69 6e 74 20 67  object..*/.int g
0990: 65 74 44 62 50 6f 69 6e 74 65 72 28 54 63 6c 5f  etDbPointer(Tcl_
09a0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
09b0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 2c 20  const char *zA, 
09c0: 73 71 6c 69 74 65 33 20 2a 2a 70 70 44 62 29 7b  sqlite3 **ppDb){
09d0: 0a 20 20 73 74 72 75 63 74 20 53 71 6c 69 74 65  .  struct Sqlite
09e0: 44 62 20 2a 70 3b 0a 20 20 54 63 6c 5f 43 6d 64  Db *p;.  Tcl_Cmd
09f0: 49 6e 66 6f 20 63 6d 64 49 6e 66 6f 3b 0a 20 20  Info cmdInfo;.  
0a00: 69 66 28 20 54 63 6c 5f 47 65 74 43 6f 6d 6d 61  if( Tcl_GetComma
0a10: 6e 64 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 7a  ndInfo(interp, z
0a20: 41 2c 20 26 63 6d 64 49 6e 66 6f 29 20 29 7b 0a  A, &cmdInfo) ){.
0a30: 20 20 20 20 70 20 3d 20 28 73 74 72 75 63 74 20      p = (struct 
0a40: 53 71 6c 69 74 65 44 62 2a 29 63 6d 64 49 6e 66  SqliteDb*)cmdInf
0a50: 6f 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74 61 3b  o.objClientData;
0a60: 0a 20 20 20 20 2a 70 70 44 62 20 3d 20 70 2d 3e  .    *ppDb = p->
0a70: 64 62 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  db;.  }else{.   
0a80: 20 2a 70 70 44 62 20 3d 20 28 73 71 6c 69 74 65   *ppDb = (sqlite
0a90: 33 2a 29 73 71 6c 69 74 65 33 54 65 73 74 54 65  3*)sqlite3TestTe
0aa0: 78 74 54 6f 50 74 72 28 7a 41 29 3b 0a 20 20 7d  xtToPtr(zA);.  }
0ab0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
0ac0: 3b 0a 7d 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72  ;.}...const char
0ad0: 20 2a 73 71 6c 69 74 65 33 54 65 73 74 45 72 72   *sqlite3TestErr
0ae0: 6f 72 4e 61 6d 65 28 69 6e 74 20 72 63 29 7b 0a  orName(int rc){.
0af0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
0b00: 61 6d 65 20 3d 20 30 3b 0a 20 20 73 77 69 74 63  ame = 0;.  switc
0b10: 68 28 20 72 63 20 29 7b 0a 20 20 20 20 63 61 73  h( rc ){.    cas
0b20: 65 20 53 51 4c 49 54 45 5f 4f 4b 3a 20 20 20 20  e SQLITE_OK:    
0b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0b40: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4f 4b  ame = "SQLITE_OK
0b50: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ";              
0b60: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0b70: 65 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3a 20  e SQLITE_ERROR: 
0b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0b90: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 45 52  ame = "SQLITE_ER
0ba0: 52 4f 52 22 3b 20 20 20 20 20 20 20 20 20 20 20  ROR";           
0bb0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0bc0: 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 4e 41  e SQLITE_INTERNA
0bd0: 4c 3a 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e  L:            zN
0be0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4e  ame = "SQLITE_IN
0bf0: 54 45 52 4e 41 4c 22 3b 20 20 20 20 20 20 20 20  TERNAL";        
0c00: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0c10: 65 20 53 51 4c 49 54 45 5f 50 45 52 4d 3a 20 20  e SQLITE_PERM:  
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0c30: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 50 45  ame = "SQLITE_PE
0c40: 52 4d 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  RM";            
0c50: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0c60: 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3a 20  e SQLITE_ABORT: 
0c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0c80: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 41 42  ame = "SQLITE_AB
0c90: 4f 52 54 22 3b 20 20 20 20 20 20 20 20 20 20 20  ORT";           
0ca0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0cb0: 65 20 53 51 4c 49 54 45 5f 42 55 53 59 3a 20 20  e SQLITE_BUSY:  
0cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0cd0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 42 55  ame = "SQLITE_BU
0ce0: 53 59 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  SY";            
0cf0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0d00: 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3a  e SQLITE_LOCKED:
0d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0d20: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4c 4f  ame = "SQLITE_LO
0d30: 43 4b 45 44 22 3b 20 20 20 20 20 20 20 20 20 20  CKED";          
0d40: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0d50: 65 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 5f  e SQLITE_LOCKED_
0d60: 53 48 41 52 45 44 43 41 43 48 45 3a 20 20 7a 4e  SHAREDCACHE:  zN
0d70: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4c 4f  ame = "SQLITE_LO
0d80: 43 4b 45 44 5f 53 48 41 52 45 44 43 41 43 48 45  CKED_SHAREDCACHE
0d90: 22 3b 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73  ";break;.    cas
0da0: 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3a 20  e SQLITE_NOMEM: 
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0dc0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f  ame = "SQLITE_NO
0dd0: 4d 45 4d 22 3b 20 20 20 20 20 20 20 20 20 20 20  MEM";           
0de0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0df0: 65 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c  e SQLITE_READONL
0e00: 59 3a 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e  Y:            zN
0e10: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 45  ame = "SQLITE_RE
0e20: 41 44 4f 4e 4c 59 22 3b 20 20 20 20 20 20 20 20  ADONLY";        
0e30: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0e40: 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  e SQLITE_INTERRU
0e50: 50 54 3a 20 20 20 20 20 20 20 20 20 20 20 7a 4e  PT:           zN
0e60: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4e  ame = "SQLITE_IN
0e70: 54 45 52 52 55 50 54 22 3b 20 20 20 20 20 20 20  TERRUPT";       
0e80: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0e90: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 3a 20  e SQLITE_IOERR: 
0ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0eb0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
0ec0: 45 52 52 22 3b 20 20 20 20 20 20 20 20 20 20 20  ERR";           
0ed0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0ee0: 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
0ef0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e  :             zN
0f00: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f  ame = "SQLITE_CO
0f10: 52 52 55 50 54 22 3b 20 20 20 20 20 20 20 20 20  RRUPT";         
0f20: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0f30: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e  e SQLITE_NOTFOUN
0f40: 44 3a 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e  D:            zN
0f50: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f  ame = "SQLITE_NO
0f60: 54 46 4f 55 4e 44 22 3b 20 20 20 20 20 20 20 20  TFOUND";        
0f70: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0f80: 65 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3a 20 20  e SQLITE_FULL:  
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
0fa0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 46 55  ame = "SQLITE_FU
0fb0: 4c 4c 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  LL";            
0fc0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
0fd0: 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45  e SQLITE_CANTOPE
0fe0: 4e 3a 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e  N:            zN
0ff0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 41  ame = "SQLITE_CA
1000: 4e 54 4f 50 45 4e 22 3b 20 20 20 20 20 20 20 20  NTOPEN";        
1010: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1020: 65 20 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f  e SQLITE_PROTOCO
1030: 4c 3a 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e  L:            zN
1040: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 50 52  ame = "SQLITE_PR
1050: 4f 54 4f 43 4f 4c 22 3b 20 20 20 20 20 20 20 20  OTOCOL";        
1060: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1070: 65 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 3a 20  e SQLITE_EMPTY: 
1080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1090: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 45 4d  ame = "SQLITE_EM
10a0: 50 54 59 22 3b 20 20 20 20 20 20 20 20 20 20 20  PTY";           
10b0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
10c0: 65 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3a  e SQLITE_SCHEMA:
10d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
10e0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 53 43  ame = "SQLITE_SC
10f0: 48 45 4d 41 22 3b 20 20 20 20 20 20 20 20 20 20  HEMA";          
1100: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1110: 65 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3a  e SQLITE_TOOBIG:
1120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1130: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 54 4f  ame = "SQLITE_TO
1140: 4f 42 49 47 22 3b 20 20 20 20 20 20 20 20 20 20  OBIG";          
1150: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1160: 65 20 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  e SQLITE_CONSTRA
1170: 49 4e 54 3a 20 20 20 20 20 20 20 20 20 20 7a 4e  INT:          zN
1180: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 43 4f  ame = "SQLITE_CO
1190: 4e 53 54 52 41 49 4e 54 22 3b 20 20 20 20 20 20  NSTRAINT";      
11a0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
11b0: 65 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  e SQLITE_MISMATC
11c0: 48 3a 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e  H:            zN
11d0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4d 49  ame = "SQLITE_MI
11e0: 53 4d 41 54 43 48 22 3b 20 20 20 20 20 20 20 20  SMATCH";        
11f0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1200: 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 3a  e SQLITE_MISUSE:
1210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1220: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4d 49  ame = "SQLITE_MI
1230: 53 55 53 45 22 3b 20 20 20 20 20 20 20 20 20 20  SUSE";          
1240: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1250: 65 20 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 3a 20  e SQLITE_NOLFS: 
1260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1270: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f  ame = "SQLITE_NO
1280: 4c 46 53 22 3b 20 20 20 20 20 20 20 20 20 20 20  LFS";           
1290: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
12a0: 65 20 53 51 4c 49 54 45 5f 41 55 54 48 3a 20 20  e SQLITE_AUTH:  
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
12c0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 41 55  ame = "SQLITE_AU
12d0: 54 48 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  TH";            
12e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
12f0: 65 20 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54 3a  e SQLITE_FORMAT:
1300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1310: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 46 4f  ame = "SQLITE_FO
1320: 52 4d 41 54 22 3b 20 20 20 20 20 20 20 20 20 20  RMAT";          
1330: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1340: 65 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 3a 20  e SQLITE_RANGE: 
1350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1360: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 41  ame = "SQLITE_RA
1370: 4e 47 45 22 3b 20 20 20 20 20 20 20 20 20 20 20  NGE";           
1380: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1390: 65 20 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42 3a  e SQLITE_NOTADB:
13a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
13b0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 4e 4f  ame = "SQLITE_NO
13c0: 54 41 44 42 22 3b 20 20 20 20 20 20 20 20 20 20  TADB";          
13d0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
13e0: 65 20 53 51 4c 49 54 45 5f 52 4f 57 3a 20 20 20  e SQLITE_ROW:   
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1400: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 52 4f  ame = "SQLITE_RO
1410: 57 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  W";             
1420: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1430: 65 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3a 20 20  e SQLITE_DONE:  
1440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e                zN
1450: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 44 4f  ame = "SQLITE_DO
1460: 4e 45 22 3b 20 20 20 20 20 20 20 20 20 20 20 20  NE";            
1470: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1480: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 52  e SQLITE_IOERR_R
1490: 45 41 44 3a 20 20 20 20 20 20 20 20 20 20 7a 4e  EAD:          zN
14a0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
14b0: 45 52 52 5f 52 45 41 44 22 3b 20 20 20 20 20 20  ERR_READ";      
14c0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
14d0: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 53  e SQLITE_IOERR_S
14e0: 48 4f 52 54 5f 52 45 41 44 3a 20 20 20 20 7a 4e  HORT_READ:    zN
14f0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
1500: 45 52 52 5f 53 48 4f 52 54 5f 52 45 41 44 22 3b  ERR_SHORT_READ";
1510: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1520: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 57  e SQLITE_IOERR_W
1530: 52 49 54 45 3a 20 20 20 20 20 20 20 20 20 7a 4e  RITE:         zN
1540: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
1550: 45 52 52 5f 57 52 49 54 45 22 3b 20 20 20 20 20  ERR_WRITE";     
1560: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1570: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 46  e SQLITE_IOERR_F
1580: 53 59 4e 43 3a 20 20 20 20 20 20 20 20 20 7a 4e  SYNC:         zN
1590: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
15a0: 45 52 52 5f 46 53 59 4e 43 22 3b 20 20 20 20 20  ERR_FSYNC";     
15b0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
15c0: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 44  e SQLITE_IOERR_D
15d0: 49 52 5f 46 53 59 4e 43 3a 20 20 20 20 20 7a 4e  IR_FSYNC:     zN
15e0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
15f0: 45 52 52 5f 44 49 52 5f 46 53 59 4e 43 22 3b 20  ERR_DIR_FSYNC"; 
1600: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1610: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 54  e SQLITE_IOERR_T
1620: 52 55 4e 43 41 54 45 3a 20 20 20 20 20 20 7a 4e  RUNCATE:      zN
1630: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
1640: 45 52 52 5f 54 52 55 4e 43 41 54 45 22 3b 20 20  ERR_TRUNCATE";  
1650: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1660: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 46  e SQLITE_IOERR_F
1670: 53 54 41 54 3a 20 20 20 20 20 20 20 20 20 7a 4e  STAT:         zN
1680: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
1690: 45 52 52 5f 46 53 54 41 54 22 3b 20 20 20 20 20  ERR_FSTAT";     
16a0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
16b0: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 55  e SQLITE_IOERR_U
16c0: 4e 4c 4f 43 4b 3a 20 20 20 20 20 20 20 20 7a 4e  NLOCK:        zN
16d0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
16e0: 45 52 52 5f 55 4e 4c 4f 43 4b 22 3b 20 20 20 20  ERR_UNLOCK";    
16f0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1700: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 52  e SQLITE_IOERR_R
1710: 44 4c 4f 43 4b 3a 20 20 20 20 20 20 20 20 7a 4e  DLOCK:        zN
1720: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
1730: 45 52 52 5f 52 44 4c 4f 43 4b 22 3b 20 20 20 20  ERR_RDLOCK";    
1740: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1750: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 44  e SQLITE_IOERR_D
1760: 45 4c 45 54 45 3a 20 20 20 20 20 20 20 20 7a 4e  ELETE:        zN
1770: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
1780: 45 52 52 5f 44 45 4c 45 54 45 22 3b 20 20 20 20  ERR_DELETE";    
1790: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
17a0: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 42  e SQLITE_IOERR_B
17b0: 4c 4f 43 4b 45 44 3a 20 20 20 20 20 20 20 7a 4e  LOCKED:       zN
17c0: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
17d0: 45 52 52 5f 42 4c 4f 43 4b 45 44 22 3b 20 20 20  ERR_BLOCKED";   
17e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
17f0: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  e SQLITE_IOERR_N
1800: 4f 4d 45 4d 3a 20 20 20 20 20 20 20 20 20 7a 4e  OMEM:         zN
1810: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
1820: 45 52 52 5f 4e 4f 4d 45 4d 22 3b 20 20 20 20 20  ERR_NOMEM";     
1830: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1840: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 41  e SQLITE_IOERR_A
1850: 43 43 45 53 53 3a 20 20 20 20 20 20 20 20 7a 4e  CCESS:        zN
1860: 61 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f  ame = "SQLITE_IO
1870: 45 52 52 5f 41 43 43 45 53 53 22 3b 20 20 20 20  ERR_ACCESS";    
1880: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
1890: 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 43  e SQLITE_IOERR_C
18a0: 48 45 43 4b 52 45 53 45 52 56 45 44 4c 4f 43 4b  HECKRESERVEDLOCK
18b0: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
18c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d0: 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49 54 45   zName = "SQLITE
18e0: 5f 49 4f 45 52 52 5f 43 48 45 43 4b 52 45 53 45  _IOERR_CHECKRESE
18f0: 52 56 45 44 4c 4f 43 4b 22 3b 20 62 72 65 61 6b  RVEDLOCK"; break
1900: 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1910: 45 5f 49 4f 45 52 52 5f 4c 4f 43 4b 3a 20 20 20  E_IOERR_LOCK:   
1920: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1930: 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4c 4f 43  SQLITE_IOERR_LOC
1940: 4b 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  K";        break
1950: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
1960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1970: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
1980: 53 51 4c 49 54 45 5f 55 6e 6b 6e 6f 77 6e 22 3b  SQLITE_Unknown";
1990: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
19a0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a  ;.  }.  return z
19b0: 4e 61 6d 65 3b 0a 7d 0a 23 64 65 66 69 6e 65 20  Name;.}.#define 
19c0: 74 31 45 72 72 6f 72 4e 61 6d 65 20 73 71 6c 69  t1ErrorName sqli
19d0: 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65  te3TestErrorName
19e0: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  ../*.** Convert 
19f0: 61 6e 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a  an sqlite3_stmt*
1a00: 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33   into an sqlite3
1a10: 2a 2e 20 20 54 68 69 73 20 64 65 70 65 6e 64 73  *.  This depends
1a20: 20 6f 6e 20 74 68 65 0a 2a 2a 20 66 61 63 74 20   on the.** fact 
1a30: 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33  that the sqlite3
1a40: 2a 20 69 73 20 74 68 65 20 66 69 72 73 74 20 66  * is the first f
1a50: 69 65 6c 64 20 69 6e 20 74 68 65 20 56 64 62 65  ield in the Vdbe
1a60: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 23   structure..*/.#
1a70: 64 65 66 69 6e 65 20 53 74 6d 74 54 6f 44 62 28  define StmtToDb(
1a80: 58 29 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f  X)   sqlite3_db_
1a90: 68 61 6e 64 6c 65 28 58 29 0a 0a 2f 2a 0a 2a 2a  handle(X)../*.**
1aa0: 20 43 68 65 63 6b 20 61 20 72 65 74 75 72 6e 20   Check a return 
1ab0: 76 61 6c 75 65 20 74 6f 20 6d 61 6b 65 20 73 75  value to make su
1ac0: 72 65 20 69 74 20 61 67 72 65 65 73 20 77 69 74  re it agrees wit
1ad0: 68 20 74 68 65 20 72 65 73 75 6c 74 73 0a 2a 2a  h the results.**
1ae0: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 65 72   from sqlite3_er
1af0: 72 63 6f 64 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71  rcode..*/.int sq
1b00: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
1b10: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74  (Tcl_Interp *int
1b20: 65 72 70 2c 20 73 71 6c 69 74 65 33 20 2a 64 62  erp, sqlite3 *db
1b30: 2c 20 69 6e 74 20 72 63 29 7b 0a 20 20 69 66 28  , int rc){.  if(
1b40: 20 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64 73   sqlite3_threads
1b50: 61 66 65 28 29 3d 3d 30 20 26 26 20 72 63 21 3d  afe()==0 && rc!=
1b60: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 26 26  SQLITE_MISUSE &&
1b70: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20   rc!=SQLITE_OK. 
1b80: 20 20 26 26 20 73 71 6c 69 74 65 33 5f 65 72 72    && sqlite3_err
1b90: 63 6f 64 65 28 64 62 29 21 3d 72 63 20 29 7b 0a  code(db)!=rc ){.
1ba0: 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30      char zBuf[20
1bb0: 30 5d 3b 0a 20 20 20 20 69 6e 74 20 72 32 20 3d  0];.    int r2 =
1bc0: 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65   sqlite3_errcode
1bd0: 28 64 62 29 3b 0a 20 20 20 20 73 70 72 69 6e 74  (db);.    sprint
1be0: 66 28 7a 42 75 66 2c 20 22 65 72 72 6f 72 20 63  f(zBuf, "error c
1bf0: 6f 64 65 20 25 73 20 28 25 64 29 20 64 6f 65 73  ode %s (%d) does
1c00: 20 6e 6f 74 20 6d 61 74 63 68 20 73 71 6c 69 74   not match sqlit
1c10: 65 33 5f 65 72 72 63 6f 64 65 20 25 73 20 28 25  e3_errcode %s (%
1c20: 64 29 22 2c 0a 20 20 20 20 20 20 20 74 31 45 72  d)",.       t1Er
1c30: 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 72 63 2c  rorName(rc), rc,
1c40: 20 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 32 29   t1ErrorName(r2)
1c50: 2c 20 72 32 29 3b 0a 20 20 20 20 54 63 6c 5f 52  , r2);.    Tcl_R
1c60: 65 73 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  esetResult(inter
1c70: 70 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  p);.    Tcl_Appe
1c80: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
1c90: 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 20 20 72   zBuf, 0);.    r
1ca0: 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72  eturn 1;.  }.  r
1cb0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a  eturn 0;.}../*.*
1cc0: 2a 20 44 65 63 6f 64 65 20 61 20 70 6f 69 6e 74  * Decode a point
1cd0: 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
1ce0: 5f 73 74 6d 74 20 6f 62 6a 65 63 74 2e 0a 2a 2f  _stmt object..*/
1cf0: 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 53  .static int getS
1d00: 74 6d 74 50 6f 69 6e 74 65 72 28 0a 20 20 54 63  tmtPointer(.  Tc
1d10: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
1d20: 2c 20 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  , .  const char 
1d30: 2a 7a 41 72 67 2c 20 20 0a 20 20 73 71 6c 69 74  *zArg,  .  sqlit
1d40: 65 33 5f 73 74 6d 74 20 2a 2a 70 70 53 74 6d 74  e3_stmt **ppStmt
1d50: 0a 29 7b 0a 20 20 2a 70 70 53 74 6d 74 20 3d 20  .){.  *ppStmt = 
1d60: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29 73  (sqlite3_stmt*)s
1d70: 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
1d80: 50 74 72 28 7a 41 72 67 29 3b 0a 20 20 72 65 74  Ptr(zArg);.  ret
1d90: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
1da0: 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 20  *.** Generate a 
1db0: 74 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74  text representat
1dc0: 69 6f 6e 20 6f 66 20 61 20 70 6f 69 6e 74 65 72  ion of a pointer
1dd0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 75 6e 64   that can be und
1de0: 65 72 73 74 6f 6f 64 0a 2a 2a 20 62 79 20 74 68  erstood.** by th
1df0: 65 20 67 65 74 44 62 50 6f 69 6e 74 65 72 20 61  e getDbPointer a
1e00: 6e 64 20 67 65 74 56 6d 50 6f 69 6e 74 65 72 20  nd getVmPointer 
1e10: 72 6f 75 74 69 6e 65 73 20 61 62 6f 76 65 2e 0a  routines above..
1e20: 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 6f 62 6c 65  **.** The proble
1e30: 6d 20 69 73 2c 20 6f 6e 20 73 6f 6d 65 20 6d 61  m is, on some ma
1e40: 63 68 69 6e 65 73 20 28 53 6f 6c 61 72 69 73 29  chines (Solaris)
1e50: 20 69 66 20 79 6f 75 20 64 6f 20 61 20 70 72 69   if you do a pri
1e60: 6e 74 66 20 77 69 74 68 0a 2a 2a 20 22 25 70 22  ntf with.** "%p"
1e70: 20 79 6f 75 20 63 61 6e 6e 6f 74 20 74 75 72 6e   you cannot turn
1e80: 20 61 72 6f 75 6e 64 20 61 6e 64 20 64 6f 20 61   around and do a
1e90: 20 73 63 61 6e 66 20 77 69 74 68 20 74 68 65 20   scanf with the 
1ea0: 73 61 6d 65 20 22 25 70 22 20 61 6e 64 0a 2a 2a  same "%p" and.**
1eb0: 20 67 65 74 20 79 6f 75 72 20 70 6f 69 6e 74 65   get your pointe
1ec0: 72 20 62 61 63 6b 2e 20 20 59 6f 75 20 68 61 76  r back.  You hav
1ed0: 65 20 74 6f 20 70 72 65 70 65 6e 64 20 61 20 22  e to prepend a "
1ee0: 30 78 22 20 62 65 66 6f 72 65 20 69 74 20 77 69  0x" before it wi
1ef0: 6c 6c 0a 2a 2a 20 77 6f 72 6b 2e 20 20 4f 72 20  ll.** work.  Or 
1f00: 61 74 20 6c 65 61 73 74 20 74 68 61 74 20 69 73  at least that is
1f10: 20 77 68 61 74 20 69 73 20 72 65 70 6f 72 74 65   what is reporte
1f20: 64 20 74 6f 20 6d 65 20 28 64 72 68 29 2e 20 20  d to me (drh).  
1f30: 42 75 74 20 74 68 69 73 0a 2a 2a 20 62 65 68 61  But this.** beha
1f40: 76 69 6f 72 20 76 61 72 69 65 73 20 66 72 6f 6d  vior varies from
1f50: 20 6d 61 63 68 69 6e 65 20 74 6f 20 6d 61 63 68   machine to mach
1f60: 69 6e 65 2e 20 20 54 68 65 20 73 6f 6c 75 74 69  ine.  The soluti
1f70: 6f 6e 20 75 73 65 64 20 68 65 72 20 69 73 0a 2a  on used her is.*
1f80: 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20 73 74  * to test the st
1f90: 72 69 6e 67 20 72 69 67 68 74 20 61 66 74 65 72  ring right after
1fa0: 20 69 74 20 69 73 20 67 65 6e 65 72 61 74 65 64   it is generated
1fb0: 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 63 61   to see if it ca
1fc0: 6e 20 62 65 0a 2a 2a 20 75 6e 64 65 72 73 74 6f  n be.** understo
1fd0: 6f 64 20 62 79 20 73 63 61 6e 66 2c 20 61 6e 64  od by scanf, and
1fe0: 20 69 66 20 6e 6f 74 2c 20 74 72 79 20 70 72 65   if not, try pre
1ff0: 70 65 6e 64 69 6e 67 20 61 6e 20 22 30 78 22 20  pending an "0x" 
2000: 74 6f 20 73 65 65 20 69 66 0a 2a 2a 20 74 68 61  to see if.** tha
2010: 74 20 68 65 6c 70 73 2e 20 20 49 66 20 6e 6f 74  t helps.  If not
2020: 68 69 6e 67 20 77 6f 72 6b 73 2c 20 61 20 66 61  hing works, a fa
2030: 74 61 6c 20 65 72 72 6f 72 20 69 73 20 67 65 6e  tal error is gen
2040: 65 72 61 74 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73  erated..*/.int s
2050: 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
2060: 69 6e 74 65 72 53 74 72 28 54 63 6c 5f 49 6e 74  interStr(Tcl_Int
2070: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 63 68 61  erp *interp, cha
2080: 72 20 2a 7a 50 74 72 2c 20 76 6f 69 64 20 2a 70  r *zPtr, void *p
2090: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  ){.  sqlite3_snp
20a0: 72 69 6e 74 66 28 31 30 30 2c 20 7a 50 74 72 2c  rintf(100, zPtr,
20b0: 20 22 25 70 22 2c 20 70 29 3b 0a 20 20 72 65 74   "%p", p);.  ret
20c0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
20d0: 2a 0a 2a 2a 20 54 68 65 20 63 61 6c 6c 62 61 63  *.** The callbac
20e0: 6b 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 73 71  k routine for sq
20f0: 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74  lite3_exec_print
2100: 66 28 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  f()..*/.static i
2110: 6e 74 20 65 78 65 63 5f 70 72 69 6e 74 66 5f 63  nt exec_printf_c
2120: 62 28 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e  b(void *pArg, in
2130: 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61  t argc, char **a
2140: 72 67 76 2c 20 63 68 61 72 20 2a 2a 6e 61 6d 65  rgv, char **name
2150: 29 7b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  ){.  Tcl_DString
2160: 20 2a 73 74 72 20 3d 20 28 54 63 6c 5f 44 53 74   *str = (Tcl_DSt
2170: 72 69 6e 67 2a 29 70 41 72 67 3b 0a 20 20 69 6e  ring*)pArg;.  in
2180: 74 20 69 3b 0a 0a 20 20 69 66 28 20 54 63 6c 5f  t i;..  if( Tcl_
2190: 44 53 74 72 69 6e 67 4c 65 6e 67 74 68 28 73 74  DStringLength(st
21a0: 72 29 3d 3d 30 20 29 7b 0a 20 20 20 20 66 6f 72  r)==0 ){.    for
21b0: 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b  (i=0; i<argc; i+
21c0: 2b 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 44 53  +){.      Tcl_DS
21d0: 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65 6d 65  tringAppendEleme
21e0: 6e 74 28 73 74 72 2c 20 6e 61 6d 65 5b 69 5d 20  nt(str, name[i] 
21f0: 3f 20 6e 61 6d 65 5b 69 5d 20 3a 20 22 4e 55 4c  ? name[i] : "NUL
2200: 4c 22 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  L");.    }.  }. 
2210: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63   for(i=0; i<argc
2220: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f  ; i++){.    Tcl_
2230: 44 53 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65  DStringAppendEle
2240: 6d 65 6e 74 28 73 74 72 2c 20 61 72 67 76 5b 69  ment(str, argv[i
2250: 5d 20 3f 20 61 72 67 76 5b 69 5d 20 3a 20 22 4e  ] ? argv[i] : "N
2260: 55 4c 4c 22 29 3b 0a 20 20 7d 0a 20 20 72 65 74  ULL");.  }.  ret
2270: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
2280: 54 68 65 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  The I/O tracing 
2290: 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 23 69 66  callback..*/.#if
22a0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
22b0: 5f 4f 4d 49 54 5f 54 52 41 43 45 29 20 26 26 20  _OMIT_TRACE) && 
22c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
22d0: 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 29 0a 73  NABLE_IOTRACE).s
22e0: 74 61 74 69 63 20 46 49 4c 45 20 2a 69 6f 74 72  tatic FILE *iotr
22f0: 61 63 65 5f 66 69 6c 65 20 3d 20 30 3b 0a 73 74  ace_file = 0;.st
2300: 61 74 69 63 20 76 6f 69 64 20 69 6f 5f 74 72 61  atic void io_tra
2310: 63 65 5f 63 61 6c 6c 62 61 63 6b 28 63 6f 6e 73  ce_callback(cons
2320: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
2330: 20 2e 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74   ...){.  va_list
2340: 20 61 70 3b 0a 20 20 76 61 5f 73 74 61 72 74 28   ap;.  va_start(
2350: 61 70 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20  ap, zFormat);.  
2360: 76 66 70 72 69 6e 74 66 28 69 6f 74 72 61 63 65  vfprintf(iotrace
2370: 5f 66 69 6c 65 2c 20 7a 46 6f 72 6d 61 74 2c 20  _file, zFormat, 
2380: 61 70 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70  ap);.  va_end(ap
2390: 29 3b 0a 20 20 66 66 6c 75 73 68 28 69 6f 74 72  );.  fflush(iotr
23a0: 61 63 65 5f 66 69 6c 65 29 3b 0a 7d 0a 23 65 6e  ace_file);.}.#en
23b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  dif../*.** Usage
23c0: 3a 20 20 69 6f 5f 74 72 61 63 65 20 46 49 4c 45  :  io_trace FILE
23d0: 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 54 75 72 6e 20  NAME.**.** Turn 
23e0: 49 2f 4f 20 74 72 61 63 69 6e 67 20 6f 6e 20 6f  I/O tracing on o
23f0: 72 20 6f 66 66 2e 20 20 49 66 20 46 49 4c 45 4e  r off.  If FILEN
2400: 41 4d 45 20 69 73 20 6e 6f 74 20 61 6e 20 65 6d  AME is not an em
2410: 70 74 79 20 73 74 72 69 6e 67 2c 0a 2a 2a 20 49  pty string,.** I
2420: 2f 4f 20 74 72 61 63 69 6e 67 20 62 65 67 69 6e  /O tracing begin
2430: 73 20 67 6f 69 6e 67 20 69 6e 74 6f 20 46 49 4c  s going into FIL
2440: 45 4e 41 4d 45 2e 20 49 66 20 46 49 4c 45 4e 41  ENAME. If FILENA
2450: 4d 45 20 69 73 20 61 6e 20 65 6d 70 74 79 0a 2a  ME is an empty.*
2460: 2a 20 73 74 72 69 6e 67 2c 20 49 2f 4f 20 74 72  * string, I/O tr
2470: 61 63 69 6e 67 20 69 73 20 74 75 72 6e 65 64 20  acing is turned 
2480: 6f 66 66 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  off..*/.static i
2490: 6e 74 20 74 65 73 74 5f 69 6f 5f 74 72 61 63 65  nt test_io_trace
24a0: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
24b0: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
24c0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
24d0: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
24e0: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
24f0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
2500: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
2510: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
2520: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
2530: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
2540: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2550: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
2560: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 23 69 66 20 21  ment */.){.#if !
2570: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2580: 4d 49 54 5f 54 52 41 43 45 29 20 26 26 20 64 65  MIT_TRACE) && de
2590: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
25a0: 42 4c 45 5f 49 4f 54 52 41 43 45 29 0a 20 20 69  BLE_IOTRACE).  i
25b0: 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20  f( argc!=2 ){.  
25c0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
25d0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
25e0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
25f0: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
2600: 2c 0a 20 20 20 20 20 20 20 20 20 20 22 20 46 49  ,.          " FI
2610: 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20  LENAME\"", 0);. 
2620: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
2630: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  ROR;.  }.  if( i
2640: 6f 74 72 61 63 65 5f 66 69 6c 65 20 29 7b 0a 20  otrace_file ){. 
2650: 20 20 20 69 66 28 20 69 6f 74 72 61 63 65 5f 66     if( iotrace_f
2660: 69 6c 65 21 3d 73 74 64 6f 75 74 20 26 26 20 69  ile!=stdout && i
2670: 6f 74 72 61 63 65 5f 66 69 6c 65 21 3d 73 74 64  otrace_file!=std
2680: 65 72 72 20 29 7b 0a 20 20 20 20 20 20 66 63 6c  err ){.      fcl
2690: 6f 73 65 28 69 6f 74 72 61 63 65 5f 66 69 6c 65  ose(iotrace_file
26a0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 6f 74  );.    }.    iot
26b0: 72 61 63 65 5f 66 69 6c 65 20 3d 20 30 3b 0a 20  race_file = 0;. 
26c0: 20 20 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63     sqlite3IoTrac
26d0: 65 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  e = 0;.  }.  if(
26e0: 20 61 72 67 76 5b 31 5d 5b 30 5d 20 29 7b 0a 20   argv[1][0] ){. 
26f0: 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 72     if( strcmp(ar
2700: 67 76 5b 31 5d 2c 22 73 74 64 6f 75 74 22 29 3d  gv[1],"stdout")=
2710: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6f 74 72  =0 ){.      iotr
2720: 61 63 65 5f 66 69 6c 65 20 3d 20 73 74 64 6f 75  ace_file = stdou
2730: 74 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  t;.    }else if(
2740: 20 73 74 72 63 6d 70 28 61 72 67 76 5b 31 5d 2c   strcmp(argv[1],
2750: 22 73 74 64 65 72 72 22 29 3d 3d 30 20 29 7b 0a  "stderr")==0 ){.
2760: 20 20 20 20 20 20 69 6f 74 72 61 63 65 5f 66 69        iotrace_fi
2770: 6c 65 20 3d 20 73 74 64 65 72 72 3b 0a 20 20 20  le = stderr;.   
2780: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6f   }else{.      io
2790: 74 72 61 63 65 5f 66 69 6c 65 20 3d 20 66 6f 70  trace_file = fop
27a0: 65 6e 28 61 72 67 76 5b 31 5d 2c 20 22 77 22 29  en(argv[1], "w")
27b0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
27c0: 74 65 33 49 6f 54 72 61 63 65 20 3d 20 69 6f 5f  te3IoTrace = io_
27d0: 74 72 61 63 65 5f 63 61 6c 6c 62 61 63 6b 3b 0a  trace_callback;.
27e0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 74    }.#endif.  ret
27f0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a  urn TCL_OK;.}...
2800: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
2810: 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74  lite3_exec_print
2820: 66 20 20 44 42 20 20 46 4f 52 4d 41 54 20 20 53  f  DB  FORMAT  S
2830: 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f  TRING.**.** Invo
2840: 6b 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65  ke the sqlite3_e
2850: 78 65 63 5f 70 72 69 6e 74 66 28 29 20 69 6e 74  xec_printf() int
2860: 65 72 66 61 63 65 20 75 73 69 6e 67 20 74 68 65  erface using the
2870: 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 0a 2a   open database.*
2880: 2a 20 44 42 2e 20 20 54 68 65 20 53 51 4c 20 69  * DB.  The SQL i
2890: 73 20 74 68 65 20 73 74 72 69 6e 67 20 46 4f 52  s the string FOR
28a0: 4d 41 54 2e 20 20 54 68 65 20 66 6f 72 6d 61 74  MAT.  The format
28b0: 20 73 74 72 69 6e 67 20 73 68 6f 75 6c 64 20 63   string should c
28c0: 6f 6e 74 61 69 6e 0a 2a 2a 20 6f 6e 65 20 25 73  ontain.** one %s
28d0: 20 6f 72 20 25 71 2e 20 20 53 54 52 49 4e 47 20   or %q.  STRING 
28e0: 69 73 20 74 68 65 20 76 61 6c 75 65 20 69 6e 73  is the value ins
28f0: 65 72 74 65 64 20 69 6e 74 6f 20 25 73 20 6f 72  erted into %s or
2900: 20 25 71 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69   %q..*/.static i
2910: 6e 74 20 74 65 73 74 5f 65 78 65 63 5f 70 72 69  nt test_exec_pri
2920: 6e 74 66 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  ntf(.  void *Not
2930: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
2940: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
2950: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
2960: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
2970: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
2980: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
2990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
29a0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
29b0: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
29c0: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
29d0: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
29e0: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
29f0: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 54  sqlite3 *db;.  T
2a00: 63 6c 5f 44 53 74 72 69 6e 67 20 73 74 72 3b 0a  cl_DString str;.
2a10: 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72    int rc;.  char
2a20: 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 63 68   *zErr = 0;.  ch
2a30: 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 63 68 61 72  ar *zSql;.  char
2a40: 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20 69 66 28   zBuf[30];.  if(
2a50: 20 61 72 67 63 21 3d 34 20 29 7b 0a 20 20 20 20   argc!=4 ){.    
2a60: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
2a70: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
2a80: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
2a90: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20  e \"", argv[0], 
2aa0: 0a 20 20 20 20 20 20 20 22 20 44 42 20 46 4f 52  .       " DB FOR
2ab0: 4d 41 54 20 53 54 52 49 4e 47 22 2c 20 30 29 3b  MAT STRING", 0);
2ac0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
2ad0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
2ae0: 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
2af0: 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
2b00: 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
2b10: 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 44 53  _ERROR;.  Tcl_DS
2b20: 74 72 69 6e 67 49 6e 69 74 28 26 73 74 72 29 3b  tringInit(&str);
2b30: 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65  .  zSql = sqlite
2b40: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 32  3_mprintf(argv[2
2b50: 5d 2c 20 61 72 67 76 5b 33 5d 29 3b 0a 20 20 72  ], argv[3]);.  r
2b60: 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
2b70: 28 64 62 2c 20 7a 53 71 6c 2c 20 65 78 65 63 5f  (db, zSql, exec_
2b80: 70 72 69 6e 74 66 5f 63 62 2c 20 26 73 74 72 2c  printf_cb, &str,
2b90: 20 26 7a 45 72 72 29 3b 0a 20 20 73 71 6c 69 74   &zErr);.  sqlit
2ba0: 65 33 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20  e3_free(zSql);. 
2bb0: 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22   sprintf(zBuf, "
2bc0: 25 64 22 2c 20 72 63 29 3b 0a 20 20 54 63 6c 5f  %d", rc);.  Tcl_
2bd0: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
2be0: 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20 54  terp, zBuf);.  T
2bf0: 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  cl_AppendElement
2c00: 28 69 6e 74 65 72 70 2c 20 72 63 3d 3d 53 51 4c  (interp, rc==SQL
2c10: 49 54 45 5f 4f 4b 20 3f 20 54 63 6c 5f 44 53 74  ITE_OK ? Tcl_DSt
2c20: 72 69 6e 67 56 61 6c 75 65 28 26 73 74 72 29 20  ringValue(&str) 
2c30: 3a 20 7a 45 72 72 29 3b 0a 20 20 54 63 6c 5f 44  : zErr);.  Tcl_D
2c40: 53 74 72 69 6e 67 46 72 65 65 28 26 73 74 72 29  StringFree(&str)
2c50: 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29 20 73  ;.  if( zErr ) s
2c60: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
2c70: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2c80: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
2c90: 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65  rp, db, rc) ) re
2ca0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
2cb0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
2cc0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
2cd0: 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 5f 68    sqlite3_exec_h
2ce0: 65 78 20 20 44 42 20 20 48 45 58 0a 2a 2a 0a 2a  ex  DB  HEX.**.*
2cf0: 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 73 71 6c  * Invoke the sql
2d00: 69 74 65 33 5f 65 78 65 63 28 29 20 6f 6e 20 61  ite3_exec() on a
2d10: 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
2d20: 6f 62 74 61 69 6e 65 64 20 62 79 20 74 72 61 6e  obtained by tran
2d30: 73 6c 61 74 69 6e 67 0a 2a 2a 20 48 45 58 20 69  slating.** HEX i
2d40: 6e 74 6f 20 41 53 43 49 49 2e 20 20 4d 6f 73 74  nto ASCII.  Most
2d50: 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65 20   characters are 
2d60: 74 72 61 6e 73 6c 61 74 65 64 20 61 73 20 69 73  translated as is
2d70: 2e 20 20 25 48 48 20 62 65 63 6f 6d 65 73 0a 2a  .  %HH becomes.*
2d80: 2a 20 61 20 68 65 78 20 63 68 61 72 61 63 74 65  * a hex characte
2d90: 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  r..*/.static int
2da0: 20 74 65 73 74 5f 65 78 65 63 5f 68 65 78 28 0a   test_exec_hex(.
2db0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
2dc0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
2dd0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
2de0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
2df0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
2e00: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
2e10: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
2e20: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
2e30: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
2e40: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
2e50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
2e60: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
2e70: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  nt */.){.  sqlit
2e80: 65 33 20 2a 64 62 3b 0a 20 20 54 63 6c 5f 44 53  e3 *db;.  Tcl_DS
2e90: 74 72 69 6e 67 20 73 74 72 3b 0a 20 20 69 6e 74  tring str;.  int
2ea0: 20 72 63 2c 20 69 2c 20 6a 3b 0a 20 20 63 68 61   rc, i, j;.  cha
2eb0: 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 63  r *zErr = 0;.  c
2ec0: 68 61 72 20 2a 7a 48 65 78 3b 0a 20 20 63 68 61  har *zHex;.  cha
2ed0: 72 20 7a 53 71 6c 5b 35 30 30 5d 3b 0a 20 20 63  r zSql[500];.  c
2ee0: 68 61 72 20 7a 42 75 66 5b 33 30 5d 3b 0a 20 20  har zBuf[30];.  
2ef0: 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20  if( argc!=3 ){. 
2f00: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
2f10: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
2f20: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
2f30: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
2f40: 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 20  ], .       " DB 
2f50: 48 45 58 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  HEX", 0);.    re
2f60: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
2f70: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
2f80: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
2f90: 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
2fa0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
2fb0: 0a 20 20 7a 48 65 78 20 3d 20 61 72 67 76 5b 32  .  zHex = argv[2
2fc0: 5d 3b 0a 20 20 66 6f 72 28 69 3d 6a 3d 30 3b 20  ];.  for(i=j=0; 
2fd0: 69 3c 73 69 7a 65 6f 66 28 7a 53 71 6c 29 20 26  i<sizeof(zSql) &
2fe0: 26 20 7a 48 65 78 5b 6a 5d 3b 20 69 2b 2b 2c 20  & zHex[j]; i++, 
2ff0: 6a 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 7a 48  j++){.    if( zH
3000: 65 78 5b 6a 5d 3d 3d 27 25 27 20 26 26 20 7a 48  ex[j]=='%' && zH
3010: 65 78 5b 6a 2b 32 5d 20 26 26 20 7a 48 65 78 5b  ex[j+2] && zHex[
3020: 6a 2b 32 5d 20 29 7b 0a 20 20 20 20 20 20 7a 53  j+2] ){.      zS
3030: 71 6c 5b 69 5d 20 3d 20 28 74 65 73 74 48 65 78  ql[i] = (testHex
3040: 54 6f 49 6e 74 28 7a 48 65 78 5b 6a 2b 31 5d 29  ToInt(zHex[j+1])
3050: 3c 3c 34 29 20 2b 20 74 65 73 74 48 65 78 54 6f  <<4) + testHexTo
3060: 49 6e 74 28 7a 48 65 78 5b 6a 2b 32 5d 29 3b 0a  Int(zHex[j+2]);.
3070: 20 20 20 20 20 20 6a 20 2b 3d 20 32 3b 0a 20 20        j += 2;.  
3080: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
3090: 53 71 6c 5b 69 5d 20 3d 20 7a 48 65 78 5b 6a 5d  Sql[i] = zHex[j]
30a0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 7a 53  ;.    }.  }.  zS
30b0: 71 6c 5b 69 5d 20 3d 20 30 3b 0a 20 20 54 63 6c  ql[i] = 0;.  Tcl
30c0: 5f 44 53 74 72 69 6e 67 49 6e 69 74 28 26 73 74  _DStringInit(&st
30d0: 72 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  r);.  rc = sqlit
30e0: 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c  e3_exec(db, zSql
30f0: 2c 20 65 78 65 63 5f 70 72 69 6e 74 66 5f 63 62  , exec_printf_cb
3100: 2c 20 26 73 74 72 2c 20 26 7a 45 72 72 29 3b 0a  , &str, &zErr);.
3110: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
3120: 22 25 64 22 2c 20 72 63 29 3b 0a 20 20 54 63 6c  "%d", rc);.  Tcl
3130: 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  _AppendElement(i
3140: 6e 74 65 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20  nterp, zBuf);.  
3150: 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e  Tcl_AppendElemen
3160: 74 28 69 6e 74 65 72 70 2c 20 72 63 3d 3d 53 51  t(interp, rc==SQ
3170: 4c 49 54 45 5f 4f 4b 20 3f 20 54 63 6c 5f 44 53  LITE_OK ? Tcl_DS
3180: 74 72 69 6e 67 56 61 6c 75 65 28 26 73 74 72 29  tringValue(&str)
3190: 20 3a 20 7a 45 72 72 29 3b 0a 20 20 54 63 6c 5f   : zErr);.  Tcl_
31a0: 44 53 74 72 69 6e 67 46 72 65 65 28 26 73 74 72  DStringFree(&str
31b0: 29 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29 20  );.  if( zErr ) 
31c0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72  sqlite3_free(zEr
31d0: 72 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  r);.  if( sqlite
31e0: 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
31f0: 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72  erp, db, rc) ) r
3200: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
3210: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
3220: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
3230: 3a 20 20 64 62 5f 65 6e 74 65 72 20 44 42 0a 2a  :  db_enter DB.*
3240: 2a 20 20 20 20 20 20 20 20 20 64 62 5f 6c 65 61  *         db_lea
3250: 76 65 20 44 42 0a 2a 2a 0a 2a 2a 20 45 6e 74 65  ve DB.**.** Ente
3260: 72 20 6f 72 20 6c 65 61 76 65 20 74 68 65 20 6d  r or leave the m
3270: 75 74 65 78 20 6f 6e 20 61 20 64 61 74 61 62 61  utex on a databa
3280: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a  se connection..*
3290: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 64 62 5f  /.static int db_
32a0: 65 6e 74 65 72 28 0a 20 20 76 6f 69 64 20 2a 4e  enter(.  void *N
32b0: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
32c0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
32d0: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
32e0: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
32f0: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
3300: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
3310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3320: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
3330: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
3340: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
3350: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
3360: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
3370: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
3380: 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a   if( argc!=2 ){.
3390: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
33a0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
33b0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
33c0: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
33d0: 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42  0], .       " DB
33e0: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
33f0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
3400: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
3410: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
3420: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
3430: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
3440: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e  sqlite3_mutex_en
3450: 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ter(db->mutex);.
3460: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
3470: 0a 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 64 62  .}.static int db
3480: 5f 6c 65 61 76 65 28 0a 20 20 76 6f 69 64 20 2a  _leave(.  void *
3490: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
34a0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
34b0: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
34c0: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
34d0: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
34e0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
34f0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
3500: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
3510: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
3520: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
3530: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
3540: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
3550: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
3560: 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b    if( argc!=2 ){
3570: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
3580: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
3590: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
35a0: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
35b0: 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44  [0], .       " D
35c0: 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  B", 0);.    retu
35d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
35e0: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
35f0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
3600: 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
3610: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
3620: 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c   sqlite3_mutex_l
3630: 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b  eave(db->mutex);
3640: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
3650: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
3660: 3a 20 20 73 71 6c 69 74 65 33 5f 65 78 65 63 20  :  sqlite3_exec 
3670: 20 44 42 20 20 53 51 4c 0a 2a 2a 0a 2a 2a 20 49   DB  SQL.**.** I
3680: 6e 76 6f 6b 65 20 74 68 65 20 73 71 6c 69 74 65  nvoke the sqlite
3690: 33 5f 65 78 65 63 20 69 6e 74 65 72 66 61 63 65  3_exec interface
36a0: 20 75 73 69 6e 67 20 74 68 65 20 6f 70 65 6e 20   using the open 
36b0: 64 61 74 61 62 61 73 65 20 44 42 0a 2a 2f 0a 73  database DB.*/.s
36c0: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65  tatic int test_e
36d0: 78 65 63 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  xec(.  void *Not
36e0: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
36f0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
3700: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
3710: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
3720: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
3730: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
3740: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
3750: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
3760: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
3770: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
3780: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
3790: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
37a0: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 54  sqlite3 *db;.  T
37b0: 63 6c 5f 44 53 74 72 69 6e 67 20 73 74 72 3b 0a  cl_DString str;.
37c0: 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72    int rc;.  char
37d0: 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 63 68   *zErr = 0;.  ch
37e0: 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 69 6e 74 20  ar *zSql;.  int 
37f0: 69 2c 20 6a 3b 0a 20 20 63 68 61 72 20 7a 42 75  i, j;.  char zBu
3800: 66 5b 33 30 5d 3b 0a 20 20 69 66 28 20 61 72 67  f[30];.  if( arg
3810: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
3820: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
3830: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
3840: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
3850: 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20  ", argv[0], .   
3860: 20 20 20 20 22 20 44 42 20 53 51 4c 22 2c 20 30      " DB SQL", 0
3870: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
3880: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
3890: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
38a0: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
38b0: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
38c0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
38d0: 44 53 74 72 69 6e 67 49 6e 69 74 28 26 73 74 72  DStringInit(&str
38e0: 29 3b 0a 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  );.  zSql = sqli
38f0: 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22  te3_mprintf("%s"
3900: 2c 20 61 72 67 76 5b 32 5d 29 3b 0a 20 20 66 6f  , argv[2]);.  fo
3910: 72 28 69 3d 6a 3d 30 3b 20 7a 53 71 6c 5b 69 5d  r(i=j=0; zSql[i]
3920: 3b 29 7b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c  ;){.    if( zSql
3930: 5b 69 5d 3d 3d 27 25 27 20 29 7b 0a 20 20 20 20  [i]=='%' ){.    
3940: 20 20 7a 53 71 6c 5b 6a 2b 2b 5d 20 3d 20 28 74    zSql[j++] = (t
3950: 65 73 74 48 65 78 54 6f 49 6e 74 28 7a 53 71 6c  estHexToInt(zSql
3960: 5b 69 2b 31 5d 29 3c 3c 34 29 20 2b 20 74 65 73  [i+1])<<4) + tes
3970: 74 48 65 78 54 6f 49 6e 74 28 7a 53 71 6c 5b 69  tHexToInt(zSql[i
3980: 2b 32 5d 29 3b 0a 20 20 20 20 20 20 69 20 2b 3d  +2]);.      i +=
3990: 20 33 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   3;.    }else{. 
39a0: 20 20 20 20 20 7a 53 71 6c 5b 6a 2b 2b 5d 20 3d       zSql[j++] =
39b0: 20 7a 53 71 6c 5b 69 2b 2b 5d 3b 0a 20 20 20 20   zSql[i++];.    
39c0: 7d 0a 20 20 7d 0a 20 20 7a 53 71 6c 5b 6a 5d 20  }.  }.  zSql[j] 
39d0: 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 0;.  rc = sqli
39e0: 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71  te3_exec(db, zSq
39f0: 6c 2c 20 65 78 65 63 5f 70 72 69 6e 74 66 5f 63  l, exec_printf_c
3a00: 62 2c 20 26 73 74 72 2c 20 26 7a 45 72 72 29 3b  b, &str, &zErr);
3a10: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
3a20: 7a 53 71 6c 29 3b 0a 20 20 73 70 72 69 6e 74 66  zSql);.  sprintf
3a30: 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 72 63 29  (zBuf, "%d", rc)
3a40: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c  ;.  Tcl_AppendEl
3a50: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42  ement(interp, zB
3a60: 75 66 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  uf);.  Tcl_Appen
3a70: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
3a80: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 3f   rc==SQLITE_OK ?
3a90: 20 54 63 6c 5f 44 53 74 72 69 6e 67 56 61 6c 75   Tcl_DStringValu
3aa0: 65 28 26 73 74 72 29 20 3a 20 7a 45 72 72 29 3b  e(&str) : zErr);
3ab0: 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 46 72  .  Tcl_DStringFr
3ac0: 65 65 28 26 73 74 72 29 3b 0a 20 20 69 66 28 20  ee(&str);.  if( 
3ad0: 7a 45 72 72 20 29 20 73 71 6c 69 74 65 33 5f 66  zErr ) sqlite3_f
3ae0: 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 69 66 28  ree(zErr);.  if(
3af0: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
3b00: 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
3b10: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
3b20: 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e  _ERROR;.  return
3b30: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
3b40: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
3b50: 33 5f 65 78 65 63 5f 6e 72 20 20 44 42 20 20 53  3_exec_nr  DB  S
3b60: 51 4c 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20  QL.**.** Invoke 
3b70: 74 68 65 20 73 71 6c 69 74 65 33 5f 65 78 65 63  the sqlite3_exec
3b80: 20 69 6e 74 65 72 66 61 63 65 20 75 73 69 6e 67   interface using
3b90: 20 74 68 65 20 6f 70 65 6e 20 64 61 74 61 62 61   the open databa
3ba0: 73 65 20 44 42 2e 20 20 44 69 73 63 61 72 64 0a  se DB.  Discard.
3bb0: 2a 2a 20 61 6c 6c 20 72 65 73 75 6c 74 73 0a 2a  ** all results.*
3bc0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
3bd0: 74 5f 65 78 65 63 5f 6e 72 28 0a 20 20 76 6f 69  t_exec_nr(.  voi
3be0: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
3bf0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
3c00: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
3c10: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
3c20: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
3c30: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
3c40: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
3c50: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
3c60: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
3c70: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
3c80: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
3c90: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
3ca0: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
3cb0: 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 63  b;.  int rc;.  c
3cc0: 68 61 72 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20  har *zErr = 0;. 
3cd0: 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a   if( argc!=3 ){.
3ce0: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
3cf0: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
3d00: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
3d10: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
3d20: 30 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42  0], .       " DB
3d30: 20 53 51 4c 22 2c 20 30 29 3b 0a 20 20 20 20 72   SQL", 0);.    r
3d40: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
3d50: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
3d60: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
3d70: 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
3d80: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
3d90: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
3da0: 5f 65 78 65 63 28 64 62 2c 20 61 72 67 76 5b 32  _exec(db, argv[2
3db0: 5d 2c 20 30 2c 20 30 2c 20 26 7a 45 72 72 29 3b  ], 0, 0, &zErr);
3dc0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
3dd0: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
3de0: 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
3df0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
3e00: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
3e10: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
3e20: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
3e30: 7a 5f 74 65 73 74 20 20 53 45 50 41 52 41 54 4f  z_test  SEPARATO
3e40: 52 20 20 41 52 47 30 20 20 41 52 47 31 20 2e 2e  R  ARG0  ARG1 ..
3e50: 2e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65  ..**.** Test the
3e60: 20 25 7a 20 66 6f 72 6d 61 74 20 6f 66 20 73 71   %z format of sq
3e70: 6c 69 74 65 5f 6d 70 72 69 6e 74 66 28 29 2e 20  lite_mprintf(). 
3e80: 20 55 73 65 20 6d 75 6c 74 69 70 6c 65 20 6d 70   Use multiple mp
3e90: 72 69 6e 74 66 28 29 20 63 61 6c 6c 73 20 74 6f  rintf() calls to
3ea0: 20 0a 2a 2a 20 63 6f 6e 63 61 74 65 6e 61 74 65   .** concatenate
3eb0: 20 61 72 67 30 20 74 68 72 6f 75 67 68 20 61 72   arg0 through ar
3ec0: 67 6e 20 75 73 69 6e 67 20 73 65 70 61 72 61 74  gn using separat
3ed0: 6f 72 20 61 73 20 74 68 65 20 73 65 70 61 72 61  or as the separa
3ee0: 74 6f 72 2e 0a 2a 2a 20 52 65 74 75 72 6e 20 74  tor..** Return t
3ef0: 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74  he result..*/.st
3f00: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6d 70  atic int test_mp
3f10: 72 69 6e 74 66 5f 7a 28 0a 20 20 76 6f 69 64 20  rintf_z(.  void 
3f20: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
3f30: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
3f40: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
3f50: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
3f60: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
3f70: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
3f80: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
3f90: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
3fa0: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
3fb0: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
3fc0: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
3fd0: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
3fe0: 7b 0a 20 20 63 68 61 72 20 2a 7a 52 65 73 75 6c  {.  char *zResul
3ff0: 74 20 3d 20 30 3b 0a 20 20 69 6e 74 20 69 3b 0a  t = 0;.  int i;.
4000: 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c 61 72  .  for(i=2; i<ar
4010: 67 63 20 26 26 20 28 69 3d 3d 32 20 7c 7c 20 7a  gc && (i==2 || z
4020: 52 65 73 75 6c 74 29 3b 20 69 2b 2b 29 7b 0a 20  Result); i++){. 
4030: 20 20 20 7a 52 65 73 75 6c 74 20 3d 20 73 71 6c     zResult = sql
4040: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 7a  ite3_mprintf("%z
4050: 25 73 25 73 22 2c 20 7a 52 65 73 75 6c 74 2c 20  %s%s", zResult, 
4060: 61 72 67 76 5b 31 5d 2c 20 61 72 67 76 5b 69 5d  argv[1], argv[i]
4070: 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70  );.  }.  Tcl_App
4080: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
4090: 2c 20 7a 52 65 73 75 6c 74 2c 20 30 29 3b 0a 20  , zResult, 0);. 
40a0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 52   sqlite3_free(zR
40b0: 65 73 75 6c 74 29 3b 0a 20 20 72 65 74 75 72 6e  esult);.  return
40c0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
40d0: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
40e0: 33 5f 6d 70 72 69 6e 74 66 5f 6e 5f 74 65 73 74  3_mprintf_n_test
40f0: 20 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 54    STRING.**.** T
4100: 65 73 74 20 74 68 65 20 25 6e 20 66 6f 72 6d 61  est the %n forma
4110: 74 20 6f 66 20 73 71 6c 69 74 65 5f 6d 70 72 69  t of sqlite_mpri
4120: 6e 74 66 28 29 2e 20 20 52 65 74 75 72 6e 20 74  ntf().  Return t
4130: 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
4140: 0a 2a 2a 20 69 6e 70 75 74 20 73 74 72 69 6e 67  .** input string
4150: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
4160: 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f 6e 28 0a  test_mprintf_n(.
4170: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
4180: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
4190: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
41a0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
41b0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
41c0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
41d0: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
41e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
41f0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
4200: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
4210: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
4220: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
4230: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20  nt */.){.  char 
4240: 2a 7a 53 74 72 3b 0a 20 20 69 6e 74 20 6e 20 3d  *zStr;.  int n =
4250: 20 30 3b 0a 20 20 7a 53 74 72 20 3d 20 73 71 6c   0;.  zStr = sql
4260: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
4270: 25 6e 22 2c 20 61 72 67 76 5b 31 5d 2c 20 26 6e  %n", argv[1], &n
4280: 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65  );.  sqlite3_fre
4290: 65 28 7a 53 74 72 29 3b 0a 20 20 54 63 6c 5f 53  e(zStr);.  Tcl_S
42a0: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
42b0: 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
42c0: 6a 28 6e 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  j(n));.  return 
42d0: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
42e0: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
42f0: 5f 73 6e 70 72 69 6e 74 66 5f 69 6e 74 20 20 53  _snprintf_int  S
4300: 49 5a 45 20 46 4f 52 4d 41 54 20 20 49 4e 54 0a  IZE FORMAT  INT.
4310: 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 6f  **.** Test the o
4320: 66 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e  f sqlite3_snprin
4330: 74 66 28 29 20 72 6f 75 74 69 6e 65 2e 20 20 53  tf() routine.  S
4340: 49 5a 45 20 69 73 20 74 68 65 20 73 69 7a 65 20  IZE is the size 
4350: 6f 66 20 74 68 65 0a 2a 2a 20 6f 75 74 70 75 74  of the.** output
4360: 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65 73   buffer in bytes
4370: 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 73  .  The maximum s
4380: 69 7a 65 20 69 73 20 31 30 30 2e 20 20 46 4f 52  ize is 100.  FOR
4390: 4d 41 54 20 69 73 20 74 68 65 0a 2a 2a 20 66 6f  MAT is the.** fo
43a0: 72 6d 61 74 20 73 74 72 69 6e 67 2e 20 20 49 4e  rmat string.  IN
43b0: 54 20 69 73 20 61 20 73 69 6e 67 6c 65 20 69 6e  T is a single in
43c0: 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 2e 20  teger argument. 
43d0: 20 54 68 65 20 46 4f 52 4d 41 54 0a 2a 2a 20 73   The FORMAT.** s
43e0: 74 72 69 6e 67 20 6d 75 73 74 20 72 65 71 75 69  tring must requi
43f0: 72 65 20 6e 6f 20 6d 6f 72 65 20 74 68 61 6e 20  re no more than 
4400: 74 68 69 73 20 6f 6e 65 20 69 6e 74 65 67 65 72  this one integer
4410: 20 61 72 67 75 6d 65 6e 74 2e 20 20 49 66 0a 2a   argument.  If.*
4420: 2a 20 59 6f 75 20 70 61 73 73 20 69 6e 20 61 20  * You pass in a 
4430: 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 74 68  format string th
4440: 61 74 20 72 65 71 75 69 72 65 73 20 6d 6f 72 65  at requires more
4450: 20 74 68 61 6e 20 6f 6e 65 20 61 72 67 75 6d 65   than one argume
4460: 6e 74 2c 0a 2a 2a 20 62 61 64 20 74 68 69 6e 67  nt,.** bad thing
4470: 73 20 77 69 6c 6c 20 68 61 70 70 65 6e 2e 0a 2a  s will happen..*
4480: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
4490: 74 5f 73 6e 70 72 69 6e 74 66 5f 69 6e 74 28 0a  t_snprintf_int(.
44a0: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
44b0: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
44c0: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
44d0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
44e0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
44f0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
4500: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
4510: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
4520: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
4530: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
4540: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
4550: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
4560: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20  nt */.){.  char 
4570: 7a 53 74 72 5b 31 30 30 5d 3b 0a 20 20 69 6e 74  zStr[100];.  int
4580: 20 6e 20 3d 20 61 74 6f 69 28 61 72 67 76 5b 31   n = atoi(argv[1
4590: 5d 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  ]);.  const char
45a0: 20 2a 7a 46 6f 72 6d 61 74 20 3d 20 61 72 67 76   *zFormat = argv
45b0: 5b 32 5d 3b 0a 20 20 69 6e 74 20 61 31 20 3d 20  [2];.  int a1 = 
45c0: 61 74 6f 69 28 61 72 67 76 5b 33 5d 29 3b 0a 20  atoi(argv[3]);. 
45d0: 20 69 66 28 20 6e 3e 73 69 7a 65 6f 66 28 7a 53   if( n>sizeof(zS
45e0: 74 72 29 20 29 20 6e 20 3d 20 73 69 7a 65 6f 66  tr) ) n = sizeof
45f0: 28 7a 53 74 72 29 3b 0a 20 20 73 71 6c 69 74 65  (zStr);.  sqlite
4600: 33 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f  3_snprintf(sizeo
4610: 66 28 7a 53 74 72 29 2c 20 7a 53 74 72 2c 20 22  f(zStr), zStr, "
4620: 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70  abcdefghijklmnop
4630: 71 72 73 74 75 76 77 78 79 7a 22 29 3b 0a 20 20  qrstuvwxyz");.  
4640: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
4650: 28 6e 2c 20 7a 53 74 72 2c 20 7a 46 6f 72 6d 61  (n, zStr, zForma
4660: 74 2c 20 61 31 29 3b 0a 20 20 54 63 6c 5f 41 70  t, a1);.  Tcl_Ap
4670: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
4680: 70 2c 20 7a 53 74 72 2c 20 30 29 3b 0a 20 20 72  p, zStr, 0);.  r
4690: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
46a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
46b0: 4f 4d 49 54 5f 47 45 54 5f 54 41 42 4c 45 0a 0a  OMIT_GET_TABLE..
46c0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
46d0: 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f  lite3_get_table_
46e0: 70 72 69 6e 74 66 20 20 44 42 20 20 46 4f 52 4d  printf  DB  FORM
46f0: 41 54 20 20 53 54 52 49 4e 47 20 20 3f 2d 2d 6e  AT  STRING  ?--n
4700: 6f 2d 63 6f 75 6e 74 73 3f 0a 2a 2a 0a 2a 2a 20  o-counts?.**.** 
4710: 49 6e 76 6f 6b 65 20 74 68 65 20 73 71 6c 69 74  Invoke the sqlit
4720: 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69  e3_get_table_pri
4730: 6e 74 66 28 29 20 69 6e 74 65 72 66 61 63 65 20  ntf() interface 
4740: 75 73 69 6e 67 20 74 68 65 20 6f 70 65 6e 20 64  using the open d
4750: 61 74 61 62 61 73 65 0a 2a 2a 20 44 42 2e 20 20  atabase.** DB.  
4760: 54 68 65 20 53 51 4c 20 69 73 20 74 68 65 20 73  The SQL is the s
4770: 74 72 69 6e 67 20 46 4f 52 4d 41 54 2e 20 20 54  tring FORMAT.  T
4780: 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67  he format string
4790: 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 0a   should contain.
47a0: 2a 2a 20 6f 6e 65 20 25 73 20 6f 72 20 25 71 2e  ** one %s or %q.
47b0: 20 20 53 54 52 49 4e 47 20 69 73 20 74 68 65 20    STRING is the 
47c0: 76 61 6c 75 65 20 69 6e 73 65 72 74 65 64 20 69  value inserted i
47d0: 6e 74 6f 20 25 73 20 6f 72 20 25 71 2e 0a 2a 2f  nto %s or %q..*/
47e0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
47f0: 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74  _get_table_print
4800: 66 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  f(.  void *NotUs
4810: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
4820: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
4830: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
4840: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
4850: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
4860: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
4870: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
4880: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
4890: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
48a0: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
48b0: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
48c0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
48d0: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 54 63 6c  lite3 *db;.  Tcl
48e0: 5f 44 53 74 72 69 6e 67 20 73 74 72 3b 0a 20 20  _DString str;.  
48f0: 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a  int rc;.  char *
4900: 7a 45 72 72 20 3d 20 30 3b 0a 20 20 69 6e 74 20  zErr = 0;.  int 
4910: 6e 52 6f 77 2c 20 6e 43 6f 6c 3b 0a 20 20 63 68  nRow, nCol;.  ch
4920: 61 72 20 2a 2a 61 52 65 73 75 6c 74 3b 0a 20 20  ar **aResult;.  
4930: 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 7a 42  int i;.  char zB
4940: 75 66 5b 33 30 5d 3b 0a 20 20 63 68 61 72 20 2a  uf[30];.  char *
4950: 7a 53 71 6c 3b 0a 20 20 69 6e 74 20 72 65 73 43  zSql;.  int resC
4960: 6f 75 6e 74 20 3d 20 2d 31 3b 0a 20 20 69 66 28  ount = -1;.  if(
4970: 20 61 72 67 63 3d 3d 35 20 29 7b 0a 20 20 20 20   argc==5 ){.    
4980: 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69  if( Tcl_GetInt(i
4990: 6e 74 65 72 70 2c 20 61 72 67 76 5b 34 5d 2c 20  nterp, argv[4], 
49a0: 26 72 65 73 43 6f 75 6e 74 29 20 29 20 72 65 74  &resCount) ) ret
49b0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
49c0: 20 7d 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34   }.  if( argc!=4
49d0: 20 26 26 20 61 72 67 63 21 3d 35 20 29 7b 0a 20   && argc!=5 ){. 
49e0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
49f0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
4a00: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
4a10: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
4a20: 5d 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 20  ], .       " DB 
4a30: 46 4f 52 4d 41 54 20 53 54 52 49 4e 47 20 3f 43  FORMAT STRING ?C
4a40: 4f 55 4e 54 3f 22 2c 20 30 29 3b 0a 20 20 20 20  OUNT?", 0);.    
4a50: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
4a60: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
4a70: 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
4a80: 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29   argv[1], &db) )
4a90: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
4aa0: 52 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67  R;.  Tcl_DString
4ab0: 49 6e 69 74 28 26 73 74 72 29 3b 0a 20 20 7a 53  Init(&str);.  zS
4ac0: 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ql = sqlite3_mpr
4ad0: 69 6e 74 66 28 61 72 67 76 5b 32 5d 2c 61 72 67  intf(argv[2],arg
4ae0: 76 5b 33 5d 29 3b 0a 20 20 69 66 28 20 61 72 67  v[3]);.  if( arg
4af0: 63 3d 3d 35 20 29 7b 0a 20 20 20 20 72 63 20 3d  c==5 ){.    rc =
4b00: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62   sqlite3_get_tab
4b10: 6c 65 28 64 62 2c 20 7a 53 71 6c 2c 20 26 61 52  le(db, zSql, &aR
4b20: 65 73 75 6c 74 2c 20 30 2c 20 30 2c 20 26 7a 45  esult, 0, 0, &zE
4b30: 72 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  rr);.  }else{.  
4b40: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 67    rc = sqlite3_g
4b50: 65 74 5f 74 61 62 6c 65 28 64 62 2c 20 7a 53 71  et_table(db, zSq
4b60: 6c 2c 20 26 61 52 65 73 75 6c 74 2c 20 26 6e 52  l, &aResult, &nR
4b70: 6f 77 2c 20 26 6e 43 6f 6c 2c 20 26 7a 45 72 72  ow, &nCol, &zErr
4b80: 29 3b 0a 20 20 20 20 72 65 73 43 6f 75 6e 74 20  );.    resCount 
4b90: 3d 20 28 6e 52 6f 77 2b 31 29 2a 6e 43 6f 6c 3b  = (nRow+1)*nCol;
4ba0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66  .  }.  sqlite3_f
4bb0: 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 73 70 72  ree(zSql);.  spr
4bc0: 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c  intf(zBuf, "%d",
4bd0: 20 72 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65   rc);.  Tcl_Appe
4be0: 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
4bf0: 2c 20 7a 42 75 66 29 3b 0a 20 20 69 66 28 20 72  , zBuf);.  if( r
4c00: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
4c10: 20 20 20 20 69 66 28 20 61 72 67 63 3d 3d 34 20      if( argc==4 
4c20: 29 7b 0a 20 20 20 20 20 20 73 70 72 69 6e 74 66  ){.      sprintf
4c30: 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 6e 52 6f  (zBuf, "%d", nRo
4c40: 77 29 3b 0a 20 20 20 20 20 20 54 63 6c 5f 41 70  w);.      Tcl_Ap
4c50: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
4c60: 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 20  rp, zBuf);.     
4c70: 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22   sprintf(zBuf, "
4c80: 25 64 22 2c 20 6e 43 6f 6c 29 3b 0a 20 20 20 20  %d", nCol);.    
4c90: 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d    Tcl_AppendElem
4ca0: 65 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ent(interp, zBuf
4cb0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72  );.    }.    for
4cc0: 28 69 3d 30 3b 20 69 3c 72 65 73 43 6f 75 6e 74  (i=0; i<resCount
4cd0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 54 63  ; i++){.      Tc
4ce0: 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  l_AppendElement(
4cf0: 69 6e 74 65 72 70 2c 20 61 52 65 73 75 6c 74 5b  interp, aResult[
4d00: 69 5d 20 3f 20 61 52 65 73 75 6c 74 5b 69 5d 20  i] ? aResult[i] 
4d10: 3a 20 22 4e 55 4c 4c 22 29 3b 0a 20 20 20 20 7d  : "NULL");.    }
4d20: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 54 63  .  }else{.    Tc
4d30: 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  l_AppendElement(
4d40: 69 6e 74 65 72 70 2c 20 7a 45 72 72 29 3b 0a 20  interp, zErr);. 
4d50: 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65   }.  sqlite3_fre
4d60: 65 5f 74 61 62 6c 65 28 61 52 65 73 75 6c 74 29  e_table(aResult)
4d70: 3b 0a 20 20 69 66 28 20 7a 45 72 72 20 29 20 73  ;.  if( zErr ) s
4d80: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72  qlite3_free(zErr
4d90: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
4da0: 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
4db0: 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65  rp, db, rc) ) re
4dc0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
4dd0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
4de0: 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .}..#endif /* SQ
4df0: 4c 49 54 45 5f 4f 4d 49 54 5f 47 45 54 5f 54 41  LITE_OMIT_GET_TA
4e00: 42 4c 45 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 55  BLE */.../*.** U
4e10: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6c  sage:  sqlite3_l
4e20: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
4e30: 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e   DB.**.** Return
4e40: 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 52 4f  s the integer RO
4e50: 57 49 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20  WID of the most 
4e60: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 2e 0a 2a  recent insert..*
4e70: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
4e80: 74 5f 6c 61 73 74 5f 72 6f 77 69 64 28 0a 20 20  t_last_rowid(.  
4e90: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
4ea0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
4eb0: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
4ec0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
4ed0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
4ee0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
4ef0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
4f00: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4f10: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
4f20: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
4f30: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
4f40: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
4f50: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
4f60: 20 2a 64 62 3b 0a 20 20 63 68 61 72 20 7a 42 75   *db;.  char zBu
4f70: 66 5b 33 30 5d 3b 0a 0a 20 20 69 66 28 20 61 72  f[30];..  if( ar
4f80: 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
4f90: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
4fa0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
4fb0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
4fc0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44  "", argv[0], " D
4fd0: 42 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  B\"", 0);.    re
4fe0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
4ff0: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
5000: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
5010: 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
5020: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
5030: 0a 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c  .  sprintf(zBuf,
5040: 20 22 25 6c 6c 64 22 2c 20 73 71 6c 69 74 65 33   "%lld", sqlite3
5050: 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
5060: 69 64 28 64 62 29 29 3b 0a 20 20 54 63 6c 5f 41  id(db));.  Tcl_A
5070: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
5080: 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20  rp, zBuf, 0);.  
5090: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
50a0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
50b0: 3a 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 20 44  :  sqlite3_key D
50c0: 42 20 4b 45 59 0a 2a 2a 0a 2a 2a 20 53 65 74 20  B KEY.**.** Set 
50d0: 74 68 65 20 63 6f 64 65 63 20 6b 65 79 2e 0a 2a  the codec key..*
50e0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
50f0: 74 5f 6b 65 79 28 0a 20 20 76 6f 69 64 20 2a 4e  t_key(.  void *N
5100: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
5110: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
5120: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
5130: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
5140: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
5150: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
5160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5170: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
5180: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
5190: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
51a0: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
51b0: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
51c0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
51d0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65   const char *zKe
51e0: 79 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20  y;.  int nKey;. 
51f0: 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a   if( argc!=3 ){.
5200: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
5210: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
5220: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
5230: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
5240: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c  0],.       " FIL
5250: 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20  ENAME\"", 0);.  
5260: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
5270: 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
5280: 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
5290: 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
52a0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
52b0: 52 4f 52 3b 0a 20 20 7a 4b 65 79 20 3d 20 61 72  ROR;.  zKey = ar
52c0: 67 76 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20 3d 20  gv[2];.  nKey = 
52d0: 73 74 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a 23 69  strlen(zKey);.#i
52e0: 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f  fdef SQLITE_HAS_
52f0: 43 4f 44 45 43 0a 20 20 73 71 6c 69 74 65 33 5f  CODEC.  sqlite3_
5300: 6b 65 79 28 64 62 2c 20 7a 4b 65 79 2c 20 6e 4b  key(db, zKey, nK
5310: 65 79 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65  ey);.#endif.  re
5320: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
5330: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
5340: 6c 69 74 65 33 5f 72 65 6b 65 79 20 44 42 20 4b  lite3_rekey DB K
5350: 45 59 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20  EY.**.** Change 
5360: 74 68 65 20 63 6f 64 65 63 20 6b 65 79 2e 0a 2a  the codec key..*
5370: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
5380: 74 5f 72 65 6b 65 79 28 0a 20 20 76 6f 69 64 20  t_rekey(.  void 
5390: 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f  *NotUsed,.  Tcl_
53a0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
53b0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
53c0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
53d0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
53e0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67  and */.  int arg
53f0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
5400: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
5410: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72  uments */.  char
5420: 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20   **argv         
5430: 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61     /* Text of ea
5440: 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29  ch argument */.)
5450: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
5460: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
5470: 4b 65 79 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b  Key;.  int nKey;
5480: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
5490: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
54a0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
54b0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
54c0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
54d0: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
54e0: 49 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a  ILENAME\"", 0);.
54f0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
5500: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
5510: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
5520: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
5530: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
5540: 45 52 52 4f 52 3b 0a 20 20 7a 4b 65 79 20 3d 20  ERROR;.  zKey = 
5550: 61 72 67 76 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20  argv[2];.  nKey 
5560: 3d 20 73 74 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a  = strlen(zKey);.
5570: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41  #ifdef SQLITE_HA
5580: 53 5f 43 4f 44 45 43 0a 20 20 73 71 6c 69 74 65  S_CODEC.  sqlite
5590: 33 5f 72 65 6b 65 79 28 64 62 2c 20 7a 4b 65 79  3_rekey(db, zKey
55a0: 2c 20 6e 4b 65 79 29 3b 0a 23 65 6e 64 69 66 0a  , nKey);.#endif.
55b0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
55c0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
55d0: 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20    sqlite3_close 
55e0: 44 42 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 73 20  DB.**.** Closes 
55f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 6f 70 65  the database ope
5600: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6f  ned by sqlite3_o
5610: 70 65 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  pen..*/.static i
5620: 6e 74 20 73 71 6c 69 74 65 5f 74 65 73 74 5f 63  nt sqlite_test_c
5630: 6c 6f 73 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  lose(.  void *No
5640: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
5650: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
5660: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
5670: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
5680: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
5690: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
56a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
56b0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
56c0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
56d0: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
56e0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
56f0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
5700: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
5710: 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 61 72  int rc;.  if( ar
5720: 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
5730: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
5740: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
5750: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
5760: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
5770: 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22      " FILENAME\"
5780: 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
5790: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
57a0: 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
57b0: 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
57c0: 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
57d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
57e0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6c 6f  rc = sqlite3_clo
57f0: 73 65 28 64 62 29 3b 0a 20 20 54 63 6c 5f 53 65  se(db);.  Tcl_Se
5800: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
5810: 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e  (char *)t1ErrorN
5820: 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  ame(rc), TCL_STA
5830: 54 49 43 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  TIC);.  return T
5840: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
5850: 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  Implementation o
5860: 66 20 74 68 65 20 78 5f 63 6f 61 6c 65 73 63 65  f the x_coalesce
5870: 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20  () function..** 
5880: 52 65 74 75 72 6e 20 74 68 65 20 66 69 72 73 74  Return the first
5890: 20 61 72 67 75 6d 65 6e 74 20 6e 6f 6e 2d 4e 55   argument non-NU
58a0: 4c 4c 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  LL argument..*/.
58b0: 73 74 61 74 69 63 20 76 6f 69 64 20 74 31 5f 69  static void t1_i
58c0: 66 6e 75 6c 6c 46 75 6e 63 28 0a 20 20 73 71 6c  fnullFunc(.  sql
58d0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f  ite3_context *co
58e0: 6e 74 65 78 74 2c 0a 20 20 69 6e 74 20 61 72 67  ntext,.  int arg
58f0: 63 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  c,.  sqlite3_val
5900: 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69  ue **argv.){.  i
5910: 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  nt i;.  for(i=0;
5920: 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20   i<argc; i++){. 
5930: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 55     if( SQLITE_NU
5940: 4c 4c 21 3d 73 71 6c 69 74 65 33 5f 76 61 6c 75  LL!=sqlite3_valu
5950: 65 5f 74 79 70 65 28 61 72 67 76 5b 69 5d 29 20  e_type(argv[i]) 
5960: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d  ){.      int n =
5970: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62   sqlite3_value_b
5980: 79 74 65 73 28 61 72 67 76 5b 69 5d 29 3b 0a 20  ytes(argv[i]);. 
5990: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
59a0: 75 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74  ult_text(context
59b0: 2c 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  , (char*)sqlite3
59c0: 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76  _value_text(argv
59d0: 5b 69 5d 29 2c 0a 20 20 20 20 20 20 20 20 20 20  [i]),.          
59e0: 6e 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  n, SQLITE_TRANSI
59f0: 45 4e 54 29 3b 0a 20 20 20 20 20 20 62 72 65 61  ENT);.      brea
5a00: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  k;.    }.  }.}..
5a10: 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 61 72 65 20  /*.** These are 
5a20: 74 65 73 74 20 66 75 6e 63 74 69 6f 6e 73 2e 20  test functions. 
5a30: 20 20 20 68 65 78 38 28 29 20 69 6e 74 65 72 70     hex8() interp
5a40: 72 65 74 73 20 69 74 73 20 61 72 67 75 6d 65 6e  rets its argumen
5a50: 74 20 61 73 0a 2a 2a 20 55 54 46 38 20 61 6e 64  t as.** UTF8 and
5a60: 20 72 65 74 75 72 6e 73 20 61 20 68 65 78 20 65   returns a hex e
5a70: 6e 63 6f 64 69 6e 67 2e 20 20 68 65 78 31 36 6c  ncoding.  hex16l
5a80: 65 28 29 20 69 6e 74 65 72 70 72 65 74 73 20 69  e() interprets i
5a90: 74 73 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20 61  ts argument.** a
5aa0: 73 20 55 54 46 31 36 6c 65 20 61 6e 64 20 72 65  s UTF16le and re
5ab0: 74 75 72 6e 73 20 61 20 68 65 78 20 65 6e 63 6f  turns a hex enco
5ac0: 64 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ding..*/.static 
5ad0: 76 6f 69 64 20 68 65 78 38 46 75 6e 63 28 73 71  void hex8Func(sq
5ae0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
5af0: 2c 20 69 6e 74 20 61 72 67 63 2c 20 73 71 6c 69  , int argc, sqli
5b00: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76  te3_value **argv
5b10: 29 7b 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69 67  ){.  const unsig
5b20: 6e 65 64 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  ned char *z;.  i
5b30: 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 7a 42 75  nt i;.  char zBu
5b40: 66 5b 32 30 30 5d 3b 0a 20 20 7a 20 3d 20 73 71  f[200];.  z = sq
5b50: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
5b60: 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 66 6f 72  (argv[0]);.  for
5b70: 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a  (i=0; i<sizeof(z
5b80: 42 75 66 29 2f 32 20 2d 20 32 20 26 26 20 7a 5b  Buf)/2 - 2 && z[
5b90: 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 70  i]; i++){.    sp
5ba0: 72 69 6e 74 66 28 26 7a 42 75 66 5b 69 2a 32 5d  rintf(&zBuf[i*2]
5bb0: 2c 20 22 25 30 32 78 22 2c 20 7a 5b 69 5d 26 30  , "%02x", z[i]&0
5bc0: 78 66 66 29 3b 0a 20 20 7d 0a 20 20 7a 42 75 66  xff);.  }.  zBuf
5bd0: 5b 69 2a 32 5d 20 3d 20 30 3b 0a 20 20 73 71 6c  [i*2] = 0;.  sql
5be0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
5bf0: 28 70 2c 20 28 63 68 61 72 2a 29 7a 42 75 66 2c  (p, (char*)zBuf,
5c00: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e   -1, SQLITE_TRAN
5c10: 53 49 45 4e 54 29 3b 0a 7d 0a 23 69 66 6e 64 65  SIENT);.}.#ifnde
5c20: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
5c30: 46 31 36 0a 73 74 61 74 69 63 20 76 6f 69 64 20  F16.static void 
5c40: 68 65 78 31 36 46 75 6e 63 28 73 71 6c 69 74 65  hex16Func(sqlite
5c50: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 2c 20 69 6e  3_context *p, in
5c60: 74 20 61 72 67 63 2c 20 73 71 6c 69 74 65 33 5f  t argc, sqlite3_
5c70: 76 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a 20  value **argv){. 
5c80: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
5c90: 73 68 6f 72 74 20 69 6e 74 20 2a 7a 3b 0a 20 20  short int *z;.  
5ca0: 69 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 7a 42  int i;.  char zB
5cb0: 75 66 5b 34 30 30 5d 3b 0a 20 20 7a 20 3d 20 73  uf[400];.  z = s
5cc0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
5cd0: 74 31 36 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20  t16(argv[0]);.  
5ce0: 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f  for(i=0; i<sizeo
5cf0: 66 28 7a 42 75 66 29 2f 34 20 2d 20 34 20 26 26  f(zBuf)/4 - 4 &&
5d00: 20 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20   z[i]; i++){.   
5d10: 20 73 70 72 69 6e 74 66 28 26 7a 42 75 66 5b 69   sprintf(&zBuf[i
5d20: 2a 34 5d 2c 20 22 25 30 34 78 22 2c 20 7a 5b 69  *4], "%04x", z[i
5d30: 5d 26 30 78 66 66 29 3b 0a 20 20 7d 0a 20 20 7a  ]&0xff);.  }.  z
5d40: 42 75 66 5b 69 2a 34 5d 20 3d 20 30 3b 0a 20 20  Buf[i*4] = 0;.  
5d50: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
5d60: 65 78 74 28 70 2c 20 28 63 68 61 72 2a 29 7a 42  ext(p, (char*)zB
5d70: 75 66 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54  uf, -1, SQLITE_T
5d80: 52 41 4e 53 49 45 4e 54 29 3b 0a 7d 0a 23 65 6e  RANSIENT);.}.#en
5d90: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 74 72  dif../*.** A str
5da0: 75 63 74 75 72 65 20 69 6e 74 6f 20 77 68 69 63  ucture into whic
5db0: 68 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20  h to accumulate 
5dc0: 74 65 78 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  text..*/.struct 
5dd0: 64 73 74 72 20 7b 0a 20 20 69 6e 74 20 6e 41 6c  dstr {.  int nAl
5de0: 6c 6f 63 3b 20 20 2f 2a 20 53 70 61 63 65 20 61  loc;  /* Space a
5df0: 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 69 6e  llocated */.  in
5e00: 74 20 6e 55 73 65 64 3b 20 20 20 2f 2a 20 53 70  t nUsed;   /* Sp
5e10: 61 63 65 20 75 73 65 64 20 2a 2f 0a 20 20 63 68  ace used */.  ch
5e20: 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 68  ar *z;     /* Th
5e30: 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e space */.};../
5e40: 2a 0a 2a 2a 20 41 70 70 65 6e 64 20 74 65 78 74  *.** Append text
5e50: 20 74 6f 20 61 20 64 73 74 72 0a 2a 2f 0a 73 74   to a dstr.*/.st
5e60: 61 74 69 63 20 76 6f 69 64 20 64 73 74 72 41 70  atic void dstrAp
5e70: 70 65 6e 64 28 73 74 72 75 63 74 20 64 73 74 72  pend(struct dstr
5e80: 20 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20   *p, const char 
5e90: 2a 7a 2c 20 69 6e 74 20 64 69 76 69 64 65 72 29  *z, int divider)
5ea0: 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c  {.  int n = strl
5eb0: 65 6e 28 7a 29 3b 0a 20 20 69 66 28 20 70 2d 3e  en(z);.  if( p->
5ec0: 6e 55 73 65 64 20 2b 20 6e 20 2b 20 32 20 3e 20  nUsed + n + 2 > 
5ed0: 70 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20  p->nAlloc ){.   
5ee0: 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 20   char *zNew;.   
5ef0: 20 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 70 2d 3e   p->nAlloc = p->
5f00: 6e 41 6c 6c 6f 63 2a 32 20 2b 20 6e 20 2b 20 32  nAlloc*2 + n + 2
5f10: 30 30 3b 0a 20 20 20 20 7a 4e 65 77 20 3d 20 73  00;.    zNew = s
5f20: 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 28 70  qlite3_realloc(p
5f30: 2d 3e 7a 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b  ->z, p->nAlloc);
5f40: 0a 20 20 20 20 69 66 28 20 7a 4e 65 77 3d 3d 30  .    if( zNew==0
5f50: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
5f60: 33 5f 66 72 65 65 28 70 2d 3e 7a 29 3b 0a 20 20  3_free(p->z);.  
5f70: 20 20 20 20 6d 65 6d 73 65 74 28 70 2c 20 30 2c      memset(p, 0,
5f80: 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 20 20   sizeof(*p));.  
5f90: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20      return;.    
5fa0: 7d 0a 20 20 20 20 70 2d 3e 7a 20 3d 20 7a 4e 65  }.    p->z = zNe
5fb0: 77 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 69 76  w;.  }.  if( div
5fc0: 69 64 65 72 20 26 26 20 70 2d 3e 6e 55 73 65 64  ider && p->nUsed
5fd0: 3e 30 20 29 7b 0a 20 20 20 20 70 2d 3e 7a 5b 70  >0 ){.    p->z[p
5fe0: 2d 3e 6e 55 73 65 64 2b 2b 5d 20 3d 20 64 69 76  ->nUsed++] = div
5ff0: 69 64 65 72 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63  ider;.  }.  memc
6000: 70 79 28 26 70 2d 3e 7a 5b 70 2d 3e 6e 55 73 65  py(&p->z[p->nUse
6010: 64 5d 2c 20 7a 2c 20 6e 2b 31 29 3b 0a 20 20 70  d], z, n+1);.  p
6020: 2d 3e 6e 55 73 65 64 20 2b 3d 20 6e 3b 0a 7d 0a  ->nUsed += n;.}.
6030: 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 64 20 66  ./*.** Invoked f
6040: 6f 72 20 65 61 63 68 20 63 61 6c 6c 62 61 63 6b  or each callback
6050: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 45 78 65   from sqlite3Exe
6060: 63 46 75 6e 63 0a 2a 2f 0a 73 74 61 74 69 63 20  cFunc.*/.static 
6070: 69 6e 74 20 65 78 65 63 46 75 6e 63 43 61 6c 6c  int execFuncCall
6080: 62 61 63 6b 28 76 6f 69 64 20 2a 70 44 61 74 61  back(void *pData
6090: 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72  , int argc, char
60a0: 20 2a 2a 61 72 67 76 2c 20 63 68 61 72 20 2a 2a   **argv, char **
60b0: 4e 6f 74 55 73 65 64 29 7b 0a 20 20 73 74 72 75  NotUsed){.  stru
60c0: 63 74 20 64 73 74 72 20 2a 70 20 3d 20 28 73 74  ct dstr *p = (st
60d0: 72 75 63 74 20 64 73 74 72 2a 29 70 44 61 74 61  ruct dstr*)pData
60e0: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72  ;.  int i;.  for
60f0: 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b  (i=0; i<argc; i+
6100: 2b 29 7b 0a 20 20 20 20 69 66 28 20 61 72 67 76  +){.    if( argv
6110: 5b 69 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  [i]==0 ){.      
6120: 64 73 74 72 41 70 70 65 6e 64 28 70 2c 20 22 4e  dstrAppend(p, "N
6130: 55 4c 4c 22 2c 20 27 20 27 29 3b 0a 20 20 20 20  ULL", ' ');.    
6140: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 73 74  }else{.      dst
6150: 72 41 70 70 65 6e 64 28 70 2c 20 61 72 67 76 5b  rAppend(p, argv[
6160: 69 5d 2c 20 27 20 27 29 3b 0a 20 20 20 20 7d 0a  i], ' ');.    }.
6170: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
6180: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65  }../*.** Impleme
6190: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 78  ntation of the x
61a0: 5f 73 71 6c 69 74 65 5f 65 78 65 63 28 29 20 66  _sqlite_exec() f
61b0: 75 6e 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 66  unction.  This f
61c0: 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 0a 2a 2a  unction takes.**
61d0: 20 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65   a single argume
61e0: 6e 74 20 61 6e 64 20 61 74 74 65 6d 70 74 73 20  nt and attempts 
61f0: 74 6f 20 65 78 65 63 75 74 65 20 74 68 61 74 20  to execute that 
6200: 61 72 67 75 6d 65 6e 74 20 61 73 20 53 51 4c 20  argument as SQL 
6210: 63 6f 64 65 2e 0a 2a 2a 20 54 68 69 73 20 69 73  code..** This is
6220: 20 69 6c 6c 65 67 61 6c 20 61 6e 64 20 73 68 6f   illegal and sho
6230: 75 6c 64 20 73 65 74 20 74 68 65 20 53 51 4c 49  uld set the SQLI
6240: 54 45 5f 4d 49 53 55 53 45 20 66 6c 61 67 20 6f  TE_MISUSE flag o
6250: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a  n the database..
6260: 2a 2a 0a 2a 2a 20 32 30 30 34 2d 4a 61 6e 2d 30  **.** 2004-Jan-0
6270: 37 3a 20 20 57 65 20 68 61 76 65 20 63 68 61 6e  7:  We have chan
6280: 67 65 64 20 74 68 69 73 20 74 6f 20 6d 61 6b 65  ged this to make
6290: 20 69 74 20 6c 65 67 61 6c 20 74 6f 20 63 61 6c   it legal to cal
62a0: 6c 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  l sqlite3_exec()
62b0: 0a 2a 2a 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  .** from within 
62c0: 61 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 2e  a function call.
62d0: 20 20 0a 2a 2a 20 0a 2a 2a 20 54 68 69 73 20 72    .** .** This r
62e0: 6f 75 74 69 6e 65 20 73 69 6d 75 6c 61 74 65 73  outine simulates
62f0: 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 68   the effect of h
6300: 61 76 69 6e 67 20 74 77 6f 20 74 68 72 65 61 64  aving two thread
6310: 73 20 61 74 74 65 6d 70 74 20 74 6f 0a 2a 2a 20  s attempt to.** 
6320: 75 73 65 20 74 68 65 20 73 61 6d 65 20 64 61 74  use the same dat
6330: 61 62 61 73 65 20 61 74 20 74 68 65 20 73 61 6d  abase at the sam
6340: 65 20 74 69 6d 65 2e 0a 2a 2f 0a 73 74 61 74 69  e time..*/.stati
6350: 63 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  c void sqlite3Ex
6360: 65 63 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65  ecFunc(.  sqlite
6370: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65  3_context *conte
6380: 78 74 2c 20 0a 20 20 69 6e 74 20 61 72 67 63 2c  xt, .  int argc,
6390: 20 20 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c    .  sqlite3_val
63a0: 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73  ue **argv.){.  s
63b0: 74 72 75 63 74 20 64 73 74 72 20 78 3b 0a 20 20  truct dstr x;.  
63c0: 6d 65 6d 73 65 74 28 26 78 2c 20 30 2c 20 73 69  memset(&x, 0, si
63d0: 7a 65 6f 66 28 78 29 29 3b 0a 20 20 28 76 6f 69  zeof(x));.  (voi
63e0: 64 29 73 71 6c 69 74 65 33 5f 65 78 65 63 28 28  d)sqlite3_exec((
63f0: 73 71 6c 69 74 65 33 2a 29 73 71 6c 69 74 65 33  sqlite3*)sqlite3
6400: 5f 75 73 65 72 5f 64 61 74 61 28 63 6f 6e 74 65  _user_data(conte
6410: 78 74 29 2c 0a 20 20 20 20 20 20 28 63 68 61 72  xt),.      (char
6420: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
6430: 74 65 78 74 28 61 72 67 76 5b 30 5d 29 2c 0a 20  text(argv[0]),. 
6440: 20 20 20 20 20 65 78 65 63 46 75 6e 63 43 61 6c       execFuncCal
6450: 6c 62 61 63 6b 2c 20 26 78 2c 20 30 29 3b 0a 20  lback, &x, 0);. 
6460: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
6470: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 78 2e  text(context, x.
6480: 7a 2c 20 78 2e 6e 55 73 65 64 2c 20 53 51 4c 49  z, x.nUsed, SQLI
6490: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  TE_TRANSIENT);. 
64a0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 78 2e   sqlite3_free(x.
64b0: 7a 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70  z);.}../*.** Imp
64c0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
64d0: 6b 74 32 32 31 33 66 75 6e 63 28 29 2c 20 61 20  kt2213func(), a 
64e0: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
64f0: 74 68 61 74 20 74 61 6b 65 73 20 65 78 61 63 74  that takes exact
6500: 6c 79 0a 2a 2a 20 6f 6e 65 20 61 72 67 75 6d 65  ly.** one argume
6510: 6e 74 2e 20 49 74 20 68 61 73 20 74 77 6f 20 69  nt. It has two i
6520: 6e 74 65 72 65 73 74 69 6e 67 20 66 65 61 74 75  nteresting featu
6530: 72 65 73 3a 0a 2a 2a 0a 2a 2a 20 2a 20 49 74 20  res:.**.** * It 
6540: 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 5f 76 61  calls sqlite3_va
6550: 6c 75 65 5f 74 65 78 74 28 29 20 33 20 74 69 6d  lue_text() 3 tim
6560: 65 73 20 6f 6e 20 74 68 65 20 61 72 67 75 6d 65  es on the argume
6570: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
6580: 2a 2e 0a 2a 2a 20 20 20 49 66 20 74 68 65 20 74  *..**   If the t
6590: 68 72 65 65 20 70 6f 69 6e 74 65 72 73 20 72 65  hree pointers re
65a0: 74 75 72 6e 65 64 20 61 72 65 20 6e 6f 74 20 74  turned are not t
65b0: 68 65 20 73 61 6d 65 20 61 6e 20 53 51 4c 20 65  he same an SQL e
65c0: 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 2e 0a  rror is raised..
65d0: 2a 2a 0a 2a 2a 20 2a 20 4f 74 68 65 72 77 69 73  **.** * Otherwis
65e0: 65 20 69 74 20 72 65 74 75 72 6e 73 20 61 20 63  e it returns a c
65f0: 6f 70 79 20 6f 66 20 74 68 65 20 74 65 78 74 20  opy of the text 
6600: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
6610: 66 20 69 74 73 20 0a 2a 2a 20 20 20 61 72 67 75  f its .**   argu
6620: 6d 65 6e 74 20 69 6e 20 73 75 63 68 20 61 20 77  ment in such a w
6630: 61 79 20 61 73 20 74 68 65 20 56 44 42 45 20 72  ay as the VDBE r
6640: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
6650: 20 61 20 4d 65 6d 2a 20 63 65 6c 6c 20 0a 2a 2a   a Mem* cell .**
6660: 20 20 20 77 69 74 68 20 74 68 65 20 4d 45 4d 5f     with the MEM_
6670: 54 65 72 6d 20 66 6c 61 67 20 63 6c 65 61 72 2e  Term flag clear.
6680: 20 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23   .**.** Ticket #
6690: 32 32 31 33 20 63 61 6e 20 74 68 65 72 65 66 6f  2213 can therefo
66a0: 72 65 20 62 65 20 74 65 73 74 65 64 20 62 79 20  re be tested by 
66b0: 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 66  evaluating the f
66c0: 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 53 51 4c 20  ollowing.** SQL 
66d0: 65 78 70 72 65 73 73 69 6f 6e 3a 0a 2a 2a 0a 2a  expression:.**.*
66e0: 2a 20 20 20 74 6b 74 32 32 31 33 66 75 6e 63 28  *   tkt2213func(
66f0: 74 6b 74 32 32 31 33 66 75 6e 63 28 27 61 20 73  tkt2213func('a s
6700: 74 72 69 6e 67 27 29 29 3b 0a 2a 2f 0a 73 74 61  tring'));.*/.sta
6710: 74 69 63 20 76 6f 69 64 20 74 6b 74 32 32 31 33  tic void tkt2213
6720: 46 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69  Function(.  sqli
6730: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
6740: 74 65 78 74 2c 20 0a 20 20 69 6e 74 20 61 72 67  text, .  int arg
6750: 63 2c 20 20 0a 20 20 73 71 6c 69 74 65 33 5f 76  c,  .  sqlite3_v
6760: 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20  alue **argv.){. 
6770: 20 69 6e 74 20 6e 54 65 78 74 3b 0a 20 20 75 6e   int nText;.  un
6780: 73 69 67 6e 65 64 20 63 68 61 72 20 63 6f 6e 73  signed char cons
6790: 74 20 2a 7a 54 65 78 74 31 3b 0a 20 20 75 6e 73  t *zText1;.  uns
67a0: 69 67 6e 65 64 20 63 68 61 72 20 63 6f 6e 73 74  igned char const
67b0: 20 2a 7a 54 65 78 74 32 3b 0a 20 20 75 6e 73 69   *zText2;.  unsi
67c0: 67 6e 65 64 20 63 68 61 72 20 63 6f 6e 73 74 20  gned char const 
67d0: 2a 7a 54 65 78 74 33 3b 0a 0a 20 20 6e 54 65 78  *zText3;..  nTex
67e0: 74 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  t = sqlite3_valu
67f0: 65 5f 62 79 74 65 73 28 61 72 67 76 5b 30 5d 29  e_bytes(argv[0])
6800: 3b 0a 20 20 7a 54 65 78 74 31 20 3d 20 73 71 6c  ;.  zText1 = sql
6810: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
6820: 61 72 67 76 5b 30 5d 29 3b 0a 20 20 7a 54 65 78  argv[0]);.  zTex
6830: 74 32 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c  t2 = sqlite3_val
6840: 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29  ue_text(argv[0])
6850: 3b 0a 20 20 7a 54 65 78 74 33 20 3d 20 73 71 6c  ;.  zText3 = sql
6860: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
6870: 61 72 67 76 5b 30 5d 29 3b 0a 0a 20 20 69 66 28  argv[0]);..  if(
6880: 20 7a 54 65 78 74 31 21 3d 7a 54 65 78 74 32 20   zText1!=zText2 
6890: 7c 7c 20 7a 54 65 78 74 32 21 3d 7a 54 65 78 74  || zText2!=zText
68a0: 33 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  3 ){.    sqlite3
68b0: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f  _result_error(co
68c0: 6e 74 65 78 74 2c 20 22 74 6b 74 32 32 31 33 20  ntext, "tkt2213 
68d0: 69 73 20 6e 6f 74 20 66 69 78 65 64 22 2c 20 2d  is not fixed", -
68e0: 31 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1);.  }else{.   
68f0: 20 63 68 61 72 20 2a 7a 43 6f 70 79 20 3d 20 28   char *zCopy = (
6900: 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 5f 6d  char *)sqlite3_m
6910: 61 6c 6c 6f 63 28 6e 54 65 78 74 29 3b 0a 20 20  alloc(nText);.  
6920: 20 20 6d 65 6d 63 70 79 28 7a 43 6f 70 79 2c 20    memcpy(zCopy, 
6930: 7a 54 65 78 74 31 2c 20 6e 54 65 78 74 29 3b 0a  zText1, nText);.
6940: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
6950: 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  lt_text(context,
6960: 20 7a 43 6f 70 79 2c 20 6e 54 65 78 74 2c 20 73   zCopy, nText, s
6970: 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20  qlite3_free);.  
6980: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  }.}../*.** The f
6990: 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c 20 66 75 6e  ollowing SQL fun
69a0: 63 74 69 6f 6e 20 74 61 6b 65 73 20 34 20 61 72  ction takes 4 ar
69b0: 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 20 32 6e  guments.  The 2n
69c0: 64 20 61 6e 64 0a 2a 2a 20 34 74 68 20 61 72 67  d and.** 4th arg
69d0: 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 6f 6e  ument must be on
69e0: 65 20 6f 66 20 74 68 65 73 65 20 73 74 72 69 6e  e of these strin
69f0: 67 73 3a 20 20 27 74 65 78 74 27 2c 20 27 74 65  gs:  'text', 'te
6a00: 78 74 31 36 27 2c 0a 2a 2a 20 6f 72 20 27 62 6c  xt16',.** or 'bl
6a10: 6f 62 27 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ob' correspondin
6a20: 67 20 74 6f 20 41 50 49 20 66 75 6e 63 74 69 6f  g to API functio
6a30: 6e 73 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 73 71  ns.**.**      sq
6a40: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
6a50: 28 29 0a 2a 2a 20 20 20 20 20 20 73 71 6c 69 74  ().**      sqlit
6a60: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28  e3_value_text16(
6a70: 29 0a 2a 2a 20 20 20 20 20 20 73 71 6c 69 74 65  ).**      sqlite
6a80: 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 29 0a 2a  3_value_blob().*
6a90: 2a 0a 2a 2a 20 54 68 65 20 74 68 69 72 64 20 61  *.** The third a
6aa0: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 73 74 72  rgument is a str
6ab0: 69 6e 67 2c 20 65 69 74 68 65 72 20 27 62 79 74  ing, either 'byt
6ac0: 65 73 27 20 6f 72 20 27 62 79 74 65 73 31 36 27  es' or 'bytes16'
6ad0: 20 6f 72 20 27 6e 6f 6f 70 27 2c 0a 2a 2a 20 63   or 'noop',.** c
6ae0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
6af0: 41 50 49 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  APIs:.**.**     
6b00: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62   sqlite3_value_b
6b10: 79 74 65 73 28 29 0a 2a 2a 20 20 20 20 20 20 73  ytes().**      s
6b20: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
6b30: 65 73 31 36 28 29 0a 2a 2a 20 20 20 20 20 20 6e  es16().**      n
6b40: 6f 6f 70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 41 50  oop.**.** The AP
6b50: 49 73 20 64 65 73 69 67 6e 61 74 65 64 20 62 79  Is designated by
6b60: 20 74 68 65 20 32 6e 64 20 74 68 72 6f 75 67 68   the 2nd through
6b70: 20 34 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61   4th arguments a
6b80: 72 65 20 61 70 70 6c 69 65 64 0a 2a 2a 20 74 6f  re applied.** to
6b90: 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   the first argum
6ba0: 65 6e 74 20 69 6e 20 6f 72 64 65 72 2e 20 20 49  ent in order.  I
6bb0: 66 20 74 68 65 20 70 6f 69 6e 74 65 72 73 20 72  f the pointers r
6bc0: 65 74 75 72 6e 65 64 20 62 79 20 74 68 65 0a 2a  eturned by the.*
6bd0: 2a 20 73 65 63 6f 6e 64 20 61 6e 64 20 66 6f 75  * second and fou
6be0: 72 74 68 20 61 72 65 20 64 69 66 66 65 72 65 6e  rth are differen
6bf0: 74 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  t, this routine 
6c00: 72 65 74 75 72 6e 73 20 31 2e 20 20 4f 74 68 65  returns 1.  Othe
6c10: 72 77 69 73 65 2c 0a 2a 2a 20 74 68 69 73 20 72  rwise,.** this r
6c20: 6f 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 30  outine returns 0
6c30: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  ..**.** This fun
6c40: 63 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ction is used to
6c50: 20 74 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   test to see whe
6c60: 6e 20 72 65 74 75 72 6e 65 64 20 70 6f 69 6e 74  n returned point
6c70: 65 72 73 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20  ers from.** the 
6c80: 5f 74 65 78 74 28 29 2c 20 5f 74 65 78 74 31 36  _text(), _text16
6c90: 28 29 20 61 6e 64 20 5f 62 6c 6f 62 28 29 20 41  () and _blob() A
6ca0: 50 49 73 20 62 65 63 6f 6d 65 20 69 6e 76 61 6c  PIs become inval
6cb0: 69 64 61 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  idated..*/.stati
6cc0: 63 20 76 6f 69 64 20 70 74 72 43 68 6e 67 46 75  c void ptrChngFu
6cd0: 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65  nction(.  sqlite
6ce0: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65  3_context *conte
6cf0: 78 74 2c 20 0a 20 20 69 6e 74 20 61 72 67 63 2c  xt, .  int argc,
6d00: 20 20 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c    .  sqlite3_val
6d10: 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 63  ue **argv.){.  c
6d20: 6f 6e 73 74 20 76 6f 69 64 20 2a 70 31 2c 20 2a  onst void *p1, *
6d30: 70 32 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  p2;.  const char
6d40: 20 2a 7a 43 6d 64 3b 0a 20 20 69 66 28 20 61 72   *zCmd;.  if( ar
6d50: 67 63 21 3d 34 20 29 20 72 65 74 75 72 6e 3b 0a  gc!=4 ) return;.
6d60: 20 20 7a 43 6d 64 20 3d 20 28 63 6f 6e 73 74 20    zCmd = (const 
6d70: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
6d80: 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 31 5d  lue_text(argv[1]
6d90: 29 3b 0a 20 20 69 66 28 20 7a 43 6d 64 3d 3d 30  );.  if( zCmd==0
6da0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
6db0: 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c 22 74 65   strcmp(zCmd,"te
6dc0: 78 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  xt")==0 ){.    p
6dd0: 31 20 3d 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a  1 = (const void*
6de0: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
6df0: 65 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a 23 69  ext(argv[0]);.#i
6e00: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
6e10: 54 5f 55 54 46 31 36 0a 20 20 7d 65 6c 73 65 20  T_UTF16.  }else 
6e20: 69 66 28 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c  if( strcmp(zCmd,
6e30: 20 22 74 65 78 74 31 36 22 29 3d 3d 30 20 29 7b   "text16")==0 ){
6e40: 0a 20 20 20 20 70 31 20 3d 20 28 63 6f 6e 73 74  .    p1 = (const
6e50: 20 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 76   void*)sqlite3_v
6e60: 61 6c 75 65 5f 74 65 78 74 31 36 28 61 72 67 76  alue_text16(argv
6e70: 5b 30 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  [0]);.#endif.  }
6e80: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
6e90: 7a 43 6d 64 2c 20 22 62 6c 6f 62 22 29 3d 3d 30  zCmd, "blob")==0
6ea0: 20 29 7b 0a 20 20 20 20 70 31 20 3d 20 28 63 6f   ){.    p1 = (co
6eb0: 6e 73 74 20 76 6f 69 64 2a 29 73 71 6c 69 74 65  nst void*)sqlite
6ec0: 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 61 72 67  3_value_blob(arg
6ed0: 76 5b 30 5d 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  v[0]);.  }else{.
6ee0: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a      return;.  }.
6ef0: 20 20 7a 43 6d 64 20 3d 20 28 63 6f 6e 73 74 20    zCmd = (const 
6f00: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
6f10: 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 32 5d  lue_text(argv[2]
6f20: 29 3b 0a 20 20 69 66 28 20 7a 43 6d 64 3d 3d 30  );.  if( zCmd==0
6f30: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
6f40: 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c 22 62 79   strcmp(zCmd,"by
6f50: 74 65 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  tes")==0 ){.    
6f60: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
6f70: 74 65 73 28 61 72 67 76 5b 30 5d 29 3b 0a 23 69  tes(argv[0]);.#i
6f80: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
6f90: 54 5f 55 54 46 31 36 0a 20 20 7d 65 6c 73 65 20  T_UTF16.  }else 
6fa0: 69 66 28 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c  if( strcmp(zCmd,
6fb0: 20 22 62 79 74 65 73 31 36 22 29 3d 3d 30 20 29   "bytes16")==0 )
6fc0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76 61  {.    sqlite3_va
6fd0: 6c 75 65 5f 62 79 74 65 73 31 36 28 61 72 67 76  lue_bytes16(argv
6fe0: 5b 30 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  [0]);.#endif.  }
6ff0: 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28  else if( strcmp(
7000: 7a 43 6d 64 2c 20 22 6e 6f 6f 70 22 29 3d 3d 30  zCmd, "noop")==0
7010: 20 29 7b 0a 20 20 20 20 2f 2a 20 64 6f 20 6e 6f   ){.    /* do no
7020: 74 68 69 6e 67 20 2a 2f 0a 20 20 7d 65 6c 73 65  thing */.  }else
7030: 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20  {.    return;.  
7040: 7d 0a 20 20 7a 43 6d 64 20 3d 20 28 63 6f 6e 73  }.  zCmd = (cons
7050: 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
7060: 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b  value_text(argv[
7070: 33 5d 29 3b 0a 20 20 69 66 28 20 7a 43 6d 64 3d  3]);.  if( zCmd=
7080: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69  =0 ) return;.  i
7090: 66 28 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c 22  f( strcmp(zCmd,"
70a0: 74 65 78 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  text")==0 ){.   
70b0: 20 70 32 20 3d 20 28 63 6f 6e 73 74 20 76 6f 69   p2 = (const voi
70c0: 64 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  d*)sqlite3_value
70d0: 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a  _text(argv[0]);.
70e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
70f0: 4d 49 54 5f 55 54 46 31 36 0a 20 20 7d 65 6c 73  MIT_UTF16.  }els
7100: 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a 43 6d  e if( strcmp(zCm
7110: 64 2c 20 22 74 65 78 74 31 36 22 29 3d 3d 30 20  d, "text16")==0 
7120: 29 7b 0a 20 20 20 20 70 32 20 3d 20 28 63 6f 6e  ){.    p2 = (con
7130: 73 74 20 76 6f 69 64 2a 29 73 71 6c 69 74 65 33  st void*)sqlite3
7140: 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28 61 72  _value_text16(ar
7150: 67 76 5b 30 5d 29 3b 0a 23 65 6e 64 69 66 0a 20  gv[0]);.#endif. 
7160: 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d   }else if( strcm
7170: 70 28 7a 43 6d 64 2c 20 22 62 6c 6f 62 22 29 3d  p(zCmd, "blob")=
7180: 3d 30 20 29 7b 0a 20 20 20 20 70 32 20 3d 20 28  =0 ){.    p2 = (
7190: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 73 71 6c 69  const void*)sqli
71a0: 74 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 61  te3_value_blob(a
71b0: 72 67 76 5b 30 5d 29 3b 0a 20 20 7d 65 6c 73 65  rgv[0]);.  }else
71c0: 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20  {.    return;.  
71d0: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75  }.  sqlite3_resu
71e0: 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20  lt_int(context, 
71f0: 70 31 21 3d 70 32 29 3b 0a 7d 0a 0a 0a 2f 2a 0a  p1!=p2);.}.../*.
7200: 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
7210: 65 5f 74 65 73 74 5f 63 72 65 61 74 65 5f 66 75  e_test_create_fu
7220: 6e 63 74 69 6f 6e 20 44 42 0a 2a 2a 0a 2a 2a 20  nction DB.**.** 
7230: 43 61 6c 6c 20 74 68 65 20 73 71 6c 69 74 65 33  Call the sqlite3
7240: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
7250: 20 41 50 49 20 6f 6e 20 74 68 65 20 67 69 76 65   API on the give
7260: 6e 20 64 61 74 61 62 61 73 65 20 69 6e 20 6f 72  n database in or
7270: 64 65 72 0a 2a 2a 20 74 6f 20 63 72 65 61 74 65  der.** to create
7280: 20 61 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65   a function name
7290: 64 20 22 78 5f 63 6f 61 6c 65 73 63 65 22 2e 20  d "x_coalesce". 
72a0: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 64   This function d
72b0: 6f 65 73 20 74 68 65 20 73 61 6d 65 20 74 68 69  oes the same thi
72c0: 6e 67 0a 2a 2a 20 61 73 20 74 68 65 20 22 63 6f  ng.** as the "co
72d0: 61 6c 65 73 63 65 22 20 66 75 6e 63 74 69 6f 6e  alesce" function
72e0: 2e 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  .  This function
72f0: 20 61 6c 73 6f 20 72 65 67 69 73 74 65 72 73 20   also registers 
7300: 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 0a  an SQL function.
7310: 2a 2a 20 6e 61 6d 65 64 20 22 78 5f 73 71 6c 69  ** named "x_sqli
7320: 74 65 5f 65 78 65 63 22 20 74 68 61 74 20 69 6e  te_exec" that in
7330: 76 6f 6b 65 73 20 73 71 6c 69 74 65 33 5f 65 78  vokes sqlite3_ex
7340: 65 63 28 29 2e 20 20 49 6e 76 6f 6b 69 6e 67 20  ec().  Invoking 
7350: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a 2a  sqlite3_exec().*
7360: 2a 20 69 6e 20 74 68 69 73 20 77 61 79 20 69 73  * in this way is
7370: 20 69 6c 6c 65 67 61 6c 20 72 65 63 75 72 73 69   illegal recursi
7380: 6f 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20 72 61  on and should ra
7390: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
73a0: 53 55 53 45 20 65 72 72 6f 72 2e 0a 2a 2a 20 54  SUSE error..** T
73b0: 68 65 20 65 66 66 65 63 74 20 69 73 20 73 69 6d  he effect is sim
73c0: 69 6c 61 72 20 74 6f 20 74 72 79 69 6e 67 20 74  ilar to trying t
73d0: 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 64  o use the same d
73e0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
73f0: 6f 6e 20 66 72 6f 6d 0a 2a 2a 20 74 77 6f 20 74  on from.** two t
7400: 68 72 65 61 64 73 20 61 74 20 74 68 65 20 73 61  hreads at the sa
7410: 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 54  me time..**.** T
7420: 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f 74 69  he original moti
7430: 76 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  vation for this 
7440: 72 6f 75 74 69 6e 65 20 77 61 73 20 74 6f 20 62  routine was to b
7450: 65 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c 20 74  e able to call t
7460: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 72  he.** sqlite3_cr
7470: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 66 75  eate_function fu
7480: 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20 61 20 71  nction while a q
7490: 75 65 72 79 20 69 73 20 69 6e 20 70 72 6f 67 72  uery is in progr
74a0: 65 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20  ess in order.** 
74b0: 74 6f 20 74 65 73 74 20 74 68 65 20 53 51 4c 49  to test the SQLI
74c0: 54 45 5f 4d 49 53 55 53 45 20 64 65 74 65 63 74  TE_MISUSE detect
74d0: 69 6f 6e 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73 74  ion logic..*/.st
74e0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 72  atic int test_cr
74f0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20  eate_function(. 
7500: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
7510: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
7520: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
7530: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
7540: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
7550: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
7560: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
7570: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
7580: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
7590: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
75a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
75b0: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
75c0: 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63  t */.){.  int rc
75d0: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  ;.  sqlite3 *db;
75e0: 0a 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20  ..  if( argc!=2 
75f0: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
7600: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
7610: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
7620: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
7630: 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20  gv[0],.       " 
7640: 44 42 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  DB\"", 0);.    r
7650: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7660: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
7670: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
7680: 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
7690: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
76a0: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
76b0: 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
76c0: 28 64 62 2c 20 22 78 5f 63 6f 61 6c 65 73 63 65  (db, "x_coalesce
76d0: 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 41 4e  ", -1, SQLITE_AN
76e0: 59 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 74  Y, 0, .        t
76f0: 31 5f 69 66 6e 75 6c 6c 46 75 6e 63 2c 20 30 2c  1_ifnullFunc, 0,
7700: 20 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53   0);.  if( rc==S
7710: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
7720: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
7730: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
7740: 20 22 68 65 78 38 22 2c 20 31 2c 20 53 51 4c 49   "hex8", 1, SQLI
7750: 54 45 5f 41 4e 59 2c 20 30 2c 20 0a 20 20 20 20  TE_ANY, 0, .    
7760: 20 20 20 20 20 20 68 65 78 38 46 75 6e 63 2c 20        hex8Func, 
7770: 30 2c 20 30 29 3b 0a 20 20 7d 0a 23 69 66 6e 64  0, 0);.  }.#ifnd
7780: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
7790: 54 46 31 36 0a 20 20 69 66 28 20 72 63 3d 3d 53  TF16.  if( rc==S
77a0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
77b0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
77c0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
77d0: 20 22 68 65 78 31 36 22 2c 20 31 2c 20 53 51 4c   "hex16", 1, SQL
77e0: 49 54 45 5f 41 4e 59 2c 20 30 2c 20 0a 20 20 20  ITE_ANY, 0, .   
77f0: 20 20 20 20 20 20 20 68 65 78 31 36 46 75 6e 63         hex16Func
7800: 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 23 65 6e  , 0, 0);.  }.#en
7810: 64 69 66 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  dif.  if( rc==SQ
7820: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
7830: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
7840: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
7850: 22 74 6b 74 32 32 31 33 66 75 6e 63 22 2c 20 31  "tkt2213func", 1
7860: 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c  , SQLITE_ANY, 0,
7870: 20 0a 20 20 20 20 20 20 20 20 20 20 74 6b 74 32   .          tkt2
7880: 32 31 33 46 75 6e 63 74 69 6f 6e 2c 20 30 2c 20  213Function, 0, 
7890: 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  0);.  }.  if( rc
78a0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
78b0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
78c0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
78d0: 64 62 2c 20 22 70 6f 69 6e 74 65 72 5f 63 68 61  db, "pointer_cha
78e0: 6e 67 65 22 2c 20 34 2c 20 53 51 4c 49 54 45 5f  nge", 4, SQLITE_
78f0: 41 4e 59 2c 20 30 2c 20 0a 20 20 20 20 20 20 20  ANY, 0, .       
7900: 20 20 20 70 74 72 43 68 6e 67 46 75 6e 63 74 69     ptrChngFuncti
7910: 6f 6e 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a  on, 0, 0);.  }..
7920: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
7930: 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 20 55  MIT_UTF16.  /* U
7940: 73 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  se the sqlite3_c
7950: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36  reate_function16
7960: 28 29 20 41 50 49 20 68 65 72 65 2e 20 4d 61 69  () API here. Mai
7970: 6e 6c 79 20 66 6f 72 20 66 75 6e 2c 20 62 75 74  nly for fun, but
7980: 20 61 6c 73 6f 20 0a 20 20 2a 2a 20 62 65 63 61   also .  ** beca
7990: 75 73 65 20 69 74 20 69 73 20 6e 6f 74 20 74 65  use it is not te
79a0: 73 74 65 64 20 61 6e 79 77 68 65 72 65 20 65 6c  sted anywhere el
79b0: 73 65 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  se. */.  if( rc=
79c0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
79d0: 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 55    const void *zU
79e0: 74 66 31 36 3b 0a 20 20 20 20 73 71 6c 69 74 65  tf16;.    sqlite
79f0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20  3_value *pVal;. 
7a00: 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
7a10: 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78  _enter(db->mutex
7a20: 29 3b 0a 20 20 20 20 70 56 61 6c 20 3d 20 73 71  );.    pVal = sq
7a30: 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 64 62  lite3ValueNew(db
7a40: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61  );.    sqlite3Va
7a50: 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20  lueSetStr(pVal, 
7a60: 2d 31 2c 20 22 78 5f 73 71 6c 69 74 65 5f 65 78  -1, "x_sqlite_ex
7a70: 65 63 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  ec", SQLITE_UTF8
7a80: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
7a90: 3b 0a 20 20 20 20 7a 55 74 66 31 36 20 3d 20 73  ;.    zUtf16 = s
7aa0: 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28  qlite3ValueText(
7ab0: 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46  pVal, SQLITE_UTF
7ac0: 31 36 4e 41 54 49 56 45 29 3b 0a 20 20 20 20 69  16NATIVE);.    i
7ad0: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
7ae0: 6c 65 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20  led ){.      rc 
7af0: 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
7b00: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7b10: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
7b20: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28  eate_function16(
7b30: 64 62 2c 20 7a 55 74 66 31 36 2c 20 0a 20 20 20  db, zUtf16, .   
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20               1, 
7b50: 53 51 4c 49 54 45 5f 55 54 46 31 36 2c 20 64 62  SQLITE_UTF16, db
7b60: 2c 20 73 71 6c 69 74 65 33 45 78 65 63 46 75 6e  , sqlite3ExecFun
7b70: 63 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  c, 0, 0);.    }.
7b80: 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65      sqlite3Value
7b90: 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20 20 20  Free(pVal);.    
7ba0: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65  sqlite3_mutex_le
7bb0: 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a  ave(db->mutex);.
7bc0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66    }.#endif..  if
7bd0: 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
7be0: 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c  Code(interp, db,
7bf0: 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43   rc) ) return TC
7c00: 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53  L_ERROR;.  Tcl_S
7c10: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
7c20: 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72   (char *)t1Error
7c30: 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20  Name(rc), 0);.  
7c40: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
7c50: 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73  ../*.** Routines
7c60: 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
7c70: 65 20 78 5f 63 6f 75 6e 74 28 29 20 61 67 67 72  e x_count() aggr
7c80: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  egate function..
7c90: 2a 2a 0a 2a 2a 20 78 5f 63 6f 75 6e 74 28 29 20  **.** x_count() 
7ca0: 63 6f 75 6e 74 73 20 74 68 65 20 6e 75 6d 62 65  counts the numbe
7cb0: 72 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 20 61 72  r of non-null ar
7cc0: 67 75 6d 65 6e 74 73 2e 20 20 42 75 74 20 74 68  guments.  But th
7cd0: 65 72 65 20 61 72 65 0a 2a 2a 20 73 6f 6d 65 20  ere are.** some 
7ce0: 74 77 69 73 74 73 20 66 6f 72 20 74 65 73 74 69  twists for testi
7cf0: 6e 67 20 70 75 72 70 6f 73 65 73 2e 0a 2a 2a 0a  ng purposes..**.
7d00: 2a 2a 20 49 66 20 74 68 65 20 61 72 67 75 6d 65  ** If the argume
7d10: 6e 74 20 74 6f 20 78 5f 63 6f 75 6e 74 28 29 20  nt to x_count() 
7d20: 69 73 20 34 30 20 74 68 65 6e 20 61 20 55 54 46  is 40 then a UTF
7d30: 2d 38 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  -8 error is repo
7d40: 72 74 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 73  rted.** on the s
7d50: 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 20 20 49  tep function.  I
7d60: 66 20 78 5f 63 6f 75 6e 74 28 34 31 29 20 69 73  f x_count(41) is
7d70: 20 73 65 65 6e 2c 20 74 68 65 6e 20 61 20 55 54   seen, then a UT
7d80: 46 2d 31 36 20 65 72 72 6f 72 0a 2a 2a 20 69 73  F-16 error.** is
7d90: 20 72 65 70 6f 72 74 65 64 20 6f 6e 20 74 68 65   reported on the
7da0: 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 20   step function. 
7db0: 20 49 66 20 74 68 65 20 74 6f 74 61 6c 20 63 6f   If the total co
7dc0: 75 6e 74 20 69 73 20 34 32 2c 20 74 68 65 6e 0a  unt is 42, then.
7dd0: 2a 2a 20 61 20 55 54 46 2d 38 20 65 72 72 6f 72  ** a UTF-8 error
7de0: 20 69 73 20 72 65 70 6f 72 74 65 64 20 6f 6e 20   is reported on 
7df0: 74 68 65 20 66 69 6e 61 6c 69 7a 65 20 66 75 6e  the finalize fun
7e00: 63 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65  ction..*/.typede
7e10: 66 20 73 74 72 75 63 74 20 74 31 43 6f 75 6e 74  f struct t1Count
7e20: 43 74 78 20 74 31 43 6f 75 6e 74 43 74 78 3b 0a  Ctx t1CountCtx;.
7e30: 73 74 72 75 63 74 20 74 31 43 6f 75 6e 74 43 74  struct t1CountCt
7e40: 78 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 7d 3b 0a  x {.  int n;.};.
7e50: 73 74 61 74 69 63 20 76 6f 69 64 20 74 31 43 6f  static void t1Co
7e60: 75 6e 74 53 74 65 70 28 0a 20 20 73 71 6c 69 74  untStep(.  sqlit
7e70: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74  e3_context *cont
7e80: 65 78 74 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c  ext,.  int argc,
7e90: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
7ea0: 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 74 31 43   **argv.){.  t1C
7eb0: 6f 75 6e 74 43 74 78 20 2a 70 3b 0a 20 20 70 20  ountCtx *p;.  p 
7ec0: 3d 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67  = sqlite3_aggreg
7ed0: 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74  ate_context(cont
7ee0: 65 78 74 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29  ext, sizeof(*p))
7ef0: 3b 0a 20 20 69 66 28 20 28 61 72 67 63 3d 3d 30  ;.  if( (argc==0
7f00: 20 7c 7c 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 21   || SQLITE_NULL!
7f10: 3d 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  =sqlite3_value_t
7f20: 79 70 65 28 61 72 67 76 5b 30 5d 29 20 29 20 26  ype(argv[0]) ) &
7f30: 26 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 2b  & p ){.    p->n+
7f40: 2b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 61 72 67  +;.  }.  if( arg
7f50: 63 3e 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 76  c>0 ){.    int v
7f60: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
7f70: 5f 69 6e 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20  _int(argv[0]);. 
7f80: 20 20 20 69 66 28 20 76 3d 3d 34 30 20 29 7b 0a     if( v==40 ){.
7f90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
7fa0: 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65  sult_error(conte
7fb0: 78 74 2c 20 22 76 61 6c 75 65 20 6f 66 20 34 30  xt, "value of 40
7fc0: 20 68 61 6e 64 65 64 20 74 6f 20 78 5f 63 6f 75   handed to x_cou
7fd0: 6e 74 22 2c 20 2d 31 29 3b 0a 23 69 66 6e 64 65  nt", -1);.#ifnde
7fe0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
7ff0: 46 31 36 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  F16.    }else if
8000: 28 20 76 3d 3d 34 31 20 29 7b 0a 20 20 20 20 20  ( v==41 ){.     
8010: 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 55 74 66   const char zUtf
8020: 31 36 45 72 72 4d 73 67 5b 5d 20 3d 20 7b 20 30  16ErrMsg[] = { 0
8030: 2c 20 30 78 36 31 2c 20 30 2c 20 30 78 36 32 2c  , 0x61, 0, 0x62,
8040: 20 30 2c 20 30 78 36 33 2c 20 30 2c 20 30 2c 20   0, 0x63, 0, 0, 
8050: 30 7d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0};.      sqlite
8060: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 31 36  3_result_error16
8070: 28 63 6f 6e 74 65 78 74 2c 20 26 7a 55 74 66 31  (context, &zUtf1
8080: 36 45 72 72 4d 73 67 5b 31 2d 53 51 4c 49 54 45  6ErrMsg[1-SQLITE
8090: 5f 42 49 47 45 4e 44 49 41 4e 5d 2c 20 2d 31 29  _BIGENDIAN], -1)
80a0: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20  ;.#endif.    }. 
80b0: 20 7d 0a 7d 20 20 20 0a 73 74 61 74 69 63 20 76   }.}   .static v
80c0: 6f 69 64 20 74 31 43 6f 75 6e 74 46 69 6e 61 6c  oid t1CountFinal
80d0: 69 7a 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ize(sqlite3_cont
80e0: 65 78 74 20 2a 63 6f 6e 74 65 78 74 29 7b 0a 20  ext *context){. 
80f0: 20 74 31 43 6f 75 6e 74 43 74 78 20 2a 70 3b 0a   t1CountCtx *p;.
8100: 20 20 70 20 3d 20 73 71 6c 69 74 65 33 5f 61 67    p = sqlite3_ag
8110: 67 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28  gregate_context(
8120: 63 6f 6e 74 65 78 74 2c 20 73 69 7a 65 6f 66 28  context, sizeof(
8130: 2a 70 29 29 3b 0a 20 20 69 66 28 20 70 20 29 7b  *p));.  if( p ){
8140: 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 3d 3d 34  .    if( p->n==4
8150: 32 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  2 ){.      sqlit
8160: 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28  e3_result_error(
8170: 63 6f 6e 74 65 78 74 2c 20 22 78 5f 63 6f 75 6e  context, "x_coun
8180: 74 20 74 6f 74 61 6c 73 20 74 6f 20 34 32 22 2c  t totals to 42",
8190: 20 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   -1);.    }else{
81a0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72  .      sqlite3_r
81b0: 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78  esult_int(contex
81c0: 74 2c 20 70 20 3f 20 70 2d 3e 6e 20 3a 20 30 29  t, p ? p->n : 0)
81d0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 23  ;.    }.  }.}..#
81e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
81f0: 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a 73 74  IT_DEPRECATED.st
8200: 61 74 69 63 20 76 6f 69 64 20 6c 65 67 61 63 79  atic void legacy
8210: 43 6f 75 6e 74 53 74 65 70 28 0a 20 20 73 71 6c  CountStep(.  sql
8220: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f  ite3_context *co
8230: 6e 74 65 78 74 2c 0a 20 20 69 6e 74 20 61 72 67  ntext,.  int arg
8240: 63 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  c,.  sqlite3_val
8250: 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 2f  ue **argv.){.  /
8260: 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 7d 0a 0a 73 74  * no-op */.}..st
8270: 61 74 69 63 20 76 6f 69 64 20 6c 65 67 61 63 79  atic void legacy
8280: 43 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 28 73 71  CountFinalize(sq
8290: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63  lite3_context *c
82a0: 6f 6e 74 65 78 74 29 7b 0a 20 20 73 71 6c 69 74  ontext){.  sqlit
82b0: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f  e3_result_int(co
82c0: 6e 74 65 78 74 2c 20 73 71 6c 69 74 65 33 5f 61  ntext, sqlite3_a
82d0: 67 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28 63  ggregate_count(c
82e0: 6f 6e 74 65 78 74 29 29 3b 0a 7d 0a 23 65 6e 64  ontext));.}.#end
82f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  if../*.** Usage:
8300: 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65    sqlite3_create
8310: 5f 61 67 67 72 65 67 61 74 65 20 44 42 0a 2a 2a  _aggregate DB.**
8320: 0a 2a 2a 20 43 61 6c 6c 20 74 68 65 20 73 71 6c  .** Call the sql
8330: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
8340: 74 69 6f 6e 20 41 50 49 20 6f 6e 20 74 68 65 20  tion API on the 
8350: 67 69 76 65 6e 20 64 61 74 61 62 61 73 65 20 69  given database i
8360: 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 63 72  n order.** to cr
8370: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
8380: 6e 61 6d 65 64 20 22 78 5f 63 6f 75 6e 74 22 2e  named "x_count".
8390: 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20    This function 
83a0: 69 73 20 73 69 6d 69 6c 61 72 0a 2a 2a 20 74 6f  is similar.** to
83b0: 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f   the built-in co
83c0: 75 6e 74 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20  unt() function, 
83d0: 77 69 74 68 20 61 20 66 65 77 20 73 70 65 63 69  with a few speci
83e0: 61 6c 20 71 75 69 72 6b 73 0a 2a 2a 20 66 6f 72  al quirks.** for
83f0: 20 74 65 73 74 69 6e 67 20 74 68 65 20 73 71 6c   testing the sql
8400: 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
8410: 72 28 29 20 41 50 49 73 2e 0a 2a 2a 0a 2a 2a 20  r() APIs..**.** 
8420: 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f 74  The original mot
8430: 69 76 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73  ivation for this
8440: 20 72 6f 75 74 69 6e 65 20 77 61 73 20 74 6f 20   routine was to 
8450: 62 65 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c 20  be able to call 
8460: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63  the.** sqlite3_c
8470: 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 20  reate_aggregate 
8480: 66 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20 61  function while a
8490: 20 71 75 65 72 79 20 69 73 20 69 6e 20 70 72 6f   query is in pro
84a0: 67 72 65 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a  gress in order.*
84b0: 2a 20 74 6f 20 74 65 73 74 20 74 68 65 20 53 51  * to test the SQ
84c0: 4c 49 54 45 5f 4d 49 53 55 53 45 20 64 65 74 65  LITE_MISUSE dete
84d0: 63 74 69 6f 6e 20 6c 6f 67 69 63 2e 20 20 53 65  ction logic.  Se
84e0: 65 20 6d 69 73 75 73 65 2e 74 65 73 74 2e 0a 2a  e misuse.test..*
84f0: 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e  *.** This routin
8500: 65 20 77 61 73 20 6c 61 74 65 72 20 65 78 74 65  e was later exte
8510: 6e 64 65 64 20 74 6f 20 74 65 73 74 20 74 68 65  nded to test the
8520: 20 75 73 65 20 6f 66 20 73 71 6c 69 74 65 33 5f   use of sqlite3_
8530: 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 29 0a 2a  result_error().*
8540: 2a 20 77 69 74 68 69 6e 20 61 67 67 72 65 67 61  * within aggrega
8550: 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  te functions..**
8560: 0a 2a 2a 20 4c 61 74 65 72 3a 20 49 74 20 69 73  .** Later: It is
8570: 20 6e 6f 77 20 61 6c 73 6f 20 65 78 74 65 6e 64   now also extend
8580: 65 64 20 74 6f 20 72 65 67 69 73 74 65 72 20 74  ed to register t
8590: 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
85a0: 63 74 69 6f 6e 0a 2a 2a 20 22 6c 65 67 61 63 79  ction.** "legacy
85b0: 5f 63 6f 75 6e 74 28 29 22 20 77 69 74 68 20 74  _count()" with t
85c0: 68 65 20 73 75 70 70 6c 69 65 64 20 64 61 74 61  he supplied data
85d0: 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 54 68 69  base handle. Thi
85e0: 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20  s is used.** to 
85f0: 74 65 73 74 20 74 68 65 20 64 65 70 72 65 63 61  test the depreca
8600: 74 65 64 20 73 71 6c 69 74 65 33 5f 61 67 67 72  ted sqlite3_aggr
8610: 65 67 61 74 65 5f 63 6f 75 6e 74 28 29 20 41 50  egate_count() AP
8620: 49 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  I..*/.static int
8630: 20 74 65 73 74 5f 63 72 65 61 74 65 5f 61 67 67   test_create_agg
8640: 72 65 67 61 74 65 28 0a 20 20 76 6f 69 64 20 2a  regate(.  void *
8650: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
8660: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
8670: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
8680: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
8690: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
86a0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
86b0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
86c0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
86d0: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
86e0: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
86f0: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
8700: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
8710: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
8720: 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20    int rc;.  if( 
8730: 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  argc!=2 ){.    T
8740: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
8750: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
8760: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
8770: 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20   \"", argv[0],. 
8780: 20 20 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45        " FILENAME
8790: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
87a0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
87b0: 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
87c0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
87d0: 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
87e0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
87f0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
8800: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64  reate_function(d
8810: 62 2c 20 22 78 5f 63 6f 75 6e 74 22 2c 20 30 2c  b, "x_count", 0,
8820: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c   SQLITE_UTF8, 0,
8830: 20 30 2c 0a 20 20 20 20 20 20 74 31 43 6f 75 6e   0,.      t1Coun
8840: 74 53 74 65 70 2c 74 31 43 6f 75 6e 74 46 69 6e  tStep,t1CountFin
8850: 61 6c 69 7a 65 29 3b 0a 20 20 69 66 28 20 72 63  alize);.  if( rc
8860: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
8870: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
8880: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
8890: 64 62 2c 20 22 78 5f 63 6f 75 6e 74 22 2c 20 31  db, "x_count", 1
88a0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30  , SQLITE_UTF8, 0
88b0: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 74 31 43  , 0,.        t1C
88c0: 6f 75 6e 74 53 74 65 70 2c 74 31 43 6f 75 6e 74  ountStep,t1Count
88d0: 46 69 6e 61 6c 69 7a 65 29 3b 0a 20 20 7d 0a 23  Finalize);.  }.#
88e0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
88f0: 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a 20 20  IT_DEPRECATED.  
8900: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
8910: 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
8920: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
8930: 63 74 69 6f 6e 28 64 62 2c 20 22 6c 65 67 61 63  ction(db, "legac
8940: 79 5f 63 6f 75 6e 74 22 2c 20 30 2c 20 53 51 4c  y_count", 0, SQL
8950: 49 54 45 5f 41 4e 59 2c 20 30 2c 20 30 2c 0a 20  ITE_ANY, 0, 0,. 
8960: 20 20 20 20 20 20 20 6c 65 67 61 63 79 43 6f 75         legacyCou
8970: 6e 74 53 74 65 70 2c 20 6c 65 67 61 63 79 43 6f  ntStep, legacyCo
8980: 75 6e 74 46 69 6e 61 6c 69 7a 65 0a 20 20 20 20  untFinalize.    
8990: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  );.  }.#endif.  
89a0: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
89b0: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
89c0: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
89d0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
89e0: 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
89f0: 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72  p, (char *)t1Err
8a00: 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a  orName(rc), 0);.
8a10: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
8a20: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  .}.../*.** Usage
8a30: 3a 20 20 70 72 69 6e 74 66 20 54 45 58 54 0a 2a  :  printf TEXT.*
8a40: 2a 0a 2a 2a 20 53 65 6e 64 20 6f 75 74 70 75 74  *.** Send output
8a50: 20 74 6f 20 70 72 69 6e 74 66 2e 20 20 55 73 65   to printf.  Use
8a60: 20 74 68 69 73 20 72 61 74 68 65 72 20 74 68 61   this rather tha
8a70: 6e 20 70 75 74 73 20 74 6f 20 6d 65 72 67 65 20  n puts to merge 
8a80: 74 68 65 20 6f 75 74 70 75 74 0a 2a 2a 20 69 6e  the output.** in
8a90: 20 74 68 65 20 63 6f 72 72 65 63 74 20 73 65 71   the correct seq
8aa0: 75 65 6e 63 65 20 77 69 74 68 20 64 65 62 75 67  uence with debug
8ab0: 67 69 6e 67 20 70 72 69 6e 74 66 73 20 69 6e 73  ging printfs ins
8ac0: 65 72 74 65 64 20 69 6e 74 6f 20 43 20 63 6f 64  erted into C cod
8ad0: 65 2e 0a 2a 2a 20 50 75 74 73 20 75 73 65 73 20  e..** Puts uses 
8ae0: 61 20 73 65 70 61 72 61 74 65 20 62 75 66 66 65  a separate buffe
8af0: 72 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 20  r and debugging 
8b00: 73 74 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20  statements will 
8b10: 62 65 20 6f 75 74 20 6f 66 0a 2a 2a 20 73 65 71  be out of.** seq
8b20: 75 65 6e 63 65 20 69 66 20 69 74 20 69 73 20 75  uence if it is u
8b30: 73 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  sed..*/.static i
8b40: 6e 74 20 74 65 73 74 5f 70 72 69 6e 74 66 28 0a  nt test_printf(.
8b50: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
8b60: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
8b70: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
8b80: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
8b90: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
8ba0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
8bb0: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
8bc0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
8bd0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
8be0: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
8bf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
8c00: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
8c10: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  nt */.){.  if( a
8c20: 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  rgc!=2 ){.    Tc
8c30: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
8c40: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
8c50: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
8c60: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
8c70: 20 20 20 20 20 22 20 54 45 58 54 5c 22 22 2c 20       " TEXT\"", 
8c80: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
8c90: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
8ca0: 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61  printf("%s\n", a
8cb0: 72 67 76 5b 31 5d 29 3b 0a 20 20 72 65 74 75 72  rgv[1]);.  retur
8cc0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 0a 2f  n TCL_OK;.}..../
8cd0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
8ce0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74  ite3_mprintf_int
8cf0: 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52 20   FORMAT INTEGER 
8d00: 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 0a  INTEGER INTEGER.
8d10: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
8d20: 74 66 20 77 69 74 68 20 74 68 72 65 65 20 69 6e  tf with three in
8d30: 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 0a  teger arguments.
8d40: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
8d50: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
8d60: 74 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  t(.  void *NotUs
8d70: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
8d80: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
8d90: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
8da0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
8db0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
8dc0: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
8dd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
8de0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
8df0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
8e00: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
8e10: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
8e20: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ument */.){.  in
8e30: 74 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 63 68 61  t a[3], i;.  cha
8e40: 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63  r *z;.  if( argc
8e50: 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=5 ){.    Tcl_A
8e60: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
8e70: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
8e80: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
8e90: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
8ea0: 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49    " FORMAT INT I
8eb0: 4e 54 20 49 4e 54 5c 22 22 2c 20 30 29 3b 0a 20  NT INT\"", 0);. 
8ec0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
8ed0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69  ROR;.  }.  for(i
8ee0: 3d 32 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a 20  =2; i<5; i++){. 
8ef0: 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e     if( Tcl_GetIn
8f00: 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69  t(interp, argv[i
8f10: 5d 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72 65  ], &a[i-2]) ) re
8f20: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
8f30: 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65    }.  z = sqlite
8f40: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31  3_mprintf(argv[1
8f50: 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61  ], a[0], a[1], a
8f60: 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  [2]);.  Tcl_Appe
8f70: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
8f80: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
8f90: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
8fa0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
8fb0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
8fc0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74  ite3_mprintf_int
8fd0: 36 34 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45  64 FORMAT INTEGE
8fe0: 52 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45  R INTEGER INTEGE
8ff0: 52 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72  R.**.** Call mpr
9000: 69 6e 74 66 20 77 69 74 68 20 74 68 72 65 65 20  intf with three 
9010: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 61  64-bit integer a
9020: 72 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61 74  rguments.*/.stat
9030: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d  ic int sqlite3_m
9040: 70 72 69 6e 74 66 5f 69 6e 74 36 34 28 0a 20 20  printf_int64(.  
9050: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
9060: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
9070: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
9080: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
9090: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
90a0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
90b0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
90c0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
90d0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
90e0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
90f0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
9100: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
9110: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a   */.){.  int i;.
9120: 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 61    sqlite_int64 a
9130: 5b 33 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a  [3];.  char *z;.
9140: 20 20 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b    if( argc!=5 ){
9150: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
9160: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
9170: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
9180: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
9190: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f  [0],.       " FO
91a0: 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 49 4e 54  RMAT INT INT INT
91b0: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
91c0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
91d0: 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69 3c   }.  for(i=2; i<
91e0: 35 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  5; i++){.    if(
91f0: 20 21 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28   !sqlite3Atoi64(
9200: 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d  argv[i], &a[i-2]
9210: 29 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 41  ) ){.      Tcl_A
9220: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
9230: 72 70 2c 20 22 61 72 67 75 6d 65 6e 74 20 69 73  rp, "argument is
9240: 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 36 34 2d   not a valid 64-
9250: 62 69 74 20 69 6e 74 65 67 65 72 22 2c 20 30 29  bit integer", 0)
9260: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54  ;.      return T
9270: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  CL_ERROR;.    }.
9280: 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65    }.  z = sqlite
9290: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31  3_mprintf(argv[1
92a0: 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61  ], a[0], a[1], a
92b0: 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65  [2]);.  Tcl_Appe
92c0: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
92d0: 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65   z, 0);.  sqlite
92e0: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74  3_free(z);.  ret
92f0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
9300: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
9310: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 6c 6f 6e  ite3_mprintf_lon
9320: 67 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52  g FORMAT INTEGER
9330: 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52   INTEGER INTEGER
9340: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
9350: 6e 74 66 20 77 69 74 68 20 74 68 72 65 65 20 6c  ntf with three l
9360: 6f 6e 67 20 69 6e 74 65 67 65 72 20 61 72 67 75  ong integer argu
9370: 6d 65 6e 74 73 2e 20 20 20 54 68 69 73 20 6d 69  ments.   This mi
9380: 67 68 74 20 62 65 20 74 68 65 0a 2a 2a 20 73 61  ght be the.** sa
9390: 6d 65 20 61 73 20 73 71 6c 69 74 65 33 5f 6d 70  me as sqlite3_mp
93a0: 72 69 6e 74 66 5f 69 6e 74 20 6f 72 20 73 71 6c  rintf_int or sql
93b0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74  ite3_mprintf_int
93c0: 36 34 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  64, depending on
93d0: 0a 2a 2a 20 70 6c 61 74 66 6f 72 6d 2e 0a 2a 2f  .** platform..*/
93e0: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
93f0: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 6c 6f 6e 67  te3_mprintf_long
9400: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
9410: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
9420: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
9430: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
9440: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
9450: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
9460: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
9470: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9480: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
9490: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
94a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
94b0: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
94c0: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ment */.){.  int
94d0: 20 69 3b 0a 20 20 6c 6f 6e 67 20 69 6e 74 20 61   i;.  long int a
94e0: 5b 33 5d 3b 0a 20 20 69 6e 74 20 62 5b 33 5d 3b  [3];.  int b[3];
94f0: 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66  .  char *z;.  if
9500: 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20 20 20  ( argc!=5 ){.   
9510: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
9520: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
9530: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
9540: 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
9550: 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d 41 54  .       " FORMAT
9560: 20 49 4e 54 20 49 4e 54 20 49 4e 54 5c 22 22 2c   INT INT INT\"",
9570: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
9580: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
9590: 20 66 6f 72 28 69 3d 32 3b 20 69 3c 35 3b 20 69   for(i=2; i<5; i
95a0: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c  ++){.    if( Tcl
95b0: 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20  _GetInt(interp, 
95c0: 61 72 67 76 5b 69 5d 2c 20 26 62 5b 69 2d 32 5d  argv[i], &b[i-2]
95d0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
95e0: 52 52 4f 52 3b 0a 20 20 20 20 61 5b 69 2d 32 5d  RROR;.    a[i-2]
95f0: 20 3d 20 28 6c 6f 6e 67 20 69 6e 74 29 62 5b 69   = (long int)b[i
9600: 2d 32 5d 3b 0a 20 20 20 20 61 5b 69 2d 32 5d 20  -2];.    a[i-2] 
9610: 26 3d 20 28 28 28 75 36 34 29 31 29 3c 3c 28 73  &= (((u64)1)<<(s
9620: 69 7a 65 6f 66 28 69 6e 74 29 2a 38 29 29 2d 31  izeof(int)*8))-1
9630: 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69  ;.  }.  z = sqli
9640: 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76  te3_mprintf(argv
9650: 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c  [1], a[0], a[1],
9660: 20 61 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70   a[2]);.  Tcl_Ap
9670: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
9680: 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69  p, z, 0);.  sqli
9690: 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72  te3_free(z);.  r
96a0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
96b0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
96c0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73  qlite3_mprintf_s
96d0: 74 72 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45  tr FORMAT INTEGE
96e0: 52 20 49 4e 54 45 47 45 52 20 53 54 52 49 4e 47  R INTEGER STRING
96f0: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
9700: 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e 74  ntf with two int
9710: 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20 61  eger arguments a
9720: 6e 64 20 6f 6e 65 20 73 74 72 69 6e 67 20 61 72  nd one string ar
9730: 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63  gument.*/.static
9740: 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70 72   int sqlite3_mpr
9750: 69 6e 74 66 5f 73 74 72 28 0a 20 20 76 6f 69 64  intf_str(.  void
9760: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
9770: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
9780: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
9790: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
97a0: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
97b0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
97c0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
97d0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
97e0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
97f0: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
9800: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
9810: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
9820: 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69  ){.  int a[3], i
9830: 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69  ;.  char *z;.  i
9840: 66 28 20 61 72 67 63 3c 34 20 7c 7c 20 61 72 67  f( argc<4 || arg
9850: 63 3e 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  c>5 ){.    Tcl_A
9860: 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
9870: 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
9880: 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
9890: 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20  , argv[0],.     
98a0: 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49    " FORMAT INT I
98b0: 4e 54 20 3f 53 54 52 49 4e 47 3f 5c 22 22 2c 20  NT ?STRING?\"", 
98c0: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
98d0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
98e0: 66 6f 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69 2b  for(i=2; i<4; i+
98f0: 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f  +){.    if( Tcl_
9900: 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61  GetInt(interp, a
9910: 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d 29  rgv[i], &a[i-2])
9920: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
9930: 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73  ROR;.  }.  z = s
9940: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61  qlite3_mprintf(a
9950: 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b  rgv[1], a[0], a[
9960: 31 5d 2c 20 61 72 67 63 3e 34 20 3f 20 61 72 67  1], argc>4 ? arg
9970: 76 5b 34 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 20 20  v[4] : NULL);.  
9980: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
9990: 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a  (interp, z, 0);.
99a0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
99b0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
99c0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
99d0: 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  ge:  sqlite3_snp
99e0: 72 69 6e 74 66 5f 73 74 72 20 49 4e 54 45 47 45  rintf_str INTEGE
99f0: 52 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52  R FORMAT INTEGER
9a00: 20 49 4e 54 45 47 45 52 20 53 54 52 49 4e 47 0a   INTEGER STRING.
9a10: 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e  **.** Call mprin
9a20: 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e 74 65  tf with two inte
9a30: 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  ger arguments an
9a40: 64 20 6f 6e 65 20 73 74 72 69 6e 67 20 61 72 67  d one string arg
9a50: 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63 20  ument.*/.static 
9a60: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6e 70 72  int sqlite3_snpr
9a70: 69 6e 74 66 5f 73 74 72 28 0a 20 20 76 6f 69 64  intf_str(.  void
9a80: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
9a90: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
9aa0: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
9ab0: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
9ac0: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
9ad0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
9ae0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
9af0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
9b00: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
9b10: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
9b20: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
9b30: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
9b40: 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20 69  ){.  int a[3], i
9b50: 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 63 68 61  ;.  int n;.  cha
9b60: 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63  r *z;.  if( argc
9b70: 3c 35 20 7c 7c 20 61 72 67 63 3e 36 20 29 7b 0a  <5 || argc>6 ){.
9b80: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
9b90: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
9ba0: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
9bb0: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
9bc0: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 49 4e 54  0],.       " INT
9bd0: 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54 20   FORMAT INT INT 
9be0: 3f 53 54 52 49 4e 47 3f 5c 22 22 2c 20 30 29 3b  ?STRING?\"", 0);
9bf0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
9c00: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
9c10: 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65   Tcl_GetInt(inte
9c20: 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 6e 29  rp, argv[1], &n)
9c30: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
9c40: 52 4f 52 3b 0a 20 20 69 66 28 20 6e 3c 30 20 29  ROR;.  if( n<0 )
9c50: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
9c60: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
9c70: 4e 20 6d 75 73 74 20 62 65 20 6e 6f 6e 2d 6e 65  N must be non-ne
9c80: 67 61 74 69 76 65 22 2c 20 30 29 3b 0a 20 20 20  gative", 0);.   
9c90: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
9ca0: 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 33  R;.  }.  for(i=3
9cb0: 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<5; i++){.   
9cc0: 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28   if( Tcl_GetInt(
9cd0: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c  interp, argv[i],
9ce0: 20 26 61 5b 69 2d 33 5d 29 20 29 20 72 65 74 75   &a[i-3]) ) retu
9cf0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
9d00: 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 5f  }.  z = sqlite3_
9d10: 6d 61 6c 6c 6f 63 28 20 6e 2b 31 20 29 3b 0a 20  malloc( n+1 );. 
9d20: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
9d30: 66 28 6e 2c 20 7a 2c 20 61 72 67 76 5b 32 5d 2c  f(n, z, argv[2],
9d40: 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 72 67   a[0], a[1], arg
9d50: 63 3e 34 20 3f 20 61 72 67 76 5b 35 5d 20 3a 20  c>4 ? argv[5] : 
9d60: 4e 55 4c 4c 29 3b 0a 20 20 54 63 6c 5f 41 70 70  NULL);.  Tcl_App
9d70: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
9d80: 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  , z, 0);.  sqlit
9d90: 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65  e3_free(z);.  re
9da0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
9db0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
9dc0: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f  lite3_mprintf_do
9dd0: 75 62 6c 65 20 46 4f 52 4d 41 54 20 49 4e 54 45  uble FORMAT INTE
9de0: 47 45 52 20 49 4e 54 45 47 45 52 20 44 4f 55 42  GER INTEGER DOUB
9df0: 4c 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70  LE.**.** Call mp
9e00: 72 69 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69  rintf with two i
9e10: 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73  nteger arguments
9e20: 20 61 6e 64 20 6f 6e 65 20 64 6f 75 62 6c 65 20   and one double 
9e30: 61 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74  argument.*/.stat
9e40: 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d  ic int sqlite3_m
9e50: 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 28 0a 20  printf_double(. 
9e60: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
9e70: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
9e80: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
9e90: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
9ea0: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
9eb0: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
9ec0: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
9ed0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9ee0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
9ef0: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
9f00: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
9f10: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
9f20: 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 61 5b  t */.){.  int a[
9f30: 33 5d 2c 20 69 3b 0a 20 20 64 6f 75 62 6c 65 20  3], i;.  double 
9f40: 72 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20  r;.  char *z;.  
9f50: 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a 20  if( argc!=5 ){. 
9f60: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
9f70: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
9f80: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
9f90: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
9fa0: 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52 4d  ],.       " FORM
9fb0: 41 54 20 49 4e 54 20 49 4e 54 20 44 4f 55 42 4c  AT INT INT DOUBL
9fc0: 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  E\"", 0);.    re
9fd0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
9fe0: 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69    }.  for(i=2; i
9ff0: 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  <4; i++){.    if
a000: 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74  ( Tcl_GetInt(int
a010: 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26 61  erp, argv[i], &a
a020: 5b 69 2d 32 5d 29 20 29 20 72 65 74 75 72 6e 20  [i-2]) ) return 
a030: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
a040: 20 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62   if( Tcl_GetDoub
a050: 6c 65 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  le(interp, argv[
a060: 34 5d 2c 20 26 72 29 20 29 20 72 65 74 75 72 6e  4], &r) ) return
a070: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 20   TCL_ERROR;.  z 
a080: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
a090: 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c  f(argv[1], a[0],
a0a0: 20 61 5b 31 5d 2c 20 72 29 3b 0a 20 20 54 63 6c   a[1], r);.  Tcl
a0b0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
a0c0: 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73  terp, z, 0);.  s
a0d0: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a  qlite3_free(z);.
a0e0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
a0f0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
a100: 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74    sqlite3_mprint
a110: 66 5f 73 63 61 6c 65 64 20 46 4f 52 4d 41 54 20  f_scaled FORMAT 
a120: 44 4f 55 42 4c 45 20 44 4f 55 42 4c 45 0a 2a 2a  DOUBLE DOUBLE.**
a130: 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66  .** Call mprintf
a140: 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64   with a single d
a150: 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77  ouble argument w
a160: 68 69 63 68 20 69 73 20 74 68 65 20 70 72 6f 64  hich is the prod
a170: 75 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77  uct of the.** tw
a180: 6f 20 61 72 67 75 6d 65 6e 74 73 20 67 69 76 65  o arguments give
a190: 6e 20 61 62 6f 76 65 2e 20 20 54 68 69 73 20 69  n above.  This i
a1a0: 73 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  s used to genera
a1b0: 74 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20  te overflow and 
a1c0: 75 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75  underflow.** dou
a1d0: 62 6c 65 73 20 74 6f 20 74 65 73 74 20 74 68 61  bles to test tha
a1e0: 74 20 74 68 65 79 20 61 72 65 20 63 6f 6e 76 65  t they are conve
a1f0: 72 74 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a  rted properly..*
a200: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
a210: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61  ite3_mprintf_sca
a220: 6c 65 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  led(.  void *Not
a230: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
a240: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
a250: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
a260: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
a270: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
a280: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
a290: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
a2a0: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
a2b0: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
a2c0: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
a2d0: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
a2e0: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
a2f0: 69 6e 74 20 69 3b 0a 20 20 64 6f 75 62 6c 65 20  int i;.  double 
a300: 72 5b 32 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b  r[2];.  char *z;
a310: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34 20 29  .  if( argc!=4 )
a320: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
a330: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
a340: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
a350: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
a360: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
a370: 4f 52 4d 41 54 20 44 4f 55 42 4c 45 20 44 4f 55  ORMAT DOUBLE DOU
a380: 42 4c 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  BLE\"", 0);.    
a390: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
a3a0: 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b  ;.  }.  for(i=2;
a3b0: 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   i<4; i++){.    
a3c0: 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c  if( Tcl_GetDoubl
a3d0: 65 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69  e(interp, argv[i
a3e0: 5d 2c 20 26 72 5b 69 2d 32 5d 29 20 29 20 72 65  ], &r[i-2]) ) re
a3f0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
a400: 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65    }.  z = sqlite
a410: 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31  3_mprintf(argv[1
a420: 5d 2c 20 72 5b 30 5d 2a 72 5b 31 5d 29 3b 0a 20  ], r[0]*r[1]);. 
a430: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
a440: 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b  t(interp, z, 0);
a450: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
a460: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  z);.  return TCL
a470: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
a480: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
a490: 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 20 46 4f  rintf_stronly FO
a4a0: 52 4d 41 54 20 53 54 52 49 4e 47 0a 2a 2a 0a 2a  RMAT STRING.**.*
a4b0: 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77  * Call mprintf w
a4c0: 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f 75  ith a single dou
a4d0: 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69  ble argument whi
a4e0: 63 68 20 69 73 20 74 68 65 20 70 72 6f 64 75 63  ch is the produc
a4f0: 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77 6f 20  t of the.** two 
a500: 61 72 67 75 6d 65 6e 74 73 20 67 69 76 65 6e 20  arguments given 
a510: 61 62 6f 76 65 2e 20 20 54 68 69 73 20 69 73 20  above.  This is 
a520: 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
a530: 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20 75 6e   overflow and un
a540: 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75 62 6c  derflow.** doubl
a550: 65 73 20 74 6f 20 74 65 73 74 20 74 68 61 74 20  es to test that 
a560: 74 68 65 79 20 61 72 65 20 63 6f 6e 76 65 72 74  they are convert
a570: 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a 2f 0a  ed properly..*/.
a580: 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
a590: 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e  e3_mprintf_stron
a5a0: 6c 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  ly(.  void *NotU
a5b0: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
a5c0: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
a5d0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
a5e0: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
a5f0: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
a600: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
a610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a620: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
a630: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
a640: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
a650: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
a660: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 63  gument */.){.  c
a670: 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72  har *z;.  if( ar
a680: 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=3 ){.    Tcl
a690: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
a6a0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
a6b0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
a6c0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
a6d0: 20 20 20 20 22 20 46 4f 52 4d 41 54 20 53 54 52      " FORMAT STR
a6e0: 49 4e 47 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20  ING\"", 0);.    
a6f0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
a700: 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69  ;.  }.  z = sqli
a710: 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76  te3_mprintf(argv
a720: 5b 31 5d 2c 20 61 72 67 76 5b 32 5d 29 3b 0a 20  [1], argv[2]);. 
a730: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
a740: 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b  t(interp, z, 0);
a750: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
a760: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  z);.  return TCL
a770: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
a780: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70  age:  sqlite3_mp
a790: 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65 20  rintf_hexdouble 
a7a0: 46 4f 52 4d 41 54 20 48 45 58 0a 2a 2a 0a 2a 2a  FORMAT HEX.**.**
a7b0: 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77 69   Call mprintf wi
a7c0: 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f 75 62  th a single doub
a7d0: 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69 63  le argument whic
a7e0: 68 20 69 73 20 64 65 72 69 76 65 64 20 66 72 6f  h is derived fro
a7f0: 6d 20 74 68 65 0a 2a 2a 20 68 65 78 61 64 65 63  m the.** hexadec
a800: 69 6d 61 6c 20 65 6e 63 6f 64 69 6e 67 20 6f 66  imal encoding of
a810: 20 61 6e 20 49 45 45 45 20 64 6f 75 62 6c 65 2e   an IEEE double.
a820: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
a830: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68  qlite3_mprintf_h
a840: 65 78 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64  exdouble(.  void
a850: 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c   *NotUsed,.  Tcl
a860: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
a870: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
a880: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
a890: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
a8a0: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72  mand */.  int ar
a8b0: 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  gc,             
a8c0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
a8d0: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61  guments */.  cha
a8e0: 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20  r **argv        
a8f0: 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65      /* Text of e
a900: 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ach argument */.
a910: 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20  ){.  char *z;.  
a920: 64 6f 75 62 6c 65 20 72 3b 0a 20 20 75 6e 73 69  double r;.  unsi
a930: 67 6e 65 64 20 69 6e 74 20 78 31 2c 20 78 32 3b  gned int x1, x2;
a940: 0a 20 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  .  sqlite_uint64
a950: 20 64 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d   d;.  if( argc!=
a960: 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
a970: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
a980: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
a990: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
a9a0: 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
a9b0: 22 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47 5c  " FORMAT STRING\
a9c0: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
a9d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
a9e0: 7d 0a 20 20 69 66 28 20 73 73 63 61 6e 66 28 61  }.  if( sscanf(a
a9f0: 72 67 76 5b 32 5d 2c 20 22 25 30 38 78 25 30 38  rgv[2], "%08x%08
aa00: 78 22 2c 20 26 78 32 2c 20 26 78 31 29 21 3d 32  x", &x2, &x1)!=2
aa10: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
aa20: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
aa30: 20 22 32 6e 64 20 61 72 67 75 6d 65 6e 74 20 73   "2nd argument s
aa40: 68 6f 75 6c 64 20 62 65 20 31 36 2d 63 68 61 72  hould be 16-char
aa50: 61 63 74 65 72 73 20 6f 66 20 68 65 78 22 2c 20  acters of hex", 
aa60: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
aa70: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
aa80: 64 20 3d 20 78 32 3b 0a 20 20 64 20 3d 20 28 64  d = x2;.  d = (d
aa90: 3c 3c 33 32 29 20 2b 20 78 31 3b 0a 20 20 6d 65  <<32) + x1;.  me
aaa0: 6d 63 70 79 28 26 72 2c 20 26 64 2c 20 73 69 7a  mcpy(&r, &d, siz
aab0: 65 6f 66 28 72 29 29 3b 0a 20 20 7a 20 3d 20 73  eof(r));.  z = s
aac0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61  qlite3_mprintf(a
aad0: 72 67 76 5b 31 5d 2c 20 72 29 3b 0a 20 20 54 63  rgv[1], r);.  Tc
aae0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
aaf0: 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20  nterp, z, 0);.  
ab00: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b  sqlite3_free(z);
ab10: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
ab20: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
ab30: 3a 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  : sqlite3_enable
ab40: 5f 73 68 61 72 65 64 5f 63 61 63 68 65 20 3f 42  _shared_cache ?B
ab50: 4f 4f 4c 45 41 4e 3f 0a 2a 2a 0a 2a 2f 0a 23 69  OOLEAN?.**.*/.#i
ab60: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
ab70: 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
ab80: 43 48 45 29 0a 73 74 61 74 69 63 20 69 6e 74 20  CHE).static int 
ab90: 74 65 73 74 5f 65 6e 61 62 6c 65 5f 73 68 61 72  test_enable_shar
aba0: 65 64 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61  ed(.  ClientData
abb0: 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20   clientData, /* 
abc0: 50 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74  Pointer to sqlit
abd0: 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75  e3_enable_XXX fu
abe0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f  nction */.  Tcl_
abf0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
ac00: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
ac10: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
ac20: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
ac30: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a  and */.  int obj
ac40: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
ac50: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
ac60: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f  uments */.  Tcl_
ac70: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
ac80: 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72  ]  /* Command ar
ac90: 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20  guments */.){.  
aca0: 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 65 6e  int rc;.  int en
acb0: 61 62 6c 65 3b 0a 20 20 69 6e 74 20 72 65 74 20  able;.  int ret 
acc0: 3d 20 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  = 0;..  if( objc
acd0: 21 3d 32 20 26 26 20 6f 62 6a 63 21 3d 31 20 29  !=2 && objc!=1 )
ace0: 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e  {.    Tcl_WrongN
acf0: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31  umArgs(interp, 1
ad00: 2c 20 6f 62 6a 76 2c 20 22 3f 42 4f 4f 4c 45 41  , objv, "?BOOLEA
ad10: 4e 3f 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  N?");.    return
ad20: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
ad30: 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33 47    ret = sqlite3G
ad40: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 68 61 72  lobalConfig.shar
ad50: 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 0a  edCacheEnabled;.
ad60: 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d 32 20 29  .  if( objc==2 )
ad70: 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65  {.    if( Tcl_Ge
ad80: 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28  tBooleanFromObj(
ad90: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c  interp, objv[1],
ada0: 20 26 65 6e 61 62 6c 65 29 20 29 7b 0a 20 20 20   &enable) ){.   
adb0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
adc0: 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  ROR;.    }.    r
add0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 6e 61 62  c = sqlite3_enab
ade0: 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 28  le_shared_cache(
adf0: 65 6e 61 62 6c 65 29 3b 0a 20 20 20 20 69 66 28  enable);.    if(
ae00: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
ae10: 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52  {.      Tcl_SetR
ae20: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
ae30: 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72 72  har *)sqlite3Err
ae40: 53 74 72 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  Str(rc), TCL_STA
ae50: 54 49 43 29 3b 0a 20 20 20 20 20 20 72 65 74 75  TIC);.      retu
ae60: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
ae70: 20 20 7d 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65    }.  }.  Tcl_Se
ae80: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
ae90: 70 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65 61  p, Tcl_NewBoolea
aea0: 6e 4f 62 6a 28 72 65 74 29 29 3b 0a 20 20 72 65  nObj(ret));.  re
aeb0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23  turn TCL_OK;.}.#
aec0: 65 6e 64 69 66 0a 0a 0a 0a 2f 2a 0a 2a 2a 20 55  endif..../*.** U
aed0: 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 65 78  sage: sqlite3_ex
aee0: 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f  tended_result_co
aef0: 64 65 73 20 20 20 44 42 20 20 20 20 42 4f 4f 4c  des   DB    BOOL
af00: 45 41 4e 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69 63  EAN.**.*/.static
af10: 20 69 6e 74 20 74 65 73 74 5f 65 78 74 65 6e 64   int test_extend
af20: 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28  ed_result_codes(
af30: 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c  .  ClientData cl
af40: 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69  ientData, /* Poi
af50: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f  nter to sqlite3_
af60: 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74  enable_XXX funct
af70: 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74  ion */.  Tcl_Int
af80: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
af90: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
afa0: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
afb0: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
afc0: 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20   */.  int objc, 
afd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
afe0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
aff0: 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a  nts */.  Tcl_Obj
b000: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20   *CONST objv[]  
b010: 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d  /* Command argum
b020: 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ents */.){.  int
b030: 20 65 6e 61 62 6c 65 3b 0a 20 20 73 71 6c 69 74   enable;.  sqlit
b040: 65 33 20 2a 64 62 3b 0a 0a 20 20 69 66 28 20 6f  e3 *db;..  if( o
b050: 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
b060: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
b070: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
b080: 22 44 42 20 42 4f 4f 4c 45 41 4e 22 29 3b 0a 20  "DB BOOLEAN");. 
b090: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
b0a0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
b0b0: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
b0c0: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
b0d0: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29  g(objv[1]), &db)
b0e0: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
b0f0: 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  ROR;.  if( Tcl_G
b100: 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a  etBooleanFromObj
b110: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
b120: 2c 20 26 65 6e 61 62 6c 65 29 20 29 20 72 65 74  , &enable) ) ret
b130: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
b140: 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65   sqlite3_extende
b150: 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28 64  d_result_codes(d
b160: 62 2c 20 65 6e 61 62 6c 65 29 3b 0a 20 20 72 65  b, enable);.  re
b170: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
b180: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
b190: 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f  ite3_libversion_
b1a0: 6e 75 6d 62 65 72 0a 2a 2a 0a 2a 2f 0a 73 74 61  number.**.*/.sta
b1b0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6c 69 62  tic int test_lib
b1c0: 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 0a  version_number(.
b1d0: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69    ClientData cli
b1e0: 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e  entData, /* Poin
b1f0: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65  ter to sqlite3_e
b200: 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69  nable_XXX functi
b210: 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  on */.  Tcl_Inte
b220: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
b230: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
b240: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
b250: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
b260: 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20  */.  int objc,  
b270: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
b280: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
b290: 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20  ts */.  Tcl_Obj 
b2a0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f  *CONST objv[]  /
b2b0: 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65  * Command argume
b2c0: 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f  nts */.){.  Tcl_
b2d0: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
b2e0: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
b2f0: 62 6a 28 73 71 6c 69 74 65 33 5f 6c 69 62 76 65  bj(sqlite3_libve
b300: 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 29 29  rsion_number()))
b310: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
b320: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
b330: 65 3a 20 73 71 6c 69 74 65 33 5f 74 61 62 6c 65  e: sqlite3_table
b340: 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61  _column_metadata
b350: 20 44 42 20 64 62 6e 61 6d 65 20 74 62 6c 6e 61   DB dbname tblna
b360: 6d 65 20 63 6f 6c 6e 61 6d 65 0a 2a 2a 0a 2a 2f  me colname.**.*/
b370: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
b380: 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54  NABLE_COLUMN_MET
b390: 41 44 41 54 41 0a 73 74 61 74 69 63 20 69 6e 74  ADATA.static int
b3a0: 20 74 65 73 74 5f 74 61 62 6c 65 5f 63 6f 6c 75   test_table_colu
b3b0: 6d 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20 20 43  mn_metadata(.  C
b3c0: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
b3d0: 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72  Data, /* Pointer
b3e0: 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62   to sqlite3_enab
b3f0: 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20  le_XXX function 
b400: 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  */.  Tcl_Interp 
b410: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
b420: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
b430: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
b440: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
b450: 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20    int objc,     
b460: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
b470: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
b480: 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  */.  Tcl_Obj *CO
b490: 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43  NST objv[]  /* C
b4a0: 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73  ommand arguments
b4b0: 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
b4c0: 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   *db;.  const ch
b4d0: 61 72 20 2a 7a 44 62 3b 0a 20 20 63 6f 6e 73 74  ar *zDb;.  const
b4e0: 20 63 68 61 72 20 2a 7a 54 62 6c 3b 0a 20 20 63   char *zTbl;.  c
b4f0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c 3b  onst char *zCol;
b500: 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 54 63 6c  .  int rc;.  Tcl
b510: 5f 4f 62 6a 20 2a 70 52 65 74 3b 0a 0a 20 20 63  _Obj *pRet;..  c
b520: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74 61  onst char *zData
b530: 74 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68  type;.  const ch
b540: 61 72 20 2a 7a 43 6f 6c 6c 73 65 71 3b 0a 20 20  ar *zCollseq;.  
b550: 69 6e 74 20 6e 6f 74 6e 75 6c 6c 3b 0a 20 20 69  int notnull;.  i
b560: 6e 74 20 70 72 69 6d 61 72 79 6b 65 79 3b 0a 20  nt primarykey;. 
b570: 20 69 6e 74 20 61 75 74 6f 69 6e 63 72 65 6d 65   int autoincreme
b580: 6e 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  nt;..  if( objc!
b590: 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =5 ){.    Tcl_Wr
b5a0: 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
b5b0: 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42 20  p, 1, objv, "DB 
b5c0: 64 62 6e 61 6d 65 20 74 62 6c 6e 61 6d 65 20 63  dbname tblname c
b5d0: 6f 6c 6e 61 6d 65 22 29 3b 0a 20 20 20 20 72 65  olname");.    re
b5e0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
b5f0: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
b600: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
b610: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
b620: 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
b630: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
b640: 20 20 7a 44 62 20 3d 20 54 63 6c 5f 47 65 74 53    zDb = Tcl_GetS
b650: 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a  tring(objv[2]);.
b660: 20 20 7a 54 62 6c 20 3d 20 54 63 6c 5f 47 65 74    zTbl = Tcl_Get
b670: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b  String(objv[3]);
b680: 0a 20 20 7a 43 6f 6c 20 3d 20 54 63 6c 5f 47 65  .  zCol = Tcl_Ge
b690: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 34 5d 29  tString(objv[4])
b6a0: 3b 0a 0a 20 20 69 66 28 20 73 74 72 6c 65 6e 28  ;..  if( strlen(
b6b0: 7a 44 62 29 3d 3d 30 20 29 20 7a 44 62 20 3d 20  zDb)==0 ) zDb = 
b6c0: 30 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  0;..  rc = sqlit
b6d0: 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f  e3_table_column_
b6e0: 6d 65 74 61 64 61 74 61 28 64 62 2c 20 7a 44 62  metadata(db, zDb
b6f0: 2c 20 7a 54 62 6c 2c 20 7a 43 6f 6c 2c 20 0a 20  , zTbl, zCol, . 
b700: 20 20 20 20 20 26 7a 44 61 74 61 74 79 70 65 2c       &zDatatype,
b710: 20 26 7a 43 6f 6c 6c 73 65 71 2c 20 26 6e 6f 74   &zCollseq, &not
b720: 6e 75 6c 6c 2c 20 26 70 72 69 6d 61 72 79 6b 65  null, &primaryke
b730: 79 2c 20 26 61 75 74 6f 69 6e 63 72 65 6d 65 6e  y, &autoincremen
b740: 74 29 3b 0a 0a 20 20 69 66 28 20 72 63 21 3d 53  t);..  if( rc!=S
b750: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
b760: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
b770: 28 69 6e 74 65 72 70 2c 20 73 71 6c 69 74 65 33  (interp, sqlite3
b780: 5f 65 72 72 6d 73 67 28 64 62 29 2c 20 30 29 3b  _errmsg(db), 0);
b790: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
b7a0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 70 52  ERROR;.  }..  pR
b7b0: 65 74 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a 28  et = Tcl_NewObj(
b7c0: 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  );.  Tcl_ListObj
b7d0: 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30 2c  AppendElement(0,
b7e0: 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 53 74   pRet, Tcl_NewSt
b7f0: 72 69 6e 67 4f 62 6a 28 7a 44 61 74 61 74 79 70  ringObj(zDatatyp
b800: 65 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c  e, -1));.  Tcl_L
b810: 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
b820: 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63 6c  ent(0, pRet, Tcl
b830: 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 43  _NewStringObj(zC
b840: 6f 6c 6c 73 65 71 2c 20 2d 31 29 29 3b 0a 20 20  ollseq, -1));.  
b850: 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
b860: 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65 74  dElement(0, pRet
b870: 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
b880: 6e 6f 74 6e 75 6c 6c 29 29 3b 0a 20 20 54 63 6c  notnull));.  Tcl
b890: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
b8a0: 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54  ement(0, pRet, T
b8b0: 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 70 72 69  cl_NewIntObj(pri
b8c0: 6d 61 72 79 6b 65 79 29 29 3b 0a 20 20 54 63 6c  marykey));.  Tcl
b8d0: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
b8e0: 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54  ement(0, pRet, T
b8f0: 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 75 74  cl_NewIntObj(aut
b900: 6f 69 6e 63 72 65 6d 65 6e 74 29 29 3b 0a 20 20  oincrement));.  
b910: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
b920: 28 69 6e 74 65 72 70 2c 20 70 52 65 74 29 3b 0a  (interp, pRet);.
b930: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
b940: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
b950: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
b960: 49 4e 43 52 42 4c 4f 42 0a 0a 2f 2a 0a 2a 2a 20  INCRBLOB../*.** 
b970: 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 72 65 61  sqlite3_blob_rea
b980: 64 20 20 43 48 41 4e 4e 45 4c 20 4f 46 46 53 45  d  CHANNEL OFFSE
b990: 54 20 4e 0a 2a 2a 0a 2a 2a 20 20 20 54 68 69 73  T N.**.**   This
b9a0: 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64   command is used
b9b0: 20 74 6f 20 74 65 73 74 20 74 68 65 20 73 71 6c   to test the sql
b9c0: 69 74 65 33 5f 62 6c 6f 62 5f 72 65 61 64 28 29  ite3_blob_read()
b9d0: 20 69 6e 20 77 61 79 73 20 74 68 61 74 0a 2a 2a   in ways that.**
b9e0: 20 20 20 74 68 65 20 54 63 6c 20 63 68 61 6e 6e     the Tcl chann
b9f0: 65 6c 20 69 6e 74 65 72 66 61 63 65 20 64 6f 65  el interface doe
ba00: 73 20 6e 6f 74 2e 20 54 68 65 20 66 69 72 73 74  s not. The first
ba10: 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64   argument should
ba20: 0a 2a 2a 20 20 20 62 65 20 74 68 65 20 6e 61 6d  .**   be the nam
ba30: 65 20 6f 66 20 61 20 76 61 6c 69 64 20 63 68 61  e of a valid cha
ba40: 6e 6e 65 6c 20 63 72 65 61 74 65 64 20 62 79 20  nnel created by 
ba50: 74 68 65 20 5b 69 6e 63 72 62 6c 6f 62 5d 20 6d  the [incrblob] m
ba60: 65 74 68 6f 64 0a 2a 2a 20 20 20 6f 66 20 61 20  ethod.**   of a 
ba70: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e  database handle.
ba80: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 63   This function c
ba90: 61 6c 6c 73 20 73 71 6c 69 74 65 33 5f 62 6c 6f  alls sqlite3_blo
baa0: 62 5f 72 65 61 64 28 29 0a 2a 2a 20 20 20 74 6f  b_read().**   to
bab0: 20 72 65 61 64 20 4e 20 62 79 74 65 73 20 66 72   read N bytes fr
bac0: 6f 6d 20 6f 66 66 73 65 74 20 4f 46 46 53 45 54  om offset OFFSET
bad0: 20 66 72 6f 6d 20 74 68 65 20 75 6e 64 65 72 6c   from the underl
bae0: 79 69 6e 67 20 53 51 4c 69 74 65 0a 2a 2a 20 20  ying SQLite.**  
baf0: 20 62 6c 6f 62 20 68 61 6e 64 6c 65 2e 0a 2a 2a   blob handle..**
bb00: 0a 2a 2a 20 20 20 4f 6e 20 73 75 63 63 65 73 73  .**   On success
bb10: 2c 20 61 20 62 79 74 65 2d 61 72 72 61 79 20 6f  , a byte-array o
bb20: 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 69 6e 67  bject containing
bb30: 20 74 68 65 20 72 65 61 64 20 64 61 74 61 20 69   the read data i
bb40: 73 20 0a 2a 2a 20 20 20 72 65 74 75 72 6e 65 64  s .**   returned
bb50: 2e 20 4f 6e 20 66 61 69 6c 75 72 65 2c 20 74 68  . On failure, th
bb60: 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 72 65  e interpreter re
bb70: 73 75 6c 74 20 69 73 20 73 65 74 20 74 6f 20 74  sult is set to t
bb80: 68 65 0a 2a 2a 20 20 20 74 65 78 74 20 72 65 70  he.**   text rep
bb90: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
bba0: 68 65 20 72 65 74 75 72 6e 65 64 20 65 72 72 6f  he returned erro
bbb0: 72 20 63 6f 64 65 20 28 69 2e 65 2e 20 22 53 51  r code (i.e. "SQ
bbc0: 4c 49 54 45 5f 4e 4f 4d 45 4d 22 29 0a 2a 2a 20  LITE_NOMEM").** 
bbd0: 20 20 61 6e 64 20 61 20 54 63 6c 20 65 78 63 65    and a Tcl exce
bbe0: 70 74 69 6f 6e 20 69 73 20 74 68 72 6f 77 6e 2e  ption is thrown.
bbf0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
bc00: 65 73 74 5f 62 6c 6f 62 5f 72 65 61 64 28 0a 20  est_blob_read(. 
bc10: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
bc20: 6e 74 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75  ntData, /* Not u
bc30: 73 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74  sed */.  Tcl_Int
bc40: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
bc50: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
bc60: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
bc70: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
bc80: 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20   */.  int objc, 
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bca0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
bcb0: 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a  nts */.  Tcl_Obj
bcc0: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20   *CONST objv[]  
bcd0: 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d  /* Command argum
bce0: 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c  ents */.){.  Tcl
bcf0: 5f 43 68 61 6e 6e 65 6c 20 63 68 61 6e 6e 65 6c  _Channel channel
bd00: 3b 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69  ;.  ClientData i
bd10: 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 20 20 73  nstanceData;.  s
bd20: 71 6c 69 74 65 33 5f 62 6c 6f 62 20 2a 70 42 6c  qlite3_blob *pBl
bd30: 6f 62 3b 0a 20 20 69 6e 74 20 6e 6f 74 55 73 65  ob;.  int notUse
bd40: 64 3b 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a  d;.  int nByte;.
bd50: 20 20 69 6e 74 20 69 4f 66 66 73 65 74 3b 0a 20    int iOffset;. 
bd60: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
bd70: 7a 42 75 66 3b 0a 20 20 69 6e 74 20 72 63 3b 0a  zBuf;.  int rc;.
bd80: 20 20 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34    .  if( objc!=4
bd90: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
bda0: 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
bdb0: 20 31 2c 20 6f 62 6a 76 2c 20 22 43 48 41 4e 4e   1, objv, "CHANN
bdc0: 45 4c 20 4f 46 46 53 45 54 20 4e 22 29 3b 0a 20  EL OFFSET N");. 
bdd0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
bde0: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 63 68 61 6e  ROR;.  }..  chan
bdf0: 6e 65 6c 20 3d 20 54 63 6c 5f 47 65 74 43 68 61  nel = Tcl_GetCha
be00: 6e 6e 65 6c 28 69 6e 74 65 72 70 2c 20 54 63 6c  nnel(interp, Tcl
be10: 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
be20: 31 5d 29 2c 20 26 6e 6f 74 55 73 65 64 29 3b 0a  1]), &notUsed);.
be30: 20 20 69 66 28 20 21 63 68 61 6e 6e 65 6c 0a 20    if( !channel. 
be40: 20 20 7c 7c 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c    || TCL_OK!=Tcl
be50: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
be60: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
be70: 26 69 4f 66 66 73 65 74 29 0a 20 20 20 7c 7c 20  &iOffset).   || 
be80: 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 49  TCL_OK!=Tcl_GetI
be90: 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
bea0: 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 6e 42 79 74  , objv[3], &nByt
beb0: 65 29 0a 20 20 20 7c 7c 20 6e 42 79 74 65 3c 30  e).   || nByte<0
bec0: 20 7c 7c 20 69 4f 66 66 73 65 74 3c 30 0a 20 20   || iOffset<0.  
bed0: 29 7b 20 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ){ .    return T
bee0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
bef0: 20 69 6e 73 74 61 6e 63 65 44 61 74 61 20 3d 20   instanceData = 
bf00: 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 49 6e  Tcl_GetChannelIn
bf10: 73 74 61 6e 63 65 44 61 74 61 28 63 68 61 6e 6e  stanceData(chann
bf20: 65 6c 29 3b 0a 20 20 70 42 6c 6f 62 20 3d 20 2a  el);.  pBlob = *
bf30: 28 28 73 71 6c 69 74 65 33 5f 62 6c 6f 62 20 2a  ((sqlite3_blob *
bf40: 2a 29 69 6e 73 74 61 6e 63 65 44 61 74 61 29 3b  *)instanceData);
bf50: 0a 0a 20 20 7a 42 75 66 20 3d 20 28 75 6e 73 69  ..  zBuf = (unsi
bf60: 67 6e 65 64 20 63 68 61 72 20 2a 29 54 63 6c 5f  gned char *)Tcl_
bf70: 41 6c 6c 6f 63 28 6e 42 79 74 65 29 3b 0a 20 20  Alloc(nByte);.  
bf80: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 6c 6f  rc = sqlite3_blo
bf90: 62 5f 72 65 61 64 28 70 42 6c 6f 62 2c 20 7a 42  b_read(pBlob, zB
bfa0: 75 66 2c 20 6e 42 79 74 65 2c 20 69 4f 66 66 73  uf, nByte, iOffs
bfb0: 65 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  et);.  if( rc==S
bfc0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
bfd0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
bfe0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
bff0: 42 79 74 65 41 72 72 61 79 4f 62 6a 28 7a 42 75  ByteArrayObj(zBu
c000: 66 2c 20 6e 42 79 74 65 29 29 3b 0a 20 20 7d 65  f, nByte));.  }e
c010: 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  lse{.    Tcl_Set
c020: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
c030: 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 54 65  char *)sqlite3Te
c040: 73 74 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  stErrorName(rc),
c050: 20 54 43 4c 5f 56 4f 4c 41 54 49 4c 45 29 3b 0a   TCL_VOLATILE);.
c060: 20 20 7d 0a 20 20 54 63 6c 5f 46 72 65 65 28 28    }.  Tcl_Free((
c070: 63 68 61 72 20 2a 29 7a 42 75 66 29 3b 0a 0a 20  char *)zBuf);.. 
c080: 20 72 65 74 75 72 6e 20 28 72 63 3d 3d 53 51 4c   return (rc==SQL
c090: 49 54 45 5f 4f 4b 20 3f 20 54 43 4c 5f 4f 4b 20  ITE_OK ? TCL_OK 
c0a0: 3a 20 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d 0a  : TCL_ERROR);.}.
c0b0: 0a 2f 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 62  ./*.** sqlite3_b
c0c0: 6c 6f 62 5f 77 72 69 74 65 20 43 48 41 4e 4e 45  lob_write CHANNE
c0d0: 4c 20 4f 46 46 53 45 54 20 44 41 54 41 20 3f 4e  L OFFSET DATA ?N
c0e0: 44 41 54 41 3f 0a 2a 2a 0a 2a 2a 20 20 20 54 68  DATA?.**.**   Th
c0f0: 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73  is command is us
c100: 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20 73  ed to test the s
c110: 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 77 72 69 74  qlite3_blob_writ
c120: 65 28 29 20 69 6e 20 77 61 79 73 20 74 68 61 74  e() in ways that
c130: 0a 2a 2a 20 20 20 74 68 65 20 54 63 6c 20 63 68  .**   the Tcl ch
c140: 61 6e 6e 65 6c 20 69 6e 74 65 72 66 61 63 65 20  annel interface 
c150: 64 6f 65 73 20 6e 6f 74 2e 20 54 68 65 20 66 69  does not. The fi
c160: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 73 68 6f  rst argument sho
c170: 75 6c 64 0a 2a 2a 20 20 20 62 65 20 74 68 65 20  uld.**   be the 
c180: 6e 61 6d 65 20 6f 66 20 61 20 76 61 6c 69 64 20  name of a valid 
c190: 63 68 61 6e 6e 65 6c 20 63 72 65 61 74 65 64 20  channel created 
c1a0: 62 79 20 74 68 65 20 5b 69 6e 63 72 62 6c 6f 62  by the [incrblob
c1b0: 5d 20 6d 65 74 68 6f 64 0a 2a 2a 20 20 20 6f 66  ] method.**   of
c1c0: 20 61 20 64 61 74 61 62 61 73 65 20 68 61 6e 64   a database hand
c1d0: 6c 65 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f  le. This functio
c1e0: 6e 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 5f  n calls sqlite3_
c1f0: 62 6c 6f 62 5f 77 72 69 74 65 28 29 0a 2a 2a 20  blob_write().** 
c200: 20 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 44    to write the D
c210: 41 54 41 20 62 79 74 65 2d 61 72 72 61 79 20 74  ATA byte-array t
c220: 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  o the underlying
c230: 20 53 51 4c 69 74 65 20 62 6c 6f 62 20 68 61 6e   SQLite blob han
c240: 64 6c 65 2e 0a 2a 2a 20 20 20 61 74 20 6f 66 66  dle..**   at off
c250: 73 65 74 20 4f 46 46 53 45 54 2e 0a 2a 2a 0a 2a  set OFFSET..**.*
c260: 2a 20 20 20 4f 6e 20 73 75 63 63 65 73 73 2c 20  *   On success, 
c270: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20  an empty string 
c280: 69 73 20 72 65 74 75 72 6e 65 64 2e 20 4f 6e 20  is returned. On 
c290: 66 61 69 6c 75 72 65 2c 20 74 68 65 20 69 6e 74  failure, the int
c2a0: 65 72 70 72 65 74 65 72 0a 2a 2a 20 20 20 72 65  erpreter.**   re
c2b0: 73 75 6c 74 20 69 73 20 73 65 74 20 74 6f 20 74  sult is set to t
c2c0: 68 65 20 74 65 78 74 20 72 65 70 72 65 73 65 6e  he text represen
c2d0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 72 65  tation of the re
c2e0: 74 75 72 6e 65 64 20 65 72 72 6f 72 20 63 6f 64  turned error cod
c2f0: 65 20 0a 2a 2a 20 20 20 28 69 2e 65 2e 20 22 53  e .**   (i.e. "S
c300: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 22 29 20 61 6e  QLITE_NOMEM") an
c310: 64 20 61 20 54 63 6c 20 65 78 63 65 70 74 69 6f  d a Tcl exceptio
c320: 6e 20 69 73 20 74 68 72 6f 77 6e 2e 0a 2a 2f 0a  n is thrown..*/.
c330: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
c340: 62 6c 6f 62 5f 77 72 69 74 65 28 0a 20 20 43 6c  blob_write(.  Cl
c350: 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
c360: 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75 73 65 64  ata, /* Not used
c370: 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
c380: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
c390: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
c3a0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
c3b0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
c3c0: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20  .  int objc,    
c3d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c3e0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
c3f0: 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43   */.  Tcl_Obj *C
c400: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20  ONST objv[]  /* 
c410: 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74  Command argument
c420: 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 43 68  s */.){.  Tcl_Ch
c430: 61 6e 6e 65 6c 20 63 68 61 6e 6e 65 6c 3b 0a 20  annel channel;. 
c440: 20 43 6c 69 65 6e 74 44 61 74 61 20 69 6e 73 74   ClientData inst
c450: 61 6e 63 65 44 61 74 61 3b 0a 20 20 73 71 6c 69  anceData;.  sqli
c460: 74 65 33 5f 62 6c 6f 62 20 2a 70 42 6c 6f 62 3b  te3_blob *pBlob;
c470: 0a 20 20 69 6e 74 20 6e 6f 74 55 73 65 64 3b 0a  .  int notUsed;.
c480: 20 20 69 6e 74 20 69 4f 66 66 73 65 74 3b 0a 20    int iOffset;. 
c490: 20 69 6e 74 20 72 63 3b 0a 0a 20 20 75 6e 73 69   int rc;..  unsi
c4a0: 67 6e 65 64 20 63 68 61 72 20 2a 7a 42 75 66 3b  gned char *zBuf;
c4b0: 0a 20 20 69 6e 74 20 6e 42 75 66 3b 0a 20 20 0a  .  int nBuf;.  .
c4c0: 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 26 26    if( objc!=4 &&
c4d0: 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20   objc!=5 ){.    
c4e0: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
c4f0: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
c500: 2c 20 22 43 48 41 4e 4e 45 4c 20 4f 46 46 53 45  , "CHANNEL OFFSE
c510: 54 20 44 41 54 41 20 3f 4e 44 41 54 41 3f 22 29  T DATA ?NDATA?")
c520: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
c530: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 63  _ERROR;.  }..  c
c540: 68 61 6e 6e 65 6c 20 3d 20 54 63 6c 5f 47 65 74  hannel = Tcl_Get
c550: 43 68 61 6e 6e 65 6c 28 69 6e 74 65 72 70 2c 20  Channel(interp, 
c560: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
c570: 6a 76 5b 31 5d 29 2c 20 26 6e 6f 74 55 73 65 64  jv[1]), &notUsed
c580: 29 3b 0a 20 20 69 66 28 20 21 63 68 61 6e 6e 65  );.  if( !channe
c590: 6c 20 7c 7c 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c  l || TCL_OK!=Tcl
c5a0: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
c5b0: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
c5c0: 26 69 4f 66 66 73 65 74 29 20 29 7b 20 0a 20 20  &iOffset) ){ .  
c5d0: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
c5e0: 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 6e 73 74 61  OR;.  }..  insta
c5f0: 6e 63 65 44 61 74 61 20 3d 20 54 63 6c 5f 47 65  nceData = Tcl_Ge
c600: 74 43 68 61 6e 6e 65 6c 49 6e 73 74 61 6e 63 65  tChannelInstance
c610: 44 61 74 61 28 63 68 61 6e 6e 65 6c 29 3b 0a 20  Data(channel);. 
c620: 20 70 42 6c 6f 62 20 3d 20 2a 28 28 73 71 6c 69   pBlob = *((sqli
c630: 74 65 33 5f 62 6c 6f 62 20 2a 2a 29 69 6e 73 74  te3_blob **)inst
c640: 61 6e 63 65 44 61 74 61 29 3b 0a 0a 20 20 7a 42  anceData);..  zB
c650: 75 66 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65  uf = Tcl_GetByte
c660: 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a  ArrayFromObj(obj
c670: 76 5b 33 5d 2c 20 26 6e 42 75 66 29 3b 0a 20 20  v[3], &nBuf);.  
c680: 69 66 28 20 6f 62 6a 63 3d 3d 35 20 26 26 20 54  if( objc==5 && 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 34 5d  (interp, objv[4]
c6b0: 2c 20 26 6e 42 75 66 29 20 29 7b 0a 20 20 20 20  , &nBuf) ){.    
c6c0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
c6d0: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
c6e0: 69 74 65 33 5f 62 6c 6f 62 5f 77 72 69 74 65 28  ite3_blob_write(
c6f0: 70 42 6c 6f 62 2c 20 7a 42 75 66 2c 20 6e 42 75  pBlob, zBuf, nBu
c700: 66 2c 20 69 4f 66 66 73 65 74 29 3b 0a 20 20 69  f, iOffset);.  i
c710: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
c720: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52   ){.    Tcl_SetR
c730: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
c740: 68 61 72 20 2a 29 73 71 6c 69 74 65 33 54 65 73  har *)sqlite3Tes
c750: 74 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20  tErrorName(rc), 
c760: 54 43 4c 5f 56 4f 4c 41 54 49 4c 45 29 3b 0a 20  TCL_VOLATILE);. 
c770: 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 28 72 63   }..  return (rc
c780: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 3f 20 54 43  ==SQLITE_OK ? TC
c790: 4c 5f 4f 4b 20 3a 20 54 43 4c 5f 45 52 52 4f 52  L_OK : TCL_ERROR
c7a0: 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  );.}.#endif../*.
c7b0: 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
c7c0: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
c7d0: 6f 6e 5f 76 32 20 44 42 2d 48 41 4e 44 4c 45 20  on_v2 DB-HANDLE 
c7e0: 4e 41 4d 45 20 43 4d 50 2d 50 52 4f 43 20 44 45  NAME CMP-PROC DE
c7f0: 4c 2d 50 52 4f 43 0a 2a 2a 0a 2a 2a 20 20 20 54  L-PROC.**.**   T
c800: 68 69 73 20 54 63 6c 20 70 72 6f 63 20 69 73 20  his Tcl proc is 
c810: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
c820: 20 74 68 65 20 65 78 70 65 72 69 6d 65 6e 74 61   the experimenta
c830: 6c 0a 2a 2a 20 20 20 73 71 6c 69 74 65 33 5f 63  l.**   sqlite3_c
c840: 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 5f  reate_collation_
c850: 76 32 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a  v2() interface..
c860: 2a 2f 0a 73 74 72 75 63 74 20 54 65 73 74 43 6f  */.struct TestCo
c870: 6c 6c 61 74 69 6f 6e 58 20 7b 0a 20 20 54 63 6c  llationX {.  Tcl
c880: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b  _Interp *interp;
c890: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 43 6d 70  .  Tcl_Obj *pCmp
c8a0: 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 44 65  ;.  Tcl_Obj *pDe
c8b0: 6c 3b 0a 7d 3b 0a 74 79 70 65 64 65 66 20 73 74  l;.};.typedef st
c8c0: 72 75 63 74 20 54 65 73 74 43 6f 6c 6c 61 74 69  ruct TestCollati
c8d0: 6f 6e 58 20 54 65 73 74 43 6f 6c 6c 61 74 69 6f  onX TestCollatio
c8e0: 6e 58 3b 0a 73 74 61 74 69 63 20 76 6f 69 64 20  nX;.static void 
c8f0: 74 65 73 74 43 72 65 61 74 65 43 6f 6c 6c 61 74  testCreateCollat
c900: 69 6f 6e 44 65 6c 28 76 6f 69 64 20 2a 70 43 74  ionDel(void *pCt
c910: 78 29 7b 0a 20 20 54 65 73 74 43 6f 6c 6c 61 74  x){.  TestCollat
c920: 69 6f 6e 58 20 2a 70 20 3d 20 28 54 65 73 74 43  ionX *p = (TestC
c930: 6f 6c 6c 61 74 69 6f 6e 58 20 2a 29 70 43 74 78  ollationX *)pCtx
c940: 3b 0a 0a 20 20 69 6e 74 20 72 63 20 3d 20 54 63  ;..  int rc = Tc
c950: 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 70 2d 3e 69  l_EvalObjEx(p->i
c960: 6e 74 65 72 70 2c 20 70 2d 3e 70 44 65 6c 2c 20  nterp, p->pDel, 
c970: 54 43 4c 5f 45 56 41 4c 5f 44 49 52 45 43 54 7c  TCL_EVAL_DIRECT|
c980: 54 43 4c 5f 45 56 41 4c 5f 47 4c 4f 42 41 4c 29  TCL_EVAL_GLOBAL)
c990: 3b 0a 20 20 69 66 28 20 72 63 21 3d 54 43 4c 5f  ;.  if( rc!=TCL_
c9a0: 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 42 61  OK ){.    Tcl_Ba
c9b0: 63 6b 67 72 6f 75 6e 64 45 72 72 6f 72 28 70 2d  ckgroundError(p-
c9c0: 3e 69 6e 74 65 72 70 29 3b 0a 20 20 7d 0a 0a 20  >interp);.  }.. 
c9d0: 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e   Tcl_DecrRefCoun
c9e0: 74 28 70 2d 3e 70 43 6d 70 29 3b 0a 20 20 54 63  t(p->pCmp);.  Tc
c9f0: 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70  l_DecrRefCount(p
ca00: 2d 3e 70 44 65 6c 29 3b 0a 20 20 73 71 6c 69 74  ->pDel);.  sqlit
ca10: 65 33 5f 66 72 65 65 28 28 76 6f 69 64 20 2a 29  e3_free((void *)
ca20: 70 29 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e 74  p);.}.static int
ca30: 20 74 65 73 74 43 72 65 61 74 65 43 6f 6c 6c 61   testCreateColla
ca40: 74 69 6f 6e 43 6d 70 28 0a 20 20 76 6f 69 64 20  tionCmp(.  void 
ca50: 2a 70 43 74 78 2c 0a 20 20 69 6e 74 20 6e 4c 65  *pCtx,.  int nLe
ca60: 66 74 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  ft,.  const void
ca70: 20 2a 7a 4c 65 66 74 2c 0a 20 20 69 6e 74 20 6e   *zLeft,.  int n
ca80: 52 69 67 68 74 2c 0a 20 20 63 6f 6e 73 74 20 76  Right,.  const v
ca90: 6f 69 64 20 2a 7a 52 69 67 68 74 0a 29 7b 0a 20  oid *zRight.){. 
caa0: 20 54 65 73 74 43 6f 6c 6c 61 74 69 6f 6e 58 20   TestCollationX 
cab0: 2a 70 20 3d 20 28 54 65 73 74 43 6f 6c 6c 61 74  *p = (TestCollat
cac0: 69 6f 6e 58 20 2a 29 70 43 74 78 3b 0a 20 20 54  ionX *)pCtx;.  T
cad0: 63 6c 5f 4f 62 6a 20 2a 70 53 63 72 69 70 74 20  cl_Obj *pScript 
cae0: 3d 20 54 63 6c 5f 44 75 70 6c 69 63 61 74 65 4f  = Tcl_DuplicateO
caf0: 62 6a 28 70 2d 3e 70 43 6d 70 29 3b 0a 20 20 69  bj(p->pCmp);.  i
cb00: 6e 74 20 69 52 65 73 20 3d 20 30 3b 0a 0a 20 20  nt iRes = 0;..  
cb10: 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74  Tcl_IncrRefCount
cb20: 28 70 53 63 72 69 70 74 29 3b 0a 20 20 54 63 6c  (pScript);.  Tcl
cb30: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
cb40: 65 6d 65 6e 74 28 30 2c 20 70 53 63 72 69 70 74  ement(0, pScript
cb50: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
cb60: 62 6a 28 28 63 68 61 72 20 2a 29 7a 4c 65 66 74  bj((char *)zLeft
cb70: 2c 20 6e 4c 65 66 74 29 29 3b 0a 20 20 54 63 6c  , nLeft));.  Tcl
cb80: 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
cb90: 65 6d 65 6e 74 28 30 2c 20 70 53 63 72 69 70 74  ement(0, pScript
cba0: 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
cbb0: 62 6a 28 28 63 68 61 72 20 2a 29 7a 52 69 67 68  bj((char *)zRigh
cbc0: 74 2c 6e 52 69 67 68 74 29 29 3b 0a 0a 20 20 69  t,nRight));..  i
cbd0: 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 45  f( TCL_OK!=Tcl_E
cbe0: 76 61 6c 4f 62 6a 45 78 28 70 2d 3e 69 6e 74 65  valObjEx(p->inte
cbf0: 72 70 2c 20 70 53 63 72 69 70 74 2c 20 54 43 4c  rp, pScript, TCL
cc00: 5f 45 56 41 4c 5f 44 49 52 45 43 54 7c 54 43 4c  _EVAL_DIRECT|TCL
cc10: 5f 45 56 41 4c 5f 47 4c 4f 42 41 4c 29 0a 20 20  _EVAL_GLOBAL).  
cc20: 20 7c 7c 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f   || TCL_OK!=Tcl_
cc30: 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 70 2d  GetIntFromObj(p-
cc40: 3e 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  >interp, Tcl_Get
cc50: 4f 62 6a 52 65 73 75 6c 74 28 70 2d 3e 69 6e 74  ObjResult(p->int
cc60: 65 72 70 29 2c 20 26 69 52 65 73 29 0a 20 20 29  erp), &iRes).  )
cc70: 7b 0a 20 20 20 20 54 63 6c 5f 42 61 63 6b 67 72  {.    Tcl_Backgr
cc80: 6f 75 6e 64 45 72 72 6f 72 28 70 2d 3e 69 6e 74  oundError(p->int
cc90: 65 72 70 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  erp);.  }.  Tcl_
cca0: 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 53 63  DecrRefCount(pSc
ccb0: 72 69 70 74 29 3b 0a 0a 20 20 72 65 74 75 72 6e  ript);..  return
ccc0: 20 69 52 65 73 3b 0a 7d 0a 73 74 61 74 69 63 20   iRes;.}.static 
ccd0: 69 6e 74 20 74 65 73 74 5f 63 72 65 61 74 65 5f  int test_create_
cce0: 63 6f 6c 6c 61 74 69 6f 6e 5f 76 32 28 0a 20 20  collation_v2(.  
ccf0: 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
cd00: 74 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75 73  tData, /* Not us
cd10: 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  ed */.  Tcl_Inte
cd20: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
cd30: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
cd40: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
cd50: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
cd60: 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20  */.  int objc,  
cd70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
cd80: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
cd90: 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20  ts */.  Tcl_Obj 
cda0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f  *CONST objv[]  /
cdb0: 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65  * Command argume
cdc0: 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 65 73 74  nts */.){.  Test
cdd0: 43 6f 6c 6c 61 74 69 6f 6e 58 20 2a 70 3b 0a 20  CollationX *p;. 
cde0: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
cdf0: 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
ce00: 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63  bjc!=5 ){.    Tc
ce10: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
ce20: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
ce30: 22 44 42 2d 48 41 4e 44 4c 45 20 4e 41 4d 45 20  "DB-HANDLE NAME 
ce40: 43 4d 50 2d 50 52 4f 43 20 44 45 4c 2d 50 52 4f  CMP-PROC DEL-PRO
ce50: 43 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  C");.    return 
ce60: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
ce70: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
ce80: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
ce90: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
cea0: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
ceb0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 70 20  TCL_ERROR;..  p 
cec0: 3d 20 28 54 65 73 74 43 6f 6c 6c 61 74 69 6f 6e  = (TestCollation
ced0: 58 20 2a 29 73 71 6c 69 74 65 33 5f 6d 61 6c 6c  X *)sqlite3_mall
cee0: 6f 63 28 73 69 7a 65 6f 66 28 54 65 73 74 43 6f  oc(sizeof(TestCo
cef0: 6c 6c 61 74 69 6f 6e 58 29 29 3b 0a 20 20 70 2d  llationX));.  p-
cf00: 3e 70 43 6d 70 20 3d 20 6f 62 6a 76 5b 33 5d 3b  >pCmp = objv[3];
cf10: 0a 20 20 70 2d 3e 70 44 65 6c 20 3d 20 6f 62 6a  .  p->pDel = obj
cf20: 76 5b 34 5d 3b 0a 20 20 70 2d 3e 69 6e 74 65 72  v[4];.  p->inter
cf30: 70 20 3d 20 69 6e 74 65 72 70 3b 0a 20 20 54 63  p = interp;.  Tc
cf40: 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70  l_IncrRefCount(p
cf50: 2d 3e 70 43 6d 70 29 3b 0a 20 20 54 63 6c 5f 49  ->pCmp);.  Tcl_I
cf60: 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 2d 3e 70  ncrRefCount(p->p
cf70: 44 65 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 73 71  Del);..  rc = sq
cf80: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
cf90: 6c 61 74 69 6f 6e 5f 76 32 28 64 62 2c 20 54 63  lation_v2(db, Tc
cfa0: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
cfb0: 5b 32 5d 29 2c 20 31 36 2c 20 0a 20 20 20 20 20  [2]), 16, .     
cfc0: 20 28 76 6f 69 64 20 2a 29 70 2c 20 74 65 73 74   (void *)p, test
cfd0: 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 43  CreateCollationC
cfe0: 6d 70 2c 20 74 65 73 74 43 72 65 61 74 65 43 6f  mp, testCreateCo
cff0: 6c 6c 61 74 69 6f 6e 44 65 6c 0a 20 20 29 3b 0a  llationDel.  );.
d000: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
d010: 5f 4d 49 53 55 53 45 20 29 7b 0a 20 20 20 20 54  _MISUSE ){.    T
d020: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
d030: 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33  interp, "sqlite3
d040: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 65 5f  _create_collate_
d050: 76 32 28 29 20 66 61 69 6c 65 64 20 74 6f 20 64  v2() failed to d
d060: 65 74 65 63 74 20 22 0a 20 20 20 20 20 20 22 61  etect ".      "a
d070: 6e 20 69 6e 76 61 6c 69 64 20 65 6e 63 6f 64 69  n invalid encodi
d080: 6e 67 22 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  ng", (char*)0);.
d090: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
d0a0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  RROR;.  }.  rc =
d0b0: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
d0c0: 63 6f 6c 6c 61 74 69 6f 6e 5f 76 32 28 64 62 2c  collation_v2(db,
d0d0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
d0e0: 62 6a 76 5b 32 5d 29 2c 20 53 51 4c 49 54 45 5f  bjv[2]), SQLITE_
d0f0: 55 54 46 38 2c 20 0a 20 20 20 20 20 20 28 76 6f  UTF8, .      (vo
d100: 69 64 20 2a 29 70 2c 20 74 65 73 74 43 72 65 61  id *)p, testCrea
d110: 74 65 43 6f 6c 6c 61 74 69 6f 6e 43 6d 70 2c 20  teCollationCmp, 
d120: 74 65 73 74 43 72 65 61 74 65 43 6f 6c 6c 61 74  testCreateCollat
d130: 69 6f 6e 44 65 6c 0a 20 20 29 3b 0a 20 20 72 65  ionDel.  );.  re
d140: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
d150: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
d160: 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  ite3_load_extens
d170: 69 6f 6e 20 44 42 2d 48 41 4e 44 4c 45 20 46 49  ion DB-HANDLE FI
d180: 4c 45 20 3f 50 52 4f 43 3f 0a 2a 2f 0a 73 74 61  LE ?PROC?.*/.sta
d190: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6c 6f 61  tic int test_loa
d1a0: 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0a 20 20 43  d_extension(.  C
d1b0: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
d1c0: 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75 73 65  Data, /* Not use
d1d0: 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  d */.  Tcl_Inter
d1e0: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
d1f0: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
d200: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
d210: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
d220: 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
d230: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
d240: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
d250: 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
d260: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
d270: 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
d280: 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 43  ts */.){.  Tcl_C
d290: 6d 64 49 6e 66 6f 20 63 6d 64 49 6e 66 6f 3b 0a  mdInfo cmdInfo;.
d2a0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
d2b0: 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20   int rc;.  char 
d2c0: 2a 7a 44 62 3b 0a 20 20 63 68 61 72 20 2a 7a 46  *zDb;.  char *zF
d2d0: 69 6c 65 3b 0a 20 20 63 68 61 72 20 2a 7a 50 72  ile;.  char *zPr
d2e0: 6f 63 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 2a  oc = 0;.  char *
d2f0: 7a 45 72 72 20 3d 20 30 3b 0a 0a 20 20 69 66 28  zErr = 0;..  if(
d300: 20 6f 62 6a 63 21 3d 34 20 26 26 20 6f 62 6a 63   objc!=4 && objc
d310: 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=3 ){.    Tcl_W
d320: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
d330: 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42  rp, 1, objv, "DB
d340: 2d 48 41 4e 44 4c 45 20 46 49 4c 45 20 3f 50 52  -HANDLE FILE ?PR
d350: 4f 43 3f 22 29 3b 0a 20 20 20 20 72 65 74 75 72  OC?");.    retur
d360: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
d370: 0a 20 20 7a 44 62 20 3d 20 54 63 6c 5f 47 65 74  .  zDb = Tcl_Get
d380: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b  String(objv[1]);
d390: 0a 20 20 7a 46 69 6c 65 20 3d 20 54 63 6c 5f 47  .  zFile = Tcl_G
d3a0: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d  etString(objv[2]
d3b0: 29 3b 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d 34  );.  if( objc==4
d3c0: 20 29 7b 0a 20 20 20 20 7a 50 72 6f 63 20 3d 20   ){.    zProc = 
d3d0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
d3e0: 6a 76 5b 33 5d 29 3b 0a 20 20 7d 0a 0a 20 20 2f  jv[3]);.  }..  /
d3f0: 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 43 20  * Extract the C 
d400: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
d410: 66 72 6f 6d 20 74 68 65 20 54 63 6c 20 63 6f 6d  from the Tcl com
d420: 6d 61 6e 64 20 6e 61 6d 65 20 2a 2f 0a 20 20 69  mand name */.  i
d430: 66 28 20 21 54 63 6c 5f 47 65 74 43 6f 6d 6d 61  f( !Tcl_GetComma
d440: 6e 64 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20 7a  ndInfo(interp, z
d450: 44 62 2c 20 26 63 6d 64 49 6e 66 6f 29 20 29 7b  Db, &cmdInfo) ){
d460: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
d470: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 63  esult(interp, "c
d480: 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f 75 6e 64  ommand not found
d490: 3a 20 22 2c 20 7a 44 62 2c 20 28 63 68 61 72 2a  : ", zDb, (char*
d4a0: 29 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  )0);.    return 
d4b0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
d4c0: 20 64 62 20 3d 20 28 28 73 74 72 75 63 74 20 53   db = ((struct S
d4d0: 71 6c 69 74 65 44 62 2a 29 63 6d 64 49 6e 66 6f  qliteDb*)cmdInfo
d4e0: 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74 61 29 2d  .objClientData)-
d4f0: 3e 64 62 3b 0a 20 20 61 73 73 65 72 74 28 64 62  >db;.  assert(db
d500: 29 3b 0a 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68  );..  /* Call th
d510: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 43 20 66  e underlying C f
d520: 75 6e 63 74 69 6f 6e 2e 20 49 66 20 61 6e 20 65  unction. If an e
d530: 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 73 65 74  rror occurs, set
d540: 20 72 63 20 74 6f 20 0a 20 20 2a 2a 20 54 43 4c   rc to .  ** TCL
d550: 5f 45 52 52 4f 52 20 61 6e 64 20 6c 6f 61 64 20  _ERROR and load 
d560: 61 6e 79 20 65 72 72 6f 72 20 73 74 72 69 6e 67  any error string
d570: 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 70   into the interp
d580: 72 65 74 65 72 2e 20 49 66 20 6e 6f 20 0a 20 20  reter. If no .  
d590: 2a 2a 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  ** error occurs,
d5a0: 20 73 65 74 20 72 63 20 74 6f 20 54 43 4c 5f 4f   set rc to TCL_O
d5b0: 4b 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  K..  */.#ifdef S
d5c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f  QLITE_OMIT_LOAD_
d5d0: 45 58 54 45 4e 53 49 4f 4e 0a 20 20 72 63 20 3d  EXTENSION.  rc =
d5e0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
d5f0: 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65 33 5f   zErr = sqlite3_
d600: 6d 70 72 69 6e 74 66 28 22 74 68 69 73 20 62 75  mprintf("this bu
d610: 69 6c 64 20 6f 6d 69 74 73 20 73 71 6c 69 74 65  ild omits sqlite
d620: 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  3_load_extension
d630: 28 29 22 29 3b 0a 23 65 6c 73 65 0a 20 20 72 63  ()");.#else.  rc
d640: 20 3d 20 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f   = sqlite3_load_
d650: 65 78 74 65 6e 73 69 6f 6e 28 64 62 2c 20 7a 46  extension(db, zF
d660: 69 6c 65 2c 20 7a 50 72 6f 63 2c 20 26 7a 45 72  ile, zProc, &zEr
d670: 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  r);.#endif.  if(
d680: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
d690: 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73  {.    Tcl_SetRes
d6a0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 45 72 72  ult(interp, zErr
d6b0: 20 3f 20 7a 45 72 72 20 3a 20 22 22 2c 20 54 43   ? zErr : "", TC
d6c0: 4c 5f 56 4f 4c 41 54 49 4c 45 29 3b 0a 20 20 20  L_VOLATILE);.   
d6d0: 20 72 63 20 3d 20 54 43 4c 5f 45 52 52 4f 52 3b   rc = TCL_ERROR;
d6e0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
d6f0: 20 3d 20 54 43 4c 5f 4f 4b 3b 0a 20 20 7d 0a 20   = TCL_OK;.  }. 
d700: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 45   sqlite3_free(zE
d710: 72 72 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20 72  rr);..  return r
d720: 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  c;.}../*.** Usag
d730: 65 3a 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  e: sqlite3_enabl
d740: 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e_load_extension
d750: 20 44 42 2d 48 41 4e 44 4c 45 20 4f 4e 4f 46 46   DB-HANDLE ONOFF
d760: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
d770: 65 73 74 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 28  est_enable_load(
d780: 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c  .  ClientData cl
d790: 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 4e 6f 74  ientData, /* Not
d7a0: 20 75 73 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49   used */.  Tcl_I
d7b0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
d7c0: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
d7d0: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
d7e0: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
d7f0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63  nd */.  int objc
d800: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
d810: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
d820: 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f  ments */.  Tcl_O
d830: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
d840: 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67    /* Command arg
d850: 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54  uments */.){.  T
d860: 63 6c 5f 43 6d 64 49 6e 66 6f 20 63 6d 64 49 6e  cl_CmdInfo cmdIn
d870: 66 6f 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  fo;.  sqlite3 *d
d880: 62 3b 0a 20 20 63 68 61 72 20 2a 7a 44 62 3b 0a  b;.  char *zDb;.
d890: 20 20 69 6e 74 20 6f 6e 6f 66 66 3b 0a 0a 20 20    int onoff;..  
d8a0: 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
d8b0: 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41     Tcl_WrongNumA
d8c0: 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
d8d0: 62 6a 76 2c 20 22 44 42 2d 48 41 4e 44 4c 45 20  bjv, "DB-HANDLE 
d8e0: 4f 4e 4f 46 46 22 29 3b 0a 20 20 20 20 72 65 74  ONOFF");.    ret
d8f0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
d900: 20 7d 0a 20 20 7a 44 62 20 3d 20 54 63 6c 5f 47   }.  zDb = Tcl_G
d910: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
d920: 29 3b 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74  );..  /* Extract
d930: 20 74 68 65 20 43 20 64 61 74 61 62 61 73 65 20   the C database 
d940: 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74 68 65 20  handle from the 
d950: 54 63 6c 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d 65  Tcl command name
d960: 20 2a 2f 0a 20 20 69 66 28 20 21 54 63 6c 5f 47   */.  if( !Tcl_G
d970: 65 74 43 6f 6d 6d 61 6e 64 49 6e 66 6f 28 69 6e  etCommandInfo(in
d980: 74 65 72 70 2c 20 7a 44 62 2c 20 26 63 6d 64 49  terp, zDb, &cmdI
d990: 6e 66 6f 29 20 29 7b 0a 20 20 20 20 54 63 6c 5f  nfo) ){.    Tcl_
d9a0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
d9b0: 65 72 70 2c 20 22 63 6f 6d 6d 61 6e 64 20 6e 6f  erp, "command no
d9c0: 74 20 66 6f 75 6e 64 3a 20 22 2c 20 7a 44 62 2c  t found: ", zDb,
d9d0: 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20 20   (char*)0);.    
d9e0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
d9f0: 3b 0a 20 20 7d 0a 20 20 64 62 20 3d 20 28 28 73  ;.  }.  db = ((s
da00: 74 72 75 63 74 20 53 71 6c 69 74 65 44 62 2a 29  truct SqliteDb*)
da10: 63 6d 64 49 6e 66 6f 2e 6f 62 6a 43 6c 69 65 6e  cmdInfo.objClien
da20: 74 44 61 74 61 29 2d 3e 64 62 3b 0a 20 20 61 73  tData)->db;.  as
da30: 73 65 72 74 28 64 62 29 3b 0a 0a 20 20 2f 2a 20  sert(db);..  /* 
da40: 47 65 74 20 74 68 65 20 6f 6e 6f 66 66 20 70 61  Get the onoff pa
da50: 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 69 66 28  rameter */.  if(
da60: 20 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46   Tcl_GetBooleanF
da70: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
da80: 62 6a 76 5b 32 5d 2c 20 26 6f 6e 6f 66 66 29 20  bjv[2], &onoff) 
da90: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
daa0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 23 69  L_ERROR;.  }..#i
dab0: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
dac0: 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
dad0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
dae0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 74 68 69 73  lt(interp, "this
daf0: 20 62 75 69 6c 64 20 6f 6d 69 74 73 20 73 71 6c   build omits sql
db00: 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  ite3_load_extens
db10: 69 6f 6e 28 29 22 29 3b 0a 20 20 72 65 74 75 72  ion()");.  retur
db20: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 23 65 6c  n TCL_ERROR;.#el
db30: 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 65 6e 61  se.  sqlite3_ena
db40: 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble_load_extensi
db50: 6f 6e 28 64 62 2c 20 6f 6e 6f 66 66 29 3b 0a 20  on(db, onoff);. 
db60: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
db70: 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  #endif.}../*.** 
db80: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f 61  Usage:  sqlite_a
db90: 62 6f 72 74 0a 2a 2a 0a 2a 2a 20 53 68 75 74 64  bort.**.** Shutd
dba0: 6f 77 6e 20 74 68 65 20 70 72 6f 63 65 73 73 20  own the process 
dbb0: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54 68  immediately.  Th
dbc0: 69 73 20 69 73 20 6e 6f 74 20 61 20 63 6c 65 61  is is not a clea
dbd0: 6e 20 73 68 75 74 64 6f 77 6e 2e 0a 2a 2a 20 54  n shutdown..** T
dbe0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  his command is u
dbf0: 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20  sed to test the 
dc00: 72 65 63 6f 76 65 72 61 62 69 6c 69 74 79 20 6f  recoverability o
dc10: 66 20 61 20 64 61 74 61 62 61 73 65 20 69 6e 0a  f a database in.
dc20: 2a 2a 20 74 68 65 20 65 76 65 6e 74 20 6f 66 20  ** the event of 
dc30: 61 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68 2e  a program crash.
dc40: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73  .*/.static int s
dc50: 71 6c 69 74 65 5f 61 62 6f 72 74 28 0a 20 20 76  qlite_abort(.  v
dc60: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
dc70: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
dc80: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
dc90: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
dca0: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
dcb0: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
dcc0: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
dcd0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
dce0: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
dcf0: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
dd00: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
dd10: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
dd20: 2a 2f 0a 29 7b 0a 23 69 66 20 64 65 66 69 6e 65  */.){.#if define
dd30: 64 28 5f 4d 53 43 5f 56 45 52 29 0a 20 20 2f 2a  d(_MSC_VER).  /*
dd40: 20 57 65 20 64 6f 20 74 68 69 73 2c 20 6f 74 68   We do this, oth
dd50: 65 72 77 69 73 65 20 74 68 65 20 74 65 73 74 20  erwise the test 
dd60: 77 69 6c 6c 20 68 61 6c 74 20 77 69 74 68 20 61  will halt with a
dd70: 20 70 6f 70 75 70 20 6d 65 73 73 61 67 65 0a 20   popup message. 
dd80: 20 20 2a 20 74 68 61 74 20 77 65 20 68 61 76 65    * that we have
dd90: 20 74 6f 20 63 6c 69 63 6b 20 61 77 61 79 20 62   to click away b
dda0: 65 66 6f 72 65 20 74 68 65 20 74 65 73 74 20 77  efore the test w
ddb0: 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 2e 0a 20 20  ill continue..  
ddc0: 20 2a 2f 0a 20 20 5f 73 65 74 5f 61 62 6f 72 74   */.  _set_abort
ddd0: 5f 62 65 68 61 76 69 6f 72 28 20 30 2c 20 5f 43  _behavior( 0, _C
dde0: 41 4c 4c 5f 52 45 50 4f 52 54 46 41 55 4c 54 20  ALL_REPORTFAULT 
ddf0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 65 78 69 74  );.#endif.  exit
de00: 28 32 35 35 29 3b 0a 20 20 61 73 73 65 72 74 28  (255);.  assert(
de10: 20 69 6e 74 65 72 70 3d 3d 30 20 29 3b 20 20 20   interp==0 );   
de20: 2f 2a 20 54 68 69 73 20 77 69 6c 6c 20 61 6c 77  /* This will alw
de30: 61 79 73 20 66 61 69 6c 20 2a 2f 0a 20 20 72 65  ays fail */.  re
de40: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
de50: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
de60: 69 6e 67 20 72 6f 75 74 69 6e 65 20 69 73 20 61  ing routine is a
de70: 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 53 51   user-defined SQ
de80: 4c 20 66 75 6e 63 74 69 6f 6e 20 77 68 6f 73 65  L function whose
de90: 20 70 75 72 70 6f 73 65 0a 2a 2a 20 69 73 20 74   purpose.** is t
dea0: 6f 20 74 65 73 74 20 74 68 65 20 73 71 6c 69 74  o test the sqlit
deb0: 65 5f 73 65 74 5f 72 65 73 75 6c 74 28 29 20 41  e_set_result() A
dec0: 50 49 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  PI..*/.static vo
ded0: 69 64 20 74 65 73 74 46 75 6e 63 28 73 71 6c 69  id testFunc(sqli
dee0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
def0: 74 65 78 74 2c 20 69 6e 74 20 61 72 67 63 2c 20  text, int argc, 
df00: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
df10: 61 72 67 76 29 7b 0a 20 20 77 68 69 6c 65 28 20  argv){.  while( 
df20: 61 72 67 63 3e 3d 32 20 29 7b 0a 20 20 20 20 63  argc>=2 ){.    c
df30: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 30  onst char *zArg0
df40: 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65   = (char*)sqlite
df50: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
df60: 76 5b 30 5d 29 3b 0a 20 20 20 20 69 66 28 20 7a  v[0]);.    if( z
df70: 41 72 67 30 20 29 7b 0a 20 20 20 20 20 20 69 66  Arg0 ){.      if
df80: 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49  ( 0==sqlite3StrI
df90: 43 6d 70 28 7a 41 72 67 30 2c 20 22 69 6e 74 22  Cmp(zArg0, "int"
dfa0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ) ){.        sql
dfb0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28  ite3_result_int(
dfc0: 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69 74 65 33  context, sqlite3
dfd0: 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b  _value_int(argv[
dfe0: 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  1]));.      }els
dff0: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
e000: 49 43 6d 70 28 7a 41 72 67 30 2c 22 69 6e 74 36  ICmp(zArg0,"int6
e010: 34 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  4")==0 ){.      
e020: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
e030: 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20  _int64(context, 
e040: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
e050: 74 36 34 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20  t64(argv[1]));. 
e060: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
e070: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41  qlite3StrICmp(zA
e080: 72 67 30 2c 22 73 74 72 69 6e 67 22 29 3d 3d 30  rg0,"string")==0
e090: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
e0a0: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
e0b0: 63 6f 6e 74 65 78 74 2c 20 28 63 68 61 72 2a 29  context, (char*)
e0c0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
e0d0: 78 74 28 61 72 67 76 5b 31 5d 29 2c 20 2d 31 2c  xt(argv[1]), -1,
e0e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
e0f0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
e100: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
e110: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
e120: 41 72 67 30 2c 22 64 6f 75 62 6c 65 22 29 3d 3d  Arg0,"double")==
e130: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
e140: 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62  ite3_result_doub
e150: 6c 65 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69  le(context, sqli
e160: 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
e170: 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20 20  (argv[1]));.    
e180: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
e190: 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30  te3StrICmp(zArg0
e1a0: 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20  ,"null")==0 ){. 
e1b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
e1c0: 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65  esult_null(conte
e1d0: 78 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  xt);.      }else
e1e0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
e1f0: 43 6d 70 28 7a 41 72 67 30 2c 22 76 61 6c 75 65  Cmp(zArg0,"value
e200: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
e210: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
e220: 76 61 6c 75 65 28 63 6f 6e 74 65 78 74 2c 20 61  value(context, a
e230: 72 67 76 5b 73 71 6c 69 74 65 33 5f 76 61 6c 75  rgv[sqlite3_valu
e240: 65 5f 69 6e 74 28 61 72 67 76 5b 31 5d 29 5d 29  e_int(argv[1])])
e250: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
e260: 20 20 20 20 20 20 20 67 6f 74 6f 20 65 72 72 6f         goto erro
e270: 72 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  r_out;.      }. 
e280: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
e290: 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b 0a  goto error_out;.
e2a0: 20 20 20 20 7d 0a 20 20 20 20 61 72 67 63 20 2d      }.    argc -
e2b0: 3d 20 32 3b 0a 20 20 20 20 61 72 67 76 20 2b 3d  = 2;.    argv +=
e2c0: 20 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   2;.  }.  return
e2d0: 3b 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a 20 20  ;..error_out:.  
e2e0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
e2f0: 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 22 66 69  rror(context,"fi
e300: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 73 68 6f  rst argument sho
e310: 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20 22  uld be one of: "
e320: 0a 20 20 20 20 20 20 22 69 6e 74 20 69 6e 74 36  .      "int int6
e330: 34 20 73 74 72 69 6e 67 20 64 6f 75 62 6c 65 20  4 string double 
e340: 6e 75 6c 6c 20 76 61 6c 75 65 22 2c 20 2d 31 29  null value", -1)
e350: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
e360: 3a 20 20 20 73 71 6c 69 74 65 5f 72 65 67 69 73  :   sqlite_regis
e370: 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  ter_test_functio
e380: 6e 20 20 44 42 20 20 4e 41 4d 45 0a 2a 2a 0a 2a  n  DB  NAME.**.*
e390: 2a 20 52 65 67 69 73 74 65 72 20 74 68 65 20 74  * Register the t
e3a0: 65 73 74 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  est SQL function
e3b0: 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
e3c0: 20 44 42 20 75 6e 64 65 72 20 74 68 65 20 6e 61   DB under the na
e3d0: 6d 65 20 4e 41 4d 45 2e 0a 2a 2f 0a 73 74 61 74  me NAME..*/.stat
e3e0: 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65 67 69  ic int test_regi
e3f0: 73 74 65 72 5f 66 75 6e 63 28 0a 20 20 76 6f 69  ster_func(.  voi
e400: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
e410: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
e420: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
e430: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
e440: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
e450: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
e460: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
e470: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
e480: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
e490: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
e4a0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
e4b0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
e4c0: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
e4d0: 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  b;.  int rc;.  i
e4e0: 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  f( argc!=3 ){.  
e4f0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
e500: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
e510: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
e520: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
e530: 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 20 46  , .       " DB F
e540: 55 4e 43 54 49 4f 4e 2d 4e 41 4d 45 22 2c 20 30  UNCTION-NAME", 0
e550: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
e560: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
e570: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
e580: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
e590: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
e5a0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
e5b0: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
e5c0: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 61 72 67  function(db, arg
e5d0: 76 5b 32 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45  v[2], -1, SQLITE
e5e0: 5f 55 54 46 38 2c 20 30 2c 20 0a 20 20 20 20 20  _UTF8, 0, .     
e5f0: 20 74 65 73 74 46 75 6e 63 2c 20 30 2c 20 30 29   testFunc, 0, 0)
e600: 3b 0a 20 20 69 66 28 20 72 63 21 3d 30 20 29 7b  ;.  if( rc!=0 ){
e610: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
e620: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71  esult(interp, sq
e630: 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 2c  lite3ErrStr(rc),
e640: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
e650: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
e660: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
e670: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
e680: 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
e690: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65   TCL_ERROR;.  re
e6a0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
e6b0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
e6c0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 20  lite3_finalize  
e6d0: 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 46 69 6e 61  STMT .**.** Fina
e6e0: 6c 69 7a 65 20 61 20 73 74 61 74 65 6d 65 6e 74  lize a statement
e6f0: 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74   handle..*/.stat
e700: 69 63 20 69 6e 74 20 74 65 73 74 5f 66 69 6e 61  ic int test_fina
e710: 6c 69 7a 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  lize(.  void * c
e720: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
e730: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
e740: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
e750: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
e760: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
e770: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
e780: 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74   int rc;.  sqlit
e790: 65 33 20 2a 64 62 20 3d 20 30 3b 0a 0a 20 20 69  e3 *db = 0;..  i
e7a0: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
e7b0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
e7c0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
e7d0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
e7e0: 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
e7f0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
e800: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
e810: 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29  ), " <STMT>", 0)
e820: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
e830: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
e840: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
e850: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
e860: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
e870: 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
e880: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
e890: 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20   if( pStmt ){.  
e8a0: 20 20 64 62 20 3d 20 53 74 6d 74 54 6f 44 62 28    db = StmtToDb(
e8b0: 70 53 74 6d 74 29 3b 0a 20 20 7d 0a 20 20 72 63  pStmt);.  }.  rc
e8c0: 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c   = sqlite3_final
e8d0: 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 54 63  ize(pStmt);.  Tc
e8e0: 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
e8f0: 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72  rp, (char *)t1Er
e900: 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
e910: 5f 53 54 41 54 49 43 29 3b 0a 20 20 69 66 28 20  _STATIC);.  if( 
e920: 64 62 20 26 26 20 73 71 6c 69 74 65 33 54 65 73  db && sqlite3Tes
e930: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
e940: 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
e950: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
e960: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
e970: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
e980: 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74  qlite3_stmt_stat
e990: 75 73 20 20 53 54 4d 54 20 20 43 4f 44 45 20 20  us  STMT  CODE  
e9a0: 52 45 53 45 54 46 4c 41 47 0a 2a 2a 0a 2a 2a 20  RESETFLAG.**.** 
e9b0: 47 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  Get the value of
e9c0: 20 61 20 73 74 61 74 75 73 20 63 6f 75 6e 74 65   a status counte
e9d0: 72 20 66 72 6f 6d 20 61 20 73 74 61 74 65 6d 65  r from a stateme
e9e0: 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nt..*/.static in
e9f0: 74 20 74 65 73 74 5f 73 74 6d 74 5f 73 74 61 74  t test_stmt_stat
ea00: 75 73 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  us(.  void * cli
ea10: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
ea20: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
ea30: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
ea40: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
ea50: 5b 5d 0a 29 7b 0a 20 20 69 6e 74 20 69 56 61 6c  [].){.  int iVal
ea60: 75 65 3b 0a 20 20 69 6e 74 20 69 2c 20 6f 70 2c  ue;.  int i, op,
ea70: 20 72 65 73 65 74 46 6c 61 67 3b 0a 20 20 63 6f   resetFlag;.  co
ea80: 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 4e 61 6d  nst char *zOpNam
ea90: 65 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  e;.  sqlite3_stm
eaa0: 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 73 74 61  t *pStmt;..  sta
eab0: 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74  tic const struct
eac0: 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61   {.    const cha
ead0: 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 69 6e  r *zName;.    in
eae0: 74 20 6f 70 3b 0a 20 20 7d 20 61 4f 70 5b 5d 20  t op;.  } aOp[] 
eaf0: 3d 20 7b 0a 20 20 20 20 7b 20 22 53 51 4c 49 54  = {.    { "SQLIT
eb00: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 46 55 4c  E_STMTSTATUS_FUL
eb10: 4c 53 43 41 4e 5f 53 54 45 50 22 2c 20 20 20 53  LSCAN_STEP",   S
eb20: 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
eb30: 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 20 20  _FULLSCAN_STEP  
eb40: 20 7d 2c 0a 20 20 20 20 7b 20 22 53 51 4c 49 54   },.    { "SQLIT
eb50: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
eb60: 54 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 53  T",            S
eb70: 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
eb80: 5f 53 4f 52 54 20 20 20 20 20 20 20 20 20 20 20  _SORT           
eb90: 20 7d 2c 0a 20 20 20 20 7b 20 22 53 51 4c 49 54   },.    { "SQLIT
eba0: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 41 55 54  E_STMTSTATUS_AUT
ebb0: 4f 49 4e 44 45 58 22 2c 20 20 20 20 20 20 20 53  OINDEX",       S
ebc0: 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
ebd0: 5f 41 55 54 4f 49 4e 44 45 58 20 20 20 20 20 20  _AUTOINDEX      
ebe0: 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69 66 28 20 6f   },.  };.  if( o
ebf0: 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63  bjc!=4 ){.    Tc
ec00: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
ec10: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
ec20: 22 53 54 4d 54 20 50 41 52 41 4d 45 54 45 52 20  "STMT PARAMETER 
ec30: 52 45 53 45 54 46 4c 41 47 22 29 3b 0a 20 20 20  RESETFLAG");.   
ec40: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
ec50: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
ec60: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
ec70: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
ec80: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
ec90: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
eca0: 5f 45 52 52 4f 52 3b 0a 20 20 7a 4f 70 4e 61 6d  _ERROR;.  zOpNam
ecb0: 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  e = Tcl_GetStrin
ecc0: 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20 66 6f  g(objv[2]);.  fo
ecd0: 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69  r(i=0; i<ArraySi
ece0: 7a 65 28 61 4f 70 29 3b 20 69 2b 2b 29 7b 0a 20  ze(aOp); i++){. 
ecf0: 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 4f     if( strcmp(aO
ed00: 70 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 7a 4f 70 4e  p[i].zName, zOpN
ed10: 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ame)==0 ){.     
ed20: 20 6f 70 20 3d 20 61 4f 70 5b 69 5d 2e 6f 70 3b   op = aOp[i].op;
ed30: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
ed40: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 3e    }.  }.  if( i>
ed50: 3d 41 72 72 61 79 53 69 7a 65 28 61 4f 70 29 20  =ArraySize(aOp) 
ed60: 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47  ){.    if( Tcl_G
ed70: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
ed80: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 6f  erp, objv[2], &o
ed90: 70 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  p) ) return TCL_
eda0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
edb0: 20 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46   Tcl_GetBooleanF
edc0: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
edd0: 62 6a 76 5b 33 5d 2c 20 26 72 65 73 65 74 46 6c  bjv[3], &resetFl
ede0: 61 67 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ag) ) return TCL
edf0: 5f 45 52 52 4f 52 3b 0a 20 20 69 56 61 6c 75 65  _ERROR;.  iValue
ee00: 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f   = sqlite3_stmt_
ee10: 73 74 61 74 75 73 28 70 53 74 6d 74 2c 20 6f 70  status(pStmt, op
ee20: 2c 20 72 65 73 65 74 46 6c 61 67 29 3b 0a 20 20  , resetFlag);.  
ee30: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
ee40: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
ee50: 49 6e 74 4f 62 6a 28 69 56 61 6c 75 65 29 29 3b  IntObj(iValue));
ee60: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
ee70: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
ee80: 3a 20 20 73 71 6c 69 74 65 33 5f 6e 65 78 74 5f  :  sqlite3_next_
ee90: 73 74 6d 74 20 20 44 42 20 20 53 54 4d 54 0a 2a  stmt  DB  STMT.*
eea0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
eeb0: 6e 65 78 74 20 73 74 61 74 6d 65 6e 74 20 69 6e  next statment in
eec0: 20 73 65 71 75 65 6e 63 65 20 61 66 74 65 72 20   sequence after 
eed0: 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  STMT..*/.static 
eee0: 69 6e 74 20 74 65 73 74 5f 6e 65 78 74 5f 73 74  int test_next_st
eef0: 6d 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  mt(.  void * cli
ef00: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
ef10: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
ef20: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
ef30: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
ef40: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
ef50: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 73  stmt *pStmt;.  s
ef60: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 30 3b 0a  qlite3 *db = 0;.
ef70: 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b    char zBuf[50];
ef80: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
ef90: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
efa0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
efb0: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
efc0: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
efd0: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
efe0: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
eff0: 30 5d 2c 20 30 29 2c 20 22 20 44 42 20 53 54 4d  0], 0), " DB STM
f000: 54 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  T", 0);.    retu
f010: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
f020: 7d 0a 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f  }..  if( getDbPo
f030: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
f040: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
f050: 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
f060: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
f070: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
f080: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
f090: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32  GetString(objv[2
f0a0: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
f0b0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
f0c0: 20 20 70 53 74 6d 74 20 3d 20 73 71 6c 69 74 65    pStmt = sqlite
f0d0: 33 5f 6e 65 78 74 5f 73 74 6d 74 28 64 62 2c 20  3_next_stmt(db, 
f0e0: 70 53 74 6d 74 29 3b 0a 20 20 69 66 28 20 70 53  pStmt);.  if( pS
f0f0: 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28 20 73  tmt ){.    if( s
f100: 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
f110: 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c  interStr(interp,
f120: 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20 29 20   zBuf, pStmt) ) 
f130: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
f140: 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ;.    Tcl_Append
f150: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
f160: 42 75 66 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72  Buf, 0);.  }.  r
f170: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
f180: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
f190: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 20 53  sqlite3_reset  S
f1a0: 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 73 65 74  TMT .**.** Reset
f1b0: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e   a statement han
f1c0: 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  dle..*/.static i
f1d0: 6e 74 20 74 65 73 74 5f 72 65 73 65 74 28 0a 20  nt test_reset(. 
f1e0: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
f1f0: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
f200: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
f210: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
f220: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
f230: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
f240: 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63  *pStmt;.  int rc
f250: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
f260: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
f270: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
f280: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
f290: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
f2a0: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
f2b0: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
f2c0: 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54 4d 54  [0], 0), " <STMT
f2d0: 3e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  >", 0);.    retu
f2e0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
f2f0: 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
f300: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
f310: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
f320: 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
f330: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
f340: 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  OR;..  rc = sqli
f350: 74 65 33 5f 72 65 73 65 74 28 70 53 74 6d 74 29  te3_reset(pStmt)
f360: 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 20 26 26  ;.  if( pStmt &&
f370: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
f380: 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74  ode(interp, Stmt
f390: 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29  ToDb(pStmt), rc)
f3a0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
f3b0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
f3c0: 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
f3d0: 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31  terp, (char *)t1
f3e0: 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54  ErrorName(rc), T
f3f0: 43 4c 5f 53 54 41 54 49 43 29 3b 0a 2f 2a 0a 20  CL_STATIC);./*. 
f400: 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 72   if( rc ){.    r
f410: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
f420: 0a 20 20 7d 0a 2a 2f 0a 20 20 72 65 74 75 72 6e  .  }.*/.  return
f430: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
f440: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
f450: 33 5f 65 78 70 69 72 65 64 20 53 54 4d 54 20 0a  3_expired STMT .
f460: 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52 55  **.** Return TRU
f470: 45 20 69 66 20 61 20 72 65 63 6f 6d 70 69 6c 61  E if a recompila
f480: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74 61 74  tion of the stat
f490: 65 6d 65 6e 74 20 69 73 20 72 65 63 6f 6d 6d 65  ement is recomme
f4a0: 6e 64 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  nded..*/.static 
f4b0: 69 6e 74 20 74 65 73 74 5f 65 78 70 69 72 65 64  int test_expired
f4c0: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
f4d0: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
f4e0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
f4f0: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
f500: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
f510: 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .){.#ifndef SQLI
f520: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
f530: 45 44 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ED.  sqlite3_stm
f540: 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 66 28 20  t *pStmt;.  if( 
f550: 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
f560: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
f570: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
f580: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
f590: 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
f5a0: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
f5b0: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
f5c0: 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20  " <STMT>", 0);. 
f5d0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
f5e0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
f5f0: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
f600: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
f610: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
f620: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
f630: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
f640: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
f650: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c  erp, Tcl_NewBool
f660: 65 61 6e 4f 62 6a 28 73 71 6c 69 74 65 33 5f 65  eanObj(sqlite3_e
f670: 78 70 69 72 65 64 28 70 53 74 6d 74 29 29 29 3b  xpired(pStmt)));
f680: 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e  .#endif.  return
f690: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
f6a0: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
f6b0: 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 69  3_transfer_bindi
f6c0: 6e 67 73 20 46 52 4f 4d 53 54 4d 54 20 54 4f 53  ngs FROMSTMT TOS
f6d0: 54 4d 54 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66  TMT.**.** Transf
f6e0: 65 72 20 61 6c 6c 20 62 69 6e 64 69 6e 67 73 20  er all bindings 
f6f0: 66 72 6f 6d 20 46 52 4f 4d 53 54 4d 54 20 6f 76  from FROMSTMT ov
f700: 65 72 20 74 6f 20 54 4f 53 54 4d 54 0a 2a 2f 0a  er to TOSTMT.*/.
f710: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
f720: 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 28 0a 20  transfer_bind(. 
f730: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
f740: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
f750: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
f760: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
f770: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
f780: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
f790: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a  OMIT_DEPRECATED.
f7a0: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
f7b0: 70 53 74 6d 74 31 2c 20 2a 70 53 74 6d 74 32 3b  pStmt1, *pStmt2;
f7c0: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
f7d0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
f7e0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
f7f0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
f800: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
f810: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
f820: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
f830: 5d 2c 20 30 29 2c 20 22 20 46 52 4f 4d 2d 53 54  ], 0), " FROM-ST
f840: 4d 54 20 54 4f 2d 53 54 4d 54 22 2c 20 30 29 3b  MT TO-STMT", 0);
f850: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
f860: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
f870: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
f880: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
f890: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
f8a0: 26 70 53 74 6d 74 31 29 29 20 72 65 74 75 72 6e  &pStmt1)) return
f8b0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
f8c0: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
f8d0: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
f8e0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 2c  String(objv[2]),
f8f0: 20 26 70 53 74 6d 74 32 29 29 20 72 65 74 75 72   &pStmt2)) retur
f900: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
f910: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
f920: 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63  interp, .     Tc
f930: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69  l_NewIntObj(sqli
f940: 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e  te3_transfer_bin
f950: 64 69 6e 67 73 28 70 53 74 6d 74 31 2c 70 53 74  dings(pStmt1,pSt
f960: 6d 74 32 29 29 29 3b 0a 23 65 6e 64 69 66 0a 20  mt2)));.#endif. 
f970: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
f980: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
f990: 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
f9a0: 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e   DB.**.** Return
f9b0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
f9c0: 68 61 6e 67 65 73 20 6d 61 64 65 20 74 6f 20 74  hanges made to t
f9d0: 68 65 20 64 61 74 61 62 61 73 65 20 62 79 20 74  he database by t
f9e0: 68 65 20 6c 61 73 74 20 53 51 4c 0a 2a 2a 20 65  he last SQL.** e
f9f0: 78 65 63 75 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61  xecution..*/.sta
fa00: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 68 61  tic int test_cha
fa10: 6e 67 65 73 28 0a 20 20 76 6f 69 64 20 2a 20 63  nges(.  void * c
fa20: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
fa30: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
fa40: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
fa50: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
fa60: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
fa70: 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 6f 62 6a  3 *db;.  if( obj
fa80: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
fa90: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
faa0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
fab0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
fac0: 22 2c 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ",.       Tcl_Ge
fad0: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
fae0: 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20  , " DB", 0);.   
faf0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
fb00: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
fb10: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
fb20: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
fb30: 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
fb40: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
fb50: 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  R;.  Tcl_SetObjR
fb60: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
fb70: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69  l_NewIntObj(sqli
fb80: 74 65 33 5f 63 68 61 6e 67 65 73 28 64 62 29 29  te3_changes(db))
fb90: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
fba0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  OK;.}../*.** Thi
fbb0: 73 20 69 73 20 74 68 65 20 22 73 74 61 74 69 63  s is the "static
fbc0: 5f 62 69 6e 64 5f 76 61 6c 75 65 22 20 74 68 61  _bind_value" tha
fbd0: 74 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  t variables are 
fbe0: 62 6f 75 6e 64 20 74 6f 20 77 68 65 6e 0a 2a 2a  bound to when.**
fbf0: 20 74 68 65 20 46 4c 41 47 20 6f 70 74 69 6f 6e   the FLAG option
fc00: 20 6f 66 20 73 71 6c 69 74 65 33 5f 62 69 6e 64   of sqlite3_bind
fc10: 20 69 73 20 22 73 74 61 74 69 63 22 0a 2a 2f 0a   is "static".*/.
fc20: 73 74 61 74 69 63 20 63 68 61 72 20 2a 73 71 6c  static char *sql
fc30: 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f  ite_static_bind_
fc40: 76 61 6c 75 65 20 3d 20 30 3b 0a 73 74 61 74 69  value = 0;.stati
fc50: 63 20 69 6e 74 20 73 71 6c 69 74 65 5f 73 74 61  c int sqlite_sta
fc60: 74 69 63 5f 62 69 6e 64 5f 6e 62 79 74 65 20 3d  tic_bind_nbyte =
fc70: 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65   0;../*.** Usage
fc80: 3a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 20  :  sqlite3_bind 
fc90: 20 56 4d 20 20 49 44 58 20 20 56 41 4c 55 45 20   VM  IDX  VALUE 
fca0: 20 46 4c 41 47 53 0a 2a 2a 0a 2a 2a 20 53 65 74   FLAGS.**.** Set
fcb0: 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
fcc0: 68 65 20 49 44 58 2d 74 68 20 6f 63 63 75 72 61  he IDX-th occura
fcd0: 6e 63 65 20 6f 66 20 22 3f 22 20 69 6e 20 74 68  nce of "?" in th
fce0: 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 0a 2a  e original SQL.*
fcf0: 2a 20 73 74 72 69 6e 67 2e 20 20 56 41 4c 55 45  * string.  VALUE
fd00: 20 69 73 20 74 68 65 20 6e 65 77 20 76 61 6c 75   is the new valu
fd10: 65 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e  e.  If FLAGS=="n
fd20: 75 6c 6c 22 20 74 68 65 6e 20 56 41 4c 55 45 20  ull" then VALUE 
fd30: 69 73 0a 2a 2a 20 69 67 6e 6f 72 65 64 20 61 6e  is.** ignored an
fd40: 64 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 73  d the value is s
fd50: 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 49 66 20  et to NULL.  If 
fd60: 46 4c 41 47 53 3d 3d 22 73 74 61 74 69 63 22 20  FLAGS=="static" 
fd70: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 76 61 6c 75  then.** the valu
fd80: 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  e is set to the 
fd90: 76 61 6c 75 65 20 6f 66 20 61 20 73 74 61 74 69  value of a stati
fda0: 63 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 64  c variable named
fdb0: 0a 2a 2a 20 22 73 71 6c 69 74 65 5f 73 74 61 74  .** "sqlite_stat
fdc0: 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 22 2e 20  ic_bind_value". 
fdd0: 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e 6f 72 6d   If FLAGS=="norm
fde0: 61 6c 22 20 74 68 65 6e 20 61 20 63 6f 70 79 0a  al" then a copy.
fdf0: 2a 2a 20 6f 66 20 74 68 65 20 56 41 4c 55 45 20  ** of the VALUE 
fe00: 69 73 20 6d 61 64 65 2e 20 20 49 66 20 46 4c 41  is made.  If FLA
fe10: 47 53 3d 3d 22 62 6c 6f 62 31 30 22 20 74 68 65  GS=="blob10" the
fe20: 6e 20 61 20 56 41 4c 55 45 20 69 73 20 69 67 6e  n a VALUE is ign
fe30: 6f 72 65 64 0a 2a 2a 20 61 6e 20 61 20 31 30 2d  ored.** an a 10-
fe40: 62 79 74 65 20 62 6c 6f 62 20 22 61 62 63 5c 30  byte blob "abc\0
fe50: 30 30 78 79 7a 5c 30 30 30 70 71 22 20 69 73 20  00xyz\000pq" is 
fe60: 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a 73 74 61  inserted..*/.sta
fe70: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
fe80: 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  d(.  void *NotUs
fe90: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
fea0: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
feb0: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
fec0: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
fed0: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
fee0: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
fef0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
ff00: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
ff10: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
ff20: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
ff30: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
ff40: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
ff50: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
ff60: 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  t;.  int rc;.  i
ff70: 6e 74 20 69 64 78 3b 0a 20 20 69 66 28 20 61 72  nt idx;.  if( ar
ff80: 67 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=5 ){.    Tcl
ff90: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
ffa0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
ffb0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
ffc0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20  "", argv[0], .  
ffd0: 20 20 20 20 20 22 20 56 4d 20 49 44 58 20 56 41       " VM IDX VA
ffe0: 4c 55 45 20 28 6e 75 6c 6c 7c 73 74 61 74 69 63  LUE (null|static
fff0: 7c 6e 6f 72 6d 61 6c 29 5c 22 22 2c 20 30 29 3b  |normal)\"", 0);
10000 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
10010 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
10020 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
10030 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
10040 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
10050 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
10060 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e  f( Tcl_GetInt(in
10070 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26  terp, argv[2], &
10080 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43  idx) ) return TC
10090 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 73  L_ERROR;.  if( s
100a0 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 6e  trcmp(argv[4],"n
100b0 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ull")==0 ){.    
100c0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
100d0 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64  d_null(pStmt, id
100e0 78 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  x);.  }else if( 
100f0 73 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22  strcmp(argv[4],"
10100 73 74 61 74 69 63 22 29 3d 3d 30 20 29 7b 0a 20  static")==0 ){. 
10110 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
10120 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c  bind_text(pStmt,
10130 20 69 64 78 2c 20 73 71 6c 69 74 65 5f 73 74 61   idx, sqlite_sta
10140 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 2c 20  tic_bind_value, 
10150 2d 31 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20  -1, 0);.  }else 
10160 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b  if( strcmp(argv[
10170 34 5d 2c 22 73 74 61 74 69 63 2d 6e 62 79 74 65  4],"static-nbyte
10180 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  s")==0 ){.    rc
10190 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
101a0 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c  text(pStmt, idx,
101b0 20 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62   sqlite_static_b
101c0 69 6e 64 5f 76 61 6c 75 65 2c 0a 20 20 20 20 20  ind_value,.     
101d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101f0 20 20 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f    sqlite_static_
10200 62 69 6e 64 5f 6e 62 79 74 65 2c 20 30 29 3b 0a  bind_nbyte, 0);.
10210 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
10220 6d 70 28 61 72 67 76 5b 34 5d 2c 22 6e 6f 72 6d  mp(argv[4],"norm
10230 61 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  al")==0 ){.    r
10240 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
10250 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78  _text(pStmt, idx
10260 2c 20 61 72 67 76 5b 33 5d 2c 20 2d 31 2c 20 53  , argv[3], -1, S
10270 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
10280 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
10290 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 62 6c  rcmp(argv[4],"bl
102a0 6f 62 31 30 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ob10")==0 ){.   
102b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69   rc = sqlite3_bi
102c0 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69  nd_text(pStmt, i
102d0 64 78 2c 20 22 61 62 63 5c 30 30 30 78 79 7a 5c  dx, "abc\000xyz\
102e0 30 30 30 70 71 22 2c 20 31 30 2c 20 53 51 4c 49  000pq", 10, SQLI
102f0 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d 65  TE_STATIC);.  }e
10300 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  lse{.    Tcl_App
10310 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
10320 2c 20 22 34 74 68 20 61 72 67 75 6d 65 6e 74 20  , "4th argument 
10330 73 68 6f 75 6c 64 20 62 65 20 22 0a 20 20 20 20  should be ".    
10340 20 20 20 20 22 5c 22 6e 75 6c 6c 5c 22 20 6f 72      "\"null\" or
10350 20 5c 22 73 74 61 74 69 63 5c 22 20 6f 72 20 5c   \"static\" or \
10360 22 6e 6f 72 6d 61 6c 5c 22 22 2c 20 30 29 3b 0a  "normal\"", 0);.
10370 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
10380 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
10390 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
103a0 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54  de(interp, StmtT
103b0 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20  oDb(pStmt), rc) 
103c0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
103d0 4f 52 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  OR;.  if( rc ){.
103e0 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30      char zBuf[50
103f0 5d 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a  ];.    sprintf(z
10400 42 75 66 2c 20 22 28 25 64 29 20 22 2c 20 72 63  Buf, "(%d) ", rc
10410 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  );.    Tcl_Appen
10420 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
10430 7a 42 75 66 2c 20 73 71 6c 69 74 65 33 45 72 72  zBuf, sqlite3Err
10440 53 74 72 28 72 63 29 2c 20 30 29 3b 0a 20 20 20  Str(rc), 0);.   
10450 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
10460 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  R;.  }.  return 
10470 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64  TCL_OK;.}..#ifnd
10480 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
10490 54 46 31 36 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  TF16./*.** Usage
104a0 3a 20 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61  : add_test_colla
104b0 74 65 20 3c 64 62 20 70 74 72 3e 20 3c 75 74 66  te <db ptr> <utf
104c0 38 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74  8> <utf16le> <ut
104d0 66 31 36 62 65 3e 0a 2a 2a 0a 2a 2a 20 54 68 69  f16be>.**.** Thi
104e0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73  s function is us
104f0 65 64 20 74 6f 20 74 65 73 74 20 74 68 61 74 20  ed to test that 
10500 53 51 4c 69 74 65 20 73 65 6c 65 63 74 73 20 74  SQLite selects t
10510 68 65 20 63 6f 72 72 65 63 74 20 63 6f 6c 6c 61  he correct colla
10520 74 69 6f 6e 0a 2a 2a 20 73 65 71 75 65 6e 63 65  tion.** sequence
10530 20 63 61 6c 6c 62 61 63 6b 20 77 68 65 6e 20 6d   callback when m
10540 75 6c 74 69 70 6c 65 20 76 65 72 73 69 6f 6e 73  ultiple versions
10550 20 28 66 6f 72 20 64 69 66 66 65 72 65 6e 74 20   (for different 
10560 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 73 29 0a  text encodings).
10570 2a 2a 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  ** are available
10580 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 69 6e 67 20  ..**.** Calling 
10590 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 67  this routine reg
105a0 69 73 74 65 72 73 20 74 68 65 20 63 6f 6c 6c 61  isters the colla
105b0 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 22 74  tion sequence "t
105c0 65 73 74 5f 63 6f 6c 6c 61 74 65 22 0a 2a 2a 20  est_collate".** 
105d0 77 69 74 68 20 64 61 74 61 62 61 73 65 20 68 61  with database ha
105e0 6e 64 6c 65 20 3c 64 62 3e 2e 20 54 68 65 20 73  ndle <db>. The s
105f0 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 6d  econd argument m
10600 75 73 74 20 62 65 20 61 20 6c 69 73 74 20 6f 66  ust be a list of
10610 20 74 68 72 65 65 0a 2a 2a 20 62 6f 6f 6c 65 61   three.** boolea
10620 6e 20 76 61 6c 75 65 73 2e 20 49 66 20 74 68 65  n values. If the
10630 20 66 69 72 73 74 20 69 73 20 74 72 75 65 2c 20   first is true, 
10640 74 68 65 6e 20 61 20 76 65 72 73 69 6f 6e 20 6f  then a version o
10650 66 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 69  f test_collate i
10660 73 0a 2a 2a 20 72 65 67 69 73 74 65 72 65 64 20  s.** registered 
10670 66 6f 72 20 55 54 46 2d 38 2c 20 69 66 20 74 68  for UTF-8, if th
10680 65 20 73 65 63 6f 6e 64 20 69 73 20 74 72 75 65  e second is true
10690 2c 20 61 20 76 65 72 73 69 6f 6e 20 69 73 20 72  , a version is r
106a0 65 67 69 73 74 65 72 65 64 20 66 6f 72 0a 2a 2a  egistered for.**
106b0 20 55 54 46 2d 31 36 6c 65 2c 20 69 66 20 74 68   UTF-16le, if th
106c0 65 20 74 68 69 72 64 20 69 73 20 74 72 75 65 2c  e third is true,
106d0 20 61 20 55 54 46 2d 31 36 62 65 20 76 65 72 73   a UTF-16be vers
106e0 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
106f0 2e 0a 2a 2a 20 50 72 65 76 69 6f 75 73 20 76 65  ..** Previous ve
10700 72 73 69 6f 6e 73 20 6f 66 20 74 65 73 74 5f 63  rsions of test_c
10710 6f 6c 6c 61 74 65 20 61 72 65 20 64 65 6c 65 74  ollate are delet
10720 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ed..**.** The co
10730 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
10740 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 69 73   test_collate is
10750 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
10760 63 61 6c 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 66  calling the.** f
10770 6f 6c 6c 6f 77 69 6e 67 20 54 43 4c 20 73 63 72  ollowing TCL scr
10780 69 70 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 22 74 65  ipt:.**.**   "te
10790 73 74 5f 63 6f 6c 6c 61 74 65 20 3c 65 6e 63 3e  st_collate <enc>
107a0 20 3c 6c 68 73 3e 20 3c 72 68 73 3e 22 0a 2a 2a   <lhs> <rhs>".**
107b0 0a 2a 2a 20 54 68 65 20 3c 6c 68 73 3e 20 61 6e  .** The <lhs> an
107c0 64 20 3c 72 68 73 3e 20 61 72 65 20 74 68 65 20  d <rhs> are the 
107d0 74 77 6f 20 76 61 6c 75 65 73 20 62 65 69 6e 67  two values being
107e0 20 63 6f 6d 70 61 72 65 64 2c 20 65 6e 63 6f 64   compared, encod
107f0 65 64 20 69 6e 20 55 54 46 2d 38 2e 0a 2a 2a 20  ed in UTF-8..** 
10800 54 68 65 20 3c 65 6e 63 3e 20 70 61 72 61 6d 65  The <enc> parame
10810 74 65 72 20 69 73 20 74 68 65 20 65 6e 63 6f 64  ter is the encod
10820 69 6e 67 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ing of the colla
10830 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 74 68  tion function th
10840 61 74 0a 2a 2a 20 53 51 4c 69 74 65 20 73 65 6c  at.** SQLite sel
10850 65 63 74 65 64 20 74 6f 20 63 61 6c 6c 2e 20 54  ected to call. T
10860 68 65 20 54 43 4c 20 74 65 73 74 20 73 63 72 69  he TCL test scri
10870 70 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  pt implements th
10880 65 0a 2a 2a 20 22 74 65 73 74 5f 63 6f 6c 6c 61  e.** "test_colla
10890 74 65 22 20 70 72 6f 63 2e 0a 2a 2a 0a 2a 2a 20  te" proc..**.** 
108a0 4e 6f 74 65 20 74 68 61 74 20 74 68 69 73 20 77  Note that this w
108b0 69 6c 6c 20 6f 6e 6c 79 20 77 6f 72 6b 20 77 69  ill only work wi
108c0 74 68 20 6f 6e 65 20 69 6e 74 65 70 72 65 74 65  th one inteprete
108d0 72 20 61 74 20 61 20 74 69 6d 65 2c 20 61 73 20  r at a time, as 
108e0 74 68 65 0a 2a 2a 20 69 6e 74 65 72 70 20 70 6f  the.** interp po
108f0 69 6e 74 65 72 20 74 6f 20 75 73 65 20 77 68 65  inter to use whe
10900 6e 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  n evaluating the
10910 20 54 43 4c 20 73 63 72 69 70 74 20 69 73 20 73   TCL script is s
10920 74 6f 72 65 64 20 69 6e 0a 2a 2a 20 70 54 65 73  tored in.** pTes
10930 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 2e 0a  tCollateInterp..
10940 2a 2f 0a 73 74 61 74 69 63 20 54 63 6c 5f 49 6e  */.static Tcl_In
10950 74 65 72 70 2a 20 70 54 65 73 74 43 6f 6c 6c 61  terp* pTestColla
10960 74 65 49 6e 74 65 72 70 3b 0a 73 74 61 74 69 63  teInterp;.static
10970 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74   int test_collat
10980 65 5f 66 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a  e_func(.  void *
10990 70 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 2c  pCtx, .  int nA,
109a0 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 41 2c   const void *zA,
109b0 0a 20 20 69 6e 74 20 6e 42 2c 20 63 6f 6e 73 74  .  int nB, const
109c0 20 76 6f 69 64 20 2a 7a 42 0a 29 7b 0a 20 20 54   void *zB.){.  T
109d0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 20 3d 20 70  cl_Interp *i = p
109e0 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72  TestCollateInter
109f0 70 3b 0a 20 20 69 6e 74 20 65 6e 63 69 6e 20 3d  p;.  int encin =
10a00 20 28 69 6e 74 29 70 43 74 78 3b 0a 20 20 69 6e   (int)pCtx;.  in
10a10 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 3b 0a  t res;.  int n;.
10a20 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
10a30 20 2a 70 56 61 6c 3b 0a 20 20 54 63 6c 5f 4f 62   *pVal;.  Tcl_Ob
10a40 6a 20 2a 70 58 3b 0a 0a 20 20 70 58 20 3d 20 54  j *pX;..  pX = T
10a50 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
10a60 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20  "test_collate", 
10a70 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52  -1);.  Tcl_IncrR
10a80 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 0a 20 20  efCount(pX);..  
10a90 73 77 69 74 63 68 28 20 65 6e 63 69 6e 20 29 7b  switch( encin ){
10aa0 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
10ab0 5f 55 54 46 38 3a 0a 20 20 20 20 20 20 54 63 6c  _UTF8:.      Tcl
10ac0 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
10ad0 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e  ement(i,pX,Tcl_N
10ae0 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46  ewStringObj("UTF
10af0 2d 38 22 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20  -8",-1));.      
10b00 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
10b10 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 3a 0a  SQLITE_UTF16LE:.
10b20 20 20 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62        Tcl_ListOb
10b30 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
10b40 2c 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e  ,pX,Tcl_NewStrin
10b50 67 4f 62 6a 28 22 55 54 46 2d 31 36 4c 45 22 2c  gObj("UTF-16LE",
10b60 2d 31 29 29 3b 0a 20 20 20 20 20 20 62 72 65 61  -1));.      brea
10b70 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
10b80 54 45 5f 55 54 46 31 36 42 45 3a 0a 20 20 20 20  TE_UTF16BE:.    
10b90 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70    Tcl_ListObjApp
10ba0 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c  endElement(i,pX,
10bb0 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
10bc0 28 22 55 54 46 2d 31 36 42 45 22 2c 2d 31 29 29  ("UTF-16BE",-1))
10bd0 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
10be0 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
10bf0 20 20 61 73 73 65 72 74 28 30 29 3b 0a 20 20 7d    assert(0);.  }
10c00 0a 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e  ..  sqlite3Begin
10c10 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
10c20 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74 65 33    pVal = sqlite3
10c30 56 61 6c 75 65 4e 65 77 28 30 29 3b 0a 20 20 69  ValueNew(0);.  i
10c40 66 28 20 70 56 61 6c 20 29 7b 0a 20 20 20 20 73  f( pVal ){.    s
10c50 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
10c60 72 28 70 56 61 6c 2c 20 6e 41 2c 20 7a 41 2c 20  r(pVal, nA, zA, 
10c70 65 6e 63 69 6e 2c 20 53 51 4c 49 54 45 5f 53 54  encin, SQLITE_ST
10c80 41 54 49 43 29 3b 0a 20 20 20 20 6e 20 3d 20 73  ATIC);.    n = s
10c90 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
10ca0 65 73 28 70 56 61 6c 29 3b 0a 20 20 20 20 54 63  es(pVal);.    Tc
10cb0 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
10cc0 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 0a 20 20 20  lement(i,pX,.   
10cd0 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69       Tcl_NewStri
10ce0 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73 71 6c  ngObj((char*)sql
10cf0 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
10d00 70 56 61 6c 29 2c 6e 29 29 3b 0a 20 20 20 20 73  pVal),n));.    s
10d10 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
10d20 72 28 70 56 61 6c 2c 20 6e 42 2c 20 7a 42 2c 20  r(pVal, nB, zB, 
10d30 65 6e 63 69 6e 2c 20 53 51 4c 49 54 45 5f 53 54  encin, SQLITE_ST
10d40 41 54 49 43 29 3b 0a 20 20 20 20 6e 20 3d 20 73  ATIC);.    n = s
10d50 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
10d60 65 73 28 70 56 61 6c 29 3b 0a 20 20 20 20 54 63  es(pVal);.    Tc
10d70 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
10d80 6c 65 6d 65 6e 74 28 69 2c 70 58 2c 0a 20 20 20  lement(i,pX,.   
10d90 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69       Tcl_NewStri
10da0 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73 71 6c  ngObj((char*)sql
10db0 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
10dc0 70 56 61 6c 29 2c 6e 29 29 3b 0a 20 20 20 20 73  pVal),n));.    s
10dd0 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
10de0 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  pVal);.  }.  sql
10df0 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
10e00 6c 6f 63 28 29 3b 0a 0a 20 20 54 63 6c 5f 45 76  loc();..  Tcl_Ev
10e10 61 6c 4f 62 6a 45 78 28 69 2c 20 70 58 2c 20 30  alObjEx(i, pX, 0
10e20 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66  );.  Tcl_DecrRef
10e30 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c  Count(pX);.  Tcl
10e40 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
10e50 2c 20 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75  , Tcl_GetObjResu
10e60 6c 74 28 69 29 2c 20 26 72 65 73 29 3b 0a 20 20  lt(i), &res);.  
10e70 72 65 74 75 72 6e 20 72 65 73 3b 0a 7d 0a 73 74  return res;.}.st
10e80 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f  atic int test_co
10e90 6c 6c 61 74 65 28 0a 20 20 76 6f 69 64 20 2a 20  llate(.  void * 
10ea0 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
10eb0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
10ec0 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
10ed0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
10ee0 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
10ef0 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 76 61  e3 *db;.  int va
10f00 6c 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  l;.  sqlite3_val
10f10 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 20  ue *pVal;.  int 
10f20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
10f30 3d 35 20 29 20 67 6f 74 6f 20 62 61 64 5f 61 72  =5 ) goto bad_ar
10f40 67 73 3b 0a 20 20 70 54 65 73 74 43 6f 6c 6c 61  gs;.  pTestColla
10f50 74 65 49 6e 74 65 72 70 20 3d 20 69 6e 74 65 72  teInterp = inter
10f60 70 3b 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f  p;.  if( getDbPo
10f70 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
10f80 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
10f90 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
10fa0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
10fb0 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63    if( TCL_OK!=Tc
10fc0 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d  l_GetBooleanFrom
10fd0 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
10fe0 5b 32 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74  [2], &val) ) ret
10ff0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
11000 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
11010 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64  eate_collation(d
11020 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65  b, "test_collate
11030 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  ", SQLITE_UTF8, 
11040 0a 20 20 20 20 20 20 20 20 20 20 28 76 6f 69 64  .          (void
11050 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 38 2c 20   *)SQLITE_UTF8, 
11060 76 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61 74 65  val?test_collate
11070 5f 66 75 6e 63 3a 30 29 3b 0a 20 20 69 66 28 20  _func:0);.  if( 
11080 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
11090 0a 20 20 20 20 63 6f 6e 73 74 20 76 6f 69 64 20  .    const void 
110a0 2a 7a 55 74 66 31 36 3b 0a 20 20 20 20 69 66 28  *zUtf16;.    if(
110b0 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74   TCL_OK!=Tcl_Get
110c0 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69  BooleanFromObj(i
110d0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20  nterp, objv[3], 
110e0 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54  &val) ) return T
110f0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 72 63  CL_ERROR;.    rc
11100 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
11110 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20  e_collation(db, 
11120 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20  "test_collate", 
11130 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 2c 20  SQLITE_UTF16LE, 
11140 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 76 6f  .            (vo
11150 69 64 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 31  id *)SQLITE_UTF1
11160 36 4c 45 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f  6LE, val?test_co
11170 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20  llate_func:0);. 
11180 20 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54     if( TCL_OK!=T
11190 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f  cl_GetBooleanFro
111a0 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
111b0 76 5b 34 5d 2c 20 26 76 61 6c 29 20 29 20 72 65  v[4], &val) ) re
111c0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
111d0 0a 23 69 66 20 30 0a 20 20 20 20 69 66 28 20 73  .#if 0.    if( s
111e0 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61  qlite3_iMallocFa
111f0 69 6c 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  il>0 ){.      sq
11200 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46 61 69  lite3_iMallocFai
11210 6c 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  l++;.    }.#endi
11220 66 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75  f.    sqlite3_mu
11230 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e 6d 75  tex_enter(db->mu
11240 74 65 78 29 3b 0a 20 20 20 20 70 56 61 6c 20 3d  tex);.    pVal =
11250 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77   sqlite3ValueNew
11260 28 64 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  (db);.    sqlite
11270 33 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61  3ValueSetStr(pVa
11280 6c 2c 20 2d 31 2c 20 22 74 65 73 74 5f 63 6f 6c  l, -1, "test_col
11290 6c 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 55 54  late", SQLITE_UT
112a0 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  F8, SQLITE_STATI
112b0 43 29 3b 0a 20 20 20 20 7a 55 74 66 31 36 20 3d  C);.    zUtf16 =
112c0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78   sqlite3ValueTex
112d0 74 28 70 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55  t(pVal, SQLITE_U
112e0 54 46 31 36 4e 41 54 49 56 45 29 3b 0a 20 20 20  TF16NATIVE);.   
112f0 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
11300 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 20 20 72  ailed ){.      r
11310 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
11320 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
11330 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
11340 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
11350 31 36 28 64 62 2c 20 7a 55 74 66 31 36 2c 20 53  16(db, zUtf16, S
11360 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c 20 0a  QLITE_UTF16BE, .
11370 20 20 20 20 20 20 20 20 20 20 28 76 6f 69 64 20            (void 
11380 2a 29 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  *)SQLITE_UTF16BE
11390 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61  , val?test_colla
113a0 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20 20 20 20  te_func:0);.    
113b0 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c  }.    sqlite3Val
113c0 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a 20 20  ueFree(pVal);.  
113d0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
113e0 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78 29  leave(db->mutex)
113f0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
11400 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28 69  te3TestErrCode(i
11410 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29  nterp, db, rc) )
11420 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
11430 52 3b 0a 20 20 0a 20 20 69 66 28 20 72 63 21 3d  R;.  .  if( rc!=
11440 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
11450 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
11460 74 28 69 6e 74 65 72 70 2c 20 73 71 6c 69 74 65  t(interp, sqlite
11470 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65 28 72  3TestErrorName(r
11480 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  c), 0);.    retu
11490 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
114a0 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  }.  return TCL_O
114b0 4b 3b 0a 0a 62 61 64 5f 61 72 67 73 3a 0a 20 20  K;..bad_args:.  
114c0 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
114d0 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
114e0 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
114f0 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 54 63 6c  e \"",.      Tcl
11500 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
11510 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
11520 20 3c 44 42 3e 20 3c 75 74 66 38 3e 20 3c 75 74   <DB> <utf8> <ut
11530 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e  f16le> <utf16be>
11540 22 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20  ", 0);.  return 
11550 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0a 2f 2a  TCL_ERROR;.}../*
11560 0a 2a 2a 20 57 68 65 6e 20 74 68 65 20 63 6f 6c  .** When the col
11570 6c 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 63 61  lation needed ca
11580 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 6f 6b 65  llback is invoke
11590 64 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 61  d, record the na
115a0 6d 65 20 6f 66 20 0a 2a 2a 20 74 68 65 20 72 65  me of .** the re
115b0 71 75 65 73 74 65 64 20 63 6f 6c 6c 61 74 69 6e  quested collatin
115c0 67 20 66 75 6e 63 74 69 6f 6e 20 68 65 72 65 2e  g function here.
115d0 20 20 54 68 65 20 72 65 63 6f 72 64 65 64 20 6e    The recorded n
115e0 61 6d 65 20 69 73 20 6c 69 6e 6b 65 64 0a 2a 2a  ame is linked.**
115f0 20 74 6f 20 61 20 54 43 4c 20 76 61 72 69 61 62   to a TCL variab
11600 6c 65 20 61 6e 64 20 75 73 65 64 20 74 6f 20 6d  le and used to m
11610 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
11620 65 20 72 65 71 75 65 73 74 65 64 20 63 6f 6c 6c  e requested coll
11630 61 74 69 6f 6e 0a 2a 2a 20 6e 61 6d 65 20 69 73  ation.** name is
11640 20 63 6f 72 72 65 63 74 2e 0a 2a 2f 0a 73 74 61   correct..*/.sta
11650 74 69 63 20 63 68 61 72 20 7a 4e 65 65 64 65 64  tic char zNeeded
11660 43 6f 6c 6c 61 74 69 6f 6e 5b 32 30 30 5d 3b 0a  Collation[200];.
11670 73 74 61 74 69 63 20 63 68 61 72 20 2a 70 7a 4e  static char *pzN
11680 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 20 3d  eededCollation =
11690 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f   zNeededCollatio
116a0 6e 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c 6c 65  n;.../*.** Calle
116b0 64 20 77 68 65 6e 20 61 20 63 6f 6c 6c 61 74 69  d when a collati
116c0 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 6e  ng sequence is n
116d0 65 65 64 65 64 2e 20 20 52 65 67 69 73 74 65 72  eeded.  Register
116e0 65 64 20 75 73 69 6e 67 0a 2a 2a 20 73 71 6c 69  ed using.** sqli
116f0 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 6e 65  te3_collation_ne
11700 65 64 65 64 31 36 28 29 2e 0a 2a 2f 0a 73 74 61  eded16()..*/.sta
11710 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f 63 6f  tic void test_co
11720 6c 6c 61 74 65 5f 6e 65 65 64 65 64 5f 63 62 28  llate_needed_cb(
11730 0a 20 20 76 6f 69 64 20 2a 70 43 74 78 2c 20 0a  .  void *pCtx, .
11740 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20    sqlite3 *db,. 
11750 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c 0a 20   int eTextRep,. 
11760 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 4e 61   const void *pNa
11770 6d 65 0a 29 7b 0a 20 20 69 6e 74 20 65 6e 63 20  me.){.  int enc 
11780 3d 20 45 4e 43 28 64 62 29 3b 0a 20 20 69 6e 74  = ENC(db);.  int
11790 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20   i;.  char *z;. 
117a0 20 66 6f 72 28 7a 20 3d 20 28 63 68 61 72 2a 29   for(z = (char*)
117b0 70 4e 61 6d 65 2c 20 69 3d 30 3b 20 2a 7a 20 7c  pName, i=0; *z |
117c0 7c 20 7a 5b 31 5d 3b 20 7a 2b 2b 29 7b 0a 20 20  | z[1]; z++){.  
117d0 20 20 69 66 28 20 2a 7a 20 29 20 7a 4e 65 65 64    if( *z ) zNeed
117e0 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b 69 2b 2b 5d  edCollation[i++]
117f0 20 3d 20 2a 7a 3b 0a 20 20 7d 0a 20 20 7a 4e 65   = *z;.  }.  zNe
11800 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b 69 5d  ededCollation[i]
11810 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f   = 0;.  sqlite3_
11820 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
11830 28 0a 20 20 20 20 20 20 64 62 2c 20 22 74 65 73  (.      db, "tes
11840 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 45 4e 43 28  t_collate", ENC(
11850 64 62 29 2c 20 28 76 6f 69 64 20 2a 29 65 6e 63  db), (void *)enc
11860 2c 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 66  , test_collate_f
11870 75 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  unc);.}../*.** U
11880 73 61 67 65 3a 20 61 64 64 5f 74 65 73 74 5f 63  sage: add_test_c
11890 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 20 44 42  ollate_needed DB
118a0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
118b0 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64  est_collate_need
118c0 65 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  ed(.  void * cli
118d0 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
118e0 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
118f0 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
11900 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
11910 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  [].){.  sqlite3 
11920 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  *db;.  int rc;..
11930 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 20    if( objc!=2 ) 
11940 67 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20  goto bad_args;. 
11950 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
11960 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
11970 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
11980 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
11990 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20  TCL_ERROR;.  rc 
119a0 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c 61 74  = sqlite3_collat
119b0 69 6f 6e 5f 6e 65 65 64 65 64 31 36 28 64 62 2c  ion_needed16(db,
119c0 20 30 2c 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65   0, test_collate
119d0 5f 6e 65 65 64 65 64 5f 63 62 29 3b 0a 20 20 7a  _needed_cb);.  z
119e0 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b  NeededCollation[
119f0 30 5d 20 3d 20 30 3b 0a 20 20 69 66 28 20 73 71  0] = 0;.  if( sq
11a00 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
11a10 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
11a20 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
11a30 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  ROR;.  return TC
11a40 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f 61 72 67 73 3a  L_OK;..bad_args:
11a50 0a 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41  .  Tcl_WrongNumA
11a60 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f  rgs(interp, 1, o
11a70 62 6a 76 2c 20 22 44 42 22 29 3b 0a 20 20 72 65  bjv, "DB");.  re
11a80 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
11a90 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a  }../*.** tclcmd:
11aa0 20 20 20 61 64 64 5f 61 6c 69 67 6e 6d 65 6e 74     add_alignment
11ab0 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 69 6f 6e 73  _test_collations
11ac0 20 20 44 42 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74    DB.**.** Add t
11ad0 77 6f 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6e 67  wo new collating
11ae0 20 73 65 71 75 65 6e 63 65 73 20 74 6f 20 74 68   sequences to th
11af0 65 20 64 61 74 61 62 61 73 65 20 44 42 0a 2a 2a  e database DB.**
11b00 0a 2a 2a 20 20 20 20 20 75 74 66 31 36 5f 61 6c  .**     utf16_al
11b10 69 67 6e 65 64 0a 2a 2a 20 20 20 20 20 75 74 66  igned.**     utf
11b20 31 36 5f 75 6e 61 6c 69 67 6e 65 64 0a 2a 2a 0a  16_unaligned.**.
11b30 2a 2a 20 42 6f 74 68 20 63 6f 6c 6c 61 74 69 6e  ** Both collatin
11b40 67 20 73 65 71 75 65 6e 63 65 73 20 75 73 65 20  g sequences use 
11b50 74 68 65 20 73 61 6d 65 20 73 6f 72 74 20 6f 72  the same sort or
11b60 64 65 72 20 61 73 20 42 49 4e 41 52 59 2e 0a 2a  der as BINARY..*
11b70 2a 20 54 68 65 20 6f 6e 6c 79 20 64 69 66 66 65  * The only diffe
11b80 72 65 6e 63 65 20 69 73 20 74 68 61 74 20 74 68  rence is that th
11b90 65 20 75 74 66 31 36 5f 61 6c 69 67 6e 65 64 20  e utf16_aligned 
11ba0 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71  collating.** seq
11bb0 75 65 6e 63 65 20 69 73 20 64 65 63 6c 61 72 65  uence is declare
11bc0 64 20 77 69 74 68 20 74 68 65 20 53 51 4c 49 54  d with the SQLIT
11bd0 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45 44 20  E_UTF16_ALIGNED 
11be0 66 6c 61 67 2e 0a 2a 2a 20 42 6f 74 68 20 63 6f  flag..** Both co
11bf0 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
11c00 73 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 20  s increment the 
11c10 75 6e 61 6c 69 67 6e 65 64 20 75 74 66 31 36 20  unaligned utf16 
11c20 63 6f 75 6e 74 65 72 0a 2a 2a 20 77 68 65 6e 65  counter.** whene
11c30 76 65 72 20 74 68 65 79 20 73 65 65 20 61 20 73  ver they see a s
11c40 74 72 69 6e 67 20 74 68 61 74 20 62 65 67 69 6e  tring that begin
11c50 73 20 6f 6e 20 61 6e 20 6f 64 64 20 62 79 74 65  s on an odd byte
11c60 20 62 6f 75 6e 64 61 72 79 2e 0a 2a 2f 0a 73 74   boundary..*/.st
11c70 61 74 69 63 20 69 6e 74 20 75 6e 61 6c 69 67 6e  atic int unalign
11c80 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75 6e 74 65  ed_string_counte
11c90 72 20 3d 20 30 3b 0a 73 74 61 74 69 63 20 69 6e  r = 0;.static in
11ca0 74 20 61 6c 69 67 6e 6d 65 6e 74 43 6f 6c 6c 46  t alignmentCollF
11cb0 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  unc(.  void *Not
11cc0 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e 4b 65 79  Used,.  int nKey
11cd0 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  1, const void *p
11ce0 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b 65 79  Key1,.  int nKey
11cf0 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  2, const void *p
11d00 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20 72 63  Key2.){.  int rc
11d10 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b 65 79 31  , n;.  n = nKey1
11d20 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79 31 20 3a  <nKey2 ? nKey1 :
11d30 20 6e 4b 65 79 32 3b 0a 20 20 69 66 28 20 6e 4b   nKey2;.  if( nK
11d40 65 79 31 3e 30 20 26 26 20 31 3d 3d 28 31 26 28  ey1>0 && 1==(1&(
11d50 69 6e 74 29 70 4b 65 79 31 29 20 29 20 75 6e 61  int)pKey1) ) una
11d60 6c 69 67 6e 65 64 5f 73 74 72 69 6e 67 5f 63 6f  ligned_string_co
11d70 75 6e 74 65 72 2b 2b 3b 0a 20 20 69 66 28 20 6e  unter++;.  if( n
11d80 4b 65 79 32 3e 30 20 26 26 20 31 3d 3d 28 31 26  Key2>0 && 1==(1&
11d90 28 69 6e 74 29 70 4b 65 79 32 29 20 29 20 75 6e  (int)pKey2) ) un
11da0 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e 67 5f 63  aligned_string_c
11db0 6f 75 6e 74 65 72 2b 2b 3b 0a 20 20 72 63 20 3d  ounter++;.  rc =
11dc0 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31 2c 20 70   memcmp(pKey1, p
11dd0 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69 66 28 20  Key2, n);.  if( 
11de0 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  rc==0 ){.    rc 
11df0 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65 79 32 3b  = nKey1 - nKey2;
11e00 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63  .  }.  return rc
11e10 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e 74 20 61  ;.}.static int a
11e20 64 64 5f 61 6c 69 67 6e 6d 65 6e 74 5f 74 65 73  dd_alignment_tes
11e30 74 5f 63 6f 6c 6c 61 74 69 6f 6e 73 28 0a 20 20  t_collations(.  
11e40 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
11e50 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
11e60 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
11e70 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
11e80 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
11e90 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
11ea0 20 69 66 28 20 6f 62 6a 63 3e 3d 32 20 29 7b 0a   if( objc>=2 ){.
11eb0 20 20 20 20 69 66 28 20 67 65 74 44 62 50 6f 69      if( getDbPoi
11ec0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
11ed0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
11ee0 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
11ef0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
11f00 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65    sqlite3_create
11f10 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 22  _collation(db, "
11f20 75 74 66 31 36 5f 75 6e 61 6c 69 67 6e 65 64 22  utf16_unaligned"
11f30 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 2c 20  , SQLITE_UTF16, 
11f40 0a 20 20 20 20 20 20 20 20 30 2c 20 61 6c 69 67  .        0, alig
11f50 6e 6d 65 6e 74 43 6f 6c 6c 46 75 6e 63 29 3b 0a  nmentCollFunc);.
11f60 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
11f70 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  te_collation(db,
11f80 20 22 75 74 66 31 36 5f 61 6c 69 67 6e 65 64 22   "utf16_aligned"
11f90 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 5f 41  , SQLITE_UTF16_A
11fa0 4c 49 47 4e 45 44 2c 20 0a 20 20 20 20 20 20 20  LIGNED, .       
11fb0 20 30 2c 20 61 6c 69 67 6e 6d 65 6e 74 43 6f 6c   0, alignmentCol
11fc0 6c 46 75 6e 63 29 3b 0a 20 20 7d 0a 20 20 72 65  lFunc);.  }.  re
11fd0 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
11fe0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
11ff0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
12000 5f 55 54 46 31 36 29 20 2a 2f 0a 0a 2f 2a 0a 2a  _UTF16) */../*.*
12010 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74 65 73  * Usage: add_tes
12020 74 5f 66 75 6e 63 74 69 6f 6e 20 3c 64 62 20 70  t_function <db p
12030 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66 31  tr> <utf8> <utf1
12040 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e 0a 2a  6le> <utf16be>.*
12050 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
12060 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 74 65  on is used to te
12070 73 74 20 74 68 61 74 20 53 51 4c 69 74 65 20 73  st that SQLite s
12080 65 6c 65 63 74 73 20 74 68 65 20 63 6f 72 72 65  elects the corre
12090 63 74 20 75 73 65 72 0a 2a 2a 20 66 75 6e 63 74  ct user.** funct
120a0 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 77 68 65  ion callback whe
120b0 6e 20 6d 75 6c 74 69 70 6c 65 20 76 65 72 73 69  n multiple versi
120c0 6f 6e 73 20 28 66 6f 72 20 64 69 66 66 65 72 65  ons (for differe
120d0 6e 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  nt text encoding
120e0 73 29 0a 2a 2a 20 61 72 65 20 61 76 61 69 6c 61  s).** are availa
120f0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 69  ble..**.** Calli
12100 6e 67 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  ng this routine 
12110 72 65 67 69 73 74 65 72 73 20 75 70 20 74 6f 20  registers up to 
12120 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73 20 6f  three versions o
12130 66 20 74 68 65 20 75 73 65 72 20 66 75 6e 63 74  f the user funct
12140 69 6f 6e 0a 2a 2a 20 22 74 65 73 74 5f 66 75 6e  ion.** "test_fun
12150 63 74 69 6f 6e 22 20 77 69 74 68 20 64 61 74 61  ction" with data
12160 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 64 62 3e  base handle <db>
12170 2e 20 20 49 66 20 74 68 65 20 73 65 63 6f 6e 64  .  If the second
12180 20 61 72 67 75 6d 65 6e 74 20 69 73 0a 2a 2a 20   argument is.** 
12190 74 72 75 65 2c 20 74 68 65 6e 20 61 20 76 65 72  true, then a ver
121a0 73 69 6f 6e 20 6f 66 20 74 65 73 74 5f 66 75 6e  sion of test_fun
121b0 63 74 69 6f 6e 20 69 73 20 72 65 67 69 73 74 65  ction is registe
121c0 72 65 64 20 66 6f 72 20 55 54 46 2d 38 2c 20 69  red for UTF-8, i
121d0 66 20 74 68 65 0a 2a 2a 20 74 68 69 72 64 20 69  f the.** third i
121e0 73 20 74 72 75 65 2c 20 61 20 76 65 72 73 69 6f  s true, a versio
121f0 6e 20 69 73 20 72 65 67 69 73 74 65 72 65 64 20  n is registered 
12200 66 6f 72 20 55 54 46 2d 31 36 6c 65 2c 20 69 66  for UTF-16le, if
12210 20 74 68 65 20 66 6f 75 72 74 68 20 69 73 0a 2a   the fourth is.*
12220 2a 20 74 72 75 65 2c 20 61 20 55 54 46 2d 31 36  * true, a UTF-16
12230 62 65 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76  be version is av
12240 61 69 6c 61 62 6c 65 2e 20 20 50 72 65 76 69 6f  ailable.  Previo
12250 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 2a  us versions of.*
12260 2a 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20  * test_function 
12270 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a 2a 0a  are deleted..**.
12280 2a 2a 20 54 68 65 20 75 73 65 72 20 66 75 6e 63  ** The user func
12290 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65 6e  tion is implemen
122a0 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74  ted by calling t
122b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 54 43 4c  he following TCL
122c0 20 73 63 72 69 70 74 3a 0a 2a 2a 0a 2a 2a 20 20   script:.**.**  
122d0 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20   "test_function 
122e0 3c 65 6e 63 3e 20 3c 61 72 67 3e 22 0a 2a 2a 0a  <enc> <arg>".**.
122f0 2a 2a 20 57 68 65 72 65 20 3c 65 6e 63 3e 20 69  ** Where <enc> i
12300 73 20 6f 6e 65 20 6f 66 20 55 54 46 2d 38 2c 20  s one of UTF-8, 
12310 55 54 46 2d 31 36 4c 45 20 6f 72 20 55 54 46 31  UTF-16LE or UTF1
12320 36 42 45 2c 20 61 6e 64 20 3c 61 72 67 3e 20 69  6BE, and <arg> i
12330 73 20 74 68 65 0a 2a 2a 20 73 69 6e 67 6c 65 20  s the.** single 
12340 61 72 67 75 6d 65 6e 74 20 70 61 73 73 65 64 20  argument passed 
12350 74 6f 20 74 68 65 20 53 51 4c 20 66 75 6e 63 74  to the SQL funct
12360 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 72  ion. The value r
12370 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20 74 68  eturned by.** th
12380 65 20 54 43 4c 20 73 63 72 69 70 74 20 69 73 20  e TCL script is 
12390 75 73 65 64 20 61 73 20 74 68 65 20 72 65 74 75  used as the retu
123a0 72 6e 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  rn value of the 
123b0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20 49 74  SQL function. It
123c0 0a 2a 2a 20 69 73 20 70 61 73 73 65 64 20 74 6f  .** is passed to
123d0 20 53 51 4c 69 74 65 20 75 73 69 6e 67 20 55 54   SQLite using UT
123e0 46 2d 31 36 42 45 20 66 6f 72 20 61 20 55 54 46  F-16BE for a UTF
123f0 2d 38 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  -8 test_function
12400 28 29 2c 20 55 54 46 2d 38 0a 2a 2a 20 66 6f 72  (), UTF-8.** for
12410 20 61 20 55 54 46 2d 31 36 4c 45 20 74 65 73 74   a UTF-16LE test
12420 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20 61 6e 64  _function(), and
12430 20 55 54 46 2d 31 36 4c 45 20 66 6f 72 20 61 6e   UTF-16LE for an
12440 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
12450 74 68 61 74 0a 2a 2a 20 70 72 65 66 65 72 73 20  that.** prefers 
12460 55 54 46 2d 31 36 42 45 2e 0a 2a 2f 0a 23 69 66  UTF-16BE..*/.#if
12470 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
12480 5f 55 54 46 31 36 0a 73 74 61 74 69 63 20 76 6f  _UTF16.static vo
12490 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  id test_function
124a0 5f 75 74 66 38 28 0a 20 20 73 71 6c 69 74 65 33  _utf8(.  sqlite3
124b0 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
124c0 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73  .  int nArg,.  s
124d0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
124e0 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74  rgv.){.  Tcl_Int
124f0 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54  erp *interp;.  T
12500 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71  cl_Obj *pX;.  sq
12510 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
12520 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20 28 54  l;.  interp = (T
12530 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c 69  cl_Interp *)sqli
12540 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 70 43  te3_user_data(pC
12550 74 78 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f  tx);.  pX = Tcl_
12560 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65  NewStringObj("te
12570 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31  st_function", -1
12580 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66  );.  Tcl_IncrRef
12590 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c  Count(pX);.  Tcl
125a0 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
125b0 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58  ement(interp, pX
125c0 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
125d0 62 6a 28 22 55 54 46 2d 38 22 2c 20 2d 31 29 29  bj("UTF-8", -1))
125e0 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
125f0 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
12600 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20 20 20  erp, pX, .      
12610 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
12620 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  ((char*)sqlite3_
12630 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b  value_text(argv[
12640 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c  0]), -1));.  Tcl
12650 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74 65 72  _EvalObjEx(inter
12660 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54 63 6c  p, pX, 0);.  Tcl
12670 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 58  _DecrRefCount(pX
12680 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73  );.  sqlite3_res
12690 75 6c 74 5f 74 65 78 74 28 70 43 74 78 2c 20 54  ult_text(pCtx, T
126a0 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73 75  cl_GetStringResu
126b0 6c 74 28 69 6e 74 65 72 70 29 2c 20 2d 31 2c 20  lt(interp), -1, 
126c0 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
126d0 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69  );.  pVal = sqli
126e0 74 65 33 56 61 6c 75 65 4e 65 77 28 30 29 3b 0a  te3ValueNew(0);.
126f0 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65    sqlite3ValueSe
12700 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20 54  tStr(pVal, -1, T
12710 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73 75  cl_GetStringResu
12720 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20 20 20  lt(interp), .   
12730 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20     SQLITE_UTF8, 
12740 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
12750 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
12760 5f 74 65 78 74 31 36 62 65 28 70 43 74 78 2c 20  _text16be(pCtx, 
12770 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
12780 78 74 31 36 62 65 28 70 56 61 6c 29 2c 0a 20 20  xt16be(pVal),.  
12790 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54      -1, SQLITE_T
127a0 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c  RANSIENT);.  sql
127b0 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70 56  ite3ValueFree(pV
127c0 61 6c 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f  al);.}.static vo
127d0 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  id test_function
127e0 5f 75 74 66 31 36 6c 65 28 0a 20 20 73 71 6c 69  _utf16le(.  sqli
127f0 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
12800 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a  x, .  int nArg,.
12810 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
12820 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f  **argv.){.  Tcl_
12830 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a  Interp *interp;.
12840 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20    Tcl_Obj *pX;. 
12850 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
12860 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d  pVal;.  interp =
12870 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73   (Tcl_Interp *)s
12880 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
12890 28 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20 54  (pCtx);.  pX = T
128a0 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
128b0 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c  "test_function",
128c0 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72   -1);.  Tcl_Incr
128d0 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20  RefCount(pX);.  
128e0 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e  Tcl_ListObjAppen
128f0 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
12900 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69   pX, Tcl_NewStri
12910 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 4c 45 22  ngObj("UTF-16LE"
12920 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69  , -1));.  Tcl_Li
12930 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
12940 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 0a  nt(interp, pX, .
12950 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72        Tcl_NewStr
12960 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73 71  ingObj((char*)sq
12970 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
12980 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29 3b  (argv[0]), -1));
12990 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78  .  Tcl_EvalObjEx
129a0 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30 29 3b  (interp, pX, 0);
129b0 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f  .  Tcl_DecrRefCo
129c0 75 6e 74 28 70 58 29 3b 0a 20 20 70 56 61 6c 20  unt(pX);.  pVal 
129d0 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65  = sqlite3ValueNe
129e0 77 28 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  w(0);.  sqlite3V
129f0 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c  alueSetStr(pVal,
12a00 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72 69   -1, Tcl_GetStri
12a10 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  ngResult(interp)
12a20 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  , .      SQLITE_
12a30 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
12a40 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  TIC);.  sqlite3_
12a50 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78  result_text(pCtx
12a60 2c 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  ,(char*)sqlite3_
12a70 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c 29  value_text(pVal)
12a80 2c 2d 31 2c 53 51 4c 49 54 45 5f 54 52 41 4e 53  ,-1,SQLITE_TRANS
12a90 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65 33  IENT);.  sqlite3
12aa0 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b  ValueFree(pVal);
12ab0 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 74  .}.static void t
12ac0 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74 66  est_function_utf
12ad0 31 36 62 65 28 0a 20 20 73 71 6c 69 74 65 33 5f  16be(.  sqlite3_
12ae0 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20 0a  context *pCtx, .
12af0 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73 71    int nArg,.  sq
12b00 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72  lite3_value **ar
12b10 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74 65  gv.){.  Tcl_Inte
12b20 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54 63  rp *interp;.  Tc
12b30 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71 6c  l_Obj *pX;.  sql
12b40 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
12b50 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20 28 54 63  ;.  interp = (Tc
12b60 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c 69 74  l_Interp *)sqlit
12b70 65 33 5f 75 73 65 72 5f 64 61 74 61 28 70 43 74  e3_user_data(pCt
12b80 78 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f 4e  x);.  pX = Tcl_N
12b90 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65 73  ewStringObj("tes
12ba0 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31 29  t_function", -1)
12bb0 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43  ;.  Tcl_IncrRefC
12bc0 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c 5f  ount(pX);.  Tcl_
12bd0 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
12be0 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c  ment(interp, pX,
12bf0 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
12c00 6a 28 22 55 54 46 2d 31 36 42 45 22 2c 20 2d 31  j("UTF-16BE", -1
12c10 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
12c20 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
12c30 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20  nterp, pX, .    
12c40 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f    Tcl_NewStringO
12c50 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65  bj((char*)sqlite
12c60 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
12c70 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54  v[0]), -1));.  T
12c80 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74  cl_EvalObjEx(int
12c90 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54  erp, pX, 0);.  T
12ca0 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
12cb0 70 58 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71  pX);.  pVal = sq
12cc0 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 30 29  lite3ValueNew(0)
12cd0 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ;.  sqlite3Value
12ce0 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c  SetStr(pVal, -1,
12cf0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65   Tcl_GetStringRe
12d00 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20  sult(interp), . 
12d10 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38       SQLITE_UTF8
12d20 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
12d30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75  ;.  sqlite3_resu
12d40 6c 74 5f 74 65 78 74 31 36 28 70 43 74 78 2c 20  lt_text16(pCtx, 
12d50 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
12d60 78 74 31 36 6c 65 28 70 56 61 6c 29 2c 0a 20 20  xt16le(pVal),.  
12d70 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54      -1, SQLITE_T
12d80 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c  RANSIENT);.  sql
12d90 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
12da0 31 36 62 65 28 70 43 74 78 2c 20 73 71 6c 69 74  16be(pCtx, sqlit
12db0 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 6c  e3_value_text16l
12dc0 65 28 70 56 61 6c 29 2c 0a 20 20 20 20 20 20 2d  e(pVal),.      -
12dd0 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  1, SQLITE_TRANSI
12de0 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  ENT);.  sqlite3_
12df0 72 65 73 75 6c 74 5f 74 65 78 74 31 36 6c 65 28  result_text16le(
12e00 70 43 74 78 2c 20 73 71 6c 69 74 65 33 5f 76 61  pCtx, sqlite3_va
12e10 6c 75 65 5f 74 65 78 74 31 36 6c 65 28 70 56 61  lue_text16le(pVa
12e20 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c 20 53 51  l),.      -1, SQ
12e30 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
12e40 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  .  sqlite3ValueF
12e50 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a 23 65 6e  ree(pVal);.}.#en
12e60 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
12e70 49 54 5f 55 54 46 31 36 20 2a 2f 0a 73 74 61 74  IT_UTF16 */.stat
12e80 69 63 20 69 6e 74 20 74 65 73 74 5f 66 75 6e 63  ic int test_func
12e90 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63  tion(.  void * c
12ea0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
12eb0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
12ec0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
12ed0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
12ee0 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66 20  jv[].){.#ifndef 
12ef0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
12f00 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  6.  sqlite3 *db;
12f10 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 0a 20 20 69  .  int val;..  i
12f20 66 28 20 6f 62 6a 63 21 3d 35 20 29 20 67 6f 74  f( objc!=5 ) got
12f30 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20 20 69 66  o bad_args;.  if
12f40 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
12f50 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
12f60 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
12f70 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
12f80 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66 28 20 54  _ERROR;..  if( T
12f90 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
12fa0 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
12fb0 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 76  erp, objv[2], &v
12fc0 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
12fd0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61  _ERROR;.  if( va
12fe0 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
12ff0 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
13000 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74  (db, "test_funct
13010 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f  ion", 1, SQLITE_
13020 55 54 46 38 2c 20 0a 20 20 20 20 20 20 20 20 69  UTF8, .        i
13030 6e 74 65 72 70 2c 20 74 65 73 74 5f 66 75 6e 63  nterp, test_func
13040 74 69 6f 6e 5f 75 74 66 38 2c 20 30 2c 20 30 29  tion_utf8, 0, 0)
13050 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 43 4c 5f  ;.  }.  if( TCL_
13060 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65  OK!=Tcl_GetBoole
13070 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  anFromObj(interp
13080 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 29  , objv[3], &val)
13090 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
130a0 52 4f 52 3b 0a 20 20 69 66 28 20 76 61 6c 20 29  ROR;.  if( val )
130b0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72  {.    sqlite3_cr
130c0 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62  eate_function(db
130d0 2c 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  , "test_function
130e0 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  ", 1, SQLITE_UTF
130f0 31 36 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 69  16LE, .        i
13100 6e 74 65 72 70 2c 20 74 65 73 74 5f 66 75 6e 63  nterp, test_func
13110 74 69 6f 6e 5f 75 74 66 31 36 6c 65 2c 20 30 2c  tion_utf16le, 0,
13120 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54   0);.  }.  if( T
13130 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f  CL_OK!=Tcl_GetBo
13140 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74  oleanFromObj(int
13150 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 76  erp, objv[4], &v
13160 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  al) ) return TCL
13170 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61  _ERROR;.  if( va
13180 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
13190 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
131a0 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74  (db, "test_funct
131b0 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f  ion", 1, SQLITE_
131c0 55 54 46 31 36 42 45 2c 20 0a 20 20 20 20 20 20  UTF16BE, .      
131d0 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66    interp, test_f
131e0 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 62 65 2c  unction_utf16be,
131f0 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 72   0, 0);.  }..  r
13200 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 62 61  eturn TCL_OK;.ba
13210 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 41 70  d_args:.  Tcl_Ap
13220 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
13230 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
13240 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
13250 0a 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74  .      Tcl_GetSt
13260 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
13270 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44 42 3e 20  [0], 0), " <DB> 
13280 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c 65 3e  <utf8> <utf16le>
13290 20 3c 75 74 66 31 36 62 65 3e 22 2c 20 30 29 3b   <utf16be>", 0);
132a0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
132b0 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
132c0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
132d0 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OR;.}../*.** Usa
132e0 67 65 3a 20 20 20 20 20 20 20 20 20 73 71 6c 69  ge:         sqli
132f0 74 65 33 5f 74 65 73 74 5f 65 72 72 73 74 72 20  te3_test_errstr 
13300 3c 65 72 72 20 63 6f 64 65 3e 0a 2a 2a 0a 2a 2a  <err code>.**.**
13310 20 54 65 73 74 20 74 68 61 74 20 74 68 65 20 65   Test that the e
13320 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
13330 73 74 72 69 6e 67 20 65 71 75 69 76 61 6c 65 6e  string equivalen
13340 74 73 20 66 6f 72 20 73 71 6c 69 74 65 20 65 72  ts for sqlite er
13350 72 6f 72 20 63 6f 64 65 73 0a 2a 2a 20 61 72 65  ror codes.** are
13360 20 73 61 6e 65 2e 20 54 68 65 20 70 61 72 61 6d   sane. The param
13370 65 74 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67  eter is an integ
13380 65 72 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  er representing 
13390 61 6e 20 73 71 6c 69 74 65 20 65 72 72 6f 72 20  an sqlite error 
133a0 63 6f 64 65 2e 0a 2a 2a 20 54 68 65 20 72 65 73  code..** The res
133b0 75 6c 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ult is a list of
133c0 20 74 77 6f 20 65 6c 65 6d 65 6e 74 73 2c 20 74   two elements, t
133d0 68 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  he string repres
133e0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
133f0 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65 20 61 6e  ** error code an
13400 64 20 74 68 65 20 65 6e 67 6c 69 73 68 20 6c 61  d the english la
13410 6e 67 75 61 67 65 20 65 78 70 6c 61 6e 61 74 69  nguage explanati
13420 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  on..*/.static in
13430 74 20 74 65 73 74 5f 65 72 72 73 74 72 28 0a 20  t test_errstr(. 
13440 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
13450 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
13460 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
13470 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
13480 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
13490 0a 20 20 63 68 61 72 20 2a 7a 43 6f 64 65 3b 0a  .  char *zCode;.
134a0 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 6f    int i;.  if( o
134b0 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20 20 54 63  bjc!=1 ){.    Tc
134c0 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
134d0 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
134e0 22 3c 65 72 72 6f 72 20 63 6f 64 65 3e 22 29 3b  "<error code>");
134f0 0a 20 20 7d 0a 0a 20 20 7a 43 6f 64 65 20 3d 20  .  }..  zCode = 
13500 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
13510 6a 76 5b 31 5d 29 3b 0a 20 20 66 6f 72 28 69 3d  jv[1]);.  for(i=
13520 30 3b 20 69 3c 32 30 30 3b 20 69 2b 2b 29 7b 0a  0; i<200; i++){.
13530 20 20 20 20 69 66 28 20 30 3d 3d 73 74 72 63 6d      if( 0==strcm
13540 70 28 74 31 45 72 72 6f 72 4e 61 6d 65 28 69 29  p(t1ErrorName(i)
13550 2c 20 7a 43 6f 64 65 29 20 29 20 62 72 65 61 6b  , zCode) ) break
13560 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74 52  ;.  }.  Tcl_SetR
13570 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
13580 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72 72  har *)sqlite3Err
13590 53 74 72 28 69 29 2c 20 30 29 3b 0a 20 20 72 65  Str(i), 0);.  re
135a0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
135b0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 20  /*.** Usage:    
135c0 62 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a 0a 2a 2a  breakpoint.**.**
135d0 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 65 78   This routine ex
135e0 69 73 74 73 20 66 6f 72 20 6f 6e 65 20 70 75 72  ists for one pur
135f0 70 6f 73 65 20 2d 20 74 6f 20 70 72 6f 76 69 64  pose - to provid
13600 65 20 61 20 70 6c 61 63 65 20 74 6f 20 70 75 74  e a place to put
13610 20 61 0a 2a 2a 20 62 72 65 61 6b 70 6f 69 6e 74   a.** breakpoint
13620 20 77 69 74 68 20 47 44 42 20 74 68 61 74 20 63   with GDB that c
13630 61 6e 20 62 65 20 74 72 69 67 67 65 72 65 64 20  an be triggered 
13640 75 73 69 6e 67 20 54 43 4c 20 63 6f 64 65 2e 20  using TCL code. 
13650 20 54 68 65 20 75 73 65 0a 2a 2a 20 66 6f 72 20   The use.** for 
13660 74 68 69 73 20 69 73 20 77 68 65 6e 20 61 20 70  this is when a p
13670 61 72 74 69 63 75 6c 61 72 20 74 65 73 74 20 66  articular test f
13680 61 69 6c 73 20 6f 6e 20 28 73 61 79 29 20 74 68  ails on (say) th
13690 65 20 31 34 38 35 74 68 20 69 74 65 72 61 74 69  e 1485th iterati
136a0 6f 6e 2e 0a 2a 2a 20 49 6e 20 74 68 65 20 54 43  on..** In the TC
136b0 4c 20 74 65 73 74 20 73 63 72 69 70 74 2c 20 77  L test script, w
136c0 65 20 63 61 6e 20 61 64 64 20 63 6f 64 65 20 6c  e can add code l
136d0 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20  ike this:.**.** 
136e0 20 20 20 20 69 66 20 7b 24 69 3d 3d 31 34 38 35      if {$i==1485
136f0 7d 20 62 72 65 61 6b 70 6f 69 6e 74 0a 2a 2a 0a  } breakpoint.**.
13700 2a 2a 20 54 68 65 6e 20 72 75 6e 20 74 65 73 74  ** Then run test
13710 66 69 78 74 75 72 65 20 69 6e 20 74 68 65 20 64  fixture in the d
13720 65 62 75 67 67 65 72 20 61 6e 64 20 77 61 69 74  ebugger and wait
13730 20 66 6f 72 20 74 68 65 20 62 72 65 61 6b 70 6f   for the breakpo
13740 69 6e 74 20 74 6f 0a 2a 2a 20 66 69 72 65 2e 20  int to.** fire. 
13750 20 54 68 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c   Then additional
13760 20 62 72 65 61 6b 70 6f 69 6e 74 73 20 63 61 6e   breakpoints can
13770 20 62 65 20 73 65 74 20 74 6f 20 74 72 61 63 65   be set to trace
13780 20 64 6f 77 6e 20 74 68 65 20 62 75 67 2e 0a 2a   down the bug..*
13790 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
137a0 74 5f 62 72 65 61 6b 70 6f 69 6e 74 28 0a 20 20  t_breakpoint(.  
137b0 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
137c0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
137d0 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
137e0 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
137f0 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
13800 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
13810 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
13820 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13830 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
13840 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
13850 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
13860 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
13870 20 2a 2f 0a 29 7b 0a 20 20 72 65 74 75 72 6e 20   */.){.  return 
13880 54 43 4c 5f 4f 4b 3b 20 20 20 20 20 20 20 20 20  TCL_OK;         
13890 2f 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 20 2a 2f  /* Do nothing */
138a0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
138b0 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
138c0 7a 65 72 6f 62 6c 6f 62 20 20 53 54 4d 54 20 49  zeroblob  STMT I
138d0 44 58 20 4e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20  DX N.**.** Test 
138e0 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  the sqlite3_bind
138f0 5f 7a 65 72 6f 62 6c 6f 62 20 69 6e 74 65 72 66  _zeroblob interf
13900 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20  ace.  STMT is a 
13910 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
13920 6e 74 2e 0a 2a 2a 20 49 44 58 20 69 73 20 74 68  nt..** IDX is th
13930 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c  e index of a wil
13940 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65  dcard in the pre
13950 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
13960 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a    This command.*
13970 2a 20 62 69 6e 64 73 20 61 20 4e 2d 62 79 74 65  * binds a N-byte
13980 20 7a 65 72 6f 2d 66 69 6c 6c 65 64 20 42 4c 4f   zero-filled BLO
13990 42 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72  B to the wildcar
139a0 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  d..*/.static int
139b0 20 74 65 73 74 5f 62 69 6e 64 5f 7a 65 72 6f 62   test_bind_zerob
139c0 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  lob(.  void * cl
139d0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
139e0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
139f0 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
13a00 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
13a10 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
13a20 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
13a30 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 6e  int idx;.  int n
13a40 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69  ;.  int rc;..  i
13a50 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20  f( objc!=4 ){.  
13a60 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
13a70 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
13a80 6a 76 2c 20 22 53 54 4d 54 20 49 44 58 20 4e 22  jv, "STMT IDX N"
13a90 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
13aa0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
13ab0 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
13ac0 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
13ad0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
13ae0 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
13af0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
13b00 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
13b10 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
13b20 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20  bjv[2], &idx) ) 
13b30 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13b40 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49  ;.  if( Tcl_GetI
13b50 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70  ntFromObj(interp
13b60 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 6e 29 20 29  , objv[3], &n) )
13b70 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
13b80 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  R;..  rc = sqlit
13b90 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62  e3_bind_zeroblob
13ba0 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 6e 29 3b  (pStmt, idx, n);
13bb0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
13bc0 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
13bd0 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74  , StmtToDb(pStmt
13be0 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  ), rc) ) return 
13bf0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
13c00 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
13c10 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
13c20 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72  _ERROR;.  }..  r
13c30 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
13c40 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
13c50 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
13c60 20 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a 2a    STMT N VALUE.*
13c70 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71  *.** Test the sq
13c80 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 20 69  lite3_bind_int i
13c90 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20  nterface.  STMT 
13ca0 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74  is a prepared st
13cb0 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73  atement..** N is
13cc0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
13cd0 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20  wildcard in the 
13ce0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
13cf0 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e  nt.  This comman
13d00 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 33 32 2d  d.** binds a 32-
13d10 62 69 74 20 69 6e 74 65 67 65 72 20 56 41 4c 55  bit integer VALU
13d20 45 20 74 6f 20 74 68 61 74 20 77 69 6c 64 63 61  E to that wildca
13d30 72 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  rd..*/.static in
13d40 74 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74 28  t test_bind_int(
13d50 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
13d60 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
13d70 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
13d80 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
13d90 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
13da0 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
13db0 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
13dc0 69 64 78 3b 0a 20 20 69 6e 74 20 76 61 6c 75 65  idx;.  int value
13dd0 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69  ;.  int rc;..  i
13de0 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20  f( objc!=4 ){.  
13df0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
13e00 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
13e10 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
13e20 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
13e30 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
13e40 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
13e50 29 2c 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55  ), " STMT N VALU
13e60 45 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  E", 0);.    retu
13e70 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
13e80 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
13e90 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
13ea0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
13eb0 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
13ec0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
13ed0 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  OR;.  if( Tcl_Ge
13ee0 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
13ef0 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64  rp, objv[2], &id
13f00 78 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  x) ) return TCL_
13f10 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
13f20 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
13f30 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20  nterp, objv[3], 
13f40 26 76 61 6c 75 65 29 20 29 20 72 65 74 75 72 6e  &value) ) return
13f50 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
13f60 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
13f70 5f 69 6e 74 28 70 53 74 6d 74 2c 20 69 64 78 2c  _int(pStmt, idx,
13f80 20 76 61 6c 75 65 29 3b 0a 20 20 69 66 28 20 73   value);.  if( s
13f90 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
13fa0 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f  e(interp, StmtTo
13fb0 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29  Db(pStmt), rc) )
13fc0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
13fd0 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  R;.  if( rc!=SQL
13fe0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
13ff0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
14000 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43    }..  return TC
14010 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  L_OK;.}.../*.** 
14020 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
14030 5f 62 69 6e 64 5f 69 6e 74 36 34 20 20 53 54 4d  _bind_int64  STM
14040 54 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20  T N VALUE.**.** 
14050 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33  Test the sqlite3
14060 5f 62 69 6e 64 5f 69 6e 74 36 34 20 69 6e 74 65  _bind_int64 inte
14070 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20  rface.  STMT is 
14080 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
14090 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68  ment..** N is th
140a0 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c  e index of a wil
140b0 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65  dcard in the pre
140c0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
140d0 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a    This command.*
140e0 2a 20 62 69 6e 64 73 20 61 20 36 34 2d 62 69 74  * binds a 64-bit
140f0 20 69 6e 74 65 67 65 72 20 56 41 4c 55 45 20 74   integer VALUE t
14100 6f 20 74 68 61 74 20 77 69 6c 64 63 61 72 64 2e  o that wildcard.
14110 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
14120 65 73 74 5f 62 69 6e 64 5f 69 6e 74 36 34 28 0a  est_bind_int64(.
14130 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
14140 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
14150 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
14160 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
14170 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
14180 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
14190 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69   *pStmt;.  int i
141a0 64 78 3b 0a 20 20 69 36 34 20 76 61 6c 75 65 3b  dx;.  i64 value;
141b0 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
141c0 28 20 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20  ( objc!=4 ){.   
141d0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
141e0 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
141f0 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
14200 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
14210 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
14220 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
14230 2c 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45  , " STMT N VALUE
14240 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
14250 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
14260 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
14270 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
14280 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
14290 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
142a0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
142b0 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
142c0 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
142d0 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78  p, objv[2], &idx
142e0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
142f0 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
14300 47 65 74 57 69 64 65 49 6e 74 46 72 6f 6d 4f 62  GetWideIntFromOb
14310 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33  j(interp, objv[3
14320 5d 2c 20 26 76 61 6c 75 65 29 20 29 20 72 65 74  ], &value) ) ret
14330 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
14340 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62    rc = sqlite3_b
14350 69 6e 64 5f 69 6e 74 36 34 28 70 53 74 6d 74 2c  ind_int64(pStmt,
14360 20 69 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20   idx, value);.  
14370 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
14380 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53  rrCode(interp, S
14390 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20  tmtToDb(pStmt), 
143a0 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
143b0 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63  _ERROR;.  if( rc
143c0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
143d0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
143e0 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75  ROR;.  }..  retu
143f0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f  rn TCL_OK;.}.../
14400 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
14410 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c  lite3_bind_doubl
14420 65 20 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 0a  e  STMT N VALUE.
14430 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73  **.** Test the s
14440 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62  qlite3_bind_doub
14450 6c 65 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53  le interface.  S
14460 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65  TMT is a prepare
14470 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  d statement..** 
14480 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  N is the index o
14490 66 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e 20  f a wildcard in 
144a0 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
144b0 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f  tement.  This co
144c0 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61  mmand.** binds a
144d0 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20   64-bit integer 
144e0 56 41 4c 55 45 20 74 6f 20 74 68 61 74 20 77 69  VALUE to that wi
144f0 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69  ldcard..*/.stati
14500 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
14510 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69 64 20 2a  double(.  void *
14520 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
14530 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
14540 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
14550 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
14560 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
14570 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
14580 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 64 6f  .  int idx;.  do
14590 75 62 6c 65 20 76 61 6c 75 65 3b 0a 20 20 69 6e  uble value;.  in
145a0 74 20 72 63 3b 0a 20 20 63 6f 6e 73 74 20 63 68  t rc;.  const ch
145b0 61 72 20 2a 7a 56 61 6c 3b 0a 20 20 69 6e 74 20  ar *zVal;.  int 
145c0 69 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  i;.  static cons
145d0 74 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 63  t struct {.    c
145e0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
145f0 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ;     /* Name of
14600 20 74 68 65 20 73 70 65 63 69 61 6c 20 66 6c 6f   the special flo
14610 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
14620 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  e */.    unsigne
14630 64 20 69 6e 74 20 69 55 70 70 65 72 3b 20 20 20  d int iUpper;   
14640 2f 2a 20 55 70 70 65 72 20 33 32 20 62 69 74 73  /* Upper 32 bits
14650 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
14660 20 69 6e 74 20 69 4c 6f 77 65 72 3b 20 20 20 2f   int iLower;   /
14670 2a 20 4c 6f 77 65 72 20 33 32 20 62 69 74 73 20  * Lower 32 bits 
14680 2a 2f 0a 20 20 7d 20 61 53 70 65 63 69 61 6c 46  */.  } aSpecialF
14690 70 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b 20 20 22  p[] = {.    {  "
146a0 4e 61 4e 22 2c 20 20 20 20 20 20 30 78 37 66 66  NaN",      0x7ff
146b0 66 66 66 66 66 2c 20 30 78 66 66 66 66 66 66 66  fffff, 0xfffffff
146c0 66 20 7d 2c 0a 20 20 20 20 7b 20 20 22 53 4e 61  f },.    {  "SNa
146d0 4e 22 2c 20 20 20 20 20 30 78 37 66 66 37 66 66  N",     0x7ff7ff
146e0 66 66 2c 20 30 78 66 66 66 66 66 66 66 66 20 7d  ff, 0xffffffff }
146f0 2c 0a 20 20 20 20 7b 20 20 22 2d 4e 61 4e 22 2c  ,.    {  "-NaN",
14700 20 20 20 20 20 30 78 66 66 66 66 66 66 66 66 2c       0xffffffff,
14710 20 30 78 66 66 66 66 66 66 66 66 20 7d 2c 0a 20   0xffffffff },. 
14720 20 20 20 7b 20 20 22 2d 53 4e 61 4e 22 2c 20 20     {  "-SNaN",  
14730 20 20 30 78 66 66 66 37 66 66 66 66 2c 20 30 78    0xfff7ffff, 0x
14740 66 66 66 66 66 66 66 66 20 7d 2c 0a 20 20 20 20  ffffffff },.    
14750 7b 20 20 22 2b 49 6e 66 22 2c 20 20 20 20 20 30  {  "+Inf",     0
14760 78 37 66 66 30 30 30 30 30 2c 20 30 78 30 30 30  x7ff00000, 0x000
14770 30 30 30 30 30 20 7d 2c 0a 20 20 20 20 7b 20 20  00000 },.    {  
14780 22 2d 49 6e 66 22 2c 20 20 20 20 20 30 78 66 66  "-Inf",     0xff
14790 66 30 30 30 30 30 2c 20 30 78 30 30 30 30 30 30  f00000, 0x000000
147a0 30 30 20 7d 2c 0a 20 20 20 20 7b 20 20 22 45 70  00 },.    {  "Ep
147b0 73 69 6c 6f 6e 22 2c 20 20 30 78 30 30 30 30 30  silon",  0x00000
147c0 30 30 30 2c 20 30 78 30 30 30 30 30 30 30 31 20  000, 0x00000001 
147d0 7d 2c 0a 20 20 20 20 7b 20 20 22 2d 45 70 73 69  },.    {  "-Epsi
147e0 6c 6f 6e 22 2c 20 30 78 38 30 30 30 30 30 30 30  lon", 0x80000000
147f0 2c 20 30 78 30 30 30 30 30 30 30 31 20 7d 2c 0a  , 0x00000001 },.
14800 20 20 20 20 7b 20 20 22 4e 61 4e 30 22 2c 20 20      {  "NaN0",  
14810 20 20 20 30 78 37 66 66 38 30 30 30 30 2c 20 30     0x7ff80000, 0
14820 78 30 30 30 30 30 30 30 30 20 7d 2c 0a 20 20 20  x00000000 },.   
14830 20 7b 20 20 22 2d 4e 61 4e 30 22 2c 20 20 20 20   {  "-NaN0",    
14840 30 78 66 66 66 38 30 30 30 30 2c 20 30 78 30 30  0xfff80000, 0x00
14850 30 30 30 30 30 30 20 7d 2c 0a 20 20 7d 3b 0a 0a  000000 },.  };..
14860 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b    if( objc!=4 ){
14870 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
14880 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
14890 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
148a0 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
148b0 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
148c0 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
148d0 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56  , 0), " STMT N V
148e0 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20 72  ALUE", 0);.    r
148f0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
14900 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
14910 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
14920 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
14930 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
14940 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
14950 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
14960 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
14970 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
14980 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
14990 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 2f 2a 20  CL_ERROR;..  /* 
149a0 49 6e 74 65 72 63 65 70 74 20 74 68 65 20 73 74  Intercept the st
149b0 72 69 6e 67 20 22 4e 61 4e 22 20 61 6e 64 20 67  ring "NaN" and g
149c0 65 6e 65 72 61 74 65 20 61 20 4e 61 4e 20 76 61  enerate a NaN va
149d0 6c 75 65 20 66 6f 72 20 69 74 2e 0a 20 20 2a 2a  lue for it..  **
149e0 20 41 6c 6c 20 6f 74 68 65 72 20 73 74 72 69 6e   All other strin
149f0 67 73 20 61 72 65 20 70 61 73 73 65 64 20 74 68  gs are passed th
14a00 72 6f 75 67 68 20 74 6f 20 54 63 6c 5f 47 65 74  rough to Tcl_Get
14a10 44 6f 75 62 6c 65 46 72 6f 6d 4f 62 6a 28 29 2e  DoubleFromObj().
14a20 0a 20 20 2a 2a 20 54 63 6c 5f 47 65 74 44 6f 75  .  ** Tcl_GetDou
14a30 62 6c 65 46 72 6f 6d 4f 62 6a 28 29 20 73 68 6f  bleFromObj() sho
14a40 75 6c 64 20 75 6e 64 65 72 73 74 61 6e 64 20 22  uld understand "
14a50 4e 61 4e 22 20 62 75 74 20 73 6f 6d 65 20 76 65  NaN" but some ve
14a60 72 73 69 6f 6e 73 0a 20 20 2a 2a 20 63 6f 6e 74  rsions.  ** cont
14a70 61 69 6e 20 61 20 62 75 67 2e 0a 20 20 2a 2f 0a  ain a bug..  */.
14a80 20 20 7a 56 61 6c 20 3d 20 54 63 6c 5f 47 65 74    zVal = Tcl_Get
14a90 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29 3b  String(objv[3]);
14aa0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69  .  for(i=0; i<si
14ab0 7a 65 6f 66 28 61 53 70 65 63 69 61 6c 46 70 29  zeof(aSpecialFp)
14ac0 2f 73 69 7a 65 6f 66 28 61 53 70 65 63 69 61 6c  /sizeof(aSpecial
14ad0 46 70 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20  Fp[0]); i++){.  
14ae0 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 53 70    if( strcmp(aSp
14af0 65 63 69 61 6c 46 70 5b 69 5d 2e 7a 4e 61 6d 65  ecialFp[i].zName
14b00 2c 20 7a 56 61 6c 29 3d 3d 30 20 29 7b 0a 20 20  , zVal)==0 ){.  
14b10 20 20 20 20 73 71 6c 69 74 65 33 5f 75 69 6e 74      sqlite3_uint
14b20 36 34 20 78 3b 0a 20 20 20 20 20 20 78 20 3d 20  64 x;.      x = 
14b30 61 53 70 65 63 69 61 6c 46 70 5b 69 5d 2e 69 55  aSpecialFp[i].iU
14b40 70 70 65 72 3b 0a 20 20 20 20 20 20 78 20 3c 3c  pper;.      x <<
14b50 3d 20 33 32 3b 0a 20 20 20 20 20 20 78 20 7c 3d  = 32;.      x |=
14b60 20 61 53 70 65 63 69 61 6c 46 70 5b 69 5d 2e 69   aSpecialFp[i].i
14b70 4c 6f 77 65 72 3b 0a 20 20 20 20 20 20 61 73 73  Lower;.      ass
14b80 65 72 74 28 20 73 69 7a 65 6f 66 28 76 61 6c 75  ert( sizeof(valu
14b90 65 29 3d 3d 38 20 29 3b 0a 20 20 20 20 20 20 61  e)==8 );.      a
14ba0 73 73 65 72 74 28 20 73 69 7a 65 6f 66 28 78 29  ssert( sizeof(x)
14bb0 3d 3d 38 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  ==8 );.      mem
14bc0 63 70 79 28 26 76 61 6c 75 65 2c 20 26 78 2c 20  cpy(&value, &x, 
14bd0 38 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  8);.      break;
14be0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
14bf0 20 69 3e 3d 73 69 7a 65 6f 66 28 61 53 70 65 63   i>=sizeof(aSpec
14c00 69 61 6c 46 70 29 2f 73 69 7a 65 6f 66 28 61 53  ialFp)/sizeof(aS
14c10 70 65 63 69 61 6c 46 70 5b 30 5d 29 20 26 26 0a  pecialFp[0]) &&.
14c20 20 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74           Tcl_Get
14c30 44 6f 75 62 6c 65 46 72 6f 6d 4f 62 6a 28 69 6e  DoubleFromObj(in
14c40 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26  terp, objv[3], &
14c50 76 61 6c 75 65 29 20 29 7b 0a 20 20 20 20 72 65  value) ){.    re
14c60 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
14c70 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
14c80 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 70  e3_bind_double(p
14c90 53 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65  Stmt, idx, value
14ca0 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
14cb0 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
14cc0 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
14cd0 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
14ce0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
14cf0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
14d00 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
14d10 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
14d20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
14d30 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
14d40 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e    sqlite3_bind_n
14d50 75 6c 6c 20 20 53 54 4d 54 20 4e 0a 2a 2a 0a 2a  ull  STMT N.**.*
14d60 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74  * Test the sqlit
14d70 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 69 6e 74  e3_bind_null int
14d80 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73  erface.  STMT is
14d90 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74   a prepared stat
14da0 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74  ement..** N is t
14db0 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69  he index of a wi
14dc0 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72  ldcard in the pr
14dd0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
14de0 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a  .  This command.
14df0 2a 2a 20 62 69 6e 64 73 20 61 20 4e 55 4c 4c 20  ** binds a NULL 
14e00 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72 64 2e  to the wildcard.
14e10 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
14e20 65 73 74 5f 62 69 6e 64 5f 6e 75 6c 6c 28 0a 20  est_bind_null(. 
14e30 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
14e40 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
14e50 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
14e60 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
14e70 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
14e80 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
14e90 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64  *pStmt;.  int id
14ea0 78 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20  x;.  int rc;..  
14eb0 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
14ec0 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
14ed0 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
14ee0 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
14ef0 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20  d be \"",.      
14f00 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46    Tcl_GetStringF
14f10 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20  romObj(objv[0], 
14f20 30 29 2c 20 22 20 53 54 4d 54 20 4e 22 2c 20 30  0), " STMT N", 0
14f30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
14f40 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
14f50 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
14f60 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
14f70 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
14f80 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
14f90 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
14fa0 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
14fb0 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
14fc0 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20  bjv[2], &idx) ) 
14fd0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
14fe0 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
14ff0 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53 74 6d  3_bind_null(pStm
15000 74 2c 20 69 64 78 29 3b 0a 20 20 69 66 28 20 73  t, idx);.  if( s
15010 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64  qlite3TestErrCod
15020 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f  e(interp, StmtTo
15030 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29  Db(pStmt), rc) )
15040 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
15050 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  R;.  if( rc!=SQL
15060 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
15070 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
15080 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43    }..  return TC
15090 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
150a0 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f  sage:   sqlite3_
150b0 62 69 6e 64 5f 74 65 78 74 20 20 53 54 4d 54 20  bind_text  STMT 
150c0 4e 20 53 54 52 49 4e 47 20 42 59 54 45 53 0a 2a  N STRING BYTES.*
150d0 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71  *.** Test the sq
150e0 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20  lite3_bind_text 
150f0 69 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54  interface.  STMT
15100 20 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73   is a prepared s
15110 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69  tatement..** N i
15120 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
15130 20 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65   wildcard in the
15140 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
15150 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61  ent.  This comma
15160 6e 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55 54  nd.** binds a UT
15170 46 2d 38 20 73 74 72 69 6e 67 20 53 54 52 49 4e  F-8 string STRIN
15180 47 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72  G to the wildcar
15190 64 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20 69  d.  The string i
151a0 73 20 42 59 54 45 53 20 62 79 74 65 73 0a 2a 2a  s BYTES bytes.**
151b0 20 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63   long..*/.static
151c0 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 74   int test_bind_t
151d0 65 78 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ext(.  void * cl
151e0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
151f0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
15200 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
15210 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
15220 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
15230 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20  _stmt *pStmt;.  
15240 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e 74 20 62  int idx;.  int b
15250 79 74 65 73 3b 0a 20 20 63 68 61 72 20 2a 76 61  ytes;.  char *va
15260 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  lue;.  int rc;..
15270 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 7b    if( objc!=5 ){
15280 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
15290 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
152a0 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
152b0 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
152c0 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
152d0 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
152e0 2c 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 56  , 0), " STMT N V
152f0 41 4c 55 45 20 42 59 54 45 53 22 2c 20 30 29 3b  ALUE BYTES", 0);
15300 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
15310 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
15320 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
15330 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
15340 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
15350 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
15360 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
15370 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
15380 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
15390 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65  v[2], &idx) ) re
153a0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
153b0 20 20 76 61 6c 75 65 20 3d 20 28 63 68 61 72 2a    value = (char*
153c0 29 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61  )Tcl_GetByteArra
153d0 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 33 5d  yFromObj(objv[3]
153e0 2c 20 26 62 79 74 65 73 29 3b 0a 20 20 69 66 28  , &bytes);.  if(
153f0 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
15400 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
15410 34 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65  4], &bytes) ) re
15420 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
15430 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
15440 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c  bind_text(pStmt,
15450 20 69 64 78 2c 20 76 61 6c 75 65 2c 20 62 79 74   idx, value, byt
15460 65 73 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  es, SQLITE_TRANS
15470 49 45 4e 54 29 3b 0a 20 20 69 66 28 20 73 71 6c  IENT);.  if( sql
15480 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
15490 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
154a0 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
154b0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
154c0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
154d0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f  E_OK ){.    Tcl_
154e0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
154f0 65 72 70 2c 20 73 71 6c 69 74 65 33 54 65 73 74  erp, sqlite3Test
15500 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30  ErrorName(rc), 0
15510 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
15520 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
15530 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
15540 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
15550 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
15560 78 74 31 36 20 3f 2d 73 74 61 74 69 63 3f 20 53  xt16 ?-static? S
15570 54 4d 54 20 4e 20 53 54 52 49 4e 47 20 42 59 54  TMT N STRING BYT
15580 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  ES.**.** Test th
15590 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  e sqlite3_bind_t
155a0 65 78 74 31 36 20 69 6e 74 65 72 66 61 63 65 2e  ext16 interface.
155b0 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70    STMT is a prep
155c0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ared statement..
155d0 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65  ** N is the inde
155e0 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20  x of a wildcard 
155f0 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
15600 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73  statement.  This
15610 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64   command.** bind
15620 73 20 61 20 55 54 46 2d 31 36 20 73 74 72 69 6e  s a UTF-16 strin
15630 67 20 53 54 52 49 4e 47 20 74 6f 20 74 68 65 20  g STRING to the 
15640 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20 73  wildcard.  The s
15650 74 72 69 6e 67 20 69 73 20 42 59 54 45 53 20 62  tring is BYTES b
15660 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e 0a 2a 2f  ytes.** long..*/
15670 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
15680 5f 62 69 6e 64 5f 74 65 78 74 31 36 28 0a 20 20  _bind_text16(.  
15690 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
156a0 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
156b0 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
156c0 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
156d0 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
156e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
156f0 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69  MIT_UTF16.  sqli
15700 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
15710 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e  .  int idx;.  in
15720 74 20 62 79 74 65 73 3b 0a 20 20 63 68 61 72 20  t bytes;.  char 
15730 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63  *value;.  int rc
15740 3b 0a 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  ;..  void (*xDel
15750 29 28 29 20 3d 20 28 6f 62 6a 63 3d 3d 36 3f 53  )() = (objc==6?S
15760 51 4c 49 54 45 5f 53 54 41 54 49 43 3a 53 51 4c  QLITE_STATIC:SQL
15770 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
15780 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 53 74 6d 74    Tcl_Obj *oStmt
15790 20 20 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d      = objv[objc-
157a0 34 5d 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f  4];.  Tcl_Obj *o
157b0 4e 20 20 20 20 20 20 20 3d 20 6f 62 6a 76 5b 6f  N       = objv[o
157c0 62 6a 63 2d 33 5d 3b 0a 20 20 54 63 6c 5f 4f 62  bjc-3];.  Tcl_Ob
157d0 6a 20 2a 6f 53 74 72 69 6e 67 20 20 3d 20 6f 62  j *oString  = ob
157e0 6a 76 5b 6f 62 6a 63 2d 32 5d 3b 0a 20 20 54 63  jv[objc-2];.  Tc
157f0 6c 5f 4f 62 6a 20 2a 6f 42 79 74 65 73 20 20 20  l_Obj *oBytes   
15800 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 31 5d 3b 0a  = objv[objc-1];.
15810 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 26  .  if( objc!=5 &
15820 26 20 6f 62 6a 63 21 3d 36 29 7b 0a 20 20 20 20  & objc!=6){.    
15830 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
15840 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
15850 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
15860 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54  e \"",.        T
15870 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
15880 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c  Obj(objv[0], 0),
15890 20 22 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 20   " STMT N VALUE 
158a0 42 59 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20  BYTES", 0);.    
158b0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
158c0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
158d0 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
158e0 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
158f0 67 28 6f 53 74 6d 74 29 2c 20 26 70 53 74 6d 74  g(oStmt), &pStmt
15900 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
15910 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
15920 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
15930 74 65 72 70 2c 20 6f 4e 2c 20 26 69 64 78 29 20  terp, oN, &idx) 
15940 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
15950 4f 52 3b 0a 20 20 76 61 6c 75 65 20 3d 20 28 63  OR;.  value = (c
15960 68 61 72 2a 29 54 63 6c 5f 47 65 74 42 79 74 65  har*)Tcl_GetByte
15970 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 53 74  ArrayFromObj(oSt
15980 72 69 6e 67 2c 20 30 29 3b 0a 20 20 69 66 28 20  ring, 0);.  if( 
15990 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
159a0 6a 28 69 6e 74 65 72 70 2c 20 6f 42 79 74 65 73  j(interp, oBytes
159b0 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74 75  , &bytes) ) retu
159c0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
159d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69   rc = sqlite3_bi
159e0 6e 64 5f 74 65 78 74 31 36 28 70 53 74 6d 74 2c  nd_text16(pStmt,
159f0 20 69 64 78 2c 20 28 76 6f 69 64 20 2a 29 76 61   idx, (void *)va
15a00 6c 75 65 2c 20 62 79 74 65 73 2c 20 78 44 65 6c  lue, bytes, xDel
15a10 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
15a20 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
15a30 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
15a40 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
15a50 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
15a60 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
15a70 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
15a80 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
15a90 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 6f   sqlite3TestErro
15aa0 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20  rName(rc), 0);. 
15ab0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
15ac0 52 4f 52 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66  ROR;.  }..#endif
15ad0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
15ae0 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72  UTF16 */.  retur
15af0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
15b00 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
15b10 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 20 3f 2d  te3_bind_blob ?-
15b20 73 74 61 74 69 63 3f 20 53 54 4d 54 20 4e 20 44  static? STMT N D
15b30 41 54 41 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20  ATA BYTES.**.** 
15b40 54 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33  Test the sqlite3
15b50 5f 62 69 6e 64 5f 62 6c 6f 62 20 69 6e 74 65 72  _bind_blob inter
15b60 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61  face.  STMT is a
15b70 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
15b80 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65  ent..** N is the
15b90 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64   index of a wild
15ba0 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65 70  card in the prep
15bb0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20  ared statement. 
15bc0 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a   This command.**
15bd0 20 62 69 6e 64 73 20 61 20 42 4c 4f 42 20 74 6f   binds a BLOB to
15be0 20 74 68 65 20 77 69 6c 64 63 61 72 64 2e 20 20   the wildcard.  
15bf0 54 68 65 20 42 4c 4f 42 20 69 73 20 42 59 54 45  The BLOB is BYTE
15c00 53 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 2e  S bytes in size.
15c10 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
15c20 65 73 74 5f 62 69 6e 64 5f 62 6c 6f 62 28 0a 20  est_bind_blob(. 
15c30 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
15c40 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
15c50 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
15c60 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
15c70 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
15c80 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
15c90 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64  *pStmt;.  int id
15ca0 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a  x;.  int bytes;.
15cb0 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20    char *value;. 
15cc0 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74   int rc;.  sqlit
15cd0 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79  e3_destructor_ty
15ce0 70 65 20 78 44 65 73 74 72 75 63 74 6f 72 20 3d  pe xDestructor =
15cf0 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
15d00 54 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  T;..  if( objc!=
15d10 35 20 26 26 20 6f 62 6a 63 21 3d 36 20 29 7b 0a  5 && objc!=6 ){.
15d20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
15d30 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
15d40 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
15d50 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
15d60 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
15d70 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
15d80 20 30 29 2c 20 22 20 53 54 4d 54 20 4e 20 44 41   0), " STMT N DA
15d90 54 41 20 42 59 54 45 53 22 2c 20 30 29 3b 0a 20  TA BYTES", 0);. 
15da0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
15db0 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
15dc0 6f 62 6a 63 3d 3d 36 20 29 7b 0a 20 20 20 20 78  objc==6 ){.    x
15dd0 44 65 73 74 72 75 63 74 6f 72 20 3d 20 53 51 4c  Destructor = SQL
15de0 49 54 45 5f 53 54 41 54 49 43 3b 0a 20 20 20 20  ITE_STATIC;.    
15df0 6f 62 6a 76 2b 2b 3b 0a 20 20 7d 0a 0a 20 20 69  objv++;.  }..  i
15e00 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
15e10 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
15e20 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
15e30 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
15e40 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
15e50 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72  if( Tcl_GetIntFr
15e60 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
15e70 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72  jv[2], &idx) ) r
15e80 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
15e90 0a 20 20 76 61 6c 75 65 20 3d 20 54 63 6c 5f 47  .  value = Tcl_G
15ea0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d  etString(objv[3]
15eb0 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  );.  if( Tcl_Get
15ec0 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
15ed0 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 62 79 74  p, objv[4], &byt
15ee0 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  es) ) return TCL
15ef0 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
15f00 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f  sqlite3_bind_blo
15f10 62 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76 61  b(pStmt, idx, va
15f20 6c 75 65 2c 20 62 79 74 65 73 2c 20 78 44 65 73  lue, bytes, xDes
15f30 74 72 75 63 74 6f 72 29 3b 0a 20 20 69 66 28 20  tructor);.  if( 
15f40 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
15f50 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54  de(interp, StmtT
15f60 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20  oDb(pStmt), rc) 
15f70 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
15f80 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  OR;.  if( rc!=SQ
15f90 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
15fa0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
15fb0 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54  .  }..  return T
15fc0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
15fd0 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
15fe0 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
15ff0 63 6f 75 6e 74 20 20 53 54 4d 54 0a 2a 2a 0a 2a  count  STMT.**.*
16000 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  * Return the num
16010 62 65 72 20 6f 66 20 77 69 6c 64 63 61 72 64 73  ber of wildcards
16020 20 69 6e 20 74 68 65 20 67 69 76 65 6e 20 73 74   in the given st
16030 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 61 74  atement..*/.stat
16040 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64  ic int test_bind
16050 5f 70 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74  _parameter_count
16060 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
16070 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
16080 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
16090 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
160a0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
160b0 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  .){.  sqlite3_st
160c0 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66  mt *pStmt;..  if
160d0 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
160e0 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
160f0 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
16100 76 2c 20 22 53 54 4d 54 22 29 3b 0a 20 20 20 20  v, "STMT");.    
16110 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
16120 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 53  ;.  }.  if( getS
16130 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
16140 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
16150 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
16160 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
16170 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74  ERROR;.  Tcl_Set
16180 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
16190 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
161a0 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
161b0 61 6d 65 74 65 72 5f 63 6f 75 6e 74 28 70 53 74  ameter_count(pSt
161c0 6d 74 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  mt)));.  return 
161d0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
161e0 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65   Usage:   sqlite
161f0 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
16200 5f 6e 61 6d 65 20 20 53 54 4d 54 20 20 4e 0a 2a  _name  STMT  N.*
16210 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
16220 6e 61 6d 65 20 6f 66 20 74 68 65 20 4e 74 68 20  name of the Nth 
16230 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65 20 66  wildcard.  The f
16240 69 72 73 74 20 77 69 6c 64 63 61 72 64 20 69 73  irst wildcard is
16250 20 31 2e 0a 2a 2a 20 41 6e 20 65 6d 70 74 79 20   1..** An empty 
16260 73 74 72 69 6e 67 20 69 73 20 72 65 74 75 72 6e  string is return
16270 65 64 20 69 66 20 4e 20 69 73 20 6f 75 74 20 6f  ed if N is out o
16280 66 20 72 61 6e 67 65 20 6f 72 20 69 66 20 74 68  f range or if th
16290 65 20 77 69 6c 64 63 61 72 64 0a 2a 2a 20 69 73  e wildcard.** is
162a0 20 6e 61 6d 65 6c 65 73 73 2e 0a 2a 2f 0a 73 74   nameless..*/.st
162b0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69  atic int test_bi
162c0 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
162d0 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
162e0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
162f0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
16300 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
16310 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
16320 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
16330 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
16340 74 20 69 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  t i;..  if( objc
16350 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=3 ){.    Tcl_W
16360 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
16370 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54  rp, 1, objv, "ST
16380 4d 54 20 4e 22 29 3b 0a 20 20 20 20 72 65 74 75  MT N");.    retu
16390 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
163a0 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  }.  if( getStmtP
163b0 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
163c0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
163d0 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
163e0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
163f0 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
16400 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
16410 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 69 29 20  p, objv[2], &i) 
16420 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
16430 4f 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  OR;.  Tcl_SetObj
16440 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a  Result(interp, .
16450 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69       Tcl_NewStri
16460 6e 67 4f 62 6a 28 73 71 6c 69 74 65 33 5f 62 69  ngObj(sqlite3_bi
16470 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
16480 65 28 70 53 74 6d 74 2c 69 29 2c 2d 31 29 0a 20  e(pStmt,i),-1). 
16490 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c   );.  return TCL
164a0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
164b0 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62  age:   sqlite3_b
164c0 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e  ind_parameter_in
164d0 64 65 78 20 20 53 54 4d 54 20 20 4e 41 4d 45 0a  dex  STMT  NAME.
164e0 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
164f0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 77 69   index of the wi
16500 6c 64 63 61 72 64 20 63 61 6c 6c 65 64 20 4e 41  ldcard called NA
16510 4d 45 2e 20 20 52 65 74 75 72 6e 20 30 20 69 66  ME.  Return 0 if
16520 20 74 68 65 72 65 20 69 73 0a 2a 2a 20 6e 6f 20   there is.** no 
16530 73 75 63 68 20 77 69 6c 64 63 61 72 64 2e 0a 2a  such wildcard..*
16540 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
16550 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  t_bind_parameter
16560 5f 69 6e 64 65 78 28 0a 20 20 76 6f 69 64 20 2a  _index(.  void *
16570 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
16580 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
16590 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
165a0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
165b0 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
165c0 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
165d0 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
165e0 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
165f0 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
16600 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 20 4e  1, objv, "STMT N
16610 41 4d 45 22 29 3b 0a 20 20 20 20 72 65 74 75 72  AME");.    retur
16620 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
16630 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f  .  if( getStmtPo
16640 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
16650 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
16660 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20  [1]), &pStmt) ) 
16670 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
16680 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
16690 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 0a 20 20  sult(interp, .  
166a0 20 20 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a     Tcl_NewIntObj
166b0 28 0a 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  (.       sqlite3
166c0 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
166d0 69 6e 64 65 78 28 70 53 74 6d 74 2c 54 63 6c 5f  index(pStmt,Tcl_
166e0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32  GetString(objv[2
166f0 5d 29 29 0a 20 20 20 20 20 29 0a 20 20 29 3b 0a  ])).     ).  );.
16700 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
16710 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
16720 20 20 20 73 71 6c 69 74 65 33 5f 63 6c 65 61 72     sqlite3_clear
16730 5f 62 69 6e 64 69 6e 67 73 20 53 54 4d 54 0a 2a  _bindings STMT.*
16740 2a 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  *.*/.static int 
16750 74 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64 69  test_clear_bindi
16760 6e 67 73 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ngs(.  void * cl
16770 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
16780 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
16790 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
167a0 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
167b0 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
167c0 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a 20  _stmt *pStmt;.. 
167d0 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
167e0 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
167f0 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
16800 6f 62 6a 76 2c 20 22 53 54 4d 54 22 29 3b 0a 20  objv, "STMT");. 
16810 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
16820 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
16830 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
16840 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
16850 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
16860 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
16870 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
16880 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
16890 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
168a0 62 6a 28 73 71 6c 69 74 65 33 5f 63 6c 65 61 72  bj(sqlite3_clear
168b0 5f 62 69 6e 64 69 6e 67 73 28 70 53 74 6d 74 29  _bindings(pStmt)
168c0 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
168d0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 2a 20 55  _OK;.}../*. ** U
168e0 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f  sage:   sqlite3_
168f0 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 20 53  clear_bindings S
16900 54 4d 54 0a 20 2a 2a 0a 20 2a 2f 0a 73 74 61 74  TMT. **. */.stat
16910 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6c 65 61  ic int test_clea
16920 72 5f 62 69 6e 64 69 6e 67 73 5f 6e 75 6c 6c 28  r_bindings_null(
16930 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
16940 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
16950 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
16960 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
16970 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
16980 29 7b 20 20 0a 20 20 69 66 28 20 6f 62 6a 63 21  ){  .  if( objc!
16990 3d 31 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =1 ){.    return
169a0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
169b0 20 20 2f 2a 20 74 65 73 74 20 66 6f 72 20 68 61    /* test for ha
169c0 6e 64 6c 69 6e 67 20 4e 55 4c 4c 20 3c 72 64 61  ndling NULL <rda
169d0 72 3a 2f 2f 70 72 6f 62 6c 65 6d 2f 36 36 34 36  r://problem/6646
169e0 33 33 31 3e 20 2a 2f 0a 20 20 54 63 6c 5f 53 65  331> */.  Tcl_Se
169f0 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
16a00 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a  p, Tcl_NewIntObj
16a10 28 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62  (sqlite3_clear_b
16a20 69 6e 64 69 6e 67 73 28 30 29 29 29 3b 0a 20 20  indings(0)));.  
16a30 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
16a40 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
16a50 20 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20 4d   sqlite3_sleep M
16a60 49 4c 4c 49 53 45 43 4f 4e 44 53 0a 2a 2f 0a 73  ILLISECONDS.*/.s
16a70 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
16a80 6c 65 65 70 28 0a 20 20 76 6f 69 64 20 2a 20 63  leep(.  void * c
16a90 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
16aa0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
16ab0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
16ac0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
16ad0 6a 76 5b 5d 0a 29 7b 0a 20 20 69 6e 74 20 6d 73  jv[].){.  int ms
16ae0 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
16af0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
16b00 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
16b10 20 31 2c 20 6f 62 6a 76 2c 20 22 4d 49 4c 4c 49   1, objv, "MILLI
16b20 53 45 43 4f 4e 44 53 22 29 3b 0a 20 20 20 20 72  SECONDS");.    r
16b30 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
16b40 0a 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47  .  }.  if( Tcl_G
16b50 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
16b60 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 6d  erp, objv[1], &m
16b70 73 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  s) ){.    return
16b80 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
16b90 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
16ba0 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
16bb0 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
16bc0 5f 73 6c 65 65 70 28 6d 73 29 29 29 3b 0a 20 20  _sleep(ms)));.  
16bd0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
16be0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
16bf0 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f  qlite3_extended_
16c00 65 72 72 63 6f 64 65 20 44 42 0a 2a 2a 0a 2a 2a  errcode DB.**.**
16c10 20 52 65 74 75 72 6e 20 74 68 65 20 73 74 72 69   Return the stri
16c20 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ng representatio
16c30 6e 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65  n of the most re
16c40 63 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20 41  cent sqlite3_* A
16c50 50 49 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65  PI.** error code
16c60 2e 20 65 2e 67 2e 20 22 53 51 4c 49 54 45 5f 45  . e.g. "SQLITE_E
16c70 52 52 4f 52 22 2e 0a 2a 2f 0a 73 74 61 74 69 63  RROR"..*/.static
16c80 20 69 6e 74 20 74 65 73 74 5f 65 78 5f 65 72 72   int test_ex_err
16c90 63 6f 64 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  code(.  void * c
16ca0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
16cb0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
16cc0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
16cd0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
16ce0 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
16cf0 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
16d00 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
16d10 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
16d20 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
16d30 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
16d40 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
16d50 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
16d60 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
16d70 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  DB", 0);.    ret
16d80 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
16d90 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
16da0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
16db0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
16dc0 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
16dd0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
16de0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
16df0 74 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 64  tended_errcode(d
16e00 62 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64  b);.  Tcl_Append
16e10 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
16e20 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61  char *)t1ErrorNa
16e30 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 72 65  me(rc), 0);.  re
16e40 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
16e50 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
16e60 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 20 44 42  lite3_errcode DB
16e70 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
16e80 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65  e string represe
16e90 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d  ntation of the m
16ea0 6f 73 74 20 72 65 63 65 6e 74 20 73 71 6c 69 74  ost recent sqlit
16eb0 65 33 5f 2a 20 41 50 49 0a 2a 2a 20 65 72 72 6f  e3_* API.** erro
16ec0 72 20 63 6f 64 65 2e 20 65 2e 67 2e 20 22 53 51  r code. e.g. "SQ
16ed0 4c 49 54 45 5f 45 52 52 4f 52 22 2e 0a 2a 2f 0a  LITE_ERROR"..*/.
16ee0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
16ef0 65 72 72 63 6f 64 65 28 0a 20 20 76 6f 69 64 20  errcode(.  void 
16f00 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
16f10 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
16f20 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
16f30 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
16f40 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
16f50 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
16f60 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
16f70 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =2 ){.    Tcl_Ap
16f80 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
16f90 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
16fa0 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
16fb0 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
16fc0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
16fd0 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20   " DB", 0);.    
16fe0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
16ff0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
17000 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
17010 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
17020 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20  bjv[1]), &db) ) 
17030 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
17040 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
17050 5f 65 72 72 63 6f 64 65 28 64 62 29 3b 0a 20 20  _errcode(db);.  
17060 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
17070 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a  (interp, (char *
17080 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29  )t1ErrorName(rc)
17090 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
170a0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
170b0 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
170c0 5f 65 72 72 6d 73 67 20 44 42 0a 2a 2a 0a 2a 2a  _errmsg DB.**.**
170d0 20 52 65 74 75 72 6e 73 20 74 68 65 20 55 54 46   Returns the UTF
170e0 2d 38 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  -8 representatio
170f0 6e 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 6d  n of the error m
17100 65 73 73 61 67 65 20 73 74 72 69 6e 67 20 66 6f  essage string fo
17110 72 20 74 68 65 0a 2a 2a 20 6d 6f 73 74 20 72 65  r the.** most re
17120 63 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20 41  cent sqlite3_* A
17130 50 49 20 63 61 6c 6c 2e 0a 2a 2f 0a 73 74 61 74  PI call..*/.stat
17140 69 63 20 69 6e 74 20 74 65 73 74 5f 65 72 72 6d  ic int test_errm
17150 73 67 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  sg(.  void * cli
17160 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
17170 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
17180 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
17190 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
171a0 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  [].){.  sqlite3 
171b0 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  *db;.  const cha
171c0 72 20 2a 7a 45 72 72 3b 0a 0a 20 20 69 66 28 20  r *zErr;..  if( 
171d0 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
171e0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
171f0 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
17200 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
17210 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
17220 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
17230 5b 30 5d 29 2c 20 22 20 44 42 22 2c 20 30 29 3b  [0]), " DB", 0);
17240 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
17250 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
17260 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
17270 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
17280 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64  ing(objv[1]), &d
17290 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
172a0 45 52 52 4f 52 3b 0a 0a 20 20 7a 45 72 72 20 3d  ERROR;..  zErr =
172b0 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28   sqlite3_errmsg(
172c0 64 62 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62  db);.  Tcl_SetOb
172d0 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  jResult(interp, 
172e0 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
172f0 28 7a 45 72 72 2c 20 2d 31 29 29 3b 0a 20 20 72  (zErr, -1));.  r
17300 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
17310 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
17320 74 65 73 74 5f 65 72 72 6d 73 67 31 36 20 44 42  test_errmsg16 DB
17330 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 73 20 74  .**.** Returns t
17340 68 65 20 55 54 46 2d 31 36 20 72 65 70 72 65 73  he UTF-16 repres
17350 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
17360 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
17370 72 69 6e 67 20 66 6f 72 20 74 68 65 0a 2a 2a 20  ring for the.** 
17380 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 71 6c 69  most recent sqli
17390 74 65 33 5f 2a 20 41 50 49 20 63 61 6c 6c 2e 20  te3_* API call. 
173a0 54 68 69 73 20 69 73 20 61 20 62 79 74 65 20 61  This is a byte a
173b0 72 72 61 79 20 6f 62 6a 65 63 74 20 61 74 20 74  rray object at t
173c0 68 65 20 54 43 4c 20 0a 2a 2a 20 6c 65 76 65 6c  he TCL .** level
173d0 2c 20 61 6e 64 20 69 74 20 69 6e 63 6c 75 64 65  , and it include
173e0 73 20 74 68 65 20 30 78 30 30 20 30 78 30 30 20  s the 0x00 0x00 
173f0 74 65 72 6d 69 6e 61 74 6f 72 20 62 79 74 65 73  terminator bytes
17400 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
17410 68 65 0a 2a 2a 20 55 54 46 2d 31 36 20 73 74 72  he.** UTF-16 str
17420 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ing..*/.static i
17430 6e 74 20 74 65 73 74 5f 65 72 72 6d 73 67 31 36  nt test_errmsg16
17440 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
17450 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
17460 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
17470 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
17480 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
17490 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .){.#ifndef SQLI
174a0 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
174b0 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63  sqlite3 *db;.  c
174c0 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 45 72 72 3b  onst void *zErr;
174d0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
174e0 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 20 3d 20  ;.  int bytes = 
174f0 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  0;..  if( objc!=
17500 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
17510 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
17520 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
17530 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
17540 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
17550 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
17560 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72  " DB", 0);.    r
17570 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
17580 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
17590 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
175a0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
175b0 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
175c0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
175d0 0a 0a 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74  ..  zErr = sqlit
175e0 65 33 5f 65 72 72 6d 73 67 31 36 28 64 62 29 3b  e3_errmsg16(db);
175f0 0a 20 20 69 66 28 20 7a 45 72 72 20 29 7b 0a 20  .  if( zErr ){. 
17600 20 20 20 7a 20 3d 20 7a 45 72 72 3b 0a 20 20 20     z = zErr;.   
17610 20 66 6f 72 28 62 79 74 65 73 3d 30 3b 20 7a 5b   for(bytes=0; z[
17620 62 79 74 65 73 5d 20 7c 7c 20 7a 5b 62 79 74 65  bytes] || z[byte
17630 73 2b 31 5d 3b 20 62 79 74 65 73 2b 3d 32 29 7b  s+1]; bytes+=2){
17640 7d 0a 20 20 7d 0a 20 20 54 63 6c 5f 53 65 74 4f  }.  }.  Tcl_SetO
17650 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  bjResult(interp,
17660 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72 61   Tcl_NewByteArra
17670 79 4f 62 6a 28 7a 45 72 72 2c 20 62 79 74 65 73  yObj(zErr, bytes
17680 29 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ));.#endif /* SQ
17690 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
176a0 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
176b0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
176c0 67 65 3a 20 73 71 6c 69 74 65 33 5f 70 72 65 70  ge: sqlite3_prep
176d0 61 72 65 20 44 42 20 73 71 6c 20 62 79 74 65 73  are DB sql bytes
176e0 20 3f 74 61 69 6c 76 61 72 3f 0a 2a 2a 0a 2a 2a   ?tailvar?.**.**
176f0 20 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f 20 3c   Compile up to <
17700 62 79 74 65 73 3e 20 62 79 74 65 73 20 6f 66 20  bytes> bytes of 
17710 74 68 65 20 73 75 70 70 6c 69 65 64 20 53 51 4c  the supplied SQL
17720 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20 75 73   string <sql> us
17730 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  ing.** database 
17740 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54 68 65  handle <DB>. The
17750 20 70 61 72 61 6d 65 74 65 72 20 3c 74 61 69 6c   parameter <tail
17760 76 61 6c 3e 20 69 73 20 74 68 65 20 6e 61 6d 65  val> is the name
17770 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20   of a global.** 
17780 76 61 72 69 61 62 6c 65 20 74 68 61 74 20 69 73  variable that is
17790 20 73 65 74 20 74 6f 20 74 68 65 20 75 6e 75 73   set to the unus
177a0 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20 3c 73  ed portion of <s
177b0 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20 41 0a  ql> (if any). A.
177c0 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65 20 69  ** STMT handle i
177d0 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73  s returned..*/.s
177e0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 70  tatic int test_p
177f0 72 65 70 61 72 65 28 0a 20 20 76 6f 69 64 20 2a  repare(.  void *
17800 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
17810 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
17820 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
17830 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
17840 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
17850 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74  te3 *db;.  const
17860 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 69   char *zSql;.  i
17870 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 6f 6e 73  nt bytes;.  cons
17880 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 20 3d 20  t char *zTail = 
17890 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  0;.  sqlite3_stm
178a0 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20  t *pStmt = 0;.  
178b0 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20  char zBuf[50];. 
178c0 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
178d0 6f 62 6a 63 21 3d 35 20 26 26 20 6f 62 6a 63 21  objc!=5 && objc!
178e0 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =4 ){.    Tcl_Ap
178f0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
17900 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
17910 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
17920 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
17930 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
17940 20 22 20 44 42 20 73 71 6c 20 62 79 74 65 73 20   " DB sql bytes 
17950 3f 74 61 69 6c 76 61 72 3f 22 2c 20 30 29 3b 0a  ?tailvar?", 0);.
17960 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
17970 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
17980 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
17990 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
179a0 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
179b0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
179c0 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d 20 54  RROR;.  zSql = T
179d0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
179e0 76 5b 32 5d 29 3b 0a 20 20 69 66 28 20 54 63 6c  v[2]);.  if( Tcl
179f0 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
17a00 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20  nterp, objv[3], 
17a10 26 62 79 74 65 73 29 20 29 20 72 65 74 75 72 6e  &bytes) ) return
17a20 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
17a30 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
17a40 61 72 65 28 64 62 2c 20 7a 53 71 6c 2c 20 62 79  are(db, zSql, by
17a50 74 65 73 2c 20 26 70 53 74 6d 74 2c 20 6f 62 6a  tes, &pStmt, obj
17a60 63 3e 3d 35 20 3f 20 26 7a 54 61 69 6c 20 3a 20  c>=5 ? &zTail : 
17a70 30 29 3b 0a 20 20 54 63 6c 5f 52 65 73 65 74 52  0);.  Tcl_ResetR
17a80 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b 0a 20  esult(interp);. 
17a90 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
17aa0 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
17ab0 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
17ac0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
17ad0 28 20 7a 54 61 69 6c 20 26 26 20 6f 62 6a 63 3e  ( zTail && objc>
17ae0 3d 35 20 29 7b 0a 20 20 20 20 69 66 28 20 62 79  =5 ){.    if( by
17af0 74 65 73 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20  tes>=0 ){.      
17b00 62 79 74 65 73 20 3d 20 62 79 74 65 73 20 2d 20  bytes = bytes - 
17b10 28 7a 54 61 69 6c 2d 7a 53 71 6c 29 3b 0a 20 20  (zTail-zSql);.  
17b20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72 6c    }.    if( strl
17b30 65 6e 28 7a 54 61 69 6c 29 3c 62 79 74 65 73 20  en(zTail)<bytes 
17b40 29 7b 0a 20 20 20 20 20 20 62 79 74 65 73 20 3d  ){.      bytes =
17b50 20 73 74 72 6c 65 6e 28 7a 54 61 69 6c 29 3b 0a   strlen(zTail);.
17b60 20 20 20 20 7d 0a 20 20 20 20 54 63 6c 5f 4f 62      }.    Tcl_Ob
17b70 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  jSetVar2(interp,
17b80 20 6f 62 6a 76 5b 34 5d 2c 20 30 2c 20 54 63 6c   objv[4], 0, Tcl
17b90 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 54  _NewStringObj(zT
17ba0 61 69 6c 2c 20 62 79 74 65 73 29 2c 20 30 29 3b  ail, bytes), 0);
17bb0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53  .  }.  if( rc!=S
17bc0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
17bd0 61 73 73 65 72 74 28 20 70 53 74 6d 74 3d 3d 30  assert( pStmt==0
17be0 20 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28   );.    sprintf(
17bf0 7a 42 75 66 2c 20 22 28 25 64 29 20 22 2c 20 72  zBuf, "(%d) ", r
17c00 63 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  c);.    Tcl_Appe
17c10 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
17c20 20 7a 42 75 66 2c 20 73 71 6c 69 74 65 33 5f 65   zBuf, sqlite3_e
17c30 72 72 6d 73 67 28 64 62 29 2c 20 30 29 3b 0a 20  rrmsg(db), 0);. 
17c40 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
17c50 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
17c60 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28  pStmt ){.    if(
17c70 20 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65   sqlite3TestMake
17c80 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72  PointerStr(inter
17c90 70 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20  p, zBuf, pStmt) 
17ca0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
17cb0 4f 52 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  OR;.    Tcl_Appe
17cc0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
17cd0 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 7d 0a 20   zBuf, 0);.  }. 
17ce0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
17cf0 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
17d00 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
17d10 76 32 20 44 42 20 73 71 6c 20 62 79 74 65 73 20  v2 DB sql bytes 
17d20 3f 74 61 69 6c 76 61 72 3f 0a 2a 2a 0a 2a 2a 20  ?tailvar?.**.** 
17d30 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f 20 3c 62  Compile up to <b
17d40 79 74 65 73 3e 20 62 79 74 65 73 20 6f 66 20 74  ytes> bytes of t
17d50 68 65 20 73 75 70 70 6c 69 65 64 20 53 51 4c 20  he supplied SQL 
17d60 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20 75 73 69  string <sql> usi
17d70 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 68  ng.** database h
17d80 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54 68 65 20  andle <DB>. The 
17d90 70 61 72 61 6d 65 74 65 72 20 3c 74 61 69 6c 76  parameter <tailv
17da0 61 6c 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20  al> is the name 
17db0 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20 76  of a global.** v
17dc0 61 72 69 61 62 6c 65 20 74 68 61 74 20 69 73 20  ariable that is 
17dd0 73 65 74 20 74 6f 20 74 68 65 20 75 6e 75 73 65  set to the unuse
17de0 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20 3c 73 71  d portion of <sq
17df0 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20 41 0a 2a  l> (if any). A.*
17e00 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65 20 69 73  * STMT handle is
17e10 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74   returned..*/.st
17e20 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 70 72  atic int test_pr
17e30 65 70 61 72 65 5f 76 32 28 0a 20 20 76 6f 69 64  epare_v2(.  void
17e40 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
17e50 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
17e60 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
17e70 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
17e80 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
17e90 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e  lite3 *db;.  con
17ea0 73 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  st char *zSql;. 
17eb0 20 69 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 6f   int bytes;.  co
17ec0 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 20  nst char *zTail 
17ed0 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  = 0;.  sqlite3_s
17ee0 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a  tmt *pStmt = 0;.
17ef0 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b    char zBuf[50];
17f00 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
17f10 28 20 6f 62 6a 63 21 3d 35 20 26 26 20 6f 62 6a  ( objc!=5 && obj
17f20 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=4 ){.    Tcl_
17f30 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
17f40 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
17f50 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
17f60 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
17f70 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
17f80 29 2c 20 22 20 44 42 20 73 71 6c 20 62 79 74 65  ), " DB sql byte
17f90 73 20 74 61 69 6c 76 61 72 22 2c 20 30 29 3b 0a  s tailvar", 0);.
17fa0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
17fb0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
17fc0 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
17fd0 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
17fe0 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
17ff0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
18000 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20 3d 20 54  RROR;.  zSql = T
18010 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
18020 76 5b 32 5d 29 3b 0a 20 20 69 66 28 20 54 63 6c  v[2]);.  if( Tcl
18030 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
18040 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20  nterp, objv[3], 
18050 26 62 79 74 65 73 29 20 29 20 72 65 74 75 72 6e  &bytes) ) return
18060 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
18070 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
18080 61 72 65 5f 76 32 28 64 62 2c 20 7a 53 71 6c 2c  are_v2(db, zSql,
18090 20 62 79 74 65 73 2c 20 26 70 53 74 6d 74 2c 20   bytes, &pStmt, 
180a0 6f 62 6a 63 3e 3d 35 20 3f 20 26 7a 54 61 69 6c  objc>=5 ? &zTail
180b0 20 3a 20 30 29 3b 0a 20 20 61 73 73 65 72 74 28   : 0);.  assert(
180c0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
180d0 20 70 53 74 6d 74 3d 3d 30 29 3b 0a 20 20 54 63   pStmt==0);.  Tc
180e0 6c 5f 52 65 73 65 74 52 65 73 75 6c 74 28 69 6e  l_ResetResult(in
180f0 74 65 72 70 29 3b 0a 20 20 69 66 28 20 73 71 6c  terp);.  if( sql
18100 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
18110 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29 20  interp, db, rc) 
18120 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
18130 4f 52 3b 0a 20 20 69 66 28 20 7a 54 61 69 6c 20  OR;.  if( zTail 
18140 26 26 20 6f 62 6a 63 3e 3d 35 20 29 7b 0a 20 20  && objc>=5 ){.  
18150 20 20 69 66 28 20 62 79 74 65 73 3e 3d 30 20 29    if( bytes>=0 )
18160 7b 0a 20 20 20 20 20 20 62 79 74 65 73 20 3d 20  {.      bytes = 
18170 62 79 74 65 73 20 2d 20 28 7a 54 61 69 6c 2d 7a  bytes - (zTail-z
18180 53 71 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Sql);.    }.    
18190 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69  Tcl_ObjSetVar2(i
181a0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20  nterp, objv[4], 
181b0 30 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  0, Tcl_NewString
181c0 4f 62 6a 28 7a 54 61 69 6c 2c 20 62 79 74 65 73  Obj(zTail, bytes
181d0 29 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28  ), 0);.  }.  if(
181e0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
181f0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 53  {.    assert( pS
18200 74 6d 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 70  tmt==0 );.    sp
18210 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 28 25 64  rintf(zBuf, "(%d
18220 29 20 22 2c 20 72 63 29 3b 0a 20 20 20 20 54 63  ) ", rc);.    Tc
18230 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
18240 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 73 71 6c  nterp, zBuf, sql
18250 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c  ite3_errmsg(db),
18260 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
18270 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
18280 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20    if( pStmt ){. 
18290 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65     if( sqlite3Te
182a0 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72  stMakePointerStr
182b0 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70  (interp, zBuf, p
182c0 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
182d0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 54 63  CL_ERROR;.    Tc
182e0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
182f0 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b  nterp, zBuf, 0);
18300 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
18310 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
18320 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 70 72  sage: sqlite3_pr
18330 65 70 61 72 65 5f 74 6b 74 33 31 33 34 20 44 42  epare_tkt3134 DB
18340 0a 2a 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20  .**.** Generate 
18350 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
18360 6d 65 6e 74 20 66 6f 72 20 61 20 7a 65 72 6f 2d  ment for a zero-
18370 62 79 74 65 20 73 74 72 69 6e 67 20 61 73 20 61  byte string as a
18380 20 74 65 73 74 0a 2a 2a 20 66 6f 72 20 74 69 63   test.** for tic
18390 6b 65 74 20 23 33 31 33 34 2e 20 20 54 68 65 20  ket #3134.  The 
183a0 73 74 72 69 6e 67 20 73 68 6f 75 6c 64 20 62 65  string should be
183b0 20 70 72 65 63 65 65 64 65 64 20 62 79 20 61 20   preceeded by a 
183c0 7a 65 72 6f 20 62 79 74 65 2e 0a 2a 2f 0a 73 74  zero byte..*/.st
183d0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 70 72  atic int test_pr
183e0 65 70 61 72 65 5f 74 6b 74 33 31 33 34 28 0a 20  epare_tkt3134(. 
183f0 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
18400 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
18410 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
18420 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
18430 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
18440 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
18450 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
18460 68 61 72 20 7a 53 71 6c 5b 5d 20 3d 20 22 5c 30  har zSql[] = "\0
18470 30 30 53 45 4c 45 43 54 20 31 22 3b 0a 20 20 73  00SELECT 1";.  s
18480 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
18490 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a  mt = 0;.  char z
184a0 42 75 66 5b 35 30 5d 3b 0a 20 20 69 6e 74 20 72  Buf[50];.  int r
184b0 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
184c0 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
184d0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
184e0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
184f0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
18500 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
18510 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
18520 22 20 44 42 20 73 71 6c 20 62 79 74 65 73 20 74  " DB sql bytes t
18530 61 69 6c 76 61 72 22 2c 20 30 29 3b 0a 20 20 20  ailvar", 0);.   
18540 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
18550 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
18560 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
18570 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
18580 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
18590 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
185a0 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  R;.  rc = sqlite
185b0 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c  3_prepare_v2(db,
185c0 20 26 7a 53 71 6c 5b 31 5d 2c 20 30 2c 20 26 70   &zSql[1], 0, &p
185d0 53 74 6d 74 2c 20 30 29 3b 0a 20 20 61 73 73 65  Stmt, 0);.  asse
185e0 72 74 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  rt(rc==SQLITE_OK
185f0 20 7c 7c 20 70 53 74 6d 74 3d 3d 30 29 3b 0a 20   || pStmt==0);. 
18600 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
18610 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
18620 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
18630 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
18640 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
18650 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
18660 53 74 6d 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73  Stmt==0 );.    s
18670 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 28 25  printf(zBuf, "(%
18680 64 29 20 22 2c 20 72 63 29 3b 0a 20 20 20 20 54  d) ", rc);.    T
18690 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
186a0 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 73 71  interp, zBuf, sq
186b0 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29  lite3_errmsg(db)
186c0 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
186d0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
186e0 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a  .  if( pStmt ){.
186f0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54      if( sqlite3T
18700 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74  estMakePointerSt
18710 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20  r(interp, zBuf, 
18720 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
18730 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 54  TCL_ERROR;.    T
18740 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
18750 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29  interp, zBuf, 0)
18760 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54  ;.  }.  return T
18770 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
18780 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 70  Usage: sqlite3_p
18790 72 65 70 61 72 65 31 36 20 44 42 20 73 71 6c 20  repare16 DB sql 
187a0 62 79 74 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a  bytes tailvar.**
187b0 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 75 70 20 74  .** Compile up t
187c0 6f 20 3c 62 79 74 65 73 3e 20 62 79 74 65 73 20  o <bytes> bytes 
187d0 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20  of the supplied 
187e0 53 51 4c 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e  SQL string <sql>
187f0 20 75 73 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61   using.** databa
18800 73 65 20 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20  se handle <DB>. 
18810 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 3c 74  The parameter <t
18820 61 69 6c 76 61 6c 3e 20 69 73 20 74 68 65 20 6e  ailval> is the n
18830 61 6d 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a  ame of a global.
18840 2a 2a 20 76 61 72 69 61 62 6c 65 20 74 68 61 74  ** variable that
18850 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 75   is set to the u
18860 6e 75 73 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66  nused portion of
18870 20 3c 73 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e   <sql> (if any).
18880 20 41 0a 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c   A.** STMT handl
18890 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a  e is returned..*
188a0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
188b0 74 5f 70 72 65 70 61 72 65 31 36 28 0a 20 20 76  t_prepare16(.  v
188c0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
188d0 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
188e0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
188f0 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
18900 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23  ONST objv[].){.#
18910 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
18920 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69 74  IT_UTF16.  sqlit
18930 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20  e3 *db;.  const 
18940 76 6f 69 64 20 2a 7a 53 71 6c 3b 0a 20 20 63 6f  void *zSql;.  co
18950 6e 73 74 20 76 6f 69 64 20 2a 7a 54 61 69 6c 20  nst void *zTail 
18960 3d 20 30 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  = 0;.  Tcl_Obj *
18970 70 54 61 69 6c 20 3d 20 30 3b 0a 20 20 73 71 6c  pTail = 0;.  sql
18980 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
18990 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 42 75   = 0;.  char zBu
189a0 66 5b 35 30 5d 3b 20 0a 20 20 69 6e 74 20 72 63  f[50]; .  int rc
189b0 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 20 20  ;.  int bytes;  
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
189d0 20 54 68 65 20 69 6e 74 65 67 65 72 20 73 70 65   The integer spe
189e0 63 69 66 69 65 64 20 61 73 20 61 72 67 20 33 20  cified as arg 3 
189f0 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 6c 65 6e 3b  */.  int objlen;
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18a10 2a 20 54 68 65 20 62 79 74 65 2d 61 72 72 61 79  * The byte-array
18a20 20 6c 65 6e 67 74 68 20 6f 66 20 61 72 67 20 32   length of arg 2
18a30 20 2a 2f 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21   */..  if( objc!
18a40 3d 35 20 26 26 20 6f 62 6a 63 21 3d 34 20 29 7b  =5 && objc!=4 ){
18a50 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
18a60 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
18a70 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
18a80 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
18a90 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
18aa0 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42  g(objv[0]), " DB
18ab0 20 73 71 6c 20 62 79 74 65 73 20 3f 74 61 69 6c   sql bytes ?tail
18ac0 76 61 72 3f 22 2c 20 30 29 3b 0a 20 20 20 20 72  var?", 0);.    r
18ad0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
18ae0 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
18af0 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
18b00 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
18b10 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
18b20 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
18b30 0a 20 20 7a 53 71 6c 20 3d 20 54 63 6c 5f 47 65  .  zSql = Tcl_Ge
18b40 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62  tByteArrayFromOb
18b50 6a 28 6f 62 6a 76 5b 32 5d 2c 20 26 6f 62 6a 6c  j(objv[2], &objl
18b60 65 6e 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47  en);.  if( Tcl_G
18b70 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
18b80 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 62  erp, objv[3], &b
18b90 79 74 65 73 29 20 29 20 72 65 74 75 72 6e 20 54  ytes) ) return T
18ba0 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20  CL_ERROR;..  rc 
18bb0 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  = sqlite3_prepar
18bc0 65 31 36 28 64 62 2c 20 7a 53 71 6c 2c 20 62 79  e16(db, zSql, by
18bd0 74 65 73 2c 20 26 70 53 74 6d 74 2c 20 6f 62 6a  tes, &pStmt, obj
18be0 63 3e 3d 35 20 3f 20 26 7a 54 61 69 6c 20 3a 20  c>=5 ? &zTail : 
18bf0 30 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  0);.  if( sqlite
18c00 33 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74  3TestErrCode(int
18c10 65 72 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72  erp, db, rc) ) r
18c20 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
18c30 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
18c40 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
18c50 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 6f 62  R;.  }..  if( ob
18c60 6a 63 3e 3d 35 20 29 7b 0a 20 20 20 20 69 66 28  jc>=5 ){.    if(
18c70 20 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20 20 20   zTail ){.      
18c80 6f 62 6a 6c 65 6e 20 3d 20 6f 62 6a 6c 65 6e 20  objlen = objlen 
18c90 2d 20 28 28 75 38 20 2a 29 7a 54 61 69 6c 2d 28  - ((u8 *)zTail-(
18ca0 75 38 20 2a 29 7a 53 71 6c 29 3b 0a 20 20 20 20  u8 *)zSql);.    
18cb0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6f 62 6a  }else{.      obj
18cc0 6c 65 6e 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  len = 0;.    }. 
18cd0 20 20 20 70 54 61 69 6c 20 3d 20 54 63 6c 5f 4e     pTail = Tcl_N
18ce0 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28 28  ewByteArrayObj((
18cf0 75 38 20 2a 29 7a 54 61 69 6c 2c 20 6f 62 6a 6c  u8 *)zTail, objl
18d00 65 6e 29 3b 0a 20 20 20 20 54 63 6c 5f 49 6e 63  en);.    Tcl_Inc
18d10 72 52 65 66 43 6f 75 6e 74 28 70 54 61 69 6c 29  rRefCount(pTail)
18d20 3b 0a 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74  ;.    Tcl_ObjSet
18d30 56 61 72 32 28 69 6e 74 65 72 70 2c 20 6f 62 6a  Var2(interp, obj
18d40 76 5b 34 5d 2c 20 30 2c 20 70 54 61 69 6c 2c 20  v[4], 0, pTail, 
18d50 30 29 3b 0a 20 20 20 20 54 63 6c 5f 44 65 63 72  0);.    Tcl_Decr
18d60 52 65 66 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b  RefCount(pTail);
18d70 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 53 74 6d  .  }..  if( pStm
18d80 74 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c  t ){.    if( sql
18d90 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e  ite3TestMakePoin
18da0 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c 20 7a  terStr(interp, z
18db0 42 75 66 2c 20 70 53 74 6d 74 29 20 29 20 72 65  Buf, pStmt) ) re
18dc0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
18dd0 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64    }.  Tcl_Append
18de0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
18df0 42 75 66 2c 20 30 29 3b 0a 23 65 6e 64 69 66 20  Buf, 0);.#endif 
18e00 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
18e10 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e  TF16 */.  return
18e20 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
18e30 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
18e40 5f 70 72 65 70 61 72 65 31 36 5f 76 32 20 44 42  _prepare16_v2 DB
18e50 20 73 71 6c 20 62 79 74 65 73 20 3f 74 61 69 6c   sql bytes ?tail
18e60 76 61 72 3f 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 69  var?.**.** Compi
18e70 6c 65 20 75 70 20 74 6f 20 3c 62 79 74 65 73 3e  le up to <bytes>
18e80 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 73 75   bytes of the su
18e90 70 70 6c 69 65 64 20 53 51 4c 20 73 74 72 69 6e  pplied SQL strin
18ea0 67 20 3c 73 71 6c 3e 20 75 73 69 6e 67 0a 2a 2a  g <sql> using.**
18eb0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
18ec0 20 3c 44 42 3e 2e 20 54 68 65 20 70 61 72 61 6d   <DB>. The param
18ed0 65 74 65 72 20 3c 74 61 69 6c 76 61 6c 3e 20 69  eter <tailval> i
18ee0 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
18ef0 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72 69 61 62  global.** variab
18f00 6c 65 20 74 68 61 74 20 69 73 20 73 65 74 20 74  le that is set t
18f10 6f 20 74 68 65 20 75 6e 75 73 65 64 20 70 6f 72  o the unused por
18f20 74 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e 20 28 69  tion of <sql> (i
18f30 66 20 61 6e 79 29 2e 20 41 0a 2a 2a 20 53 54 4d  f any). A.** STM
18f40 54 20 68 61 6e 64 6c 65 20 69 73 20 72 65 74 75  T handle is retu
18f50 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rned..*/.static 
18f60 69 6e 74 20 74 65 73 74 5f 70 72 65 70 61 72 65  int test_prepare
18f70 31 36 5f 76 32 28 0a 20 20 76 6f 69 64 20 2a 20  16_v2(.  void * 
18f80 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
18f90 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
18fa0 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
18fb0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
18fc0 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66  bjv[].){.#ifndef
18fd0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
18fe0 31 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  16.  sqlite3 *db
18ff0 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ;.  const void *
19000 7a 53 71 6c 3b 0a 20 20 63 6f 6e 73 74 20 76 6f  zSql;.  const vo
19010 69 64 20 2a 7a 54 61 69 6c 20 3d 20 30 3b 0a 20  id *zTail = 0;. 
19020 20 54 63 6c 5f 4f 62 6a 20 2a 70 54 61 69 6c 20   Tcl_Obj *pTail 
19030 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  = 0;.  sqlite3_s
19040 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a  tmt *pStmt = 0;.
19050 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b    char zBuf[50];
19060 20 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e   .  int rc;.  in
19070 74 20 62 79 74 65 73 3b 20 20 20 20 20 20 20 20  t bytes;        
19080 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 69          /* The i
19090 6e 74 65 67 65 72 20 73 70 65 63 69 66 69 65 64  nteger specified
190a0 20 61 73 20 61 72 67 20 33 20 2a 2f 0a 20 20 69   as arg 3 */.  i
190b0 6e 74 20 6f 62 6a 6c 65 6e 3b 20 20 20 20 20 20  nt objlen;      
190c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
190d0 62 79 74 65 2d 61 72 72 61 79 20 6c 65 6e 67 74  byte-array lengt
190e0 68 20 6f 66 20 61 72 67 20 32 20 2a 2f 0a 0a 20  h of arg 2 */.. 
190f0 20 69 66 28 20 6f 62 6a 63 21 3d 35 20 26 26 20   if( objc!=5 && 
19100 6f 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54  objc!=4 ){.    T
19110 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
19120 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
19130 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
19140 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
19150 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
19160 5b 30 5d 29 2c 20 22 20 44 42 20 73 71 6c 20 62  [0]), " DB sql b
19170 79 74 65 73 20 3f 74 61 69 6c 76 61 72 3f 22 2c  ytes ?tailvar?",
19180 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
19190 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
191a0 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
191b0 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
191c0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
191d0 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
191e0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71  TCL_ERROR;.  zSq
191f0 6c 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41  l = Tcl_GetByteA
19200 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  rrayFromObj(objv
19210 5b 32 5d 2c 20 26 6f 62 6a 6c 65 6e 29 3b 0a 20  [2], &objlen);. 
19220 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
19230 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
19240 62 6a 76 5b 33 5d 2c 20 26 62 79 74 65 73 29 20  bjv[3], &bytes) 
19250 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
19260 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  OR;..  rc = sqli
19270 74 65 33 5f 70 72 65 70 61 72 65 31 36 5f 76 32  te3_prepare16_v2
19280 28 64 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73  (db, zSql, bytes
19290 2c 20 26 70 53 74 6d 74 2c 20 6f 62 6a 63 3e 3d  , &pStmt, objc>=
192a0 35 20 3f 20 26 7a 54 61 69 6c 20 3a 20 30 29 3b  5 ? &zTail : 0);
192b0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
192c0 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
192d0 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
192e0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
192f0 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 72 65  if( rc ){.    re
19300 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
19310 20 20 7d 0a 0a 20 20 69 66 28 20 6f 62 6a 63 3e    }..  if( objc>
19320 3d 35 20 29 7b 0a 20 20 20 20 69 66 28 20 7a 54  =5 ){.    if( zT
19330 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 6f 62 6a  ail ){.      obj
19340 6c 65 6e 20 3d 20 6f 62 6a 6c 65 6e 20 2d 20 28  len = objlen - (
19350 28 75 38 20 2a 29 7a 54 61 69 6c 2d 28 75 38 20  (u8 *)zTail-(u8 
19360 2a 29 7a 53 71 6c 29 3b 0a 20 20 20 20 7d 65 6c  *)zSql);.    }el
19370 73 65 7b 0a 20 20 20 20 20 20 6f 62 6a 6c 65 6e  se{.      objlen
19380 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
19390 70 54 61 69 6c 20 3d 20 54 63 6c 5f 4e 65 77 42  pTail = Tcl_NewB
193a0 79 74 65 41 72 72 61 79 4f 62 6a 28 28 75 38 20  yteArrayObj((u8 
193b0 2a 29 7a 54 61 69 6c 2c 20 6f 62 6a 6c 65 6e 29  *)zTail, objlen)
193c0 3b 0a 20 20 20 20 54 63 6c 5f 49 6e 63 72 52 65  ;.    Tcl_IncrRe
193d0 66 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a 20  fCount(pTail);. 
193e0 20 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72     Tcl_ObjSetVar
193f0 32 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34  2(interp, objv[4
19400 5d 2c 20 30 2c 20 70 54 61 69 6c 2c 20 30 29 3b  ], 0, pTail, 0);
19410 0a 20 20 20 20 54 63 6c 5f 44 65 63 72 52 65 66  .    Tcl_DecrRef
19420 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a 20 20  Count(pTail);.  
19430 7d 0a 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29  }..  if( pStmt )
19440 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  {.    if( sqlite
19450 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72  3TestMakePointer
19460 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  Str(interp, zBuf
19470 2c 20 70 53 74 6d 74 29 20 29 20 72 65 74 75 72  , pStmt) ) retur
19480 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
19490 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
194a0 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
194b0 2c 20 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  , 0);.#endif /* 
194c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
194d0 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43  6 */.  return TC
194e0 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
194f0 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70  sage: sqlite3_op
19500 65 6e 20 66 69 6c 65 6e 61 6d 65 20 3f 6f 70 74  en filename ?opt
19510 69 6f 6e 73 2d 6c 69 73 74 3f 0a 2a 2f 0a 73 74  ions-list?.*/.st
19520 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6f 70  atic int test_op
19530 65 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  en(.  void * cli
19540 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
19550 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
19560 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
19570 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
19580 5b 5d 0a 29 7b 0a 20 20 63 6f 6e 73 74 20 63 68  [].){.  const ch
19590 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20  ar *zFilename;. 
195a0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
195b0 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 7a  int rc;.  char z
195c0 42 75 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28  Buf[100];..  if(
195d0 20 6f 62 6a 63 21 3d 33 20 26 26 20 6f 62 6a 63   objc!=3 && objc
195e0 21 3d 32 20 26 26 20 6f 62 6a 63 21 3d 31 20 29  !=2 && objc!=1 )
195f0 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
19600 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
19610 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
19620 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
19630 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
19640 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 66  ng(objv[0]), " f
19650 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73 2d  ilename options-
19660 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20 20 20 72  list", 0);.    r
19670 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
19680 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61 6d  .  }..  zFilenam
19690 65 20 3d 20 6f 62 6a 63 3e 31 20 3f 20 54 63 6c  e = objc>1 ? Tcl
196a0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
196b0 31 5d 29 20 3a 20 30 3b 0a 20 20 72 63 20 3d 20  1]) : 0;.  rc = 
196c0 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28 7a 46 69  sqlite3_open(zFi
196d0 6c 65 6e 61 6d 65 2c 20 26 64 62 29 3b 0a 20 20  lename, &db);.  
196e0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
196f0 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72  stMakePointerStr
19700 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 64  (interp, zBuf, d
19710 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
19720 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 41 70 70  ERROR;.  Tcl_App
19730 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
19740 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65  , zBuf, 0);.  re
19750 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
19760 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
19770 69 74 65 33 5f 6f 70 65 6e 31 36 20 66 69 6c 65  ite3_open16 file
19780 6e 61 6d 65 20 6f 70 74 69 6f 6e 73 0a 2a 2f 0a  name options.*/.
19790 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
197a0 6f 70 65 6e 31 36 28 0a 20 20 76 6f 69 64 20 2a  open16(.  void *
197b0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
197c0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
197d0 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
197e0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
197f0 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65  objv[].){.#ifnde
19800 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
19810 46 31 36 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64  F16.  const void
19820 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 0a 20 20 73   *zFilename;.  s
19830 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
19840 74 20 72 63 3b 0a 20 20 63 68 61 72 20 7a 42 75  t rc;.  char zBu
19850 66 5b 31 30 30 5d 3b 0a 0a 20 20 69 66 28 20 6f  f[100];..  if( o
19860 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  bjc!=3 ){.    Tc
19870 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
19880 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
19890 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
198a0 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c  \"", .       Tcl
198b0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
198c0 30 5d 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65 20  0]), " filename 
198d0 6f 70 74 69 6f 6e 73 2d 6c 69 73 74 22 2c 20 30  options-list", 0
198e0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
198f0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
19900 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 54 63 6c 5f  zFilename = Tcl_
19910 47 65 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d  GetByteArrayFrom
19920 4f 62 6a 28 6f 62 6a 76 5b 31 5d 2c 20 30 29 3b  Obj(objv[1], 0);
19930 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
19940 6f 70 65 6e 31 36 28 7a 46 69 6c 65 6e 61 6d 65  open16(zFilename
19950 2c 20 26 64 62 29 3b 0a 20 20 0a 20 20 69 66 28  , &db);.  .  if(
19960 20 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65   sqlite3TestMake
19970 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72  PointerStr(inter
19980 70 2c 20 7a 42 75 66 2c 20 64 62 29 20 29 20 72  p, zBuf, db) ) r
19990 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
199a0 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
199b0 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
199c0 2c 20 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  , 0);.#endif /* 
199d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
199e0 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43  6 */.  return TC
199f0 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
19a00 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
19a10 6d 70 6c 65 74 65 31 36 20 3c 55 54 46 2d 31 36  mplete16 <UTF-16
19a20 20 73 74 72 69 6e 67 3e 0a 2a 2a 0a 2a 2a 20 52   string>.**.** R
19a30 65 74 75 72 6e 20 31 20 69 66 20 74 68 65 20 73  eturn 1 if the s
19a40 75 70 70 6c 69 65 64 20 61 72 67 75 6d 65 6e 74  upplied argument
19a50 20 69 73 20 61 20 63 6f 6d 70 6c 65 74 65 20 53   is a complete S
19a60 51 4c 20 73 74 61 74 65 6d 65 6e 74 2c 20 6f 72  QL statement, or
19a70 20 7a 65 72 6f 0a 2a 2a 20 6f 74 68 65 72 77 69   zero.** otherwi
19a80 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  se..*/.static in
19a90 74 20 74 65 73 74 5f 63 6f 6d 70 6c 65 74 65 31  t test_complete1
19aa0 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  6(.  void * clie
19ab0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
19ac0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
19ad0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
19ae0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
19af0 5d 0a 29 7b 0a 23 69 66 20 21 64 65 66 69 6e 65  ].){.#if !define
19b00 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  d(SQLITE_OMIT_CO
19b10 4d 50 4c 45 54 45 29 20 26 26 20 21 64 65 66 69  MPLETE) && !defi
19b20 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
19b30 55 54 46 31 36 29 0a 20 20 63 68 61 72 20 2a 7a  UTF16).  char *z
19b40 42 75 66 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  Buf;..  if( objc
19b50 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=2 ){.    Tcl_W
19b60 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
19b70 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3c 75  rp, 1, objv, "<u
19b80 74 66 2d 31 36 20 73 71 6c 3e 22 29 3b 0a 20 20  tf-16 sql>");.  
19b90 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
19ba0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 7a 42 75 66 20  OR;.  }..  zBuf 
19bb0 3d 20 28 63 68 61 72 2a 29 54 63 6c 5f 47 65 74  = (char*)Tcl_Get
19bc0 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a  ByteArrayFromObj
19bd0 28 6f 62 6a 76 5b 31 5d 2c 20 30 29 3b 0a 20 20  (objv[1], 0);.  
19be0 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
19bf0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
19c00 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63  IntObj(sqlite3_c
19c10 6f 6d 70 6c 65 74 65 31 36 28 7a 42 75 66 29 29  omplete16(zBuf))
19c20 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  );.#endif /* SQL
19c30 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54  ITE_OMIT_COMPLET
19c40 45 20 26 26 20 53 51 4c 49 54 45 5f 4f 4d 49 54  E && SQLITE_OMIT
19c50 5f 55 54 46 31 36 20 2a 2f 0a 20 20 72 65 74 75  _UTF16 */.  retu
19c60 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
19c70 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
19c80 65 33 5f 73 74 65 70 20 53 54 4d 54 0a 2a 2a 0a  e3_step STMT.**.
19c90 2a 2a 20 41 64 76 61 6e 63 65 20 74 68 65 20 73  ** Advance the s
19ca0 74 61 74 65 6d 65 6e 74 20 74 6f 20 74 68 65 20  tatement to the 
19cb0 6e 65 78 74 20 72 6f 77 2e 0a 2a 2f 0a 73 74 61  next row..*/.sta
19cc0 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 74 65  tic int test_ste
19cd0 70 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  p(.  void * clie
19ce0 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
19cf0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
19d00 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
19d10 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
19d20 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
19d30 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
19d40 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
19d50 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
19d60 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
19d70 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
19d80 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
19d90 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
19da0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
19db0 29 2c 20 22 20 53 54 4d 54 22 2c 20 30 29 3b 0a  ), " STMT", 0);.
19dc0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
19dd0 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
19de0 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
19df0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
19e00 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
19e10 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
19e20 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63   TCL_ERROR;.  rc
19e30 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28   = sqlite3_step(
19e40 70 53 74 6d 74 29 3b 0a 0a 20 20 2f 2a 20 69 66  pStmt);..  /* if
19e50 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e  ( rc!=SQLITE_DON
19e60 45 20 26 26 20 72 63 21 3d 53 51 4c 49 54 45 5f  E && rc!=SQLITE_
19e70 52 4f 57 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ROW ) return TCL
19e80 5f 45 52 52 4f 52 3b 20 2a 2f 0a 20 20 54 63 6c  _ERROR; */.  Tcl
19e90 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
19ea0 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72  p, (char *)t1Err
19eb0 6f 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a  orName(rc), 0);.
19ec0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
19ed0 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .}..static int t
19ee0 65 73 74 5f 73 71 6c 28 0a 20 20 76 6f 69 64 20  est_sql(.  void 
19ef0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
19f00 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
19f10 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
19f20 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
19f30 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
19f40 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
19f50 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
19f60 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
19f70 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
19f80 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d 54 22   1, objv, "STMT"
19f90 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
19fa0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
19fb0 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
19fc0 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
19fd0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
19fe0 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
19ff0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1a000 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
1a010 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 73  nterp, (char *)s
1a020 71 6c 69 74 65 33 5f 73 71 6c 28 70 53 74 6d 74  qlite3_sql(pStmt
1a030 29 2c 20 54 43 4c 5f 56 4f 4c 41 54 49 4c 45 29  ), TCL_VOLATILE)
1a040 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
1a050 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
1a060 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
1a070 6e 5f 63 6f 75 6e 74 20 53 54 4d 54 20 0a 2a 2a  n_count STMT .**
1a080 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
1a090 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1a0a0 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
1a0b0 20 73 71 6c 20 73 74 61 74 65 6d 65 6e 74 20 53   sql statement S
1a0c0 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  TMT..*/.static i
1a0d0 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 63  nt test_column_c
1a0e0 6f 75 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20 63  ount(.  void * c
1a0f0 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
1a100 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
1a110 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
1a120 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
1a130 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
1a140 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 0a  3_stmt *pStmt;..
1a150 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
1a160 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
1a170 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
1a180 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
1a190 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
1a1a0 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
1a1b0 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54  g(objv[0]), " ST
1a1c0 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a  MT column", 0);.
1a1d0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
1a1e0 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
1a1f0 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
1a200 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
1a210 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
1a220 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
1a230 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 54   TCL_ERROR;..  T
1a240 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
1a250 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49  interp, Tcl_NewI
1a260 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 63 6f  ntObj(sqlite3_co
1a270 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74  lumn_count(pStmt
1a280 29 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  )));.  return TC
1a290 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
1a2a0 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
1a2b0 6c 75 6d 6e 5f 74 79 70 65 20 53 54 4d 54 20 63  lumn_type STMT c
1a2c0 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75  olumn.**.** Retu
1a2d0 72 6e 20 74 68 65 20 74 79 70 65 20 6f 66 20 74  rn the type of t
1a2e0 68 65 20 64 61 74 61 20 69 6e 20 63 6f 6c 75 6d  he data in colum
1a2f0 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74 68  n 'column' of th
1a300 65 20 63 75 72 72 65 6e 74 20 72 6f 77 2e 0a 2a  e current row..*
1a310 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
1a320 74 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 0a 20  t_column_type(. 
1a330 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
1a340 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
1a350 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
1a360 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
1a370 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
1a380 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
1a390 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f  *pStmt;.  int co
1a3a0 6c 3b 0a 20 20 69 6e 74 20 74 70 3b 0a 0a 20 20  l;.  int tp;..  
1a3b0 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
1a3c0 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
1a3d0 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
1a3e0 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
1a3f0 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
1a400 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
1a410 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
1a420 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
1a430 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
1a440 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
1a450 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
1a460 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
1a470 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
1a480 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
1a490 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
1a4a0 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
1a4b0 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
1a4c0 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72  ], &col) ) retur
1a4d0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
1a4e0 74 70 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  tp = sqlite3_col
1a4f0 75 6d 6e 5f 74 79 70 65 28 70 53 74 6d 74 2c 20  umn_type(pStmt, 
1a500 63 6f 6c 29 3b 0a 20 20 73 77 69 74 63 68 28 20  col);.  switch( 
1a510 74 70 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53  tp ){.    case S
1a520 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3a 20 0a  QLITE_INTEGER: .
1a530 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73        Tcl_SetRes
1a540 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 49 4e 54  ult(interp, "INT
1a550 45 47 45 52 22 2c 20 54 43 4c 5f 53 54 41 54 49  EGER", TCL_STATI
1a560 43 29 3b 20 0a 20 20 20 20 20 20 62 72 65 61 6b  C); .      break
1a570 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54  ;.    case SQLIT
1a580 45 5f 4e 55 4c 4c 3a 0a 20 20 20 20 20 20 54 63  E_NULL:.      Tc
1a590 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
1a5a0 72 70 2c 20 22 4e 55 4c 4c 22 2c 20 54 43 4c 5f  rp, "NULL", TCL_
1a5b0 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20  STATIC); .      
1a5c0 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
1a5d0 53 51 4c 49 54 45 5f 46 4c 4f 41 54 3a 0a 20 20  SQLITE_FLOAT:.  
1a5e0 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c      Tcl_SetResul
1a5f0 74 28 69 6e 74 65 72 70 2c 20 22 46 4c 4f 41 54  t(interp, "FLOAT
1a600 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20  ", TCL_STATIC); 
1a610 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
1a620 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 54 45    case SQLITE_TE
1a630 58 54 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53 65  XT:.      Tcl_Se
1a640 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
1a650 22 54 45 58 54 22 2c 20 54 43 4c 5f 53 54 41 54  "TEXT", TCL_STAT
1a660 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72 65 61  IC); .      brea
1a670 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
1a680 54 45 5f 42 4c 4f 42 3a 0a 20 20 20 20 20 20 54  TE_BLOB:.      T
1a690 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74  cl_SetResult(int
1a6a0 65 72 70 2c 20 22 42 4c 4f 42 22 2c 20 54 43 4c  erp, "BLOB", TCL
1a6b0 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20 20  _STATIC); .     
1a6c0 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
1a6d0 75 6c 74 3a 0a 20 20 20 20 20 20 61 73 73 65 72  ult:.      asser
1a6e0 74 28 30 29 3b 0a 20 20 7d 0a 0a 20 20 72 65 74  t(0);.  }..  ret
1a6f0 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
1a700 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
1a710 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34  te3_column_int64
1a720 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a   STMT column.**.
1a730 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 64 61  ** Return the da
1a740 74 61 20 69 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f  ta in column 'co
1a750 6c 75 6d 6e 27 20 6f 66 20 74 68 65 20 63 75 72  lumn' of the cur
1a760 72 65 6e 74 20 72 6f 77 20 63 61 73 74 20 61 73  rent row cast as
1a770 20 61 6e 0a 2a 2a 20 77 69 64 65 20 28 36 34 2d   an.** wide (64-
1a780 62 69 74 29 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  bit) integer..*/
1a790 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
1a7a0 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 0a 20  _column_int64(. 
1a7b0 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
1a7c0 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
1a7d0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
1a7e0 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
1a7f0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
1a800 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
1a810 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f  *pStmt;.  int co
1a820 6c 3b 0a 20 20 69 36 34 20 69 56 61 6c 3b 0a 0a  l;.  i64 iVal;..
1a830 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b    if( objc!=3 ){
1a840 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
1a850 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
1a860 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
1a870 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
1a880 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
1a890 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54  g(objv[0]), " ST
1a8a0 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a  MT column", 0);.
1a8b0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
1a8c0 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
1a8d0 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
1a8e0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
1a8f0 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
1a900 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
1a910 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
1a920 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
1a930 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
1a940 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74  [2], &col) ) ret
1a950 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
1a960 20 20 69 56 61 6c 20 3d 20 73 71 6c 69 74 65 33    iVal = sqlite3
1a970 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 28 70 53  _column_int64(pS
1a980 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 54 63 6c  tmt, col);.  Tcl
1a990 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
1a9a0 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 57 69 64  terp, Tcl_NewWid
1a9b0 65 49 6e 74 4f 62 6a 28 69 56 61 6c 29 29 3b 0a  eIntObj(iVal));.
1a9c0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
1a9d0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
1a9e0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
1a9f0 62 6c 6f 62 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  blob STMT column
1aa00 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
1aa10 65 73 74 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28  est_column_blob(
1aa20 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
1aa30 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
1aa40 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
1aa50 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
1aa60 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
1aa70 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
1aa80 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
1aa90 63 6f 6c 3b 0a 0a 20 20 69 6e 74 20 6c 65 6e 3b  col;..  int len;
1aaa0 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  .  const void *p
1aab0 42 6c 6f 62 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  Blob;..  if( obj
1aac0 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
1aad0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
1aae0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
1aaf0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
1ab00 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
1ab10 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
1ab20 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
1ab30 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
1ab40 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
1ab50 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
1ab60 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
1ab70 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
1ab80 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
1ab90 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1aba0 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
1abb0 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
1abc0 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
1abd0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
1abe0 52 52 4f 52 3b 0a 0a 20 20 6c 65 6e 20 3d 20 73  RROR;..  len = s
1abf0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
1ac00 74 65 73 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b  tes(pStmt, col);
1ac10 0a 20 20 70 42 6c 6f 62 20 3d 20 73 71 6c 69 74  .  pBlob = sqlit
1ac20 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70  e3_column_blob(p
1ac30 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 54 63  Stmt, col);.  Tc
1ac40 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
1ac50 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42 79  nterp, Tcl_NewBy
1ac60 74 65 41 72 72 61 79 4f 62 6a 28 70 42 6c 6f 62  teArrayObj(pBlob
1ac70 2c 20 6c 65 6e 29 29 3b 0a 20 20 72 65 74 75 72  , len));.  retur
1ac80 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
1ac90 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
1aca0 33 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 20  3_column_double 
1acb0 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a  STMT column.**.*
1acc0 2a 20 52 65 74 75 72 6e 20 74 68 65 20 64 61 74  * Return the dat
1acd0 61 20 69 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c  a in column 'col
1ace0 75 6d 6e 27 20 6f 66 20 74 68 65 20 63 75 72 72  umn' of the curr
1acf0 65 6e 74 20 72 6f 77 20 63 61 73 74 20 61 73 20  ent row cast as 
1ad00 61 20 64 6f 75 62 6c 65 2e 0a 2a 2f 0a 73 74 61  a double..*/.sta
1ad10 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c  tic int test_col
1ad20 75 6d 6e 5f 64 6f 75 62 6c 65 28 0a 20 20 76 6f  umn_double(.  vo
1ad30 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
1ad40 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1ad50 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
1ad60 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
1ad70 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
1ad80 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
1ad90 74 6d 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a  tmt;.  int col;.
1ada0 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 3b 0a 0a    double rVal;..
1adb0 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b    if( objc!=3 ){
1adc0 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
1add0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
1ade0 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
1adf0 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
1ae00 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
1ae10 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54  g(objv[0]), " ST
1ae20 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a  MT column", 0);.
1ae30 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
1ae40 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
1ae50 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
1ae60 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
1ae70 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
1ae80 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
1ae90 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
1aea0 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
1aeb0 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
1aec0 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74  [2], &col) ) ret
1aed0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
1aee0 20 20 72 56 61 6c 20 3d 20 73 71 6c 69 74 65 33    rVal = sqlite3
1aef0 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c 65 28 70  _column_double(p
1af00 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 54 63  Stmt, col);.  Tc
1af10 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
1af20 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 44 6f  nterp, Tcl_NewDo
1af30 75 62 6c 65 4f 62 6a 28 72 56 61 6c 29 29 3b 0a  ubleObj(rVal));.
1af40 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
1af50 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
1af60 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f   sqlite3_data_co
1af70 75 6e 74 20 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20  unt STMT .**.** 
1af80 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
1af90 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 72 65 74  r of columns ret
1afa0 75 72 6e 65 64 20 62 79 20 74 68 65 20 73 71 6c  urned by the sql
1afb0 20 73 74 61 74 65 6d 65 6e 74 20 53 54 4d 54 2e   statement STMT.
1afc0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
1afd0 65 73 74 5f 64 61 74 61 5f 63 6f 75 6e 74 28 0a  est_data_count(.
1afe0 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
1aff0 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
1b000 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
1b010 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
1b020 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
1b030 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  {.  sqlite3_stmt
1b040 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20   *pStmt;..  if( 
1b050 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
1b060 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
1b070 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
1b080 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
1b090 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
1b0a0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
1b0b0 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c  [0]), " STMT col
1b0c0 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  umn", 0);.    re
1b0d0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1b0e0 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
1b0f0 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
1b100 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
1b110 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
1b120 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
1b130 52 52 4f 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74  RROR;..  Tcl_Set
1b140 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
1b150 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
1b160 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75  sqlite3_data_cou
1b170 6e 74 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72  nt(pStmt)));.  r
1b180 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
1b190 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
1b1a0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
1b1b0 74 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a  t STMT column.**
1b1c0 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
1b1d0 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  e3_column_declty
1b1e0 70 65 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a  pe STMT column.*
1b1f0 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
1b200 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20  te3_column_name 
1b210 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73  STMT column.*/.s
1b220 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73  tatic int test_s
1b230 74 6d 74 5f 75 74 66 38 28 0a 20 20 76 6f 69 64  tmt_utf8(.  void
1b240 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20   * clientData,  
1b250 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
1b260 20 74 6f 20 53 51 4c 69 74 65 20 41 50 49 20 66   to SQLite API f
1b270 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e  unction to be in
1b280 76 6f 6b 65 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  voke */.  Tcl_In
1b290 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
1b2a0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
1b2b0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
1b2c0 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
1b2d0 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
1b2e0 74 20 63 6f 6c 3b 0a 20 20 63 6f 6e 73 74 20 63  t col;.  const c
1b2f0 68 61 72 20 2a 28 2a 78 46 75 6e 63 29 28 73 71  har *(*xFunc)(sq
1b300 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 20 69 6e 74  lite3_stmt*, int
1b310 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  );.  const char 
1b320 2a 7a 52 65 74 3b 0a 0a 20 20 78 46 75 6e 63 20  *zRet;..  xFunc 
1b330 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 28  = (const char *(
1b340 2a 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a  *)(sqlite3_stmt*
1b350 2c 20 69 6e 74 29 29 63 6c 69 65 6e 74 44 61 74  , int))clientDat
1b360 61 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33  a;.  if( objc!=3
1b370 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
1b380 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
1b390 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
1b3a0 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
1b3b0 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
1b3c0 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
1b3d0 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30   STMT column", 0
1b3e0 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
1b3f0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
1b400 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74  if( getStmtPoint
1b410 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
1b420 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
1b430 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
1b440 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1b450 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
1b460 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
1b470 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20 29 20  bjv[2], &col) ) 
1b480 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1b490 3b 0a 20 20 7a 52 65 74 20 3d 20 78 46 75 6e 63  ;.  zRet = xFunc
1b4a0 28 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20  (pStmt, col);.  
1b4b0 69 66 28 20 7a 52 65 74 20 29 7b 0a 20 20 20 20  if( zRet ){.    
1b4c0 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
1b4d0 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 7a 52  terp, (char *)zR
1b4e0 65 74 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65  et, 0);.  }.  re
1b4f0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
1b500 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
1b510 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 28 0a  global_recover(.
1b520 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
1b530 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
1b540 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
1b550 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
1b560 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
1b570 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
1b580 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
1b590 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28  .  int rc;.  if(
1b5a0 20 6f 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20 20   objc!=1 ){.    
1b5b0 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
1b5c0 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
1b5d0 2c 20 22 22 29 3b 0a 20 20 20 20 72 65 74 75 72  , "");.    retur
1b5e0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
1b5f0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
1b600 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 28 29  global_recover()
1b610 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73 75 6c  ;.  Tcl_SetResul
1b620 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20  t(interp, (char 
1b630 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63  *)t1ErrorName(rc
1b640 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 0a  ), TCL_STATIC);.
1b650 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20  #endif.  return 
1b660 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
1b670 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
1b680 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 53 54 4d 54  column_text STMT
1b690 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73   column.**.** Us
1b6a0 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
1b6b0 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 53 54 4d  umn_decltype STM
1b6c0 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55  T column.**.** U
1b6d0 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
1b6e0 6c 75 6d 6e 5f 6e 61 6d 65 20 53 54 4d 54 20 63  lumn_name STMT c
1b6f0 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20  olumn.*/.static 
1b700 69 6e 74 20 74 65 73 74 5f 73 74 6d 74 5f 75 74  int test_stmt_ut
1b710 66 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  f16(.  void * cl
1b720 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20 2f 2a  ientData,     /*
1b730 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c 69   Pointer to SQLi
1b740 74 65 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20  te API function 
1b750 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 2a 2f  to be invoked */
1b760 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1b770 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
1b780 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
1b790 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69  NST objv[].){.#i
1b7a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1b7b0 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69 74 65  T_UTF16.  sqlite
1b7c0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
1b7d0 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 54 63 6c 5f   int col;.  Tcl_
1b7e0 4f 62 6a 20 2a 70 52 65 74 3b 0a 20 20 63 6f 6e  Obj *pRet;.  con
1b7f0 73 74 20 76 6f 69 64 20 2a 7a 4e 61 6d 65 31 36  st void *zName16
1b800 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ;.  const void *
1b810 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33  (*xFunc)(sqlite3
1b820 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 3b 0a 0a 20  _stmt*, int);.. 
1b830 20 78 46 75 6e 63 20 3d 20 28 63 6f 6e 73 74 20   xFunc = (const 
1b840 76 6f 69 64 20 2a 28 2a 29 28 73 71 6c 69 74 65  void *(*)(sqlite
1b850 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 29 63 6c  3_stmt*, int))cl
1b860 69 65 6e 74 44 61 74 61 3b 0a 20 20 69 66 28 20  ientData;.  if( 
1b870 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
1b880 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
1b890 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
1b8a0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
1b8b0 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
1b8c0 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
1b8d0 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c  [0]), " STMT col
1b8e0 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  umn", 0);.    re
1b8f0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1b900 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
1b910 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
1b920 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
1b930 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
1b940 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
1b950 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
1b960 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
1b970 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
1b980 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  col) ) return TC
1b990 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a 4e 61 6d  L_ERROR;..  zNam
1b9a0 65 31 36 20 3d 20 78 46 75 6e 63 28 70 53 74 6d  e16 = xFunc(pStm
1b9b0 74 2c 20 63 6f 6c 29 3b 0a 20 20 69 66 28 20 7a  t, col);.  if( z
1b9c0 4e 61 6d 65 31 36 20 29 7b 0a 20 20 20 20 69 6e  Name16 ){.    in
1b9d0 74 20 6e 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  t n;.    const c
1b9e0 68 61 72 20 2a 7a 20 3d 20 7a 4e 61 6d 65 31 36  har *z = zName16
1b9f0 3b 0a 20 20 20 20 66 6f 72 28 6e 3d 30 3b 20 7a  ;.    for(n=0; z
1ba00 5b 6e 5d 20 7c 7c 20 7a 5b 6e 2b 31 5d 3b 20 6e  [n] || z[n+1]; n
1ba10 2b 3d 32 29 7b 7d 0a 20 20 20 20 70 52 65 74 20  +=2){}.    pRet 
1ba20 3d 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72  = Tcl_NewByteArr
1ba30 61 79 4f 62 6a 28 7a 4e 61 6d 65 31 36 2c 20 6e  ayObj(zName16, n
1ba40 2b 32 29 3b 0a 20 20 20 20 54 63 6c 5f 53 65 74  +2);.    Tcl_Set
1ba50 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
1ba60 2c 20 70 52 65 74 29 3b 0a 20 20 7d 0a 23 65 6e  , pRet);.  }.#en
1ba70 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
1ba80 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 20 20 72  IT_UTF16 */..  r
1ba90 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
1baa0 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
1bab0 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
1bac0 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a   STMT column.**.
1bad0 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
1bae0 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 20 53  3_column_bytes S
1baf0 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a  TMT column.**.**
1bb00 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
1bb10 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36 20 53  column_bytes16 S
1bb20 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2f  TMT column.**.*/
1bb30 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
1bb40 5f 73 74 6d 74 5f 69 6e 74 28 0a 20 20 76 6f 69  _stmt_int(.  voi
1bb50 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 20  d * clientData, 
1bb60 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
1bb70 20 53 51 4c 69 74 65 20 41 50 49 20 66 75 6e 63   SQLite API func
1bb80 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76 6f 6b  tion to be invok
1bb90 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  ed */.  Tcl_Inte
1bba0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
1bbb0 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
1bbc0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
1bbd0 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
1bbe0 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
1bbf0 63 6f 6c 3b 0a 20 20 69 6e 74 20 28 2a 78 46 75  col;.  int (*xFu
1bc00 6e 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  nc)(sqlite3_stmt
1bc10 2a 2c 20 69 6e 74 29 3b 0a 0a 20 20 78 46 75 6e  *, int);..  xFun
1bc20 63 20 3d 20 28 69 6e 74 20 28 2a 29 28 73 71 6c  c = (int (*)(sql
1bc30 69 74 65 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29  ite3_stmt*, int)
1bc40 29 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 69  )clientData;.  i
1bc50 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20  f( objc!=3 ){.  
1bc60 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
1bc70 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
1bc80 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
1bc90 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20   be \"", .      
1bca0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
1bcb0 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20  bjv[0]), " STMT 
1bcc0 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20  column", 0);.   
1bcd0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1bce0 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65  R;.  }..  if( ge
1bcf0 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74  tStmtPointer(int
1bd00 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
1bd10 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53  ng(objv[1]), &pS
1bd20 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
1bd30 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54  L_ERROR;.  if( T
1bd40 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
1bd50 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d  (interp, objv[2]
1bd60 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72 6e  , &col) ) return
1bd70 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 54   TCL_ERROR;..  T
1bd80 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
1bd90 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49  interp, Tcl_NewI
1bda0 6e 74 4f 62 6a 28 78 46 75 6e 63 28 70 53 74 6d  ntObj(xFunc(pStm
1bdb0 74 2c 20 63 6f 6c 29 29 29 3b 0a 20 20 72 65 74  t, col)));.  ret
1bdc0 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
1bdd0 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
1bde0 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 20 20 44  ite_set_magic  D
1bdf0 42 20 20 4d 41 47 49 43 2d 4e 55 4d 42 45 52 0a  B  MAGIC-NUMBER.
1be00 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 62  **.** Set the db
1be10 2d 3e 6d 61 67 69 63 20 76 61 6c 75 65 2e 20 20  ->magic value.  
1be20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
1be30 74 65 73 74 20 65 72 72 6f 72 20 72 65 63 6f 76  test error recov
1be40 65 72 79 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73 74  ery logic..*/.st
1be50 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 5f  atic int sqlite_
1be60 73 65 74 5f 6d 61 67 69 63 28 0a 20 20 76 6f 69  set_magic(.  voi
1be70 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
1be80 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
1be90 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63  terp,.  int argc
1bea0 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a  ,.  char **argv.
1beb0 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
1bec0 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20  ;.  if( argc!=3 
1bed0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
1bee0 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
1bef0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
1bf00 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
1bf10 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 20 20  gv[0],.         
1bf20 22 20 44 42 20 4d 41 47 49 43 22 2c 20 30 29 3b  " DB MAGIC", 0);
1bf30 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
1bf40 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
1bf50 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
1bf60 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
1bf70 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
1bf80 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 73 74  _ERROR;.  if( st
1bf90 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20 22 53  rcmp(argv[2], "S
1bfa0 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
1bfb0 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d  ")==0 ){.    db-
1bfc0 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  >magic = SQLITE_
1bfd0 4d 41 47 49 43 5f 4f 50 45 4e 3b 0a 20 20 7d 65  MAGIC_OPEN;.  }e
1bfe0 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61  lse if( strcmp(a
1bff0 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f  rgv[2], "SQLITE_
1c000 4d 41 47 49 43 5f 43 4c 4f 53 45 44 22 29 3d 3d  MAGIC_CLOSED")==
1c010 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67  0 ){.    db->mag
1c020 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49  ic = SQLITE_MAGI
1c030 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 7d 65 6c 73  C_CLOSED;.  }els
1c040 65 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67  e if( strcmp(arg
1c050 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f 4d 41  v[2], "SQLITE_MA
1c060 47 49 43 5f 42 55 53 59 22 29 3d 3d 30 20 29 7b  GIC_BUSY")==0 ){
1c070 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d  .    db->magic =
1c080 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
1c090 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  SY;.  }else if( 
1c0a0 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20  strcmp(argv[2], 
1c0b0 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52  "SQLITE_MAGIC_ER
1c0c0 52 4f 52 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ROR")==0 ){.    
1c0d0 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49  db->magic = SQLI
1c0e0 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 3b 0a  TE_MAGIC_ERROR;.
1c0f0 20 20 7d 65 6c 73 65 20 69 66 28 20 54 63 6c 5f    }else if( Tcl_
1c100 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20 61  GetInt(interp, a
1c110 72 67 76 5b 32 5d 2c 20 28 69 6e 74 2a 29 26 64  rgv[2], (int*)&d
1c120 62 2d 3e 6d 61 67 69 63 29 20 29 7b 0a 20 20 20  b->magic) ){.   
1c130 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1c140 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  R;.  }.  return 
1c150 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
1c160 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33   Usage:  sqlite3
1c170 5f 69 6e 74 65 72 72 75 70 74 20 20 44 42 20 0a  _interrupt  DB .
1c180 2a 2a 0a 2a 2a 20 54 72 69 67 67 65 72 20 61 6e  **.** Trigger an
1c190 20 69 6e 74 65 72 72 75 70 74 20 6f 6e 20 44 42   interrupt on DB
1c1a0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
1c1b0 65 73 74 5f 69 6e 74 65 72 72 75 70 74 28 0a 20  est_interrupt(. 
1c1c0 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
1c1d0 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
1c1e0 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
1c1f0 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61  argc,.  char **a
1c200 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  rgv.){.  sqlite3
1c210 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63   *db;.  if( argc
1c220 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
1c230 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
1c240 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
1c250 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
1c260 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44 42 22  , argv[0], " DB"
1c270 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
1c280 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
1c290 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
1c2a0 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
1c2b0 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
1c2c0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73  n TCL_ERROR;.  s
1c2d0 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
1c2e0 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  (db);.  return T
1c2f0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63  CL_OK;.}..static
1c300 20 75 38 20 2a 73 71 6c 69 74 65 33 5f 73 74 61   u8 *sqlite3_sta
1c310 63 6b 5f 62 61 73 65 6c 69 6e 65 20 3d 20 30 3b  ck_baseline = 0;
1c320 0a 0a 2f 2a 0a 2a 2a 20 46 69 6c 6c 20 74 68 65  ../*.** Fill the
1c330 20 73 74 61 63 6b 20 77 69 74 68 20 61 20 6b 6e   stack with a kn
1c340 6f 77 6e 20 62 69 74 70 61 74 74 65 72 6e 2e 0a  own bitpattern..
1c350 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 70  */.static void p
1c360 72 65 70 53 74 61 63 6b 28 76 6f 69 64 29 7b 0a  repStack(void){.
1c370 20 20 69 6e 74 20 69 3b 0a 20 20 75 33 32 20 62    int i;.  u32 b
1c380 69 67 42 75 66 5b 36 35 35 33 36 5d 3b 0a 20 20  igBuf[65536];.  
1c390 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f  for(i=0; i<sizeo
1c3a0 66 28 62 69 67 42 75 66 29 3b 20 69 2b 2b 29 20  f(bigBuf); i++) 
1c3b0 62 69 67 42 75 66 5b 69 5d 20 3d 20 30 78 64 65  bigBuf[i] = 0xde
1c3c0 61 64 62 65 65 66 3b 0a 20 20 73 71 6c 69 74 65  adbeef;.  sqlite
1c3d0 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e 65  3_stack_baseline
1c3e0 20 3d 20 28 75 38 2a 29 26 62 69 67 42 75 66 5b   = (u8*)&bigBuf[
1c3f0 36 35 35 33 36 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  65536];.}../*.**
1c400 20 47 65 74 20 74 68 65 20 63 75 72 72 65 6e 74   Get the current
1c410 20 73 74 61 63 6b 20 64 65 70 74 68 2e 20 20 55   stack depth.  U
1c420 73 65 64 20 66 6f 72 20 64 65 62 75 67 67 69 6e  sed for debuggin
1c430 67 20 6f 6e 6c 79 2e 0a 2a 2f 0a 75 36 34 20 73  g only..*/.u64 s
1c440 71 6c 69 74 65 33 53 74 61 63 6b 44 65 70 74 68  qlite3StackDepth
1c450 28 76 6f 69 64 29 7b 0a 20 20 75 38 20 78 3b 0a  (void){.  u8 x;.
1c460 20 20 72 65 74 75 72 6e 20 28 75 36 34 29 28 73    return (u64)(s
1c470 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61 73  qlite3_stack_bas
1c480 65 6c 69 6e 65 20 2d 20 26 78 29 3b 0a 7d 0a 0a  eline - &x);.}..
1c490 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
1c4a0 6c 69 74 65 33 5f 73 74 61 63 6b 5f 75 73 65 64  lite3_stack_used
1c4b0 20 44 42 20 53 51 4c 0a 2a 2a 0a 2a 2a 20 54 72   DB SQL.**.** Tr
1c4c0 79 20 74 6f 20 6d 65 61 73 75 72 65 20 74 68 65  y to measure the
1c4d0 20 61 6d 6f 75 6e 74 20 6f 66 20 73 74 61 63 6b   amount of stack
1c4e0 20 73 70 61 63 65 20 75 73 65 64 20 62 79 20 61   space used by a
1c4f0 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33   call to sqlite3
1c500 5f 65 78 65 63 0a 2a 2f 0a 73 74 61 74 69 63 20  _exec.*/.static 
1c510 69 6e 74 20 74 65 73 74 5f 73 74 61 63 6b 5f 75  int test_stack_u
1c520 73 65 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  sed(.  void * cl
1c530 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
1c540 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
1c550 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63 68    int argc,.  ch
1c560 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73  ar **argv.){.  s
1c570 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e  qlite3 *db;.  in
1c580 74 20 69 3b 0a 20 20 69 66 28 20 61 72 67 63 21  t i;.  if( argc!
1c590 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
1c5a0 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
1c5b0 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
1c5c0 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
1c5d0 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20   argv[0], .     
1c5e0 20 20 20 22 20 44 42 20 53 51 4c 22 2c 20 30 29     " DB SQL", 0)
1c5f0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
1c600 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
1c610 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
1c620 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
1c630 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
1c640 4c 5f 45 52 52 4f 52 3b 0a 20 20 70 72 65 70 53  L_ERROR;.  prepS
1c650 74 61 63 6b 28 29 3b 0a 20 20 28 76 6f 69 64 29  tack();.  (void)
1c660 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
1c670 20 61 72 67 76 5b 32 5d 2c 20 30 2c 20 30 2c 20   argv[2], 0, 0, 
1c680 30 29 3b 0a 20 20 66 6f 72 28 69 3d 36 35 35 33  0);.  for(i=6553
1c690 35 3b 20 69 3e 3d 30 20 26 26 20 28 28 75 33 32  5; i>=0 && ((u32
1c6a0 2a 29 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f  *)sqlite3_stack_
1c6b0 62 61 73 65 6c 69 6e 65 29 5b 2d 69 5d 3d 3d 30  baseline)[-i]==0
1c6c0 78 64 65 61 64 62 65 65 66 3b 20 69 2d 2d 29 7b  xdeadbeef; i--){
1c6d0 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  }.  Tcl_SetObjRe
1c6e0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
1c6f0 5f 4e 65 77 49 6e 74 4f 62 6a 28 69 2a 34 29 29  _NewIntObj(i*4))
1c700 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
1c710 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
1c720 65 3a 20 73 71 6c 69 74 65 5f 64 65 6c 65 74 65  e: sqlite_delete
1c730 5f 66 75 6e 63 74 69 6f 6e 20 44 42 20 66 75 6e  _function DB fun
1c740 63 74 69 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a  ction-name.**.**
1c750 20 44 65 6c 65 74 65 20 74 68 65 20 75 73 65 72   Delete the user
1c760 20 66 75 6e 63 74 69 6f 6e 20 27 66 75 6e 63 74   function 'funct
1c770 69 6f 6e 2d 6e 61 6d 65 27 20 66 72 6f 6d 20 64  ion-name' from d
1c780 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 44  atabase handle D
1c790 42 2e 20 49 74 0a 2a 2a 20 69 73 20 61 73 73 75  B. It.** is assu
1c7a0 6d 65 64 20 74 68 61 74 20 74 68 65 20 75 73 65  med that the use
1c7b0 72 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 63  r function was c
1c7c0 72 65 61 74 65 64 20 61 73 20 55 54 46 38 2c 20  reated as UTF8, 
1c7d0 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a  any number of.**
1c7e0 20 61 72 67 75 6d 65 6e 74 73 20 28 74 68 65 20   arguments (the 
1c7f0 77 61 79 20 74 68 65 20 54 43 4c 20 69 6e 74 65  way the TCL inte
1c800 72 66 61 63 65 20 64 6f 65 73 20 69 74 29 2e 0a  rface does it)..
1c810 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 64 65  */.static int de
1c820 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20  lete_function(. 
1c830 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
1c840 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
1c850 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
1c860 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61  argc,.  char **a
1c870 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b  rgv.){.  int rc;
1c880 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
1c890 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b    if( argc!=3 ){
1c8a0 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
1c8b0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
1c8c0 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
1c8d0 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
1c8e0 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22 20  [0], .        " 
1c8f0 44 42 20 66 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65  DB function-name
1c900 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
1c910 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
1c920 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
1c930 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ter(interp, argv
1c940 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75  [1], &db) ) retu
1c950 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1c960 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
1c970 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c  ate_function(db,
1c980 20 61 72 67 76 5b 32 5d 2c 20 2d 31 2c 20 53 51   argv[2], -1, SQ
1c990 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20 30 2c  LITE_UTF8, 0, 0,
1c9a0 20 30 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 53 65   0, 0);.  Tcl_Se
1c9b0 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
1c9c0 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e  (char *)t1ErrorN
1c9d0 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41  ame(rc), TCL_STA
1c9e0 54 49 43 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  TIC);.  return T
1c9f0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
1ca00 55 73 61 67 65 3a 20 73 71 6c 69 74 65 5f 64 65  Usage: sqlite_de
1ca10 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 20 44  lete_collation D
1ca20 42 20 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65  B collation-name
1ca30 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
1ca40 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  e collation sequ
1ca50 65 6e 63 65 20 27 63 6f 6c 6c 61 74 69 6f 6e 2d  ence 'collation-
1ca60 6e 61 6d 65 27 20 66 72 6f 6d 20 64 61 74 61 62  name' from datab
1ca70 61 73 65 20 68 61 6e 64 6c 65 20 0a 2a 2a 20 44  ase handle .** D
1ca80 42 2e 20 49 74 20 69 73 20 61 73 73 75 6d 65 64  B. It is assumed
1ca90 20 74 68 61 74 20 74 68 65 20 63 6f 6c 6c 61 74   that the collat
1caa0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 61 73  ion sequence was
1cab0 20 63 72 65 61 74 65 64 20 61 73 20 55 54 46 38   created as UTF8
1cac0 20 28 74 68 65 20 0a 2a 2a 20 77 61 79 20 74 68   (the .** way th
1cad0 65 20 54 43 4c 20 69 6e 74 65 72 66 61 63 65 20  e TCL interface 
1cae0 64 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a 73 74 61  does it)..*/.sta
1caf0 74 69 63 20 69 6e 74 20 64 65 6c 65 74 65 5f 63  tic int delete_c
1cb00 6f 6c 6c 61 74 69 6f 6e 28 0a 20 20 76 6f 69 64  ollation(.  void
1cb10 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
1cb20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
1cb30 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c  erp,.  int argc,
1cb40 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29  .  char **argv.)
1cb50 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73 71  {.  int rc;.  sq
1cb60 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66 28  lite3 *db;.  if(
1cb70 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20   argc!=3 ){.    
1cb80 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
1cb90 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
1cba0 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
1cbb0 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20  e \"", argv[0], 
1cbc0 0a 20 20 20 20 20 20 20 20 22 20 44 42 20 66 75  .        " DB fu
1cbd0 6e 63 74 69 6f 6e 2d 6e 61 6d 65 22 2c 20 30 29  nction-name", 0)
1cbe0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
1cbf0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
1cc00 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
1cc10 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
1cc20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
1cc30 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20  L_ERROR;.  rc = 
1cc40 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63  sqlite3_create_c
1cc50 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c 20 61 72 67  ollation(db, arg
1cc60 76 5b 32 5d 2c 20 53 51 4c 49 54 45 5f 55 54 46  v[2], SQLITE_UTF
1cc70 38 2c 20 30 2c 20 30 29 3b 0a 20 20 54 63 6c 5f  8, 0, 0);.  Tcl_
1cc80 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
1cc90 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f  , (char *)t1Erro
1cca0 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53  rName(rc), TCL_S
1ccb0 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75 72 6e  TATIC);.  return
1ccc0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
1ccd0 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33  * Usage: sqlite3
1cce0 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20  _get_autocommit 
1ccf0 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  DB.**.** Return 
1cd00 74 72 75 65 20 69 66 20 74 68 65 20 64 61 74 61  true if the data
1cd10 62 61 73 65 20 44 42 20 69 73 20 63 75 72 72 65  base DB is curre
1cd20 6e 74 6c 79 20 69 6e 20 61 75 74 6f 2d 63 6f 6d  ntly in auto-com
1cd30 6d 69 74 20 6d 6f 64 65 2e 0a 2a 2a 20 52 65 74  mit mode..** Ret
1cd40 75 72 6e 20 66 61 6c 73 65 20 69 66 20 6e 6f 74  urn false if not
1cd50 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
1cd60 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 28 0a  get_autocommit(.
1cd70 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
1cd80 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
1cd90 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
1cda0 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a   argc,.  char **
1cdb0 61 72 67 76 0a 29 7b 0a 20 20 63 68 61 72 20 7a  argv.){.  char z
1cdc0 42 75 66 5b 33 30 5d 3b 0a 20 20 73 71 6c 69 74  Buf[30];.  sqlit
1cdd0 65 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72  e3 *db;.  if( ar
1cde0 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
1cdf0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
1ce00 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
1ce10 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
1ce20 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20  "", argv[0], .  
1ce30 20 20 20 20 20 20 22 20 44 42 22 2c 20 30 29 3b        " DB", 0);
1ce40 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
1ce50 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
1ce60 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e   getDbPointer(in
1ce70 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26  terp, argv[1], &
1ce80 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  db) ) return TCL
1ce90 5f 45 52 52 4f 52 3b 0a 20 20 73 70 72 69 6e 74  _ERROR;.  sprint
1cea0 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20 73 71  f(zBuf, "%d", sq
1ceb0 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f  lite3_get_autoco
1cec0 6d 6d 69 74 28 64 62 29 29 3b 0a 20 20 54 63 6c  mmit(db));.  Tcl
1ced0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
1cee0 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a  terp, zBuf, 0);.
1cef0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
1cf00 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
1cf10 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69   sqlite3_busy_ti
1cf20 6d 65 6f 75 74 20 44 42 20 4d 53 0a 2a 2a 0a 2a  meout DB MS.**.*
1cf30 2a 20 53 65 74 20 74 68 65 20 62 75 73 79 20 74  * Set the busy t
1cf40 69 6d 65 6f 75 74 2e 20 20 54 68 69 73 20 69 73  imeout.  This is
1cf50 20 6d 6f 72 65 20 65 61 73 69 6c 79 20 64 6f 6e   more easily don
1cf60 65 20 75 73 69 6e 67 20 74 68 65 20 74 69 6d 65  e using the time
1cf70 6f 75 74 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66  out.** method of
1cf80 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72 66 61   the TCL interfa
1cf90 63 65 2e 20 20 42 75 74 20 77 65 20 6e 65 65 64  ce.  But we need
1cfa0 20 61 20 77 61 79 20 74 6f 20 74 65 73 74 20 74   a way to test t
1cfb0 68 65 20 63 61 73 65 0a 2a 2a 20 77 68 65 72 65  he case.** where
1cfc0 20 69 74 20 72 65 74 75 72 6e 73 20 53 51 4c 49   it returns SQLI
1cfd0 54 45 5f 4d 49 53 55 53 45 2e 0a 2a 2f 0a 73 74  TE_MISUSE..*/.st
1cfe0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 75  atic int test_bu
1cff0 73 79 5f 74 69 6d 65 6f 75 74 28 0a 20 20 76 6f  sy_timeout(.  vo
1d000 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
1d010 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1d020 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67  nterp,.  int arg
1d030 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  c,.  char **argv
1d040 0a 29 7b 0a 20 20 69 6e 74 20 72 63 2c 20 6d 73  .){.  int rc, ms
1d050 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  ;.  sqlite3 *db;
1d060 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
1d070 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
1d080 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
1d090 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
1d0a0 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
1d0b0 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22  v[0], .        "
1d0c0 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65   DB", 0);.    re
1d0d0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1d0e0 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
1d0f0 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
1d100 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
1d110 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1d120 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
1d130 74 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 32  t(interp, argv[2
1d140 5d 2c 20 26 6d 73 29 20 29 20 72 65 74 75 72 6e  ], &ms) ) return
1d150 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63   TCL_ERROR;.  rc
1d160 20 3d 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f   = sqlite3_busy_
1d170 74 69 6d 65 6f 75 74 28 64 62 2c 20 6d 73 29 3b  timeout(db, ms);
1d180 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
1d190 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c 69  ult(interp, sqli
1d1a0 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65  te3TestErrorName
1d1b0 28 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74 75  (rc), 0);.  retu
1d1c0 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
1d1d0 0a 2a 2a 20 55 73 61 67 65 3a 20 20 74 63 6c 5f  .** Usage:  tcl_
1d1e0 76 61 72 69 61 62 6c 65 5f 74 79 70 65 20 56 41  variable_type VA
1d1f0 52 49 41 42 4c 45 4e 41 4d 45 0a 2a 2a 0a 2a 2a  RIABLENAME.**.**
1d200 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65   Return the name
1d210 20 6f 66 20 74 68 65 20 69 6e 74 65 72 6e 61 6c   of the internal
1d220 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
1d230 66 6f 72 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  for the.** value
1d240 20 6f 66 20 74 68 65 20 67 69 76 65 6e 20 76 61   of the given va
1d250 72 69 61 62 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69  riable..*/.stati
1d260 63 20 69 6e 74 20 74 63 6c 5f 76 61 72 69 61 62  c int tcl_variab
1d270 6c 65 5f 74 79 70 65 28 0a 20 20 76 6f 69 64 20  le_type(.  void 
1d280 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
1d290 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
1d2a0 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
1d2b0 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
1d2c0 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 54 63 6c   objv[].){.  Tcl
1d2d0 5f 4f 62 6a 20 2a 70 56 61 72 3b 0a 20 20 69 66  _Obj *pVar;.  if
1d2e0 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
1d2f0 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
1d300 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
1d310 76 2c 20 22 56 41 52 49 41 42 4c 45 22 29 3b 0a  v, "VARIABLE");.
1d320 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
1d330 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 70 56 61 72  RROR;.  }.  pVar
1d340 20 3d 20 54 63 6c 5f 47 65 74 56 61 72 32 45 78   = Tcl_GetVar2Ex
1d350 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
1d360 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
1d370 20 30 2c 20 54 43 4c 5f 4c 45 41 56 45 5f 45 52   0, TCL_LEAVE_ER
1d380 52 5f 4d 53 47 29 3b 0a 20 20 69 66 28 20 70 56  R_MSG);.  if( pV
1d390 61 72 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 54  ar==0 ) return T
1d3a0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
1d3b0 70 56 61 72 2d 3e 74 79 70 65 50 74 72 20 29 7b  pVar->typePtr ){
1d3c0 0a 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  .    Tcl_SetObjR
1d3d0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
1d3e0 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 70  l_NewStringObj(p
1d3f0 56 61 72 2d 3e 74 79 70 65 50 74 72 2d 3e 6e 61  Var->typePtr->na
1d400 6d 65 2c 20 2d 31 29 29 3b 0a 20 20 7d 0a 20 20  me, -1));.  }.  
1d410 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
1d420 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
1d430 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f  sqlite3_release_
1d440 6d 65 6d 6f 72 79 20 3f 4e 3f 0a 2a 2a 0a 2a 2a  memory ?N?.**.**
1d450 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 6c 65   Attempt to rele
1d460 61 73 65 20 6d 65 6d 6f 72 79 20 63 75 72 72 65  ase memory curre
1d470 6e 74 6c 79 20 68 65 6c 64 20 62 75 74 20 6e 6f  ntly held but no
1d480 74 20 61 63 74 75 61 6c 6c 79 20 72 65 71 75 69  t actually requi
1d490 72 65 64 2e 0a 2a 2a 20 54 68 65 20 69 6e 74 65  red..** The inte
1d4a0 67 65 72 20 4e 20 69 73 20 74 68 65 20 6e 75 6d  ger N is the num
1d4b0 62 65 72 20 6f 66 20 62 79 74 65 73 20 77 65 20  ber of bytes we 
1d4c0 61 72 65 20 74 72 79 69 6e 67 20 74 6f 20 72 65  are trying to re
1d4d0 6c 65 61 73 65 2e 20 20 54 68 65 20 0a 2a 2a 20  lease.  The .** 
1d4e0 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20  return value is 
1d4f0 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65  the amount of me
1d500 6d 6f 72 79 20 61 63 74 75 61 6c 6c 79 20 72 65  mory actually re
1d510 6c 65 61 73 65 64 2e 0a 2a 2f 0a 73 74 61 74 69  leased..*/.stati
1d520 63 20 69 6e 74 20 74 65 73 74 5f 72 65 6c 65 61  c int test_relea
1d530 73 65 5f 6d 65 6d 6f 72 79 28 0a 20 20 76 6f 69  se_memory(.  voi
1d540 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
1d550 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
1d560 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
1d570 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
1d580 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66  ST objv[].){.#if
1d590 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1d5a0 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d5b0 4e 41 47 45 4d 45 4e 54 29 20 26 26 20 21 64 65  NAGEMENT) && !de
1d5c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1d5d0 54 5f 44 49 53 4b 49 4f 29 0a 20 20 69 6e 74 20  T_DISKIO).  int 
1d5e0 4e 3b 0a 20 20 69 6e 74 20 61 6d 74 3b 0a 20 20  N;.  int amt;.  
1d5f0 69 66 28 20 6f 62 6a 63 21 3d 31 20 26 26 20 6f  if( objc!=1 && o
1d600 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
1d610 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
1d620 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
1d630 22 3f 4e 3f 22 29 3b 0a 20 20 20 20 72 65 74 75  "?N?");.    retu
1d640 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1d650 7d 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d 32 20  }.  if( objc==2 
1d660 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47  ){.    if( Tcl_G
1d670 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
1d680 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 4e  erp, objv[1], &N
1d690 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
1d6a0 52 52 4f 52 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  RROR;.  }else{. 
1d6b0 20 20 20 4e 20 3d 20 2d 31 3b 0a 20 20 7d 0a 20     N = -1;.  }. 
1d6c0 20 61 6d 74 20 3d 20 73 71 6c 69 74 65 33 5f 72   amt = sqlite3_r
1d6d0 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 4e 29  elease_memory(N)
1d6e0 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
1d6f0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
1d700 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 6d 74 29 29  _NewIntObj(amt))
1d710 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  ;.#endif.  retur
1d720 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
1d730 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74  ** Usage:  sqlit
1d740 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  e3_soft_heap_lim
1d750 69 74 20 3f 4e 3f 0a 2a 2a 0a 2a 2a 20 51 75 65  it ?N?.**.** Que
1d760 72 79 20 6f 72 20 73 65 74 20 74 68 65 20 73 6f  ry or set the so
1d770 66 74 20 68 65 61 70 20 6c 69 6d 69 74 20 66 6f  ft heap limit fo
1d780 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 68  r the current th
1d790 72 65 61 64 2e 20 20 54 68 65 0a 2a 2a 20 6c 69  read.  The.** li
1d7a0 6d 69 74 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e  mit is only chan
1d7b0 67 65 64 20 69 66 20 74 68 65 20 4e 20 69 73 20  ged if the N is 
1d7c0 70 72 65 73 65 6e 74 2e 20 20 54 68 65 20 70 72  present.  The pr
1d7d0 65 76 69 6f 75 73 20 6c 69 6d 69 74 0a 2a 2a 20  evious limit.** 
1d7e0 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a  is returned..*/.
1d7f0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
1d800 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 28  soft_heap_limit(
1d810 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
1d820 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
1d830 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
1d840 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
1d850 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
1d860 29 7b 0a 20 20 73 74 61 74 69 63 20 69 6e 74 20  ){.  static int 
1d870 73 6f 66 74 48 65 61 70 4c 69 6d 69 74 20 3d 20  softHeapLimit = 
1d880 30 3b 0a 20 20 69 6e 74 20 61 6d 74 3b 0a 20 20  0;.  int amt;.  
1d890 69 66 28 20 6f 62 6a 63 21 3d 31 20 26 26 20 6f  if( objc!=1 && o
1d8a0 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
1d8b0 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
1d8c0 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
1d8d0 22 3f 4e 3f 22 29 3b 0a 20 20 20 20 72 65 74 75  "?N?");.    retu
1d8e0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1d8f0 7d 0a 20 20 61 6d 74 20 3d 20 73 6f 66 74 48 65  }.  amt = softHe
1d900 61 70 4c 69 6d 69 74 3b 0a 20 20 69 66 28 20 6f  apLimit;.  if( o
1d910 62 6a 63 3d 3d 32 20 29 7b 0a 20 20 20 20 69 6e  bjc==2 ){.    in
1d920 74 20 4e 3b 0a 20 20 20 20 69 66 28 20 54 63 6c  t N;.    if( Tcl
1d930 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
1d940 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20  nterp, objv[1], 
1d950 26 4e 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  &N) ) return TCL
1d960 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
1d970 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69  te3_soft_heap_li
1d980 6d 69 74 28 4e 29 3b 0a 20 20 20 20 73 6f 66 74  mit(N);.    soft
1d990 48 65 61 70 4c 69 6d 69 74 20 3d 20 4e 3b 0a 20  HeapLimit = N;. 
1d9a0 20 7d 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52   }.  Tcl_SetObjR
1d9b0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
1d9c0 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 6d 74 29  l_NewIntObj(amt)
1d9d0 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
1d9e0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
1d9f0 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 74 68  ge:   sqlite3_th
1da00 72 65 61 64 5f 63 6c 65 61 6e 75 70 0a 2a 2a 0a  read_cleanup.**.
1da10 2a 2a 20 43 61 6c 6c 20 74 68 65 20 73 71 6c 69  ** Call the sqli
1da20 74 65 33 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e  te3_thread_clean
1da30 75 70 20 41 50 49 2e 0a 2a 2f 0a 73 74 61 74 69  up API..*/.stati
1da40 63 20 69 6e 74 20 74 65 73 74 5f 74 68 72 65 61  c int test_threa
1da50 64 5f 63 6c 65 61 6e 75 70 28 0a 20 20 76 6f 69  d_cleanup(.  voi
1da60 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
1da70 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
1da80 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
1da90 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
1daa0 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66  ST objv[].){.#if
1dab0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1dac0 5f 44 45 50 52 45 43 41 54 45 44 0a 20 20 73 71  _DEPRECATED.  sq
1dad0 6c 69 74 65 33 5f 74 68 72 65 61 64 5f 63 6c 65  lite3_thread_cle
1dae0 61 6e 75 70 28 29 3b 0a 23 65 6e 64 69 66 0a 20  anup();.#endif. 
1daf0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
1db00 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
1db10 20 20 73 71 6c 69 74 65 33 5f 70 61 67 65 72 5f    sqlite3_pager_
1db20 72 65 66 63 6f 75 6e 74 73 20 20 44 42 0a 2a 2a  refcounts  DB.**
1db30 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 6c 69 73  .** Return a lis
1db40 74 20 6f 66 20 6e 75 6d 62 65 72 73 20 77 68 69  t of numbers whi
1db50 63 68 20 61 72 65 20 74 68 65 20 50 61 67 65 72  ch are the Pager
1db60 52 65 66 63 6f 75 6e 74 20 66 6f 72 20 61 6c 6c  Refcount for all
1db70 0a 2a 2a 20 70 61 67 65 72 73 20 6f 6e 20 65 61  .** pagers on ea
1db80 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
1db90 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69  ection..*/.stati
1dba0 63 20 69 6e 74 20 74 65 73 74 5f 70 61 67 65 72  c int test_pager
1dbb0 5f 72 65 66 63 6f 75 6e 74 73 28 0a 20 20 76 6f  _refcounts(.  vo
1dbc0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
1dbd0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1dbe0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
1dbf0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
1dc00 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
1dc10 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
1dc20 6e 74 20 69 3b 0a 20 20 69 6e 74 20 76 2c 20 2a  nt i;.  int v, *
1dc30 61 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 52  a;.  Tcl_Obj *pR
1dc40 65 73 75 6c 74 3b 0a 0a 20 20 69 66 28 20 6f 62  esult;..  if( ob
1dc50 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
1dc60 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
1dc70 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
1dc80 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
1dc90 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  "",.        Tcl_
1dca0 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
1dcb0 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20  (objv[0], 0), " 
1dcc0 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  DB", 0);.    ret
1dcd0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1dce0 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
1dcf0 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
1dd00 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
1dd10 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
1dd20 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1dd30 20 70 52 65 73 75 6c 74 20 3d 20 54 63 6c 5f 4e   pResult = Tcl_N
1dd40 65 77 4f 62 6a 28 29 3b 0a 20 20 66 6f 72 28 69  ewObj();.  for(i
1dd50 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
1dd60 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d  ++){.    if( db-
1dd70 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20 29  >aDb[i].pBt==0 )
1dd80 7b 0a 20 20 20 20 20 20 76 20 3d 20 2d 31 3b 0a  {.      v = -1;.
1dd90 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1dda0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65   sqlite3_mutex_e
1ddb0 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29 3b  nter(db->mutex);
1ddc0 0a 20 20 20 20 20 20 61 20 3d 20 73 71 6c 69 74  .      a = sqlit
1ddd0 65 33 50 61 67 65 72 53 74 61 74 73 28 73 71 6c  e3PagerStats(sql
1dde0 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 64  ite3BtreePager(d
1ddf0 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29 29 3b  b->aDb[i].pBt));
1de00 0a 20 20 20 20 20 20 76 20 3d 20 61 5b 30 5d 3b  .      v = a[0];
1de10 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d  .      sqlite3_m
1de20 75 74 65 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d  utex_leave(db->m
1de30 75 74 65 78 29 3b 0a 20 20 20 20 7d 0a 20 20 20  utex);.    }.   
1de40 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
1de50 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65  ndElement(0, pRe
1de60 73 75 6c 74 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  sult, Tcl_NewInt
1de70 4f 62 6a 28 76 29 29 3b 0a 20 20 7d 0a 20 20 54  Obj(v));.  }.  T
1de80 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
1de90 69 6e 74 65 72 70 2c 20 70 52 65 73 75 6c 74 29  interp, pResult)
1dea0 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
1deb0 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c  K;.}.../*.** tcl
1dec0 63 6d 64 3a 20 20 20 77 6f 72 6b 69 6e 67 5f 36  cmd:   working_6
1ded0 34 62 69 74 5f 69 6e 74 0a 2a 2a 0a 2a 2a 20 53  4bit_int.**.** S
1dee0 6f 6d 65 20 54 43 4c 20 62 75 69 6c 64 73 20 28  ome TCL builds (
1def0 65 78 3a 20 63 79 67 77 69 6e 29 20 64 6f 20 6e  ex: cygwin) do n
1df00 6f 74 20 73 75 70 70 6f 72 74 20 36 34 2d 62 69  ot support 64-bi
1df10 74 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 69  t integers.  Thi
1df20 73 0a 2a 2a 20 6c 65 61 64 73 20 74 6f 20 61 20  s.** leads to a 
1df30 6e 75 6d 62 65 72 20 6f 66 20 74 65 73 74 20 66  number of test f
1df40 61 69 6c 75 72 65 73 2e 20 20 54 68 65 20 70 72  ailures.  The pr
1df50 65 73 65 6e 74 20 63 6f 6d 6d 61 6e 64 20 63 68  esent command ch
1df60 65 63 6b 73 20 74 68 65 0a 2a 2a 20 54 43 4c 20  ecks the.** TCL 
1df70 62 75 69 6c 64 20 74 6f 20 73 65 65 20 77 68 65  build to see whe
1df80 74 68 65 72 20 6f 72 20 6e 6f 74 20 69 74 20 73  ther or not it s
1df90 75 70 70 6f 72 74 73 20 36 34 2d 62 69 74 20 69  upports 64-bit i
1dfa0 6e 74 65 67 65 72 73 2e 20 20 49 74 0a 2a 2a 20  ntegers.  It.** 
1dfb0 72 65 74 75 72 6e 73 20 54 52 55 45 20 69 66 20  returns TRUE if 
1dfc0 69 74 20 64 6f 65 73 20 61 6e 64 20 46 41 4c 53  it does and FALS
1dfd0 45 20 69 66 20 6e 6f 74 2e 0a 2a 2a 0a 2a 2a 20  E if not..**.** 
1dfe0 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20  This command is 
1dff0 75 73 65 64 20 74 6f 20 77 61 72 6e 20 75 73 65  used to warn use
1e000 72 73 20 74 68 61 74 20 74 68 65 69 72 20 54 43  rs that their TC
1e010 4c 20 62 75 69 6c 64 20 69 73 20 64 65 66 65 63  L build is defec
1e020 74 69 76 65 0a 2a 2a 20 61 6e 64 20 74 68 61 74  tive.** and that
1e030 20 74 68 65 20 65 72 72 6f 72 73 20 74 68 65 79   the errors they
1e040 20 61 72 65 20 73 65 65 69 6e 67 20 69 6e 20 74   are seeing in t
1e050 68 65 20 74 65 73 74 20 73 63 72 69 70 74 73 20  he test scripts 
1e060 6d 69 67 68 74 20 62 65 0a 2a 2a 20 61 20 72 65  might be.** a re
1e070 73 75 6c 74 20 6f 66 20 74 68 65 69 72 20 64 65  sult of their de
1e080 66 65 63 74 69 76 65 20 54 43 4c 20 72 61 74 68  fective TCL rath
1e090 65 72 20 74 68 61 6e 20 70 72 6f 62 6c 65 6d 73  er than problems
1e0a0 20 69 6e 20 53 51 4c 69 74 65 2e 0a 2a 2f 0a 73   in SQLite..*/.s
1e0b0 74 61 74 69 63 20 69 6e 74 20 77 6f 72 6b 69 6e  tatic int workin
1e0c0 67 5f 36 34 62 69 74 5f 69 6e 74 28 0a 20 20 43  g_64bit_int(.  C
1e0d0 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
1e0e0 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72  Data, /* Pointer
1e0f0 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62   to sqlite3_enab
1e100 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20  le_XXX function 
1e110 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  */.  Tcl_Interp 
1e120 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
1e130 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
1e140 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
1e150 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
1e160 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20    int objc,     
1e170 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1e180 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
1e190 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  */.  Tcl_Obj *CO
1e1a0 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43  NST objv[]  /* C
1e1b0 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73  ommand arguments
1e1c0 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 4f 62 6a   */.){.  Tcl_Obj
1e1d0 20 2a 70 54 65 73 74 4f 62 6a 3b 0a 20 20 69 6e   *pTestObj;.  in
1e1e0 74 20 77 6f 72 6b 69 6e 67 20 3d 20 30 3b 0a 0a  t working = 0;..
1e1f0 20 20 70 54 65 73 74 4f 62 6a 20 3d 20 54 63 6c    pTestObj = Tcl
1e200 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 31  _NewWideIntObj(1
1e210 30 30 30 30 30 30 2a 28 69 36 34 29 31 32 33 34  000000*(i64)1234
1e220 35 36 37 38 39 30 29 3b 0a 20 20 77 6f 72 6b 69  567890);.  worki
1e230 6e 67 20 3d 20 73 74 72 63 6d 70 28 54 63 6c 5f  ng = strcmp(Tcl_
1e240 47 65 74 53 74 72 69 6e 67 28 70 54 65 73 74 4f  GetString(pTestO
1e250 62 6a 29 2c 20 22 31 32 33 34 35 36 37 38 39 30  bj), "1234567890
1e260 30 30 30 30 30 30 22 29 3d 3d 30 3b 0a 20 20 54  000000")==0;.  T
1e270 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
1e280 70 54 65 73 74 4f 62 6a 29 3b 0a 20 20 54 63 6c  pTestObj);.  Tcl
1e290 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
1e2a0 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f  terp, Tcl_NewBoo
1e2b0 6c 65 61 6e 4f 62 6a 28 77 6f 72 6b 69 6e 67 29  leanObj(working)
1e2c0 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
1e2d0 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 74 63  OK;.}.../*.** tc
1e2e0 6c 63 6d 64 3a 20 20 20 76 66 73 5f 75 6e 6c 69  lcmd:   vfs_unli
1e2f0 6e 6b 5f 74 65 73 74 0a 2a 2a 0a 2a 2a 20 54 68  nk_test.**.** Th
1e300 69 73 20 54 43 4c 20 63 6f 6d 6d 61 6e 64 20 75  is TCL command u
1e310 6e 72 65 67 69 73 74 65 72 73 20 74 68 65 20 70  nregisters the p
1e320 72 69 6d 61 72 79 20 56 46 53 20 61 6e 64 20 74  rimary VFS and t
1e330 68 65 6e 20 72 65 67 69 73 74 65 72 73 0a 2a 2a  hen registers.**
1e340 20 69 74 20 62 61 63 6b 20 61 67 61 69 6e 2e 20   it back again. 
1e350 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
1e360 20 74 65 73 74 20 74 68 65 20 61 62 69 6c 69 74   test the abilit
1e370 79 20 74 6f 20 72 65 67 69 73 74 65 72 20 61 0a  y to register a.
1e380 2a 2a 20 56 46 53 20 77 68 65 6e 20 6e 6f 6e 65  ** VFS when none
1e390 20 61 72 65 20 70 72 65 76 69 6f 75 73 6c 79 20   are previously 
1e3a0 72 65 67 69 73 74 65 72 65 64 2c 20 61 6e 64 20  registered, and 
1e3b0 74 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20 0a  the ability to .
1e3c0 2a 2a 20 75 6e 72 65 67 69 73 74 65 72 20 74 68  ** unregister th
1e3d0 65 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65  e only available
1e3e0 20 56 46 53 2e 20 20 54 69 63 6b 65 74 20 23 32   VFS.  Ticket #2
1e3f0 37 33 38 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  738.*/.static in
1e400 74 20 76 66 73 5f 75 6e 6c 69 6e 6b 5f 74 65 73  t vfs_unlink_tes
1e410 74 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20  t(.  ClientData 
1e420 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50  clientData, /* P
1e430 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ointer to sqlite
1e440 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e  3_enable_XXX fun
1e450 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49  ction */.  Tcl_I
1e460 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
1e470 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
1e480 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
1e490 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
1e4a0 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63  nd */.  int objc
1e4b0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1e4c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
1e4d0 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f  ments */.  Tcl_O
1e4e0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
1e4f0 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67    /* Command arg
1e500 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69  uments */.){.  i
1e510 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt i;.  sqlite3_
1e520 76 66 73 20 2a 70 4d 61 69 6e 3b 0a 20 20 73 71  vfs *pMain;.  sq
1e530 6c 69 74 65 33 5f 76 66 73 20 2a 61 70 56 66 73  lite3_vfs *apVfs
1e540 5b 32 30 5d 3b 0a 20 20 73 71 6c 69 74 65 33 5f  [20];.  sqlite3_
1e550 76 66 73 20 6f 6e 65 2c 20 74 77 6f 3b 0a 0a 20  vfs one, two;.. 
1e560 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 75 6e 72   sqlite3_vfs_unr
1e570 65 67 69 73 74 65 72 28 30 29 3b 20 20 20 2f 2a  egister(0);   /*
1e580 20 55 6e 72 65 67 69 73 74 65 72 20 6f 66 20 4e   Unregister of N
1e590 55 4c 4c 20 69 73 20 68 61 72 6d 6c 65 73 73 20  ULL is harmless 
1e5a0 2a 2f 0a 20 20 6f 6e 65 2e 7a 4e 61 6d 65 20 3d  */.  one.zName =
1e5b0 20 22 5f 5f 6f 6e 65 22 3b 0a 20 20 74 77 6f 2e   "__one";.  two.
1e5c0 7a 4e 61 6d 65 20 3d 20 22 5f 5f 74 77 6f 22 3b  zName = "__two";
1e5d0 0a 0a 20 20 2f 2a 20 43 61 6c 6c 69 6e 67 20 73  ..  /* Calling s
1e5e0 71 6c 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73  qlite3_vfs_regis
1e5f0 74 65 72 20 77 69 74 68 20 32 6e 64 20 61 72 67  ter with 2nd arg
1e600 75 6d 65 6e 74 20 6f 66 20 30 20 64 6f 65 73 20  ument of 0 does 
1e610 6e 6f 74 0a 20 20 2a 2a 20 63 68 61 6e 67 65 20  not.  ** change 
1e620 74 68 65 20 64 65 66 61 75 6c 74 20 56 46 53 0a  the default VFS.
1e630 20 20 2a 2f 0a 20 20 70 4d 61 69 6e 20 3d 20 73    */.  pMain = s
1e640 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28  qlite3_vfs_find(
1e650 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66  0);.  sqlite3_vf
1e660 73 5f 72 65 67 69 73 74 65 72 28 26 6f 6e 65 2c  s_register(&one,
1e670 20 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70   0);.  assert( p
1e680 4d 61 69 6e 3d 3d 30 20 7c 7c 20 70 4d 61 69 6e  Main==0 || pMain
1e690 3d 3d 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69  ==sqlite3_vfs_fi
1e6a0 6e 64 28 30 29 20 29 3b 0a 20 20 73 71 6c 69 74  nd(0) );.  sqlit
1e6b0 65 33 5f 76 66 73 5f 72 65 67 69 73 74 65 72 28  e3_vfs_register(
1e6c0 26 74 77 6f 2c 20 30 29 3b 0a 20 20 61 73 73 65  &two, 0);.  asse
1e6d0 72 74 28 20 70 4d 61 69 6e 3d 3d 30 20 7c 7c 20  rt( pMain==0 || 
1e6e0 70 4d 61 69 6e 3d 3d 73 71 6c 69 74 65 33 5f 76  pMain==sqlite3_v
1e6f0 66 73 5f 66 69 6e 64 28 30 29 20 29 3b 0a 0a 20  fs_find(0) );.. 
1e700 20 2f 2a 20 57 65 20 63 61 6e 20 66 69 6e 64 20   /* We can find 
1e710 61 20 56 46 53 20 62 79 20 69 74 73 20 6e 61 6d  a VFS by its nam
1e720 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 73  e */.  assert( s
1e730 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28  qlite3_vfs_find(
1e740 22 5f 5f 6f 6e 65 22 29 3d 3d 26 6f 6e 65 20 29  "__one")==&one )
1e750 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
1e760 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 22 5f 5f  te3_vfs_find("__
1e770 74 77 6f 22 29 3d 3d 26 74 77 6f 20 29 3b 0a 0a  two")==&two );..
1e780 20 20 2f 2a 20 43 61 6c 6c 69 6e 67 20 73 71 6c    /* Calling sql
1e790 69 74 65 5f 76 66 73 5f 72 65 67 69 73 74 65 72  ite_vfs_register
1e7a0 20 77 69 74 68 20 6e 6f 6e 2d 7a 65 72 6f 20 73   with non-zero s
1e7b0 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20  econd parameter 
1e7c0 63 68 61 6e 67 65 73 20 74 68 65 0a 20 20 2a 2a  changes the.  **
1e7d0 20 64 65 66 61 75 6c 74 20 56 46 53 2c 20 65 76   default VFS, ev
1e7e0 65 6e 20 69 66 20 74 68 65 20 31 73 74 20 70 61  en if the 1st pa
1e7f0 72 61 6d 65 74 65 72 20 69 73 20 61 6e 20 65 78  rameter is an ex
1e800 69 73 74 69 67 20 56 46 53 20 74 68 61 74 20 69  istig VFS that i
1e810 73 0a 20 20 2a 2a 20 70 72 65 76 69 6f 75 73 6c  s.  ** previousl
1e820 79 20 72 65 67 69 73 74 65 72 65 64 20 61 73 20  y registered as 
1e830 74 68 65 20 6e 6f 6e 2d 64 65 66 61 75 6c 74 2e  the non-default.
1e840 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  .  */.  sqlite3_
1e850 76 66 73 5f 72 65 67 69 73 74 65 72 28 26 6f 6e  vfs_register(&on
1e860 65 2c 20 31 29 3b 0a 20 20 61 73 73 65 72 74 28  e, 1);.  assert(
1e870 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e   sqlite3_vfs_fin
1e880 64 28 22 5f 5f 6f 6e 65 22 29 3d 3d 26 6f 6e 65  d("__one")==&one
1e890 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
1e8a0 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 22  lite3_vfs_find("
1e8b0 5f 5f 74 77 6f 22 29 3d 3d 26 74 77 6f 20 29 3b  __two")==&two );
1e8c0 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
1e8d0 65 33 5f 76 66 73 5f 66 69 6e 64 28 30 29 3d 3d  e3_vfs_find(0)==
1e8e0 26 6f 6e 65 20 29 3b 0a 20 20 73 71 6c 69 74 65  &one );.  sqlite
1e8f0 33 5f 76 66 73 5f 72 65 67 69 73 74 65 72 28 26  3_vfs_register(&
1e900 74 77 6f 2c 20 31 29 3b 0a 20 20 61 73 73 65 72  two, 1);.  asser
1e910 74 28 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66  t( sqlite3_vfs_f
1e920 69 6e 64 28 22 5f 5f 6f 6e 65 22 29 3d 3d 26 6f  ind("__one")==&o
1e930 6e 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ne );.  assert( 
1e940 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
1e950 28 22 5f 5f 74 77 6f 22 29 3d 3d 26 74 77 6f 20  ("__two")==&two 
1e960 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
1e970 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 30 29  ite3_vfs_find(0)
1e980 3d 3d 26 74 77 6f 20 29 3b 0a 20 20 69 66 28 20  ==&two );.  if( 
1e990 70 4d 61 69 6e 20 29 7b 0a 20 20 20 20 73 71 6c  pMain ){.    sql
1e9a0 69 74 65 33 5f 76 66 73 5f 72 65 67 69 73 74 65  ite3_vfs_registe
1e9b0 72 28 70 4d 61 69 6e 2c 20 31 29 3b 0a 20 20 20  r(pMain, 1);.   
1e9c0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1e9d0 5f 76 66 73 5f 66 69 6e 64 28 22 5f 5f 6f 6e 65  _vfs_find("__one
1e9e0 22 29 3d 3d 26 6f 6e 65 20 29 3b 0a 20 20 20 20  ")==&one );.    
1e9f0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f  assert( sqlite3_
1ea00 76 66 73 5f 66 69 6e 64 28 22 5f 5f 74 77 6f 22  vfs_find("__two"
1ea10 29 3d 3d 26 74 77 6f 20 29 3b 0a 20 20 20 20 61  )==&two );.    a
1ea20 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 76  ssert( sqlite3_v
1ea30 66 73 5f 66 69 6e 64 28 30 29 3d 3d 70 4d 61 69  fs_find(0)==pMai
1ea40 6e 20 29 3b 0a 20 20 7d 0a 20 20 0a 20 20 2f 2a  n );.  }.  .  /*
1ea50 20 55 6e 6c 69 6e 6b 20 74 68 65 20 64 65 66 61   Unlink the defa
1ea60 75 6c 74 20 56 46 53 2e 20 20 52 65 70 65 61 74  ult VFS.  Repeat
1ea70 20 75 6e 74 69 6c 20 74 68 65 72 65 20 61 72 65   until there are
1ea80 20 6e 6f 20 6d 6f 72 65 20 56 46 53 65 73 0a 20   no more VFSes. 
1ea90 20 2a 2a 20 72 65 67 69 73 74 65 72 65 64 2e 0a   ** registered..
1eaa0 20 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20    */.  for(i=0; 
1eab0 69 3c 73 69 7a 65 6f 66 28 61 70 56 66 73 29 2f  i<sizeof(apVfs)/
1eac0 73 69 7a 65 6f 66 28 61 70 56 66 73 5b 30 5d 29  sizeof(apVfs[0])
1ead0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 70 56 66  ; i++){.    apVf
1eae0 73 5b 69 5d 20 3d 20 73 71 6c 69 74 65 33 5f 76  s[i] = sqlite3_v
1eaf0 66 73 5f 66 69 6e 64 28 30 29 3b 0a 20 20 20 20  fs_find(0);.    
1eb00 69 66 28 20 61 70 56 66 73 5b 69 5d 20 29 7b 0a  if( apVfs[i] ){.
1eb10 20 20 20 20 20 20 61 73 73 65 72 74 28 20 61 70        assert( ap
1eb20 56 66 73 5b 69 5d 3d 3d 73 71 6c 69 74 65 33 5f  Vfs[i]==sqlite3_
1eb30 76 66 73 5f 66 69 6e 64 28 61 70 56 66 73 5b 69  vfs_find(apVfs[i
1eb40 5d 2d 3e 7a 4e 61 6d 65 29 20 29 3b 0a 20 20 20  ]->zName) );.   
1eb50 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 75     sqlite3_vfs_u
1eb60 6e 72 65 67 69 73 74 65 72 28 61 70 56 66 73 5b  nregister(apVfs[
1eb70 69 5d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  i]);.      asser
1eb80 74 28 20 30 3d 3d 73 71 6c 69 74 65 33 5f 76 66  t( 0==sqlite3_vf
1eb90 73 5f 66 69 6e 64 28 61 70 56 66 73 5b 69 5d 2d  s_find(apVfs[i]-
1eba0 3e 7a 4e 61 6d 65 29 20 29 3b 0a 20 20 20 20 7d  >zName) );.    }
1ebb0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 30  .  }.  assert( 0
1ebc0 3d 3d 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69  ==sqlite3_vfs_fi
1ebd0 6e 64 28 30 29 20 29 3b 0a 20 20 0a 20 20 2f 2a  nd(0) );.  .  /*
1ebe0 20 52 65 67 69 73 74 65 72 20 74 68 65 20 6d 61   Register the ma
1ebf0 69 6e 20 56 46 53 20 61 73 20 6e 6f 6e 2d 64 65  in VFS as non-de
1ec00 66 61 75 6c 74 20 28 77 69 6c 6c 20 62 65 20 6d  fault (will be m
1ec10 61 64 65 20 64 65 66 61 75 6c 74 2c 20 73 69 6e  ade default, sin
1ec20 63 65 0a 20 20 2a 2a 20 69 74 27 6c 6c 20 62 65  ce.  ** it'll be
1ec30 20 74 68 65 20 6f 6e 6c 79 20 6f 6e 65 20 69 6e   the only one in
1ec40 20 65 78 69 73 74 65 6e 63 65 29 2e 0a 20 20 2a   existence)..  *
1ec50 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 5f  /.  sqlite3_vfs_
1ec60 72 65 67 69 73 74 65 72 28 70 4d 61 69 6e 2c 20  register(pMain, 
1ec70 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71  0);.  assert( sq
1ec80 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 30  lite3_vfs_find(0
1ec90 29 3d 3d 70 4d 61 69 6e 20 29 3b 0a 20 20 0a 20  )==pMain );.  . 
1eca0 20 2f 2a 20 55 6e 2d 72 65 67 69 73 74 65 72 20   /* Un-register 
1ecb0 74 68 65 20 6d 61 69 6e 20 56 46 53 20 61 67 61  the main VFS aga
1ecc0 69 6e 20 74 6f 20 72 65 73 74 6f 72 65 20 61 6e  in to restore an
1ecd0 20 65 6d 70 74 79 20 56 46 53 20 6c 69 73 74 20   empty VFS list 
1ece0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73  */.  sqlite3_vfs
1ecf0 5f 75 6e 72 65 67 69 73 74 65 72 28 70 4d 61 69  _unregister(pMai
1ed00 6e 29 3b 0a 20 20 61 73 73 65 72 74 28 20 30 3d  n);.  assert( 0=
1ed10 3d 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e  =sqlite3_vfs_fin
1ed20 64 28 30 29 20 29 3b 0a 0a 20 20 2f 2a 20 52 65  d(0) );..  /* Re
1ed30 6c 69 6e 6b 20 61 6c 6c 20 56 46 53 65 73 20 69  link all VFSes i
1ed40 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2e  n reverse order.
1ed50 20 2a 2f 20 20 0a 20 20 66 6f 72 28 69 3d 73 69   */  .  for(i=si
1ed60 7a 65 6f 66 28 61 70 56 66 73 29 2f 73 69 7a 65  zeof(apVfs)/size
1ed70 6f 66 28 61 70 56 66 73 5b 30 5d 29 2d 31 3b 20  of(apVfs[0])-1; 
1ed80 69 3e 3d 30 3b 20 69 2d 2d 29 7b 0a 20 20 20 20  i>=0; i--){.    
1ed90 69 66 28 20 61 70 56 66 73 5b 69 5d 20 29 7b 0a  if( apVfs[i] ){.
1eda0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66        sqlite3_vf
1edb0 73 5f 72 65 67 69 73 74 65 72 28 61 70 56 66 73  s_register(apVfs
1edc0 5b 69 5d 2c 20 31 29 3b 0a 20 20 20 20 20 20 61  [i], 1);.      a
1edd0 73 73 65 72 74 28 20 61 70 56 66 73 5b 69 5d 3d  ssert( apVfs[i]=
1ede0 3d 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e  =sqlite3_vfs_fin
1edf0 64 28 30 29 20 29 3b 0a 20 20 20 20 20 20 61 73  d(0) );.      as
1ee00 73 65 72 74 28 20 61 70 56 66 73 5b 69 5d 3d 3d  sert( apVfs[i]==
1ee10 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
1ee20 28 61 70 56 66 73 5b 69 5d 2d 3e 7a 4e 61 6d 65  (apVfs[i]->zName
1ee30 29 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  ) );.    }.  }..
1ee40 20 20 2f 2a 20 55 6e 72 65 67 69 73 74 65 72 20    /* Unregister 
1ee50 6f 75 74 20 73 61 6d 70 6c 65 20 56 46 53 65 73  out sample VFSes
1ee60 2e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  . */.  sqlite3_v
1ee70 66 73 5f 75 6e 72 65 67 69 73 74 65 72 28 26 6f  fs_unregister(&o
1ee80 6e 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  ne);.  sqlite3_v
1ee90 66 73 5f 75 6e 72 65 67 69 73 74 65 72 28 26 74  fs_unregister(&t
1eea0 77 6f 29 3b 0a 0a 20 20 2f 2a 20 55 6e 72 65 67  wo);..  /* Unreg
1eeb0 69 73 74 65 72 69 6e 67 20 61 20 56 46 53 20 74  istering a VFS t
1eec0 68 61 74 20 69 73 20 6e 6f 74 20 63 75 72 72 65  hat is not curre
1eed0 6e 74 6c 79 20 72 65 67 69 73 74 65 72 65 64 20  ntly registered 
1eee0 69 73 20 68 61 72 6d 6c 65 73 73 20 2a 2f 0a 20  is harmless */. 
1eef0 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 75 6e 72   sqlite3_vfs_unr
1ef00 65 67 69 73 74 65 72 28 26 6f 6e 65 29 3b 0a 20  egister(&one);. 
1ef10 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 75 6e 72   sqlite3_vfs_unr
1ef20 65 67 69 73 74 65 72 28 26 74 77 6f 29 3b 0a 20  egister(&two);. 
1ef30 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1ef40 5f 76 66 73 5f 66 69 6e 64 28 22 5f 5f 6f 6e 65  _vfs_find("__one
1ef50 22 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ")==0 );.  asser
1ef60 74 28 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66  t( sqlite3_vfs_f
1ef70 69 6e 64 28 22 5f 5f 74 77 6f 22 29 3d 3d 30 20  ind("__two")==0 
1ef80 29 3b 0a 0a 20 20 2f 2a 20 57 65 20 73 68 6f 75  );..  /* We shou
1ef90 6c 64 20 62 65 20 6c 65 66 74 20 77 69 74 68 20  ld be left with 
1efa0 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 64 65 66  the original def
1efb0 61 75 6c 74 20 56 46 53 20 62 61 63 6b 20 61 73  ault VFS back as
1efc0 20 74 68 65 0a 20 20 2a 2a 20 6f 72 69 67 69 6e   the.  ** origin
1efd0 61 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  al */.  assert( 
1efe0 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64  sqlite3_vfs_find
1eff0 28 30 29 3d 3d 70 4d 61 69 6e 20 29 3b 0a 0a 20  (0)==pMain );.. 
1f000 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
1f010 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a  }../*.** tclcmd:
1f020 20 20 20 76 66 73 5f 69 6e 69 74 66 61 69 6c 5f     vfs_initfail_
1f030 74 65 73 74 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  test.**.** This 
1f040 54 43 4c 20 63 6f 6d 6d 61 6e 64 20 61 74 74 65  TCL command atte
1f050 6d 70 74 73 20 74 6f 20 76 66 73 5f 66 69 6e 64  mpts to vfs_find
1f060 20 61 6e 64 20 76 66 73 5f 72 65 67 69 73 74 65   and vfs_registe
1f070 72 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 71  r when the.** sq
1f080 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
1f090 28 29 20 69 6e 74 65 72 66 61 63 65 20 69 73 20  () interface is 
1f0a0 66 61 69 6c 69 6e 67 2e 20 20 41 6c 6c 20 63 61  failing.  All ca
1f0b0 6c 6c 73 20 73 68 6f 75 6c 64 20 66 61 69 6c 2e  lls should fail.
1f0c0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 76  .*/.static int v
1f0d0 66 73 5f 69 6e 69 74 66 61 69 6c 5f 74 65 73 74  fs_initfail_test
1f0e0 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63  (.  ClientData c
1f0f0 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f  lientData, /* Po
1f100 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  inter to sqlite3
1f110 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63  _enable_XXX func
1f120 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  tion */.  Tcl_In
1f130 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
1f140 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
1f150 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
1f160 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
1f170 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  d */.  int objc,
1f180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f190 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
1f1a0 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62  ents */.  Tcl_Ob
1f1b0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20  j *CONST objv[] 
1f1c0 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
1f1d0 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 73 71  ments */.){.  sq
1f1e0 6c 69 74 65 33 5f 76 66 73 20 6f 6e 65 3b 0a 20  lite3_vfs one;. 
1f1f0 20 6f 6e 65 2e 7a 4e 61 6d 65 20 3d 20 22 5f 5f   one.zName = "__
1f200 6f 6e 65 22 3b 0a 0a 20 20 69 66 28 20 73 71 6c  one";..  if( sql
1f210 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 30 29  ite3_vfs_find(0)
1f220 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
1f230 52 4f 52 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  ROR;.  sqlite3_v
1f240 66 73 5f 72 65 67 69 73 74 65 72 28 26 6f 6e 65  fs_register(&one
1f250 2c 20 30 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  , 0);.  if( sqli
1f260 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 30 29 20  te3_vfs_find(0) 
1f270 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
1f280 4f 52 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66  OR;.  sqlite3_vf
1f290 73 5f 72 65 67 69 73 74 65 72 28 26 6f 6e 65 2c  s_register(&one,
1f2a0 20 31 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74   1);.  if( sqlit
1f2b0 65 33 5f 76 66 73 5f 66 69 6e 64 28 30 29 20 29  e3_vfs_find(0) )
1f2c0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1f2d0 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  R;.  return TCL_
1f2e0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 53 61 76  OK;.}../*.** Sav
1f2f0 65 64 20 56 46 53 65 73 0a 2a 2f 0a 73 74 61 74  ed VFSes.*/.stat
1f300 69 63 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ic sqlite3_vfs *
1f310 61 70 56 66 73 5b 32 30 5d 3b 0a 73 74 61 74 69  apVfs[20];.stati
1f320 63 20 69 6e 74 20 6e 56 66 73 20 3d 20 30 3b 0a  c int nVfs = 0;.
1f330 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20 20  ./*.** tclcmd:  
1f340 20 76 66 73 5f 75 6e 72 65 67 69 73 74 65 72 5f   vfs_unregister_
1f350 61 6c 6c 0a 2a 2a 0a 2a 2a 20 55 6e 72 65 67 69  all.**.** Unregi
1f360 73 74 65 72 20 61 6c 6c 20 56 46 53 65 73 2e 0a  ster all VFSes..
1f370 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 76 66  */.static int vf
1f380 73 5f 75 6e 72 65 67 69 73 74 65 72 5f 61 6c 6c  s_unregister_all
1f390 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63  (.  ClientData c
1f3a0 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f  lientData, /* Po
1f3b0 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  inter to sqlite3
1f3c0 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63  _enable_XXX func
1f3d0 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  tion */.  Tcl_In
1f3e0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
1f3f0 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
1f400 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
1f410 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
1f420 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  d */.  int objc,
1f430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f440 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
1f450 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62  ents */.  Tcl_Ob
1f460 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20  j *CONST objv[] 
1f470 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
1f480 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ments */.){.  in
1f490 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  t i;.  for(i=0; 
1f4a0 69 3c 41 72 72 61 79 53 69 7a 65 28 61 70 56 66  i<ArraySize(apVf
1f4b0 73 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 70  s); i++){.    ap
1f4c0 56 66 73 5b 69 5d 20 3d 20 73 71 6c 69 74 65 33  Vfs[i] = sqlite3
1f4d0 5f 76 66 73 5f 66 69 6e 64 28 30 29 3b 0a 20 20  _vfs_find(0);.  
1f4e0 20 20 69 66 28 20 61 70 56 66 73 5b 69 5d 3d 3d    if( apVfs[i]==
1f4f0 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 73  0 ) break;.    s
1f500 71 6c 69 74 65 33 5f 76 66 73 5f 75 6e 72 65 67  qlite3_vfs_unreg
1f510 69 73 74 65 72 28 61 70 56 66 73 5b 69 5d 29 3b  ister(apVfs[i]);
1f520 0a 20 20 7d 0a 20 20 6e 56 66 73 20 3d 20 69 3b  .  }.  nVfs = i;
1f530 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
1f540 3b 0a 7d 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64  ;.}./*.** tclcmd
1f550 3a 20 20 20 76 66 73 5f 72 65 72 65 67 69 73 74  :   vfs_reregist
1f560 65 72 5f 61 6c 6c 0a 2a 2a 0a 2a 2a 20 52 65 73  er_all.**.** Res
1f570 74 6f 72 65 20 61 6c 6c 20 56 46 53 65 73 20 74  tore all VFSes t
1f580 68 61 74 20 77 65 72 65 20 72 65 6d 6f 76 65 64  hat were removed
1f590 20 75 73 69 6e 67 20 76 66 73 5f 75 6e 72 65 67   using vfs_unreg
1f5a0 69 73 74 65 72 5f 61 6c 6c 0a 2a 2f 0a 73 74 61  ister_all.*/.sta
1f5b0 74 69 63 20 69 6e 74 20 76 66 73 5f 72 65 72 65  tic int vfs_rere
1f5c0 67 69 73 74 65 72 5f 61 6c 6c 28 0a 20 20 43 6c  gister_all(.  Cl
1f5d0 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
1f5e0 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20  ata, /* Pointer 
1f5f0 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  to sqlite3_enabl
1f600 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a  e_XXX function *
1f610 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
1f620 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
1f630 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
1f640 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
1f650 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
1f660 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20   int objc,      
1f670 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f680 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
1f690 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  /.  Tcl_Obj *CON
1f6a0 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f  ST objv[]  /* Co
1f6b0 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20  mmand arguments 
1f6c0 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  */.){.  int i;. 
1f6d0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 56 66 73   for(i=0; i<nVfs
1f6e0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69  ; i++){.    sqli
1f6f0 74 65 33 5f 76 66 73 5f 72 65 67 69 73 74 65 72  te3_vfs_register
1f700 28 61 70 56 66 73 5b 69 5d 2c 20 69 3d 3d 30 29  (apVfs[i], i==0)
1f710 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54  ;.  }.  return T
1f720 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  CL_OK;.}.../*.**
1f730 20 74 63 6c 63 6d 64 3a 20 20 20 66 69 6c 65 5f   tclcmd:   file_
1f740 63 6f 6e 74 72 6f 6c 5f 74 65 73 74 20 44 42 0a  control_test DB.
1f750 2a 2a 0a 2a 2a 20 54 68 69 73 20 54 43 4c 20 63  **.** This TCL c
1f760 6f 6d 6d 61 6e 64 20 72 75 6e 73 20 74 68 65 20  ommand runs the 
1f770 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
1f780 74 72 6f 6c 20 69 6e 74 65 72 66 61 63 65 20 61  trol interface a
1f790 6e 64 0a 2a 2a 20 76 65 72 69 66 69 65 73 20 63  nd.** verifies c
1f7a0 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
1f7b0 20 6f 66 20 74 68 65 20 73 61 6d 65 2e 0a 2a 2f   of the same..*/
1f7c0 0a 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65  .static int file
1f7d0 5f 63 6f 6e 74 72 6f 6c 5f 74 65 73 74 28 0a 20  _control_test(. 
1f7e0 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
1f7f0 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74  ntData, /* Point
1f800 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e  er to sqlite3_en
1f810 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f  able_XXX functio
1f820 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  n */.  Tcl_Inter
1f830 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
1f840 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
1f850 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
1f860 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
1f870 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
1f880 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f890 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
1f8a0 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
1f8b0 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
1f8c0 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
1f8d0 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69  ts */.){.  int i
1f8e0 41 72 67 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74  Arg = 0;.  sqlit
1f8f0 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63  e3 *db;.  int rc
1f900 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
1f910 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
1f920 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
1f930 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
1f940 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
1f950 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
1f960 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
1f970 5b 30 5d 2c 20 30 29 2c 20 22 20 44 42 22 2c 20  [0], 0), " DB", 
1f980 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
1f990 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
1f9a0 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
1f9b0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
1f9c0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
1f9d0 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
1f9e0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
1f9f0 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
1fa00 6e 74 72 6f 6c 28 64 62 2c 20 30 2c 20 30 2c 20  ntrol(db, 0, 0, 
1fa10 26 69 41 72 67 29 3b 0a 20 20 61 73 73 65 72 74  &iArg);.  assert
1fa20 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52  ( rc==SQLITE_ERR
1fa30 4f 52 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  OR );.  rc = sql
1fa40 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
1fa50 6c 28 64 62 2c 20 22 6e 6f 74 61 64 61 74 61 62  l(db, "notadatab
1fa60 61 73 65 22 2c 20 53 51 4c 49 54 45 5f 46 43 4e  ase", SQLITE_FCN
1fa70 54 4c 5f 4c 4f 43 4b 53 54 41 54 45 2c 20 26 69  TL_LOCKSTATE, &i
1fa80 41 72 67 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Arg);.  assert( 
1fa90 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52  rc==SQLITE_ERROR
1faa0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
1fab0 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
1fac0 64 62 2c 20 22 6d 61 69 6e 22 2c 20 2d 31 2c 20  db, "main", -1, 
1fad0 26 69 41 72 67 29 3b 0a 20 20 61 73 73 65 72 74  &iArg);.  assert
1fae0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52  ( rc==SQLITE_ERR
1faf0 4f 52 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  OR );.  rc = sql
1fb00 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
1fb10 6c 28 64 62 2c 20 22 74 65 6d 70 22 2c 20 2d 31  l(db, "temp", -1
1fb20 2c 20 26 69 41 72 67 29 3b 0a 20 20 61 73 73 65  , &iArg);.  asse
1fb30 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45  rt( rc==SQLITE_E
1fb40 52 52 4f 52 20 29 3b 0a 0a 20 20 72 65 74 75 72  RROR );..  retur
1fb50 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a  n TCL_OK;.}.../*
1fb60 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20 20 20 66 69  .** tclcmd:   fi
1fb70 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 6c 61 73 74 65  le_control_laste
1fb80 72 72 6e 6f 5f 74 65 73 74 20 44 42 0a 2a 2a 0a  rrno_test DB.**.
1fb90 2a 2a 20 54 68 69 73 20 54 43 4c 20 63 6f 6d 6d  ** This TCL comm
1fba0 61 6e 64 20 72 75 6e 73 20 74 68 65 20 73 71 6c  and runs the sql
1fbb0 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
1fbc0 6c 20 69 6e 74 65 72 66 61 63 65 20 61 6e 64 0a  l interface and.
1fbd0 2a 2a 20 76 65 72 69 66 69 65 73 20 63 6f 72 72  ** verifies corr
1fbe0 65 63 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66  ect operation of
1fbf0 20 74 68 65 20 53 51 4c 49 54 45 5f 4c 41 53 54   the SQLITE_LAST
1fc00 5f 45 52 52 4e 4f 20 76 65 72 62 2e 0a 2a 2f 0a  _ERRNO verb..*/.
1fc10 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65 5f  static int file_
1fc20 63 6f 6e 74 72 6f 6c 5f 6c 61 73 74 65 72 72 6e  control_lasterrn
1fc30 6f 5f 74 65 73 74 28 0a 20 20 43 6c 69 65 6e 74  o_test(.  Client
1fc40 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c  Data clientData,
1fc50 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73   /* Pointer to s
1fc60 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58  qlite3_enable_XX
1fc70 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  X function */.  
1fc80 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
1fc90 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
1fca0 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
1fcb0 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
1fcc0 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
1fcd0 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20   objc,          
1fce0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1fcf0 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
1fd00 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
1fd10 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e  bjv[]  /* Comman
1fd20 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29  d arguments */.)
1fd30 7b 0a 20 20 69 6e 74 20 69 41 72 67 20 3d 20 30  {.  int iArg = 0
1fd40 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  ;.  sqlite3 *db;
1fd50 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
1fd60 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20  ( objc!=2 ){.   
1fd70 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
1fd80 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
1fd90 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
1fda0 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20  be \"",.        
1fdb0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f  Tcl_GetStringFro
1fdc0 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29  mObj(objv[0], 0)
1fdd0 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20  , " DB", 0);.   
1fde0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1fdf0 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
1fe00 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
1fe10 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
1fe20 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
1fe30 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
1fe40 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63  _ERROR;.  }.  rc
1fe50 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f   = sqlite3_file_
1fe60 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 4e 55 4c 4c  control(db, NULL
1fe70 2c 20 53 51 4c 49 54 45 5f 4c 41 53 54 5f 45 52  , SQLITE_LAST_ER
1fe80 52 4e 4f 2c 20 26 69 41 72 67 29 3b 0a 20 20 69  RNO, &iArg);.  i
1fe90 66 28 20 72 63 20 29 7b 20 0a 20 20 20 20 54 63  f( rc ){ .    Tc
1fea0 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
1feb0 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e  nterp, Tcl_NewIn
1fec0 74 4f 62 6a 28 72 63 29 29 3b 20 0a 20 20 20 20  tObj(rc)); .    
1fed0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1fee0 3b 20 0a 20 20 7d 0a 20 20 69 66 28 20 69 41 72  ; .  }.  if( iAr
1fef0 67 21 3d 30 20 29 20 7b 0a 20 20 20 20 54 63 6c  g!=0 ) {.    Tcl
1ff00 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
1ff10 74 65 72 70 2c 20 22 55 6e 65 78 70 65 63 74 65  terp, "Unexpecte
1ff20 64 20 6e 6f 6e 2d 7a 65 72 6f 20 65 72 72 6e 6f  d non-zero errno
1ff30 3a 20 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  : ",.           
1ff40 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65            Tcl_Ge
1ff50 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 54  tStringFromObj(T
1ff60 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 69 41 72  cl_NewIntObj(iAr
1ff70 67 29 2c 20 30 29 2c 20 22 20 22 2c 20 30 29 3b  g), 0), " ", 0);
1ff80 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
1ff90 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 65 74  ERROR;.  }.  ret
1ffa0 75 72 6e 20 54 43 4c 5f 4f 4b 3b 20 20 0a 7d 0a  urn TCL_OK;  .}.
1ffb0 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20 20  ./*.** tclcmd:  
1ffc0 20 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 6c 6f   file_control_lo
1ffd0 63 6b 70 72 6f 78 79 5f 74 65 73 74 20 44 42 20  ckproxy_test DB 
1ffe0 50 57 44 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 54  PWD.**.** This T
1fff0 43 4c 20 63 6f 6d 6d 61 6e 64 20 72 75 6e 73 20  CL command runs 
20000 74 68 65 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  the sqlite3_file
20010 5f 63 6f 6e 74 72 6f 6c 20 69 6e 74 65 72 66 61  _control interfa
20020 63 65 20 61 6e 64 0a 2a 2a 20 76 65 72 69 66 69  ce and.** verifi
20030 65 73 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  es correct opera
20040 74 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 49  tion of the SQLI
20050 54 45 5f 47 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_GET_LOCKPROXY
20060 46 49 4c 45 20 61 6e 64 0a 2a 2a 20 53 51 4c 49  FILE and.** SQLI
20070 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_SET_LOCKPROXY
20080 46 49 4c 45 20 76 65 72 62 73 2e 0a 2a 2f 0a 73  FILE verbs..*/.s
20090 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65 5f 63  tatic int file_c
200a0 6f 6e 74 72 6f 6c 5f 6c 6f 63 6b 70 72 6f 78 79  ontrol_lockproxy
200b0 5f 74 65 73 74 28 0a 20 20 43 6c 69 65 6e 74 44  _test(.  ClientD
200c0 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20  ata clientData, 
200d0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 71  /* Pointer to sq
200e0 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58  lite3_enable_XXX
200f0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54   function */.  T
20100 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
20110 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
20120 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
20130 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
20140 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
20150 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20  objc,           
20160 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20170 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54  arguments */.  T
20180 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
20190 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64  jv[]  /* Command
201a0 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b   arguments */.){
201b0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
201c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50    const char *zP
201d0 77 64 3b 0a 20 20 69 6e 74 20 6e 50 77 64 3b 0a  wd;.  int nPwd;.
201e0 20 20 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33    .  if( objc!=3
201f0 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
20200 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
20210 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
20220 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
20230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20240 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
20250 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
20260 2c 20 30 29 2c 20 22 20 44 42 20 50 57 44 22 2c  , 0), " DB PWD",
20270 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
20280 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
20290 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
202a0 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
202b0 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
202c0 2c 20 26 64 62 29 20 29 7b 0a 20 20 20 72 65 74  , &db) ){.   ret
202d0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
202e0 20 7d 0a 20 20 7a 50 77 64 20 3d 20 54 63 6c 5f   }.  zPwd = Tcl_
202f0 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
20300 28 6f 62 6a 76 5b 32 5d 2c 20 26 6e 50 77 64 29  (objv[2], &nPwd)
20310 3b 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e 65  ;.  .#if !define
20320 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
20330 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 29 0a 23  LOCKING_STYLE).#
20340 20 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 41    if defined(__A
20350 50 50 4c 45 5f 5f 29 0a 23 20 20 20 20 64 65 66  PPLE__).#    def
20360 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ine SQLITE_ENABL
20370 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 20  E_LOCKING_STYLE 
20380 31 0a 23 20 20 65 6c 73 65 0a 23 20 20 20 20 64  1.#  else.#    d
20390 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
203a0 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c  BLE_LOCKING_STYL
203b0 45 20 30 0a 23 20 20 65 6e 64 69 66 0a 23 65 6e  E 0.#  endif.#en
203c0 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 45  dif.#if SQLITE_E
203d0 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54  NABLE_LOCKING_ST
203e0 59 4c 45 20 26 26 20 64 65 66 69 6e 65 64 28 5f  YLE && defined(_
203f0 5f 41 50 50 4c 45 5f 5f 29 0a 20 20 7b 0a 20 20  _APPLE__).  {.  
20400 20 20 63 68 61 72 20 2a 74 65 73 74 50 61 74 68    char *testPath
20410 3b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 20 20  ;.    int rc;.  
20420 20 20 63 68 61 72 20 70 72 6f 78 79 50 61 74 68    char proxyPath
20430 5b 34 30 30 5d 3b 0a 20 20 20 20 0a 20 20 20 20  [400];.    .    
20440 69 66 28 20 73 69 7a 65 6f 66 28 70 72 6f 78 79  if( sizeof(proxy
20450 50 61 74 68 29 3c 6e 50 77 64 2b 32 30 20 29 7b  Path)<nPwd+20 ){
20460 0a 20 20 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  .      Tcl_Appen
20470 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
20480 22 50 57 44 20 74 6f 6f 20 62 69 67 22 2c 20 28  "PWD too big", (
20490 76 6f 69 64 2a 29 30 29 3b 0a 20 20 20 20 20 20  void*)0);.      
204a0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
204b0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 70 72 69  ;.    }.    spri
204c0 6e 74 66 28 70 72 6f 78 79 50 61 74 68 2c 20 22  ntf(proxyPath, "
204d0 25 73 2f 74 65 73 74 2e 70 72 6f 78 79 22 2c 20  %s/test.proxy", 
204e0 7a 50 77 64 29 3b 0a 20 20 20 20 72 63 20 3d 20  zPwd);.    rc = 
204f0 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
20500 74 72 6f 6c 28 64 62 2c 20 4e 55 4c 4c 2c 20 53  trol(db, NULL, S
20510 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52  QLITE_SET_LOCKPR
20520 4f 58 59 46 49 4c 45 2c 20 70 72 6f 78 79 50 61  OXYFILE, proxyPa
20530 74 68 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  th);.    if( rc 
20540 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74  ){.      Tcl_Set
20550 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
20560 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
20570 72 63 29 29 3b 20 0a 20 20 20 20 20 20 72 65 74  rc)); .      ret
20580 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
20590 20 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71     }.    rc = sq
205a0 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
205b0 6f 6c 28 64 62 2c 20 4e 55 4c 4c 2c 20 53 51 4c  ol(db, NULL, SQL
205c0 49 54 45 5f 47 45 54 5f 4c 4f 43 4b 50 52 4f 58  ITE_GET_LOCKPROX
205d0 59 46 49 4c 45 2c 20 26 74 65 73 74 50 61 74 68  YFILE, &testPath
205e0 29 3b 0a 20 20 20 20 69 66 28 20 73 74 72 6e 63  );.    if( strnc
205f0 6d 70 28 70 72 6f 78 79 50 61 74 68 2c 74 65 73  mp(proxyPath,tes
20600 74 50 61 74 68 2c 31 31 29 20 29 7b 0a 20 20 20  tPath,11) ){.   
20610 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
20620 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 4c 6f 63  ult(interp, "Loc
20630 6b 20 70 72 6f 78 79 20 66 69 6c 65 20 64 69 64  k proxy file did
20640 20 6e 6f 74 20 6d 61 74 63 68 20 74 68 65 20 22   not match the "
20650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20670 22 70 72 65 76 69 6f 75 73 6c 79 20 61 73 73 69  "previously assi
20680 67 6e 65 64 20 76 61 6c 75 65 22 2c 20 30 29 3b  gned value", 0);
20690 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43  .      return TC
206a0 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20  L_ERROR;.    }. 
206b0 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20     if( rc ){.   
206c0 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73     Tcl_SetObjRes
206d0 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
206e0 4e 65 77 49 6e 74 4f 62 6a 28 72 63 29 29 3b 0a  NewIntObj(rc));.
206f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c        return TCL
20700 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
20710 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66    rc = sqlite3_f
20720 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
20730 4e 55 4c 4c 2c 20 53 51 4c 49 54 45 5f 53 45 54  NULL, SQLITE_SET
20740 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20  _LOCKPROXYFILE, 
20750 70 72 6f 78 79 50 61 74 68 29 3b 0a 20 20 20 20  proxyPath);.    
20760 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20  if( rc ){.      
20770 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
20780 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
20790 49 6e 74 4f 62 6a 28 72 63 29 29 3b 0a 20 20 20  IntObj(rc));.   
207a0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
207b0 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  ROR;.    }.  }.#
207c0 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54  endif.  return T
207d0 43 4c 5f 4f 4b 3b 20 20 0a 7d 0a 0a 23 69 66 64  CL_OK;  .}..#ifd
207e0 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 69 6e  ef __APPLE__.#in
207f0 63 6c 75 64 65 20 3c 73 79 73 2f 70 61 72 61 6d  clude <sys/param
20800 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79  .h>.#include <sy
20810 73 2f 6d 6f 75 6e 74 2e 68 3e 0a 23 69 6e 63 6c  s/mount.h>.#incl
20820 75 64 65 20 3c 73 79 73 2f 65 72 72 6e 6f 2e 68  ude <sys/errno.h
20830 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 20 2a 2a  >.#endif../*. **
20840 20 74 63 6c 63 6d 64 3a 20 20 20 70 61 74 68 5f   tclcmd:   path_
20850 69 73 5f 6c 6f 63 61 6c 20 50 57 44 0a 20 2a 2f  is_local PWD. */
20860 0a 73 74 61 74 69 63 20 69 6e 74 20 70 61 74 68  .static int path
20870 5f 69 73 5f 6c 6f 63 61 6c 28 0a 20 20 43 6c 69  _is_local(.  Cli
20880 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
20890 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  ta, /* Pointer t
208a0 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  o sqlite3_enable
208b0 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  _XXX function */
208c0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
208d0 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
208e0 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
208f0 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
20900 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
20910 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
20920 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20930 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
20940 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
20950 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
20960 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
20970 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  /.){.  sqlite3 *
20980 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  db;.  const char
20990 20 2a 7a 50 61 74 68 3b 0a 20 20 69 6e 74 20 6e   *zPath;.  int n
209a0 50 61 74 68 3b 0a 20 20 0a 20 20 69 66 28 20 6f  Path;.  .  if( o
209b0 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  bjc!=2 ){.    Tc
209c0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
209d0 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
209e0 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
209f0 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  \"",.           
20a00 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65            Tcl_Ge
20a10 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
20a20 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 50 41  bjv[0], 0), " PA
20a30 54 48 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  TH", 0);.    ret
20a40 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
20a50 20 7d 0a 20 20 7a 50 61 74 68 20 3d 20 54 63 6c   }.  zPath = Tcl
20a60 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
20a70 6a 28 6f 62 6a 76 5b 31 5d 2c 20 26 6e 50 61 74  j(objv[1], &nPat
20a80 68 29 3b 0a 20 20 0a 23 69 66 64 65 66 20 5f 5f  h);.  .#ifdef __
20a90 41 50 50 4c 45 5f 5f 0a 20 20 7b 0a 20 20 20 20  APPLE__.  {.    
20aa0 73 74 72 75 63 74 20 73 74 61 74 66 73 20 66 73  struct statfs fs
20ab0 49 6e 66 6f 3b 0a 20 20 20 20 69 66 28 20 73 74  Info;.    if( st
20ac0 61 74 66 73 28 7a 50 61 74 68 2c 20 26 66 73 49  atfs(zPath, &fsI
20ad0 6e 66 6f 29 20 3d 3d 20 2d 31 20 29 7b 0a 20 20  nfo) == -1 ){.  
20ae0 20 20 20 20 69 6e 74 20 65 72 72 20 3d 20 65 72      int err = er
20af0 72 6e 6f 3b 0a 20 20 20 20 20 20 54 63 6c 5f 41  rno;.      Tcl_A
20b00 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
20b10 72 70 2c 20 22 45 72 72 6f 72 20 63 61 6c 6c 69  rp, "Error calli
20b20 6e 67 20 73 74 61 74 66 73 20 6f 6e 20 70 61 74  ng statfs on pat
20b30 68 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  h",.            
20b40 20 20 20 20 20 20 20 20 20 20 20 54 63 6c 5f 4e             Tcl_N
20b50 65 77 49 6e 74 4f 62 6a 28 65 72 72 29 2c 20 30  ewIntObj(err), 0
20b60 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  );.      return 
20b70 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  TCL_ERROR;.    }
20b80 0a 20 20 20 20 69 66 28 20 66 73 49 6e 66 6f 2e  .    if( fsInfo.
20b90 66 5f 66 6c 61 67 73 26 4d 4e 54 5f 4c 4f 43 41  f_flags&MNT_LOCA
20ba0 4c 20 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53  L ){.      Tcl_S
20bb0 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
20bc0 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
20bd0 6a 28 31 29 29 3b 20 0a 20 20 20 20 7d 20 65 6c  j(1)); .    } el
20be0 73 65 20 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53  se {.      Tcl_S
20bf0 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
20c00 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
20c10 6a 28 30 29 29 3b 20 0a 20 20 20 20 7d 0a 20 20  j(0)); .    }.  
20c20 7d 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53 65  }.#else.  Tcl_Se
20c30 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
20c40 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a  p, Tcl_NewIntObj
20c50 28 31 29 29 3b 20 0a 23 65 6e 64 69 66 0a 20 20  (1)); .#endif.  
20c60 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
20c70 3b 20 20 0a 7d 0a 0a 2f 2a 0a 20 2a 2a 20 74 63  ;  .}../*. ** tc
20c80 6c 63 6d 64 3a 20 20 20 70 61 74 68 5f 69 73 5f  lcmd:   path_is_
20c90 64 6f 73 20 50 57 44 0a 20 2a 2f 0a 73 74 61 74  dos PWD. */.stat
20ca0 69 63 20 69 6e 74 20 70 61 74 68 5f 69 73 5f 64  ic int path_is_d
20cb0 6f 73 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61  os(.  ClientData
20cc0 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20   clientData, /* 
20cd0 50 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74  Pointer to sqlit
20ce0 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75  e3_enable_XXX fu
20cf0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f  nction */.  Tcl_
20d00 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
20d10 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
20d20 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
20d30 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
20d40 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a  and */.  int obj
20d50 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
20d60 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
20d70 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f  uments */.  Tcl_
20d80 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
20d90 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72  ]  /* Command ar
20da0 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20  guments */.){.  
20db0 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63  sqlite3 *db;.  c
20dc0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 50 61 74 68  onst char *zPath
20dd0 3b 0a 20 20 69 6e 74 20 6e 50 61 74 68 3b 0a 20  ;.  int nPath;. 
20de0 20 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20   .  if( objc!=2 
20df0 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
20e00 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
20e10 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
20e20 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
20e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e40 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
20e50 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
20e60 20 30 29 2c 20 22 20 50 41 54 48 22 2c 20 30 29   0), " PATH", 0)
20e70 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
20e80 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 50  _ERROR;.  }.  zP
20e90 61 74 68 20 3d 20 54 63 6c 5f 47 65 74 53 74 72  ath = Tcl_GetStr
20ea0 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
20eb0 31 5d 2c 20 26 6e 50 61 74 68 29 3b 0a 20 20 0a  1], &nPath);.  .
20ec0 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f  #ifdef __APPLE__
20ed0 0a 20 20 7b 0a 20 20 20 20 73 74 72 75 63 74 20  .  {.    struct 
20ee0 73 74 61 74 66 73 20 66 73 49 6e 66 6f 3b 0a 20  statfs fsInfo;. 
20ef0 20 20 20 69 66 28 20 73 74 61 74 66 73 28 7a 50     if( statfs(zP
20f00 61 74 68 2c 20 26 66 73 49 6e 66 6f 29 20 3d 3d  ath, &fsInfo) ==
20f10 20 2d 31 20 29 7b 0a 20 20 20 20 20 20 69 6e 74   -1 ){.      int
20f20 20 65 72 72 20 3d 20 65 72 72 6e 6f 3b 0a 20 20   err = errno;.  
20f30 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
20f40 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 45 72  sult(interp, "Er
20f50 72 6f 72 20 63 61 6c 6c 69 6e 67 20 73 74 61 74  ror calling stat
20f60 66 73 20 6f 6e 20 70 61 74 68 22 2c 0a 20 20 20  fs on path",.   
20f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f80 20 20 20 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62      Tcl_NewIntOb
20f90 6a 28 65 72 72 29 2c 20 30 29 3b 0a 20 20 20 20  j(err), 0);.    
20fa0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
20fb0 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  OR;.    }.    if
20fc0 20 28 30 20 3d 3d 20 73 74 72 6e 63 6d 70 28 22   (0 == strncmp("
20fd0 6d 73 64 6f 73 22 2c 20 66 73 49 6e 66 6f 2e 66  msdos", fsInfo.f
20fe0 5f 66 73 74 79 70 65 6e 61 6d 65 2c 20 35 29 29  _fstypename, 5))
20ff0 20 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74   {.      Tcl_Set
21000 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
21010 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
21020 31 29 29 3b 20 0a 20 20 20 20 7d 20 65 6c 73 65  1)); .    } else
21030 20 69 66 20 28 30 20 3d 3d 20 73 74 72 6e 63 6d   if (0 == strncm
21040 70 28 22 65 78 66 61 74 22 2c 20 66 73 49 6e 66  p("exfat", fsInf
21050 6f 2e 66 5f 66 73 74 79 70 65 6e 61 6d 65 2c 20  o.f_fstypename, 
21060 35 29 29 20 7b 0a 20 20 20 20 20 20 54 63 6c 5f  5)) {.      Tcl_
21070 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
21080 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
21090 62 6a 28 31 29 29 3b 20 0a 20 20 20 20 7d 20 65  bj(1)); .    } e
210a0 6c 73 65 20 7b 0a 20 20 20 20 20 20 54 63 6c 5f  lse {.      Tcl_
210b0 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
210c0 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f  erp, Tcl_NewIntO
210d0 62 6a 28 30 29 29 3b 20 0a 20 20 20 20 7d 0a 20  bj(0)); .    }. 
210e0 20 7d 0a 23 65 6c 73 65 0a 20 20 54 63 6c 5f 53   }.#else.  Tcl_S
210f0 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
21100 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62  rp, Tcl_NewIntOb
21110 6a 28 30 29 29 3b 20 0a 23 65 6e 64 69 66 0a 20  j(0)); .#endif. 
21120 20 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f   .  return TCL_O
21130 4b 3b 20 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63  K;  .}../*.** tc
21140 6c 63 6d 64 3a 20 20 20 73 71 6c 69 74 65 33 5f  lcmd:   sqlite3_
21150 76 66 73 5f 6c 69 73 74 0a 2a 2a 0a 2a 2a 20 20  vfs_list.**.**  
21160 20 52 65 74 75 72 6e 20 61 20 74 63 6c 20 6c 69   Return a tcl li
21170 73 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  st containing th
21180 65 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 72  e names of all r
21190 65 67 69 73 74 65 72 65 64 20 76 66 73 27 73 2e  egistered vfs's.
211a0 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 76  .*/.static int v
211b0 66 73 5f 6c 69 73 74 28 0a 20 20 43 6c 69 65 6e  fs_list(.  Clien
211c0 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
211d0 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20  , /* Pointer to 
211e0 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58  sqlite3_enable_X
211f0 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  XX function */. 
21200 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
21210 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
21220 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
21230 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
21240 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
21250 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20  t objc,         
21260 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
21270 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
21280 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
21290 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61  objv[]  /* Comma
212a0 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  nd arguments */.
212b0 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73  ){.  sqlite3_vfs
212c0 20 2a 70 56 66 73 3b 0a 20 20 54 63 6c 5f 4f 62   *pVfs;.  Tcl_Ob
212d0 6a 20 2a 70 52 65 74 20 3d 20 54 63 6c 5f 4e 65  j *pRet = Tcl_Ne
212e0 77 4f 62 6a 28 29 3b 0a 20 20 69 66 28 20 6f 62  wObj();.  if( ob
212f0 6a 63 21 3d 31 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=1 ){.    Tcl
21300 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
21310 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
21320 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
21330 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
21340 66 6f 72 28 70 56 66 73 3d 73 71 6c 69 74 65 33  for(pVfs=sqlite3
21350 5f 76 66 73 5f 66 69 6e 64 28 30 29 3b 20 70 56  _vfs_find(0); pV
21360 66 73 3b 20 70 56 66 73 3d 70 56 66 73 2d 3e 70  fs; pVfs=pVfs->p
21370 4e 65 78 74 29 7b 0a 20 20 20 20 54 63 6c 5f 4c  Next){.    Tcl_L
21380 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
21390 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74  ent(interp, pRet
213a0 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
213b0 62 6a 28 70 56 66 73 2d 3e 7a 4e 61 6d 65 2c 20  bj(pVfs->zName, 
213c0 2d 31 29 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  -1));.  }.  Tcl_
213d0 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
213e0 65 72 70 2c 20 70 52 65 74 29 3b 0a 20 20 72 65  erp, pRet);.  re
213f0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 20 20 0a 7d  turn TCL_OK;  .}
21400 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20  ../*.** tclcmd: 
21410 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20    sqlite3_limit 
21420 44 42 20 49 44 20 56 41 4c 55 45 0a 2a 2a 0a 2a  DB ID VALUE.**.*
21430 2a 20 54 68 69 73 20 54 43 4c 20 63 6f 6d 6d 61  * This TCL comma
21440 6e 64 20 72 75 6e 73 20 74 68 65 20 73 71 6c 69  nd runs the sqli
21450 74 65 33 5f 6c 69 6d 69 74 20 69 6e 74 65 72 66  te3_limit interf
21460 61 63 65 20 61 6e 64 0a 2a 2a 20 76 65 72 69 66  ace and.** verif
21470 69 65 73 20 63 6f 72 72 65 63 74 20 6f 70 65 72  ies correct oper
21480 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 61 6d  ation of the sam
21490 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
214a0 20 74 65 73 74 5f 6c 69 6d 69 74 28 0a 20 20 43   test_limit(.  C
214b0 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
214c0 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72  Data, /* Pointer
214d0 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62   to sqlite3_enab
214e0 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20  le_XXX function 
214f0 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  */.  Tcl_Interp 
21500 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
21510 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
21520 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
21530 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
21540 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20    int objc,     
21550 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
21560 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
21570 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  */.  Tcl_Obj *CO
21580 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43  NST objv[]  /* C
21590 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73  ommand arguments
215a0 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
215b0 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   *db;.  int rc;.
215c0 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73    static const s
215d0 74 72 75 63 74 20 7b 0a 20 20 20 20 20 63 68 61  truct {.     cha
215e0 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 69  r *zName;.     i
215f0 6e 74 20 69 64 3b 0a 20 20 7d 20 61 49 64 5b 5d  nt id;.  } aId[]
21600 20 3d 20 7b 0a 20 20 20 20 7b 20 22 53 51 4c 49   = {.    { "SQLI
21610 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 22  TE_LIMIT_LENGTH"
21620 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  ,              S
21630 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
21640 54 48 20 20 20 20 20 20 20 20 20 20 20 20 20 20  TH              
21650 20 7d 2c 0a 20 20 20 20 7b 20 22 53 51 4c 49 54   },.    { "SQLIT
21660 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47  E_LIMIT_SQL_LENG
21670 54 48 22 2c 20 20 20 20 20 20 20 20 20 20 53 51  TH",          SQ
21680 4c 49 54 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c  LITE_LIMIT_SQL_L
21690 45 4e 47 54 48 20 20 20 20 20 20 20 20 20 20 20  ENGTH           
216a0 7d 2c 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45  },.    { "SQLITE
216b0 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 22 2c 20  _LIMIT_COLUMN", 
216c0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
216d0 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e  ITE_LIMIT_COLUMN
216e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
216f0 2c 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f  ,.    { "SQLITE_
21700 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45 50 54 48  LIMIT_EXPR_DEPTH
21710 22 2c 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  ",          SQLI
21720 54 45 5f 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45  TE_LIMIT_EXPR_DE
21730 50 54 48 20 20 20 20 20 20 20 20 20 20 20 7d 2c  PTH           },
21740 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c  .    { "SQLITE_L
21750 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45  IMIT_COMPOUND_SE
21760 4c 45 43 54 22 2c 20 20 20 20 20 53 51 4c 49 54  LECT",     SQLIT
21770 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44  E_LIMIT_COMPOUND
21780 5f 53 45 4c 45 43 54 20 20 20 20 20 20 7d 2c 0a  _SELECT      },.
21790 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49      { "SQLITE_LI
217a0 4d 49 54 5f 56 44 42 45 5f 4f 50 22 2c 20 20 20  MIT_VDBE_OP",   
217b0 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
217c0 5f 4c 49 4d 49 54 5f 56 44 42 45 5f 4f 50 20 20  _LIMIT_VDBE_OP  
217d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
217e0 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d     { "SQLITE_LIM
217f0 49 54 5f 46 55 4e 43 54 49 4f 4e 5f 41 52 47 22  IT_FUNCTION_ARG"
21800 2c 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f  ,        SQLITE_
21810 4c 49 4d 49 54 5f 46 55 4e 43 54 49 4f 4e 5f 41  LIMIT_FUNCTION_A
21820 52 47 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20  RG         },.  
21830 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d 49    { "SQLITE_LIMI
21840 54 5f 41 54 54 41 43 48 45 44 22 2c 20 20 20 20  T_ATTACHED",    
21850 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c          SQLITE_L
21860 49 4d 49 54 5f 41 54 54 41 43 48 45 44 20 20 20  IMIT_ATTACHED   
21870 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
21880 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d 49 54   { "SQLITE_LIMIT
21890 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45  _LIKE_PATTERN_LE
218a0 4e 47 54 48 22 2c 20 53 51 4c 49 54 45 5f 4c 49  NGTH", SQLITE_LI
218b0 4d 49 54 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e  MIT_LIKE_PATTERN
218c0 5f 4c 45 4e 47 54 48 20 20 7d 2c 0a 20 20 20 20  _LENGTH  },.    
218d0 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  { "SQLITE_LIMIT_
218e0 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 22  VARIABLE_NUMBER"
218f0 2c 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d  ,     SQLITE_LIM
21900 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  IT_VARIABLE_NUMB
21910 45 52 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b  ER      },.    {
21920 20 22 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54   "SQLITE_LIMIT_T
21930 52 49 47 47 45 52 5f 44 45 50 54 48 22 2c 20 20  RIGGER_DEPTH",  
21940 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d 49       SQLITE_LIMI
21950 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 20  T_TRIGGER_DEPTH 
21960 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 0a 20         },.    . 
21970 20 20 20 2f 2a 20 4f 75 74 20 6f 66 20 72 61 6e     /* Out of ran
21980 67 65 20 74 65 73 74 20 63 61 73 65 73 20 2a 2f  ge test cases */
21990 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c  .    { "SQLITE_L
219a0 49 4d 49 54 5f 54 4f 4f 53 4d 41 4c 4c 22 2c 20  IMIT_TOOSMALL", 
219b0 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20 20             -1,  
219c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
219e0 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49      { "SQLITE_LI
219f0 4d 49 54 5f 54 4f 4f 42 49 47 22 2c 20 20 20 20  MIT_TOOBIG",    
21a00 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
21a10 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44  _LIMIT_TRIGGER_D
21a20 45 50 54 48 2b 31 20 20 20 20 20 20 7d 2c 0a 20  EPTH+1      },. 
21a30 20 7d 3b 0a 20 20 69 6e 74 20 69 2c 20 69 64 3b   };.  int i, id;
21a40 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 20 20 63 6f  .  int val;.  co
21a50 6e 73 74 20 63 68 61 72 20 2a 7a 49 64 3b 0a 0a  nst char *zId;..
21a60 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29 7b    if( objc!=4 ){
21a70 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
21a80 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
21a90 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
21aa0 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
21ab0 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
21ac0 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d  gFromObj(objv[0]
21ad0 2c 20 30 29 2c 20 22 20 44 42 20 49 44 20 56 41  , 0), " DB ID VA
21ae0 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  LUE", 0);.    re
21af0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
21b00 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
21b10 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
21b20 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
21b30 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
21b40 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
21b50 20 20 7a 49 64 20 3d 20 54 63 6c 5f 47 65 74 53    zId = Tcl_GetS
21b60 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a  tring(objv[2]);.
21b70 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a    for(i=0; i<siz
21b80 65 6f 66 28 61 49 64 29 2f 73 69 7a 65 6f 66 28  eof(aId)/sizeof(
21b90 61 49 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20  aId[0]); i++){. 
21ba0 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a 49     if( strcmp(zI
21bb0 64 2c 20 61 49 64 5b 69 5d 2e 7a 4e 61 6d 65 29  d, aId[i].zName)
21bc0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 64 20  ==0 ){.      id 
21bd0 3d 20 61 49 64 5b 69 5d 2e 69 64 3b 0a 20 20 20  = aId[i].id;.   
21be0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
21bf0 20 20 7d 0a 20 20 69 66 28 20 69 3e 3d 73 69 7a    }.  if( i>=siz
21c00 65 6f 66 28 61 49 64 29 2f 73 69 7a 65 6f 66 28  eof(aId)/sizeof(
21c10 61 49 64 5b 30 5d 29 20 29 7b 0a 20 20 20 20 54  aId[0]) ){.    T
21c20 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
21c30 69 6e 74 65 72 70 2c 20 22 75 6e 6b 6e 6f 77 6e  interp, "unknown
21c40 20 6c 69 6d 69 74 20 74 79 70 65 3a 20 22 2c 20   limit type: ", 
21c50 7a 49 64 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a  zId, (char*)0);.
21c60 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
21c70 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
21c80 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
21c90 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33  j(interp, objv[3
21ca0 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75 72  ], &val) ) retur
21cb0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
21cc0 63 20 3d 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  c = sqlite3_limi
21cd0 74 28 64 62 2c 20 69 64 2c 20 76 61 6c 29 3b 0a  t(db, id, val);.
21ce0 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
21cf0 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
21d00 65 77 49 6e 74 4f 62 6a 28 72 63 29 29 3b 0a 20  ewIntObj(rc));. 
21d10 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 20   return TCL_OK; 
21d20 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d   .}../*.** tclcm
21d30 64 3a 20 20 73 61 76 65 5f 70 72 6e 67 5f 73 74  d:  save_prng_st
21d40 61 74 65 0a 2a 2a 0a 2a 2a 20 53 61 76 65 20 74  ate.**.** Save t
21d50 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
21d60 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 6e 75  pseudo-random nu
21d70 6d 62 65 72 20 67 65 6e 65 72 61 74 6f 72 2e 0a  mber generator..
21d80 2a 2a 20 41 74 20 74 68 65 20 73 61 6d 65 20 74  ** At the same t
21d90 69 6d 65 2c 20 76 65 72 69 66 79 20 74 68 61 74  ime, verify that
21da0 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
21db0 6e 74 72 6f 6c 20 77 6f 72 6b 73 20 65 76 65 6e  ntrol works even
21dc0 20 77 68 65 6e 0a 2a 2a 20 63 61 6c 6c 65 64 20   when.** called 
21dd0 77 69 74 68 20 61 6e 20 6f 75 74 2d 6f 66 2d 72  with an out-of-r
21de0 61 6e 67 65 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  ange opcode..*/.
21df0 73 74 61 74 69 63 20 69 6e 74 20 73 61 76 65 5f  static int save_
21e00 70 72 6e 67 5f 73 74 61 74 65 28 0a 20 20 43 6c  prng_state(.  Cl
21e10 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44  ientData clientD
21e20 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20  ata, /* Pointer 
21e30 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  to sqlite3_enabl
21e40 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a  e_XXX function *
21e50 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  /.  Tcl_Interp *
21e60 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68  interp,    /* Th
21e70 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65  e TCL interprete
21e80 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  r that invoked t
21e90 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20  his command */. 
21ea0 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20   int objc,      
21eb0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21ec0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
21ed0 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  /.  Tcl_Obj *CON
21ee0 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f  ST objv[]  /* Co
21ef0 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20  mmand arguments 
21f00 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20 3d  */.){.  int rc =
21f10 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
21f20 6e 74 72 6f 6c 28 39 39 39 39 29 3b 0a 20 20 61  ntrol(9999);.  a
21f30 73 73 65 72 74 28 20 72 63 3d 3d 30 20 29 3b 0a  ssert( rc==0 );.
21f40 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 74    rc = sqlite3_t
21f50 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 2d 31 29 3b  est_control(-1);
21f60 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 30  .  assert( rc==0
21f70 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 74 65   );.  sqlite3_te
21f80 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54  st_control(SQLIT
21f90 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47 5f  E_TESTCTRL_PRNG_
21fa0 53 41 56 45 29 3b 0a 20 20 72 65 74 75 72 6e 20  SAVE);.  return 
21fb0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 2f 2a 0a 2a 2a 20  TCL_OK;.}./*.** 
21fc0 74 63 6c 63 6d 64 3a 20 20 72 65 73 74 6f 72 65  tclcmd:  restore
21fd0 5f 70 72 6e 67 5f 73 74 61 74 65 0a 2a 2f 0a 73  _prng_state.*/.s
21fe0 74 61 74 69 63 20 69 6e 74 20 72 65 73 74 6f 72  tatic int restor
21ff0 65 5f 70 72 6e 67 5f 73 74 61 74 65 28 0a 20 20  e_prng_state(.  
22000 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
22010 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65  tData, /* Pointe
22020 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61  r to sqlite3_ena
22030 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e  ble_XXX function
22040 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
22050 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
22060 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
22070 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
22080 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
22090 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20  .  int objc,    
220a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
220b0 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
220c0 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43   */.  Tcl_Obj *C
220d0 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20  ONST objv[]  /* 
220e0 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74  Command argument
220f0 73 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  s */.){.  sqlite
22100 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
22110 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 50  QLITE_TESTCTRL_P
22120 52 4e 47 5f 52 45 53 54 4f 52 45 29 3b 0a 20 20  RNG_RESTORE);.  
22130 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
22140 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20 20  ./*.** tclcmd:  
22150 72 65 73 65 74 5f 70 72 6e 67 5f 73 74 61 74 65  reset_prng_state
22160 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 72  .*/.static int r
22170 65 73 65 74 5f 70 72 6e 67 5f 73 74 61 74 65 28  eset_prng_state(
22180 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c  .  ClientData cl
22190 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69  ientData, /* Poi
221a0 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f  nter to sqlite3_
221b0 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74  enable_XXX funct
221c0 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74  ion */.  Tcl_Int
221d0 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
221e0 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
221f0 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
22200 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
22210 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20   */.  int objc, 
22220 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22230 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
22240 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a  nts */.  Tcl_Obj
22250 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20   *CONST objv[]  
22260 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d  /* Command argum
22270 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  ents */.){.  sql
22280 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
22290 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
222a0 4c 5f 50 52 4e 47 5f 52 45 53 45 54 29 3b 0a 20  L_PRNG_RESET);. 
222b0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
222c0 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a  }../*.** tclcmd:
222d0 20 20 70 63 61 63 68 65 5f 73 74 61 74 73 0a 2a    pcache_stats.*
222e0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
222f0 74 5f 70 63 61 63 68 65 5f 73 74 61 74 73 28 0a  t_pcache_stats(.
22300 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69    ClientData cli
22310 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e  entData, /* Poin
22320 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65  ter to sqlite3_e
22330 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69  nable_XXX functi
22340 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  on */.  Tcl_Inte
22350 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
22360 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
22370 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
22380 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
22390 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20  */.  int objc,  
223a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
223b0 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
223c0 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20  ts */.  Tcl_Obj 
223d0 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f  *CONST objv[]  /
223e0 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65  * Command argume
223f0 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20  nts */.){.  int 
22400 6e 4d 69 6e 3b 0a 20 20 69 6e 74 20 6e 4d 61 78  nMin;.  int nMax
22410 3b 0a 20 20 69 6e 74 20 6e 43 75 72 72 65 6e 74  ;.  int nCurrent
22420 3b 0a 20 20 69 6e 74 20 6e 52 65 63 79 63 6c 61  ;.  int nRecycla
22430 62 6c 65 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  ble;.  Tcl_Obj *
22440 70 52 65 74 3b 0a 0a 20 20 73 71 6c 69 74 65 33  pRet;..  sqlite3
22450 50 63 61 63 68 65 53 74 61 74 73 28 26 6e 43 75  PcacheStats(&nCu
22460 72 72 65 6e 74 2c 20 26 6e 4d 61 78 2c 20 26 6e  rrent, &nMax, &n
22470 4d 69 6e 2c 20 26 6e 52 65 63 79 63 6c 61 62 6c  Min, &nRecyclabl
22480 65 29 3b 0a 0a 20 20 70 52 65 74 20 3d 20 54 63  e);..  pRet = Tc
22490 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a 20 20 54 63  l_NewObj();.  Tc
224a0 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
224b0 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70  lement(interp, p
224c0 52 65 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69  Ret, Tcl_NewStri
224d0 6e 67 4f 62 6a 28 22 63 75 72 72 65 6e 74 22 2c  ngObj("current",
224e0 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73   -1));.  Tcl_Lis
224f0 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
22500 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74 2c 20  t(interp, pRet, 
22510 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e 43  Tcl_NewIntObj(nC
22520 75 72 72 65 6e 74 29 29 3b 0a 20 20 54 63 6c 5f  urrent));.  Tcl_
22530 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
22540 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 52 65  ment(interp, pRe
22550 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  t, Tcl_NewString
22560 4f 62 6a 28 22 6d 61 78 22 2c 20 2d 31 29 29 3b  Obj("max", -1));
22570 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  .  Tcl_ListObjAp
22580 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
22590 72 70 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65  rp, pRet, Tcl_Ne
225a0 77 49 6e 74 4f 62 6a 28 6e 4d 61 78 29 29 3b 0a  wIntObj(nMax));.
225b0 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70    Tcl_ListObjApp
225c0 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
225d0 70 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77  p, pRet, Tcl_New
225e0 53 74 72 69 6e 67 4f 62 6a 28 22 6d 69 6e 22 2c  StringObj("min",
225f0 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73   -1));.  Tcl_Lis
22600 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
22610 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74 2c 20  t(interp, pRet, 
22620 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e 4d  Tcl_NewIntObj(nM
22630 69 6e 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74  in));.  Tcl_List
22640 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ObjAppendElement
22650 28 69 6e 74 65 72 70 2c 20 70 52 65 74 2c 20 54  (interp, pRet, T
22660 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
22670 22 72 65 63 79 63 6c 61 62 6c 65 22 2c 20 2d 31  "recyclable", -1
22680 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ));.  Tcl_ListOb
22690 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
226a0 6e 74 65 72 70 2c 20 70 52 65 74 2c 20 54 63 6c  nterp, pRet, Tcl
226b0 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e 52 65 63 79  _NewIntObj(nRecy
226c0 63 6c 61 62 6c 65 29 29 3b 0a 0a 20 20 54 63 6c  clable));..  Tcl
226d0 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
226e0 74 65 72 70 2c 20 70 52 65 74 29 3b 0a 0a 20 20  terp, pRet);..  
226f0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
22700 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
22710 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
22720 54 49 46 59 0a 73 74 61 74 69 63 20 76 6f 69 64  TIFY.static void
22730 20 74 65 73 74 5f 75 6e 6c 6f 63 6b 5f 6e 6f 74   test_unlock_not
22740 69 66 79 5f 63 62 28 76 6f 69 64 20 2a 2a 61 41  ify_cb(void **aA
22750 72 67 2c 20 69 6e 74 20 6e 41 72 67 29 7b 0a 20  rg, int nArg){. 
22760 20 69 6e 74 20 69 69 3b 0a 20 20 66 6f 72 28 69   int ii;.  for(i
22770 69 3d 30 3b 20 69 69 3c 6e 41 72 67 3b 20 69 69  i=0; ii<nArg; ii
22780 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f 45 76 61  ++){.    Tcl_Eva
22790 6c 45 78 28 28 54 63 6c 5f 49 6e 74 65 72 70 20  lEx((Tcl_Interp 
227a0 2a 29 61 41 72 67 5b 69 69 5d 2c 20 22 75 6e 6c  *)aArg[ii], "unl
227b0 6f 63 6b 5f 6e 6f 74 69 66 79 22 2c 20 2d 31 2c  ock_notify", -1,
227c0 20 54 43 4c 5f 45 56 41 4c 5f 47 4c 4f 42 41 4c   TCL_EVAL_GLOBAL
227d0 29 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 20  );.  }.}.#endif 
227e0 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  /* SQLITE_ENABLE
227f0 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 20 2a  _UNLOCK_NOTIFY *
22800 2f 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a  /../*.** tclcmd:
22810 20 20 73 71 6c 69 74 65 33 5f 75 6e 6c 6f 63 6b    sqlite3_unlock
22820 5f 6e 6f 74 69 66 79 20 64 62 0a 2a 2f 0a 23 69  _notify db.*/.#i
22830 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
22840 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
22850 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
22860 5f 75 6e 6c 6f 63 6b 5f 6e 6f 74 69 66 79 28 0a  _unlock_notify(.
22870 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69    ClientData cli
22880 65 6e 74 44 61 74 61 2c 20 2f 2a 20 55 6e 75 73  entData, /* Unus
22890 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  ed */.  Tcl_Inte
228a0 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
228b0 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
228c0 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
228d0 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
228e0 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20  */.  int objc,  
228f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
22900 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
22910 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20  ts */.  Tcl_Obj 
22920 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f  *CONST objv[]  /
22930 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65  * Command argume
22940 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69  nts */.){.  sqli
22950 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  te3 *db;.  int r
22960 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
22970 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  2 ){.    Tcl_Wro
22980 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
22990 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42 22 29  , 1, objv, "DB")
229a0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
229b0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
229c0 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
229d0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
229e0 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
229f0 26 64 62 29 20 29 7b 0a 20 20 20 20 72 65 74 75  &db) ){.    retu
22a00 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
22a10 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
22a20 5f 75 6e 6c 6f 63 6b 5f 6e 6f 74 69 66 79 28 64  _unlock_notify(d
22a30 62 2c 20 74 65 73 74 5f 75 6e 6c 6f 63 6b 5f 6e  b, test_unlock_n
22a40 6f 74 69 66 79 5f 63 62 2c 20 28 76 6f 69 64 20  otify_cb, (void 
22a50 2a 29 69 6e 74 65 72 70 29 3b 0a 20 20 54 63 6c  *)interp);.  Tcl
22a60 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
22a70 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72  p, (char *)t1Err
22a80 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f  orName(rc), TCL_
22a90 53 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75 72  STATIC);.  retur
22aa0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64  n TCL_OK;.}.#end
22ab0 69 66 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64  if../*.** tclcmd
22ac0 3a 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 63  :  sqlite3_wal_c
22ad0 68 65 63 6b 70 6f 69 6e 74 20 64 62 20 3f 4e 41  heckpoint db ?NA
22ae0 4d 45 3f 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ME?.*/.static in
22af0 74 20 74 65 73 74 5f 77 61 6c 5f 63 68 65 63 6b  t test_wal_check
22b00 70 6f 69 6e 74 28 0a 20 20 43 6c 69 65 6e 74 44  point(.  ClientD
22b10 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20  ata clientData, 
22b20 2f 2a 20 55 6e 75 73 65 64 20 2a 2f 0a 20 20 54  /* Unused */.  T
22b30 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
22b40 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c  p,    /* The TCL
22b50 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61   interpreter tha
22b60 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63  t invoked this c
22b70 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  ommand */.  int 
22b80 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20  objc,           
22b90 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
22ba0 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54  arguments */.  T
22bb0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
22bc0 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64  jv[]  /* Command
22bd0 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b   arguments */.){
22be0 0a 20 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30  .  char *zDb = 0
22bf0 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  ;.  sqlite3 *db;
22c00 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66  .  int rc;..  if
22c10 28 20 6f 62 6a 63 21 3d 33 20 26 26 20 6f 62 6a  ( objc!=3 && obj
22c20 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
22c30 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
22c40 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44  erp, 1, objv, "D
22c50 42 20 3f 4e 41 4d 45 3f 22 29 3b 0a 20 20 20 20  B ?NAME?");.    
22c60 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
22c70 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
22c80 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
22c90 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
22ca0 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
22cb0 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  {.    return TCL
22cc0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
22cd0 28 20 6f 62 6a 63 3d 3d 33 20 29 7b 0a 20 20 20  ( objc==3 ){.   
22ce0 20 7a 44 62 20 3d 20 54 63 6c 5f 47 65 74 53 74   zDb = Tcl_GetSt
22cf0 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20  ring(objv[2]);. 
22d00 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
22d10 33 5f 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74  3_wal_checkpoint
22d20 28 64 62 2c 20 7a 44 62 29 3b 0a 20 20 54 63 6c  (db, zDb);.  Tcl
22d30 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
22d40 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72  p, (char *)t1Err
22d50 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f  orName(rc), TCL_
22d60 53 54 41 54 49 43 29 3b 0a 20 20 72 65 74 75 72  STATIC);.  retur
22d70 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a  n TCL_OK;.}.../*
22d80 0a 2a 2a 20 20 20 20 20 74 63 6c 5f 6f 62 6a 70  .**     tcl_objp
22d90 72 6f 63 20 43 4f 4d 4d 41 4e 44 4e 41 4d 45 20  roc COMMANDNAME 
22da0 41 52 47 53 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 52 75  ARGS....**.** Ru
22db0 6e 20 61 20 54 43 4c 20 63 6f 6d 6d 61 6e 64 20  n a TCL command 
22dc0 75 73 69 6e 67 20 69 74 73 20 6f 62 6a 50 72 6f  using its objPro
22dd0 63 20 69 6e 74 65 72 66 61 63 65 2e 20 20 54 68  c interface.  Th
22de0 72 6f 77 20 61 6e 20 65 72 72 6f 72 20 69 66 0a  row an error if.
22df0 2a 2a 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 68  ** the command h
22e00 61 73 20 6e 6f 20 6f 62 6a 50 72 6f 63 20 69 6e  as no objProc in
22e10 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 73 74 61 74  terface..*/.stat
22e20 69 63 20 69 6e 74 20 72 75 6e 41 73 4f 62 6a 50  ic int runAsObjP
22e30 72 6f 63 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  roc(.  void * cl
22e40 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
22e50 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
22e60 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
22e70 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
22e80 76 5b 5d 0a 29 7b 0a 20 20 54 63 6c 5f 43 6d 64  v[].){.  Tcl_Cmd
22e90 49 6e 66 6f 20 63 6d 64 49 6e 66 6f 3b 0a 20 20  Info cmdInfo;.  
22ea0 69 66 28 20 6f 62 6a 63 3c 32 20 29 7b 0a 20 20  if( objc<2 ){.  
22eb0 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72    Tcl_WrongNumAr
22ec0 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62  gs(interp, 1, ob
22ed0 6a 76 2c 20 22 43 4f 4d 4d 41 4e 44 20 2e 2e 2e  jv, "COMMAND ...
22ee0 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
22ef0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
22f00 69 66 28 20 21 54 63 6c 5f 47 65 74 43 6f 6d 6d  if( !Tcl_GetComm
22f10 61 6e 64 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20  andInfo(interp, 
22f20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
22f30 6a 76 5b 31 5d 29 2c 20 26 63 6d 64 49 6e 66 6f  jv[1]), &cmdInfo
22f40 29 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  ) ){.    Tcl_App
22f50 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
22f60 2c 20 22 63 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66  , "command not f
22f70 6f 75 6e 64 3a 20 22 2c 0a 20 20 20 20 20 20 20  ound: ",.       
22f80 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
22f90 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 28 63 68 61  g(objv[1]), (cha
22fa0 72 2a 29 30 29 3b 0a 20 20 20 20 72 65 74 75 72  r*)0);.    retur
22fb0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
22fc0 0a 20 20 69 66 28 20 63 6d 64 49 6e 66 6f 2e 6f  .  if( cmdInfo.o
22fd0 62 6a 50 72 6f 63 3d 3d 30 20 29 7b 0a 20 20 20  bjProc==0 ){.   
22fe0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
22ff0 74 28 69 6e 74 65 72 70 2c 20 22 63 6f 6d 6d 61  t(interp, "comma
23000 6e 64 20 68 61 73 20 6e 6f 20 6f 62 6a 50 72 6f  nd has no objPro
23010 63 3a 20 22 2c 0a 20 20 20 20 20 20 20 20 20 20  c: ",.          
23020 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
23030 62 6a 76 5b 31 5d 29 2c 20 28 63 68 61 72 2a 29  bjv[1]), (char*)
23040 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
23050 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
23060 72 65 74 75 72 6e 20 63 6d 64 49 6e 66 6f 2e 6f  return cmdInfo.o
23070 62 6a 50 72 6f 63 28 63 6d 64 49 6e 66 6f 2e 6f  bjProc(cmdInfo.o
23080 62 6a 43 6c 69 65 6e 74 44 61 74 61 2c 20 69 6e  bjClientData, in
23090 74 65 72 70 2c 20 6f 62 6a 63 2d 31 2c 20 6f 62  terp, objc-1, ob
230a0 6a 76 2b 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  jv+1);.}.../*.**
230b0 20 52 65 67 69 73 74 65 72 20 63 6f 6d 6d 61 6e   Register comman
230c0 64 73 20 77 69 74 68 20 74 68 65 20 54 43 4c 20  ds with the TCL 
230d0 69 6e 74 65 72 70 72 65 74 65 72 2e 0a 2a 2f 0a  interpreter..*/.
230e0 69 6e 74 20 53 71 6c 69 74 65 74 65 73 74 31 5f  int Sqlitetest1_
230f0 49 6e 69 74 28 54 63 6c 5f 49 6e 74 65 72 70 20  Init(Tcl_Interp 
23100 2a 69 6e 74 65 72 70 29 7b 0a 20 20 65 78 74 65  *interp){.  exte
23110 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73  rn int sqlite3_s
23120 65 61 72 63 68 5f 63 6f 75 6e 74 3b 0a 20 20 65  earch_count;.  e
23130 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
23140 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 3b 0a 20  3_found_count;. 
23150 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
23160 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
23170 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  unt;.  extern in
23180 74 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 66  t sqlite3_open_f
23190 69 6c 65 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74  ile_count;.  ext
231a0 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
231b0 73 6f 72 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78  sort_count;.  ex
231c0 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
231d0 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65 3b 0a 23  _current_time;.#
231e0 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 55 4e 49  if SQLITE_OS_UNI
231f0 58 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 41  X && defined(__A
23200 50 50 4c 45 5f 5f 29 20 26 26 20 53 51 4c 49 54  PPLE__) && SQLIT
23210 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
23220 5f 53 54 59 4c 45 0a 20 20 65 78 74 65 72 6e 20  _STYLE.  extern 
23230 69 6e 74 20 73 71 6c 69 74 65 33 5f 68 6f 73 74  int sqlite3_host
23240 69 64 5f 6e 75 6d 3b 0a 23 65 6e 64 69 66 0a 20  id_num;.#endif. 
23250 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
23260 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65  te3_max_blobsize
23270 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
23280 71 6c 69 74 65 33 42 74 72 65 65 53 68 61 72 65  qlite3BtreeShare
23290 64 43 61 63 68 65 52 65 70 6f 72 74 28 76 6f 69  dCacheReport(voi
232a0 64 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  d*,.            
232b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 63                Tc
232d0 6c 5f 49 6e 74 65 72 70 2a 2c 69 6e 74 2c 54 63  l_Interp*,int,Tc
232e0 6c 5f 4f 62 6a 2a 43 4f 4e 53 54 2a 29 3b 0a 20  l_Obj*CONST*);. 
232f0 20 73 74 61 74 69 63 20 73 74 72 75 63 74 20 7b   static struct {
23300 0a 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  .     char *zNam
23310 65 3b 0a 20 20 20 20 20 54 63 6c 5f 43 6d 64 50  e;.     Tcl_CmdP
23320 72 6f 63 20 2a 78 50 72 6f 63 3b 0a 20 20 7d 20  roc *xProc;.  } 
23330 61 43 6d 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  aCmd[] = {.     
23340 7b 20 22 64 62 5f 65 6e 74 65 72 22 2c 20 20 20  { "db_enter",   
23350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23360 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
23370 29 64 62 5f 65 6e 74 65 72 20 20 20 20 20 20 20  )db_enter       
23380 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
23390 7b 20 22 64 62 5f 6c 65 61 76 65 22 2c 20 20 20  { "db_leave",   
233a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233b0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
233c0 29 64 62 5f 6c 65 61 76 65 20 20 20 20 20 20 20  )db_leave       
233d0 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
233e0 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
233f0 74 66 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20  tf_int",        
23400 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
23410 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
23420 5f 69 6e 74 20 20 20 20 7d 2c 0a 20 20 20 20 20  _int    },.     
23430 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
23440 74 66 5f 69 6e 74 36 34 22 2c 20 20 20 20 20 20  tf_int64",      
23450 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
23460 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
23470 5f 69 6e 74 36 34 20 20 7d 2c 0a 20 20 20 20 20  _int64  },.     
23480 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
23490 74 66 5f 6c 6f 6e 67 22 2c 20 20 20 20 20 20 20  tf_long",       
234a0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
234b0 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
234c0 5f 6c 6f 6e 67 20 20 20 7d 2c 0a 20 20 20 20 20  _long   },.     
234d0 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
234e0 74 66 5f 73 74 72 22 2c 20 20 20 20 20 20 20 20  tf_str",        
234f0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
23500 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
23510 5f 73 74 72 20 20 20 20 7d 2c 0a 20 20 20 20 20  _str    },.     
23520 7b 20 22 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  { "sqlite3_snpri
23530 6e 74 66 5f 73 74 72 22 2c 20 20 20 20 20 20 20  ntf_str",       
23540 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
23550 29 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74  )sqlite3_snprint
23560 66 5f 73 74 72 20 20 20 7d 2c 0a 20 20 20 20 20  f_str   },.     
23570 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
23580 74 66 5f 73 74 72 6f 6e 6c 79 22 2c 20 20 20 20  tf_stronly",    
23590 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
235a0 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
235b0 5f 73 74 72 6f 6e 6c 79 7d 2c 0a 20 20 20 20 20  _stronly},.     
235c0 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
235d0 74 66 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20 20  tf_double",     
235e0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
235f0 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
23600 5f 64 6f 75 62 6c 65 20 7d 2c 0a 20 20 20 20 20  _double },.     
23610 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
23620 74 66 5f 73 63 61 6c 65 64 22 2c 20 20 20 20 20  tf_scaled",     
23630 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
23640 29 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66  )sqlite3_mprintf
23650 5f 73 63 61 6c 65 64 20 7d 2c 0a 20 20 20 20 20  _scaled },.     
23660 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
23670 74 66 5f 68 65 78 64 6f 75 62 6c 65 22 2c 20 20  tf_hexdouble",  
23680 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73   (Tcl_CmdProc*)s
23690 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 68  qlite3_mprintf_h
236a0 65 78 64 6f 75 62 6c 65 7d 2c 0a 20 20 20 20 20  exdouble},.     
236b0 7b 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  { "sqlite3_mprin
236c0 74 66 5f 7a 5f 74 65 73 74 22 2c 20 20 20 20 20  tf_z_test",     
236d0 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
236e0 29 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f 7a 20  )test_mprintf_z 
236f0 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b         },.     {
23700 20 22 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74   "sqlite3_mprint
23710 66 5f 6e 5f 74 65 73 74 22 2c 20 20 20 20 20 20  f_n_test",      
23720 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
23730 74 65 73 74 5f 6d 70 72 69 6e 74 66 5f 6e 20 20  test_mprintf_n  
23740 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
23750 22 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74  "sqlite3_snprint
23760 66 5f 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20  f_int",         
23770 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
23780 65 73 74 5f 73 6e 70 72 69 6e 74 66 5f 69 6e 74  est_snprintf_int
23790 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
237a0 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
237b0 65 72 74 5f 72 6f 77 69 64 22 2c 20 20 20 20 20  ert_rowid",     
237c0 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
237d0 73 74 5f 6c 61 73 74 5f 72 6f 77 69 64 20 20 20  st_last_rowid   
237e0 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
237f0 71 6c 69 74 65 33 5f 65 78 65 63 5f 70 72 69 6e  qlite3_exec_prin
23800 74 66 22 2c 20 20 20 20 20 20 20 20 20 20 20 28  tf",           (
23810 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
23820 74 5f 65 78 65 63 5f 70 72 69 6e 74 66 20 20 20  t_exec_printf   
23830 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
23840 6c 69 74 65 33 5f 65 78 65 63 5f 68 65 78 22 2c  lite3_exec_hex",
23850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54                (T
23860 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
23870 5f 65 78 65 63 5f 68 65 78 20 20 20 20 20 20 20  _exec_hex       
23880 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
23890 69 74 65 33 5f 65 78 65 63 22 2c 20 20 20 20 20  ite3_exec",     
238a0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63               (Tc
238b0 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
238c0 65 78 65 63 20 20 20 20 20 20 20 20 20 20 20 20  exec            
238d0 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
238e0 74 65 33 5f 65 78 65 63 5f 6e 72 22 2c 20 20 20  te3_exec_nr",   
238f0 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
23900 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 65  _CmdProc*)test_e
23910 78 65 63 5f 6e 72 20 20 20 20 20 20 20 20 20 20  xec_nr          
23920 7d 2c 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  },.#ifndef SQLIT
23930 45 5f 4f 4d 49 54 5f 47 45 54 5f 54 41 42 4c 45  E_OMIT_GET_TABLE
23940 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
23950 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74  _get_table_print
23960 66 22 2c 20 20 20 20 20 20 28 54 63 6c 5f 43 6d  f",      (Tcl_Cm
23970 64 50 72 6f 63 2a 29 74 65 73 74 5f 67 65 74 5f  dProc*)test_get_
23980 74 61 62 6c 65 5f 70 72 69 6e 74 66 20 7d 2c 0a  table_printf },.
23990 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73  #endif.     { "s
239a0 71 6c 69 74 65 33 5f 63 6c 6f 73 65 22 2c 20 20  qlite3_close",  
239b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
239c0 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c  Tcl_CmdProc*)sql
239d0 69 74 65 5f 74 65 73 74 5f 63 6c 6f 73 65 20 20  ite_test_close  
239e0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
239f0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e  lite3_create_fun
23a00 63 74 69 6f 6e 22 2c 20 20 20 20 20 20 20 28 54  ction",       (T
23a10 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
23a20 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
23a30 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
23a40 69 74 65 33 5f 63 72 65 61 74 65 5f 61 67 67 72  ite3_create_aggr
23a50 65 67 61 74 65 22 2c 20 20 20 20 20 20 28 54 63  egate",      (Tc
23a60 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f  l_CmdProc*)test_
23a70 63 72 65 61 74 65 5f 61 67 67 72 65 67 61 74 65  create_aggregate
23a80 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
23a90 74 65 5f 72 65 67 69 73 74 65 72 5f 74 65 73 74  te_register_test
23aa0 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 28 54 63 6c  _function", (Tcl
23ab0 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 72  _CmdProc*)test_r
23ac0 65 67 69 73 74 65 72 5f 66 75 6e 63 20 20 20 20  egister_func    
23ad0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
23ae0 65 5f 61 62 6f 72 74 22 2c 20 20 20 20 20 20 20  e_abort",       
23af0 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
23b00 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f  CmdProc*)sqlite_
23b10 61 62 6f 72 74 20 20 20 20 20 20 20 20 20 20 7d  abort          }
23b20 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
23b30 5f 62 69 6e 64 22 2c 20 20 20 20 20 20 20 20 20  _bind",         
23b40 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
23b50 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 62 69 6e  mdProc*)test_bin
23b60 64 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c  d             },
23b70 0a 20 20 20 20 20 7b 20 22 62 72 65 61 6b 70 6f  .     { "breakpo
23b80 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 20  int",           
23b90 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
23ba0 64 50 72 6f 63 2a 29 74 65 73 74 5f 62 72 65 61  dProc*)test_brea
23bb0 6b 70 6f 69 6e 74 20 20 20 20 20 20 20 7d 2c 0a  kpoint       },.
23bc0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
23bd0 6b 65 79 22 2c 20 20 20 20 20 20 20 20 20 20 20  key",           
23be0 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
23bf0 50 72 6f 63 2a 29 74 65 73 74 5f 6b 65 79 20 20  Proc*)test_key  
23c00 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
23c10 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 72      { "sqlite3_r
23c20 65 6b 65 79 22 2c 20 20 20 20 20 20 20 20 20 20  ekey",          
23c30 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
23c40 72 6f 63 2a 29 74 65 73 74 5f 72 65 6b 65 79 20  roc*)test_rekey 
23c50 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
23c60 20 20 20 7b 20 22 73 71 6c 69 74 65 5f 73 65 74     { "sqlite_set
23c70 5f 6d 61 67 69 63 22 2c 20 20 20 20 20 20 20 20  _magic",        
23c80 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
23c90 6f 63 2a 29 73 71 6c 69 74 65 5f 73 65 74 5f 6d  oc*)sqlite_set_m
23ca0 61 67 69 63 20 20 20 20 20 20 7d 2c 0a 20 20 20  agic      },.   
23cb0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 69 6e 74    { "sqlite3_int
23cc0 65 72 72 75 70 74 22 2c 20 20 20 20 20 20 20 20  errupt",        
23cd0 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
23ce0 63 2a 29 74 65 73 74 5f 69 6e 74 65 72 72 75 70  c*)test_interrup
23cf0 74 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  t        },.    
23d00 20 7b 20 22 73 71 6c 69 74 65 5f 64 65 6c 65 74   { "sqlite_delet
23d10 65 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20  e_function",    
23d20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
23d30 2a 29 64 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f  *)delete_functio
23d40 6e 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  n       },.     
23d50 7b 20 22 73 71 6c 69 74 65 5f 64 65 6c 65 74 65  { "sqlite_delete
23d60 5f 63 6f 6c 6c 61 74 69 6f 6e 22 2c 20 20 20 20  _collation",    
23d70 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
23d80 29 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74 69 6f  )delete_collatio
23d90 6e 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b  n      },.     {
23da0 20 22 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75   "sqlite3_get_au
23db0 74 6f 63 6f 6d 6d 69 74 22 2c 20 20 20 20 20 20  tocommit",      
23dc0 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
23dd0 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 20  get_autocommit  
23de0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
23df0 22 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 75  "sqlite3_stack_u
23e00 73 65 64 22 2c 20 20 20 20 20 20 20 20 20 20 20  sed",           
23e10 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
23e20 65 73 74 5f 73 74 61 63 6b 5f 75 73 65 64 20 20  est_stack_used  
23e30 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
23e40 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
23e50 65 6f 75 74 22 2c 20 20 20 20 20 20 20 20 20 20  eout",          
23e60 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
23e70 73 74 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 20  st_busy_timeout 
23e80 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 70      },.     { "p
23e90 72 69 6e 74 66 22 2c 20 20 20 20 20 20 20 20 20  rintf",         
23ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
23eb0 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73  Tcl_CmdProc*)tes
23ec0 74 5f 70 72 69 6e 74 66 20 20 20 20 20 20 20 20  t_printf        
23ed0 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
23ee0 6c 69 74 65 33 49 6f 54 72 61 63 65 22 2c 20 20  lite3IoTrace",  
23ef0 20 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c              (Tcl
23f00 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 69  _CmdProc*)test_i
23f10 6f 5f 74 72 61 63 65 20 20 20 20 20 20 20 20 20  o_trace         
23f20 7d 2c 0a 20 20 7d 3b 0a 20 20 73 74 61 74 69 63  },.  };.  static
23f30 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 63   struct {.     c
23f40 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20  har *zName;.    
23f50 20 54 63 6c 5f 4f 62 6a 43 6d 64 50 72 6f 63 20   Tcl_ObjCmdProc 
23f60 2a 78 50 72 6f 63 3b 0a 20 20 20 20 20 76 6f 69  *xProc;.     voi
23f70 64 20 2a 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20  d *clientData;. 
23f80 20 7d 20 61 4f 62 6a 43 6d 64 5b 5d 20 3d 20 7b   } aObjCmd[] = {
23f90 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
23fa0 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
23fb0 74 65 72 22 2c 20 20 20 20 67 65 74 5f 73 71 6c  ter",    get_sql
23fc0 69 74 65 5f 70 6f 69 6e 74 65 72 2c 20 30 20 7d  ite_pointer, 0 }
23fd0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
23fe0 33 5f 62 69 6e 64 5f 69 6e 74 22 2c 20 20 20 20  3_bind_int",    
23ff0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62            test_b
24000 69 6e 64 5f 69 6e 74 2c 20 20 20 20 20 20 30 20  ind_int,      0 
24010 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
24020 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62  e3_bind_zeroblob
24030 22 2c 20 20 20 20 20 20 20 20 20 74 65 73 74 5f  ",         test_
24040 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62 2c 20 30  bind_zeroblob, 0
24050 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
24060 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 22 2c  te3_bind_int64",
24070 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
24080 5f 62 69 6e 64 5f 69 6e 74 36 34 2c 20 20 20 20  _bind_int64,    
24090 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
240a0 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
240b0 22 2c 20 20 20 20 20 20 20 20 20 20 20 74 65 73  ",           tes
240c0 74 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 2c 20 20  t_bind_double,  
240d0 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71   0 },.     { "sq
240e0 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 22  lite3_bind_null"
240f0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65  ,             te
24100 73 74 5f 62 69 6e 64 5f 6e 75 6c 6c 20 20 20 20  st_bind_null    
24110 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
24120 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
24130 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 74  ",             t
24140 65 73 74 5f 62 69 6e 64 5f 74 65 78 74 20 20 20  est_bind_text   
24150 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
24160 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
24170 74 31 36 22 2c 20 20 20 20 20 20 20 20 20 20 20  t16",           
24180 74 65 73 74 5f 62 69 6e 64 5f 74 65 78 74 31 36  test_bind_text16
24190 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
241a0 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c  "sqlite3_bind_bl
241b0 6f 62 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ob",            
241c0 20 74 65 73 74 5f 62 69 6e 64 5f 62 6c 6f 62 20   test_bind_blob 
241d0 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
241e0 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70   "sqlite3_bind_p
241f0 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 22 2c  arameter_count",
24200 20 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61    test_bind_para
24210 6d 65 74 65 72 5f 63 6f 75 6e 74 2c 20 30 7d 2c  meter_count, 0},
24220 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
24230 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
24240 6e 61 6d 65 22 2c 20 20 20 74 65 73 74 5f 62 69  name",   test_bi
24250 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
24260 65 2c 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22  e,  0},.     { "
24270 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
24280 61 6d 65 74 65 72 5f 69 6e 64 65 78 22 2c 20 20  ameter_index",  
24290 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65  test_bind_parame
242a0 74 65 72 5f 69 6e 64 65 78 2c 20 30 7d 2c 0a 20  ter_index, 0},. 
242b0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
242c0 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 22 2c 20  lear_bindings", 
242d0 20 20 20 20 20 20 20 74 65 73 74 5f 63 6c 65 61         test_clea
242e0 72 5f 62 69 6e 64 69 6e 67 73 2c 20 30 7d 2c 0a  r_bindings, 0},.
242f0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
24300 63 6c 65 61 72 5f 62 69 6e 64 69 6e 67 73 5f 6e  clear_bindings_n
24310 75 6c 6c 22 2c 20 20 20 74 65 73 74 5f 63 6c 65  ull",   test_cle
24320 61 72 5f 62 69 6e 64 69 6e 67 73 5f 6e 75 6c 6c  ar_bindings_null
24330 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  , 0},.     { "sq
24340 6c 69 74 65 33 5f 73 6c 65 65 70 22 2c 20 20 20  lite3_sleep",   
24350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
24360 73 74 5f 73 6c 65 65 70 2c 20 20 20 20 20 20 20  st_sleep,       
24370 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73     0},.     { "s
24380 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 22 2c  qlite3_errcode",
24390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
243a0 65 73 74 5f 65 72 72 63 6f 64 65 20 20 20 20 20  est_errcode     
243b0 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
243c0 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64  sqlite3_extended
243d0 5f 65 72 72 63 6f 64 65 22 2c 20 20 20 20 20 20  _errcode",      
243e0 74 65 73 74 5f 65 78 5f 65 72 72 63 6f 64 65 20  test_ex_errcode 
243f0 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
24400 22 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 22  "sqlite3_errmsg"
24410 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
24420 20 74 65 73 74 5f 65 72 72 6d 73 67 20 20 20 20   test_errmsg    
24430 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b      ,0 },.     {
24440 20 22 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67   "sqlite3_errmsg
24450 31 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  16",            
24460 20 20 74 65 73 74 5f 65 72 72 6d 73 67 31 36 20    test_errmsg16 
24470 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
24480 7b 20 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e 22  { "sqlite3_open"
24490 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
244a0 20 20 20 74 65 73 74 5f 6f 70 65 6e 20 20 20 20     test_open    
244b0 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20        ,0 },.    
244c0 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f 70 65 6e   { "sqlite3_open
244d0 31 36 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  16",            
244e0 20 20 20 20 74 65 73 74 5f 6f 70 65 6e 31 36 20      test_open16 
244f0 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
24500 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6d    { "sqlite3_com
24510 70 6c 65 74 65 31 36 22 2c 20 20 20 20 20 20 20  plete16",       
24520 20 20 20 20 20 74 65 73 74 5f 63 6f 6d 70 6c 65       test_comple
24530 74 65 31 36 20 20 20 20 2c 30 20 7d 2c 0a 0a 20  te16    ,0 },.. 
24540 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 70      { "sqlite3_p
24550 72 65 70 61 72 65 22 2c 20 20 20 20 20 20 20 20  repare",        
24560 20 20 20 20 20 20 20 74 65 73 74 5f 70 72 65 70         test_prep
24570 61 72 65 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a  are       ,0 },.
24580 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
24590 70 72 65 70 61 72 65 31 36 22 2c 20 20 20 20 20  prepare16",     
245a0 20 20 20 20 20 20 20 20 74 65 73 74 5f 70 72 65          test_pre
245b0 70 61 72 65 31 36 20 20 20 20 20 2c 30 20 7d 2c  pare16     ,0 },
245c0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
245d0 5f 70 72 65 70 61 72 65 5f 76 32 22 2c 20 20 20  _prepare_v2",   
245e0 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 70 72           test_pr
245f0 65 70 61 72 65 5f 76 32 20 20 20 20 2c 30 20 7d  epare_v2    ,0 }
24600 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
24610 33 5f 70 72 65 70 61 72 65 5f 74 6b 74 33 31 33  3_prepare_tkt313
24620 34 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f 70  4",       test_p
24630 72 65 70 61 72 65 5f 74 6b 74 33 31 33 34 2c 20  repare_tkt3134, 
24640 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  0},.     { "sqli
24650 74 65 33 5f 70 72 65 70 61 72 65 31 36 5f 76 32  te3_prepare16_v2
24660 22 2c 20 20 20 20 20 20 20 20 20 20 74 65 73 74  ",          test
24670 5f 70 72 65 70 61 72 65 31 36 5f 76 32 20 20 2c  _prepare16_v2  ,
24680 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
24690 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 22 2c 20  ite3_finalize", 
246a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
246b0 74 5f 66 69 6e 61 6c 69 7a 65 20 20 20 20 20 20  t_finalize      
246c0 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  ,0 },.     { "sq
246d0 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74 75  lite3_stmt_statu
246e0 73 22 2c 20 20 20 20 20 20 20 20 20 20 20 74 65  s",           te
246f0 73 74 5f 73 74 6d 74 5f 73 74 61 74 75 73 20 20  st_stmt_status  
24700 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
24710 71 6c 69 74 65 33 5f 72 65 73 65 74 22 2c 20 20  qlite3_reset",  
24720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24730 65 73 74 5f 72 65 73 65 74 20 20 20 20 20 20 20  est_reset       
24740 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
24750 73 71 6c 69 74 65 33 5f 65 78 70 69 72 65 64 22  sqlite3_expired"
24760 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
24770 74 65 73 74 5f 65 78 70 69 72 65 64 20 20 20 20  test_expired    
24780 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
24790 22 73 71 6c 69 74 65 33 5f 74 72 61 6e 73 66 65  "sqlite3_transfe
247a0 72 5f 62 69 6e 64 69 6e 67 73 22 2c 20 20 20 20  r_bindings",    
247b0 20 74 65 73 74 5f 74 72 61 6e 73 66 65 72 5f 62   test_transfer_b
247c0 69 6e 64 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b  ind ,0 },.     {
247d0 20 22 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65   "sqlite3_change
247e0 73 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  s",             
247f0 20 20 74 65 73 74 5f 63 68 61 6e 67 65 73 20 20    test_changes  
24800 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
24810 7b 20 22 73 71 6c 69 74 65 33 5f 73 74 65 70 22  { "sqlite3_step"
24820 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
24830 20 20 20 74 65 73 74 5f 73 74 65 70 20 20 20 20     test_step    
24840 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20        ,0 },.    
24850 20 7b 20 22 73 71 6c 69 74 65 33 5f 73 71 6c 22   { "sqlite3_sql"
24860 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
24870 20 20 20 20 74 65 73 74 5f 73 71 6c 20 20 20 20      test_sql    
24880 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
24890 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6e 65 78    { "sqlite3_nex
248a0 74 5f 73 74 6d 74 22 2c 20 20 20 20 20 20 20 20  t_stmt",        
248b0 20 20 20 20 20 74 65 73 74 5f 6e 65 78 74 5f 73       test_next_s
248c0 74 6d 74 20 20 20 20 20 2c 30 20 7d 2c 0a 0a 20  tmt     ,0 },.. 
248d0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 72      { "sqlite3_r
248e0 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 22 2c 20  elease_memory", 
248f0 20 20 20 20 20 20 20 74 65 73 74 5f 72 65 6c 65         test_rele
24900 61 73 65 5f 6d 65 6d 6f 72 79 2c 20 20 20 20 20  ase_memory,     
24910 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  0},.     { "sqli
24920 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69  te3_soft_heap_li
24930 6d 69 74 22 2c 20 20 20 20 20 20 20 74 65 73 74  mit",       test
24940 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
24950 2c 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20  ,    0},.     { 
24960 22 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64 5f  "sqlite3_thread_
24970 63 6c 65 61 6e 75 70 22 2c 20 20 20 20 20 20 20  cleanup",       
24980 20 74 65 73 74 5f 74 68 72 65 61 64 5f 63 6c 65   test_thread_cle
24990 61 6e 75 70 2c 20 20 20 20 20 30 7d 2c 0a 20 20  anup,     0},.  
249a0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 70 61     { "sqlite3_pa
249b0 67 65 72 5f 72 65 66 63 6f 75 6e 74 73 22 2c 20  ger_refcounts", 
249c0 20 20 20 20 20 20 74 65 73 74 5f 70 61 67 65 72        test_pager
249d0 5f 72 65 66 63 6f 75 6e 74 73 2c 20 20 20 20 30  _refcounts,    0
249e0 7d 2c 0a 0a 20 20 20 20 20 7b 20 22 73 71 6c 69  },..     { "sqli
249f0 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  te3_load_extensi
24a00 6f 6e 22 2c 20 20 20 20 20 20 20 20 74 65 73 74  on",        test
24a10 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 2c  _load_extension,
24a20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20       0},.     { 
24a30 22 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f  "sqlite3_enable_
24a40 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 22 2c  load_extension",
24a50 20 74 65 73 74 5f 65 6e 61 62 6c 65 5f 6c 6f 61   test_enable_loa
24a60 64 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  d,        0},.  
24a70 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 78     { "sqlite3_ex
24a80 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f  tended_result_co
24a90 64 65 73 22 2c 20 74 65 73 74 5f 65 78 74 65 6e  des", test_exten
24aa0 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73  ded_result_codes
24ab0 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  , 0},.     { "sq
24ac0 6c 69 74 65 33 5f 6c 69 6d 69 74 22 2c 20 20 20  lite3_limit",   
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
24ae0 73 74 5f 6c 69 6d 69 74 2c 20 20 20 20 20 20 20  st_limit,       
24af0 20 20 20 20 20 20 20 20 20 20 30 7d 2c 0a 0a 20            0},.. 
24b00 20 20 20 20 7b 20 22 73 61 76 65 5f 70 72 6e 67      { "save_prng
24b10 5f 73 74 61 74 65 22 2c 20 20 20 20 20 20 20 20  _state",        
24b20 20 20 20 20 20 20 20 73 61 76 65 5f 70 72 6e 67         save_prng
24b30 5f 73 74 61 74 65 2c 20 20 20 20 30 20 7d 2c 0a  _state,    0 },.
24b40 20 20 20 20 20 7b 20 22 72 65 73 74 6f 72 65 5f       { "restore_
24b50 70 72 6e 67 5f 73 74 61 74 65 22 2c 20 20 20 20  prng_state",    
24b60 20 20 20 20 20 20 20 20 72 65 73 74 6f 72 65 5f          restore_
24b70 70 72 6e 67 5f 73 74 61 74 65 2c 20 30 20 7d 2c  prng_state, 0 },
24b80 0a 20 20 20 20 20 7b 20 22 72 65 73 65 74 5f 70  .     { "reset_p
24b90 72 6e 67 5f 73 74 61 74 65 22 2c 20 20 20 20 20  rng_state",     
24ba0 20 20 20 20 20 20 20 20 20 72 65 73 65 74 5f 70           reset_p
24bb0 72 6e 67 5f 73 74 61 74 65 2c 20 20 20 30 20 7d  rng_state,   0 }
24bc0 2c 0a 20 20 20 20 20 7b 20 22 74 63 6c 5f 6f 62  ,.     { "tcl_ob
24bd0 6a 70 72 6f 63 22 2c 20 20 20 20 20 20 20 20 20  jproc",         
24be0 20 20 20 20 20 20 20 20 20 20 72 75 6e 41 73 4f            runAsO
24bf0 62 6a 50 72 6f 63 2c 20 20 20 20 20 20 20 30 20  bjProc,       0 
24c00 7d 2c 0a 0a 20 20 20 20 20 2f 2a 20 73 71 6c 69  },..     /* sqli
24c10 74 65 33 5f 63 6f 6c 75 6d 6e 5f 2a 28 29 20 41  te3_column_*() A
24c20 50 49 20 2a 2f 0a 20 20 20 20 20 7b 20 22 73 71  PI */.     { "sq
24c30 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75  lite3_column_cou
24c40 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 74 65  nt",          te
24c50 73 74 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20  st_column_count 
24c60 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73   ,0 },.     { "s
24c70 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75 6e  qlite3_data_coun
24c80 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 74  t",            t
24c90 65 73 74 5f 64 61 74 61 5f 63 6f 75 6e 74 20 20  est_data_count  
24ca0 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
24cb0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
24cc0 79 70 65 22 2c 20 20 20 20 20 20 20 20 20 20 20  ype",           
24cd0 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  test_column_type
24ce0 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
24cf0 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
24d00 62 6c 6f 62 22 2c 20 20 20 20 20 20 20 20 20 20  blob",          
24d10 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f   test_column_blo
24d20 62 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b  b   ,0 },.     {
24d30 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
24d40 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20 20 20 20  _double",       
24d50 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f    test_column_do
24d60 75 62 6c 65 20 2c 30 20 7d 2c 0a 20 20 20 20 20  uble ,0 },.     
24d70 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
24d80 6e 5f 69 6e 74 36 34 22 2c 20 20 20 20 20 20 20  n_int64",       
24d90 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69     test_column_i
24da0 6e 74 36 34 20 20 2c 30 20 7d 2c 0a 20 20 20 20  nt64  ,0 },.    
24db0 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
24dc0 6d 6e 5f 74 65 78 74 22 2c 20 20 20 74 65 73 74  mn_text",   test
24dd0 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 28 76 6f  _stmt_utf8,  (vo
24de0 69 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  id*)sqlite3_colu
24df0 6d 6e 5f 74 65 78 74 20 7d 2c 0a 20 20 20 20 20  mn_text },.     
24e00 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
24e10 6e 5f 6e 61 6d 65 22 2c 20 20 20 74 65 73 74 5f  n_name",   test_
24e20 73 74 6d 74 5f 75 74 66 38 2c 20 20 28 76 6f 69  stmt_utf8,  (voi
24e30 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  d*)sqlite3_colum
24e40 6e 5f 6e 61 6d 65 20 7d 2c 0a 20 20 20 20 20 7b  n_name },.     {
24e50 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
24e60 5f 69 6e 74 22 2c 20 20 20 20 74 65 73 74 5f 73  _int",    test_s
24e70 74 6d 74 5f 69 6e 74 2c 20 20 20 28 76 6f 69 64  tmt_int,   (void
24e80 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
24e90 5f 69 6e 74 20 20 7d 2c 0a 20 20 20 20 20 7b 20  _int  },.     { 
24ea0 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
24eb0 62 79 74 65 73 22 2c 20 20 74 65 73 74 5f 73 74  bytes",  test_st
24ec0 6d 74 5f 69 6e 74 2c 20 20 20 28 76 6f 69 64 2a  mt_int,   (void*
24ed0 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  )sqlite3_column_
24ee0 62 79 74 65 73 7d 2c 0a 23 69 66 6e 64 65 66 20  bytes},.#ifndef 
24ef0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43 4c  SQLITE_OMIT_DECL
24f00 54 59 50 45 0a 20 20 20 20 20 7b 20 22 73 71 6c  TYPE.     { "sql
24f10 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
24f20 74 79 70 65 22 2c 74 65 73 74 5f 73 74 6d 74 5f  type",test_stmt_
24f30 75 74 66 38 2c 28 76 6f 69 64 2a 29 73 71 6c 69  utf8,(void*)sqli
24f40 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74  te3_column_declt
24f50 79 70 65 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66  ype},.#endif.#if
24f60 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
24f70 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54  E_COLUMN_METADAT
24f80 41 0a 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c  A.{ "sqlite3_col
24f90 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
24fa0 65 22 2c 74 65 73 74 5f 73 74 6d 74 5f 75 74 66  e",test_stmt_utf
24fb0 38 2c 28 76 6f 69 64 2a 29 73 71 6c 69 74 65 33  8,(void*)sqlite3
24fc0 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65  _column_database
24fd0 5f 6e 61 6d 65 7d 2c 0a 7b 20 22 73 71 6c 69 74  _name},.{ "sqlit
24fe0 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f  e3_column_table_
24ff0 6e 61 6d 65 22 2c 74 65 73 74 5f 73 74 6d 74 5f  name",test_stmt_
25000 75 74 66 38 2c 28 76 6f 69 64 2a 29 73 71 6c 69  utf8,(void*)sqli
25010 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65  te3_column_table
25020 5f 6e 61 6d 65 7d 2c 0a 7b 20 22 73 71 6c 69 74  _name},.{ "sqlit
25030 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69 6e  e3_column_origin
25040 5f 6e 61 6d 65 22 2c 74 65 73 74 5f 73 74 6d 74  _name",test_stmt
25050 5f 75 74 66 38 2c 28 76 6f 69 64 2a 29 73 71 6c  _utf8,(void*)sql
25060 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67  ite3_column_orig
25070 69 6e 5f 6e 61 6d 65 7d 2c 0a 23 65 6e 64 69 66  in_name},.#endif
25080 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
25090 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 20 20  _OMIT_UTF16.    
250a0 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
250b0 6d 6e 5f 62 79 74 65 73 31 36 22 2c 20 74 65 73  mn_bytes16", tes
250c0 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 28 76 6f 69  t_stmt_int, (voi
250d0 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  d*)sqlite3_colum
250e0 6e 5f 62 79 74 65 73 31 36 20 7d 2c 0a 20 20 20  n_bytes16 },.   
250f0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
25100 75 6d 6e 5f 74 65 78 74 31 36 22 2c 20 20 74 65  umn_text16",  te
25110 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 28  st_stmt_utf16, (
25120 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f  void*)sqlite3_co
25130 6c 75 6d 6e 5f 74 65 78 74 31 36 7d 2c 0a 20 20  lumn_text16},.  
25140 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
25150 6c 75 6d 6e 5f 6e 61 6d 65 31 36 22 2c 20 20 74  lumn_name16",  t
25160 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20  est_stmt_utf16, 
25170 28 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 63  (void*)sqlite3_c
25180 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 7d 2c 0a 20  olumn_name16},. 
25190 20 20 20 20 7b 20 22 61 64 64 5f 61 6c 69 67 6e      { "add_align
251a0 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61 74  ment_test_collat
251b0 69 6f 6e 73 22 2c 20 61 64 64 5f 61 6c 69 67 6e  ions", add_align
251c0 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61 74  ment_test_collat
251d0 69 6f 6e 73 2c 20 30 20 20 20 20 20 20 7d 2c 0a  ions, 0      },.
251e0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
251f0 4d 49 54 5f 44 45 43 4c 54 59 50 45 0a 20 20 20  MIT_DECLTYPE.   
25200 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
25210 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 22 2c  umn_decltype16",
25220 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c  test_stmt_utf16,
25230 28 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 63  (void*)sqlite3_c
25240 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36  olumn_decltype16
25250 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  },.#endif.#ifdef
25260 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
25270 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 7b  OLUMN_METADATA.{
25280 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
25290 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36 22  database_name16"
252a0 2c 0a 20 20 74 65 73 74 5f 73 74 6d 74 5f 75 74  ,.  test_stmt_ut
252b0 66 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c  f16, sqlite3_col
252c0 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d  umn_database_nam
252d0 65 31 36 7d 2c 0a 7b 22 73 71 6c 69 74 65 33 5f  e16},.{"sqlite3_
252e0 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d  column_table_nam
252f0 65 31 36 22 2c 20 74 65 73 74 5f 73 74 6d 74 5f  e16", test_stmt_
25300 75 74 66 31 36 2c 20 28 76 6f 69 64 2a 29 73 71  utf16, (void*)sq
25310 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62  lite3_column_tab
25320 6c 65 5f 6e 61 6d 65 31 36 7d 2c 0a 7b 22 73 71  le_name16},.{"sq
25330 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
25340 67 69 6e 5f 6e 61 6d 65 31 36 22 2c 20 74 65 73  gin_name16", tes
25350 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 28 76  t_stmt_utf16, (v
25360 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  oid*)sqlite3_col
25370 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 31  umn_origin_name1
25380 36 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  6},.#endif.#endi
25390 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  f.     { "sqlite
253a0 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
253b0 6f 6e 5f 76 32 22 2c 20 74 65 73 74 5f 63 72 65  on_v2", test_cre
253c0 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 76 32  ate_collation_v2
253d0 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73  , 0 },.     { "s
253e0 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f 72 65  qlite3_global_re
253f0 63 6f 76 65 72 22 2c 20 20 20 20 20 74 65 73 74  cover",     test
25400 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72 2c  _global_recover,
25410 20 30 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22   0   },.     { "
25420 77 6f 72 6b 69 6e 67 5f 36 34 62 69 74 5f 69 6e  working_64bit_in
25430 74 22 2c 20 20 20 20 20 20 20 20 20 20 77 6f 72  t",          wor
25440 6b 69 6e 67 5f 36 34 62 69 74 5f 69 6e 74 2c 20  king_64bit_int, 
25450 20 20 30 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20    0   },.     { 
25460 22 76 66 73 5f 75 6e 6c 69 6e 6b 5f 74 65 73 74  "vfs_unlink_test
25470 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 76 66  ",            vf
25480 73 5f 75 6e 6c 69 6e 6b 5f 74 65 73 74 2c 20 20  s_unlink_test,  
25490 20 20 20 30 20 20 20 7d 2c 0a 20 20 20 20 20 7b     0   },.     {
254a0 20 22 76 66 73 5f 69 6e 69 74 66 61 69 6c 5f 74   "vfs_initfail_t
254b0 65 73 74 22 2c 20 20 20 20 20 20 20 20 20 20 76  est",          v
254c0 66 73 5f 69 6e 69 74 66 61 69 6c 5f 74 65 73 74  fs_initfail_test
254d0 2c 20 20 20 30 20 20 20 7d 2c 0a 20 20 20 20 20  ,   0   },.     
254e0 7b 20 22 76 66 73 5f 75 6e 72 65 67 69 73 74 65  { "vfs_unregiste
254f0 72 5f 61 6c 6c 22 2c 20 20 20 20 20 20 20 20 20  r_all",         
25500 76 66 73 5f 75 6e 72 65 67 69 73 74 65 72 5f 61  vfs_unregister_a
25510 6c 6c 2c 20 20 30 20 20 20 7d 2c 0a 20 20 20 20  ll,  0   },.    
25520 20 7b 20 22 76 66 73 5f 72 65 72 65 67 69 73 74   { "vfs_reregist
25530 65 72 5f 61 6c 6c 22 2c 20 20 20 20 20 20 20 20  er_all",        
25540 20 76 66 73 5f 72 65 72 65 67 69 73 74 65 72 5f   vfs_reregister_
25550 61 6c 6c 2c 20 20 30 20 20 20 7d 2c 0a 20 20 20  all,  0   },.   
25560 20 20 7b 20 22 66 69 6c 65 5f 63 6f 6e 74 72 6f    { "file_contro
25570 6c 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20 20  l_test",        
25580 20 20 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 74    file_control_t
25590 65 73 74 2c 20 20 20 30 20 20 20 7d 2c 0a 20 20  est,   0   },.  
255a0 20 20 20 7b 20 22 66 69 6c 65 5f 63 6f 6e 74 72     { "file_contr
255b0 6f 6c 5f 6c 61 73 74 65 72 72 6e 6f 5f 74 65 73  ol_lasterrno_tes
255c0 74 22 2c 20 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  t", file_control
255d0 5f 6c 61 73 74 65 72 72 6e 6f 5f 74 65 73 74 2c  _lasterrno_test,
255e0 20 20 30 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20    0   },.     { 
255f0 22 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 6c 6f  "file_control_lo
25600 63 6b 70 72 6f 78 79 5f 74 65 73 74 22 2c 20 66  ckproxy_test", f
25610 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 6c 6f 63 6b  ile_control_lock
25620 70 72 6f 78 79 5f 74 65 73 74 2c 20 20 30 20 20  proxy_test,  0  
25630 20 7d 2c 0a 20 20 20 20 20 7b 20 22 70 61 74 68   },.     { "path
25640 5f 69 73 5f 6c 6f 63 61 6c 22 2c 20 20 20 20 20  _is_local",     
25650 20 20 20 20 20 20 20 20 20 70 61 74 68 5f 69 73           path_is
25660 5f 6c 6f 63 61 6c 2c 20 20 30 20 20 20 7d 2c 0a  _local,  0   },.
25670 20 20 20 20 20 7b 20 22 70 61 74 68 5f 69 73 5f       { "path_is_
25680 64 6f 73 22 2c 20 20 20 20 20 20 20 20 20 20 20  dos",           
25690 20 20 20 20 20 70 61 74 68 5f 69 73 5f 64 6f 73       path_is_dos
256a0 2c 20 20 30 20 20 20 7d 2c 0a 20 20 20 20 20 7b  ,  0   },.     {
256b0 20 22 73 71 6c 69 74 65 33 5f 76 66 73 5f 6c 69   "sqlite3_vfs_li
256c0 73 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 76  st",           v
256d0 66 73 5f 6c 69 73 74 2c 20 20 20 20 20 30 20 20  fs_list,     0  
256e0 20 7d 2c 0a 0a 20 20 20 20 20 2f 2a 20 46 75 6e   },..     /* Fun
256f0 63 74 69 6f 6e 73 20 66 72 6f 6d 20 6f 73 2e 68  ctions from os.h
25700 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
25710 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
25720 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74 5f 63     { "add_test_c
25730 6f 6c 6c 61 74 65 22 2c 20 20 20 20 20 20 20 20  ollate",        
25740 74 65 73 74 5f 63 6f 6c 6c 61 74 65 2c 20 30 20  test_collate, 0 
25750 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20             },.  
25760 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74 5f 63     { "add_test_c
25770 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 22 2c 20  ollate_needed", 
25780 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65  test_collate_nee
25790 64 65 64 2c 20 30 20 20 20 20 20 7d 2c 0a 20 20  ded, 0     },.  
257a0 20 20 20 7b 20 22 61 64 64 5f 74 65 73 74 5f 66     { "add_test_f
257b0 75 6e 63 74 69 6f 6e 22 2c 20 20 20 20 20 20 20  unction",       
257c0 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 2c 20 30  test_function, 0
257d0 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 23 65             },.#e
257e0 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71 6c  ndif.     { "sql
257f0 69 74 65 33 5f 74 65 73 74 5f 65 72 72 73 74 72  ite3_test_errstr
25800 22 2c 20 20 20 20 20 74 65 73 74 5f 65 72 72 73  ",     test_errs
25810 74 72 2c 20 30 20 20 20 20 20 20 20 20 20 20 20  tr, 0           
25820 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 74 63 6c    },.     { "tcl
25830 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65 22 2c  _variable_type",
25840 20 20 20 20 20 20 20 74 63 6c 5f 76 61 72 69 61         tcl_varia
25850 62 6c 65 5f 74 79 70 65 2c 20 30 20 20 20 20 20  ble_type, 0     
25860 20 20 7d 2c 0a 23 69 66 6e 64 65 66 20 53 51 4c    },.#ifndef SQL
25870 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
25880 43 41 43 48 45 0a 20 20 20 20 20 7b 20 22 73 71  CACHE.     { "sq
25890 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61  lite3_enable_sha
258a0 72 65 64 5f 63 61 63 68 65 22 2c 20 74 65 73 74  red_cache", test
258b0 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 2c 20  _enable_shared, 
258c0 30 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71  0  },.     { "sq
258d0 6c 69 74 65 33 5f 73 68 61 72 65 64 5f 63 61 63  lite3_shared_cac
258e0 68 65 5f 72 65 70 6f 72 74 22 2c 20 73 71 6c 69  he_report", sqli
258f0 74 65 33 42 74 72 65 65 53 68 61 72 65 64 43 61  te3BtreeSharedCa
25900 63 68 65 52 65 70 6f 72 74 2c 20 30 7d 2c 0a 23  cheReport, 0},.#
25910 65 6e 64 69 66 0a 20 20 20 20 20 7b 20 22 73 71  endif.     { "sq
25920 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e  lite3_libversion
25930 5f 6e 75 6d 62 65 72 22 2c 20 74 65 73 74 5f 6c  _number", test_l
25940 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72  ibversion_number
25950 2c 20 30 20 20 7d 2c 0a 23 69 66 64 65 66 20 53  , 0  },.#ifdef S
25960 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
25970 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 20 20 20  UMN_METADATA.   
25980 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 74 61 62    { "sqlite3_tab
25990 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61  le_column_metada
259a0 74 61 22 2c 20 74 65 73 74 5f 74 61 62 6c 65 5f  ta", test_table_
259b0 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 2c  column_metadata,
259c0 20 30 20 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69   0  },.#endif.#i
259d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
259e0 54 5f 49 4e 43 52 42 4c 4f 42 0a 20 20 20 20 20  T_INCRBLOB.     
259f0 7b 20 22 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f  { "sqlite3_blob_
25a00 72 65 61 64 22 2c 20 20 74 65 73 74 5f 62 6c 6f  read",  test_blo
25a10 62 5f 72 65 61 64 2c 20 30 20 20 7d 2c 0a 20 20  b_read, 0  },.  
25a20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 6c     { "sqlite3_bl
25a30 6f 62 5f 77 72 69 74 65 22 2c 20 74 65 73 74 5f  ob_write", test_
25a40 62 6c 6f 62 5f 77 72 69 74 65 2c 20 30 20 20 7d  blob_write, 0  }
25a50 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 7b 20  ,.#endif.     { 
25a60 22 70 63 61 63 68 65 5f 73 74 61 74 73 22 2c 20  "pcache_stats", 
25a70 20 20 20 20 20 20 74 65 73 74 5f 70 63 61 63 68        test_pcach
25a80 65 5f 73 74 61 74 73 2c 20 30 20 20 7d 2c 0a 23  e_stats, 0  },.#
25a90 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
25aa0 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46  BLE_UNLOCK_NOTIF
25ab0 59 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  Y.     { "sqlite
25ac0 33 5f 75 6e 6c 6f 63 6b 5f 6e 6f 74 69 66 79 22  3_unlock_notify"
25ad0 2c 20 74 65 73 74 5f 75 6e 6c 6f 63 6b 5f 6e 6f  , test_unlock_no
25ae0 74 69 66 79 2c 20 30 20 20 7d 2c 0a 23 65 6e 64  tify, 0  },.#end
25af0 69 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  if.     { "sqlit
25b00 65 33 5f 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e  e3_wal_checkpoin
25b10 74 22 2c 20 74 65 73 74 5f 77 61 6c 5f 63 68 65  t", test_wal_che
25b20 63 6b 70 6f 69 6e 74 2c 20 30 20 20 7d 2c 0a 20  ckpoint, 0  },. 
25b30 20 7d 3b 0a 20 20 73 74 61 74 69 63 20 69 6e 74   };.  static int
25b40 20 62 69 74 6d 61 73 6b 5f 73 69 7a 65 20 3d 20   bitmask_size = 
25b50 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a  sizeof(Bitmask)*
25b60 38 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 65 78  8;.  int i;.  ex
25b70 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
25b80 5f 73 79 6e 63 5f 63 6f 75 6e 74 2c 20 73 71 6c  _sync_count, sql
25b90 69 74 65 33 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f  ite3_fullsync_co
25ba0 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  unt;.  extern in
25bb0 74 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 74 65  t sqlite3_opente
25bc0 6d 70 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65  mp_count;.  exte
25bd0 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6c  rn int sqlite3_l
25be0 69 6b 65 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74  ike_count;.  ext
25bf0 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  ern int sqlite3_
25c00 78 66 65 72 6f 70 74 5f 63 6f 75 6e 74 3b 0a 20  xferopt_count;. 
25c10 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
25c20 74 65 33 5f 70 61 67 65 72 5f 72 65 61 64 64 62  te3_pager_readdb
25c30 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e  _count;.  extern
25c40 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 70 61 67   int sqlite3_pag
25c50 65 72 5f 77 72 69 74 65 64 62 5f 63 6f 75 6e 74  er_writedb_count
25c60 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
25c70 71 6c 69 74 65 33 5f 70 61 67 65 72 5f 77 72 69  qlite3_pager_wri
25c80 74 65 6a 5f 63 6f 75 6e 74 3b 0a 23 69 66 20 53  tej_count;.#if S
25c90 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 20 20 65  QLITE_OS_WIN.  e
25ca0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
25cb0 33 5f 6f 73 5f 74 79 70 65 3b 0a 23 65 6e 64 69  3_os_type;.#endi
25cc0 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
25cd0 44 45 42 55 47 0a 20 20 65 78 74 65 72 6e 20 69  DEBUG.  extern i
25ce0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 54  nt sqlite3WhereT
25cf0 72 61 63 65 3b 0a 20 20 65 78 74 65 72 6e 20 69  race;.  extern i
25d00 6e 74 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63  nt sqlite3OSTrac
25d10 65 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  e;.  extern int 
25d20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 6f 70  sqlite3VdbeAddop
25d30 54 72 61 63 65 3b 0a 20 20 65 78 74 65 72 6e 20  Trace;.  extern 
25d40 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 54 72  int sqlite3WalTr
25d50 61 63 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  ace;.#endif.#ifd
25d60 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
25d70 20 65 78 74 65 72 6e 20 63 68 61 72 20 73 71 6c   extern char sql
25d80 69 74 65 33 5f 71 75 65 72 79 5f 70 6c 61 6e 5b  ite3_query_plan[
25d90 5d 3b 0a 20 20 73 74 61 74 69 63 20 63 68 61 72  ];.  static char
25da0 20 2a 71 75 65 72 79 5f 70 6c 61 6e 20 3d 20 73   *query_plan = s
25db0 71 6c 69 74 65 33 5f 71 75 65 72 79 5f 70 6c 61  qlite3_query_pla
25dc0 6e 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  n;.#ifdef SQLITE
25dd0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 20 20 65  _ENABLE_FTS3.  e
25de0 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
25df0 33 5f 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70 61  3_fts3_enable_pa
25e00 72 65 6e 74 68 65 73 65 73 3b 0a 23 65 6e 64 69  rentheses;.#endi
25e10 66 0a 23 65 6e 64 69 66 0a 0a 20 20 66 6f 72 28  f.#endif..  for(
25e20 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 61 43  i=0; i<sizeof(aC
25e30 6d 64 29 2f 73 69 7a 65 6f 66 28 61 43 6d 64 5b  md)/sizeof(aCmd[
25e40 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54  0]); i++){.    T
25e50 63 6c 5f 43 72 65 61 74 65 43 6f 6d 6d 61 6e 64  cl_CreateCommand
25e60 28 69 6e 74 65 72 70 2c 20 61 43 6d 64 5b 69 5d  (interp, aCmd[i]
25e70 2e 7a 4e 61 6d 65 2c 20 61 43 6d 64 5b 69 5d 2e  .zName, aCmd[i].
25e80 78 50 72 6f 63 2c 20 30 2c 20 30 29 3b 0a 20 20  xProc, 0, 0);.  
25e90 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73  }.  for(i=0; i<s
25ea0 69 7a 65 6f 66 28 61 4f 62 6a 43 6d 64 29 2f 73  izeof(aObjCmd)/s
25eb0 69 7a 65 6f 66 28 61 4f 62 6a 43 6d 64 5b 30 5d  izeof(aObjCmd[0]
25ec0 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c  ); i++){.    Tcl
25ed0 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 6e  _CreateObjComman
25ee0 64 28 69 6e 74 65 72 70 2c 20 61 4f 62 6a 43 6d  d(interp, aObjCm
25ef0 64 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 0a 20 20 20  d[i].zName, .   
25f00 20 20 20 20 20 61 4f 62 6a 43 6d 64 5b 69 5d 2e       aObjCmd[i].
25f10 78 50 72 6f 63 2c 20 61 4f 62 6a 43 6d 64 5b 69  xProc, aObjCmd[i
25f20 5d 2e 63 6c 69 65 6e 74 44 61 74 61 2c 20 30 29  ].clientData, 0)
25f30 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 4c 69 6e 6b  ;.  }.  Tcl_Link
25f40 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
25f50 69 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  ite_search_count
25f60 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a  ", .      (char*
25f70 29 26 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68  )&sqlite3_search
25f80 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b  _count, TCL_LINK
25f90 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
25fa0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
25fb0 6c 69 74 65 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  lite_found_count
25fc0 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a  ", .      (char*
25fd0 29 26 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  )&sqlite3_found_
25fe0 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
25ff0 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
26000 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
26010 69 74 65 5f 73 6f 72 74 5f 63 6f 75 6e 74 22 2c  ite_sort_count",
26020 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26   .      (char*)&
26030 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
26040 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  nt, TCL_LINK_INT
26050 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
26060 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
26070 33 5f 6d 61 78 5f 62 6c 6f 62 73 69 7a 65 22 2c  3_max_blobsize",
26080 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26   .      (char*)&
26090 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
260a0 73 69 7a 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  size, TCL_LINK_I
260b0 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
260c0 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
260d0 74 65 5f 6c 69 6b 65 5f 63 6f 75 6e 74 22 2c 20  te_like_count", 
260e0 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
260f0 71 6c 69 74 65 33 5f 6c 69 6b 65 5f 63 6f 75 6e  qlite3_like_coun
26100 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  t, TCL_LINK_INT)
26110 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
26120 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
26130 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 22  interrupt_count"
26140 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  , .      (char*)
26150 26 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75  &sqlite3_interru
26160 70 74 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49  pt_count, TCL_LI
26170 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c  NK_INT);.  Tcl_L
26180 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
26190 73 71 6c 69 74 65 5f 6f 70 65 6e 5f 66 69 6c 65  sqlite_open_file
261a0 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20  _count", .      
261b0 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
261c0 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 2c  open_file_count,
261d0 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
261e0 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
261f0 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 63 75  terp, "sqlite_cu
26200 72 72 65 6e 74 5f 74 69 6d 65 22 2c 20 0a 20 20  rrent_time", .  
26210 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
26220 74 65 33 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65  te3_current_time
26230 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
26240 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 55  .#if SQLITE_OS_U
26250 4e 49 58 20 26 26 20 64 65 66 69 6e 65 64 28 5f  NIX && defined(_
26260 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 53 51 4c  _APPLE__) && SQL
26270 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
26280 4e 47 5f 53 54 59 4c 45 0a 20 20 54 63 6c 5f 4c  NG_STYLE.  Tcl_L
26290 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
262a0 73 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e 75  sqlite_hostid_nu
262b0 6d 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72  m", .      (char
262c0 2a 29 26 73 71 6c 69 74 65 33 5f 68 6f 73 74 69  *)&sqlite3_hosti
262d0 64 5f 6e 75 6d 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  d_num, TCL_LINK_
262e0 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 20 20 54  INT);.#endif.  T
262f0 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
26300 70 2c 20 22 73 71 6c 69 74 65 33 5f 78 66 65 72  p, "sqlite3_xfer
26310 6f 70 74 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20  opt_count",.    
26320 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
26330 33 5f 78 66 65 72 6f 70 74 5f 63 6f 75 6e 74 2c  3_xferopt_count,
26340 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
26350 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
26360 74 65 72 70 2c 20 22 73 71 6c 69 74 65 33 5f 70  terp, "sqlite3_p
26370 61 67 65 72 5f 72 65 61 64 64 62 5f 63 6f 75 6e  ager_readdb_coun
26380 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  t",.      (char*
26390 29 26 73 71 6c 69 74 65 33 5f 70 61 67 65 72 5f  )&sqlite3_pager_
263a0 72 65 61 64 64 62 5f 63 6f 75 6e 74 2c 20 54 43  readdb_count, TC
263b0 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54  L_LINK_INT);.  T
263c0 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
263d0 70 2c 20 22 73 71 6c 69 74 65 33 5f 70 61 67 65  p, "sqlite3_page
263e0 72 5f 77 72 69 74 65 64 62 5f 63 6f 75 6e 74 22  r_writedb_count"
263f0 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26  ,.      (char*)&
26400 73 71 6c 69 74 65 33 5f 70 61 67 65 72 5f 77 72  sqlite3_pager_wr
26410 69 74 65 64 62 5f 63 6f 75 6e 74 2c 20 54 43 4c  itedb_count, TCL
26420 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63  _LINK_INT);.  Tc
26430 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
26440 2c 20 22 73 71 6c 69 74 65 33 5f 70 61 67 65 72  , "sqlite3_pager
26450 5f 77 72 69 74 65 6a 5f 63 6f 75 6e 74 22 2c 0a  _writej_count",.
26460 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
26470 6c 69 74 65 33 5f 70 61 67 65 72 5f 77 72 69 74  lite3_pager_writ
26480 65 6a 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49  ej_count, TCL_LI
26490 4e 4b 5f 49 4e 54 29 3b 0a 23 69 66 6e 64 65 66  NK_INT);.#ifndef
264a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
264b0 31 36 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  16.  Tcl_LinkVar
264c0 28 69 6e 74 65 72 70 2c 20 22 75 6e 61 6c 69 67  (interp, "unalig
264d0 6e 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75 6e 74  ned_string_count
264e0 65 72 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  er",.      (char
264f0 2a 29 26 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72  *)&unaligned_str
26500 69 6e 67 5f 63 6f 75 6e 74 65 72 2c 20 54 43 4c  ing_counter, TCL
26510 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64  _LINK_INT);.#end
26520 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
26530 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 54  E_OMIT_UTF16.  T
26540 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
26550 70 2c 20 22 73 71 6c 69 74 65 5f 6c 61 73 74 5f  p, "sqlite_last_
26560 6e 65 65 64 65 64 5f 63 6f 6c 6c 61 74 69 6f 6e  needed_collation
26570 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
26580 26 70 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69  &pzNeededCollati
26590 6f 6e 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52  on, TCL_LINK_STR
265a0 49 4e 47 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45 41  ING|TCL_LINK_REA
265b0 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64 69 66 0a  D_ONLY);.#endif.
265c0 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49  #if SQLITE_OS_WI
265d0 4e 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  N.  Tcl_LinkVar(
265e0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
265f0 6f 73 5f 74 79 70 65 22 2c 0a 20 20 20 20 20 20  os_type",.      
26600 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
26610 6f 73 5f 74 79 70 65 2c 20 54 43 4c 5f 4c 49 4e  os_type, TCL_LIN
26620 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 23  K_INT);.#endif.#
26630 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
26640 54 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  T.  Tcl_LinkVar(
26650 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
26660 71 75 65 72 79 5f 70 6c 61 6e 22 2c 0a 20 20 20  query_plan",.   
26670 20 20 20 28 63 68 61 72 2a 29 26 71 75 65 72 79     (char*)&query
26680 5f 70 6c 61 6e 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  _plan, TCL_LINK_
26690 53 54 52 49 4e 47 7c 54 43 4c 5f 4c 49 4e 4b 5f  STRING|TCL_LINK_
266a0 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e 64  READ_ONLY);.#end
266b0 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
266c0 5f 44 45 42 55 47 0a 20 20 54 63 6c 5f 4c 69 6e  _DEBUG.  Tcl_Lin
266d0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
266e0 6c 69 74 65 5f 61 64 64 6f 70 5f 74 72 61 63 65  lite_addop_trace
266f0 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
26700 26 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 6f  &sqlite3VdbeAddo
26710 70 54 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b  pTrace, TCL_LINK
26720 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
26730 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
26740 6c 69 74 65 5f 77 68 65 72 65 5f 74 72 61 63 65  lite_where_trace
26750 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
26760 26 73 71 6c 69 74 65 33 57 68 65 72 65 54 72 61  &sqlite3WhereTra
26770 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  ce, TCL_LINK_INT
26780 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72  );.  Tcl_LinkVar
26790 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
267a0 5f 6f 73 5f 74 72 61 63 65 22 2c 0a 20 20 20 20  _os_trace",.    
267b0 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
267c0 33 4f 53 54 72 61 63 65 2c 20 54 43 4c 5f 4c 49  3OSTrace, TCL_LI
267d0 4e 4b 5f 49 4e 54 29 3b 0a 23 69 66 6e 64 65 66  NK_INT);.#ifndef
267e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
267f0 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
26800 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 77  nterp, "sqlite_w
26810 61 6c 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 20  al_trace",.     
26820 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
26830 57 61 6c 54 72 61 63 65 2c 20 54 43 4c 5f 4c 49  WalTrace, TCL_LI
26840 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a  NK_INT);.#endif.
26850 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
26860 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49  QLITE_OMIT_DISKI
26870 4f 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  O.  Tcl_LinkVar(
26880 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
26890 6f 70 65 6e 74 65 6d 70 5f 63 6f 75 6e 74 22 2c  opentemp_count",
268a0 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
268b0 71 6c 69 74 65 33 5f 6f 70 65 6e 74 65 6d 70 5f  qlite3_opentemp_
268c0 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
268d0 49 4e 54 29 3b 0a 23 65 6e 64 69 66 0a 20 20 54  INT);.#endif.  T
268e0 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
268f0 70 2c 20 22 73 71 6c 69 74 65 5f 73 74 61 74 69  p, "sqlite_stati
26900 63 5f 62 69 6e 64 5f 76 61 6c 75 65 22 2c 0a 20  c_bind_value",. 
26910 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c       (char*)&sql
26920 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f  ite_static_bind_
26930 76 61 6c 75 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  value, TCL_LINK_
26940 53 54 52 49 4e 47 29 3b 0a 20 20 54 63 6c 5f 4c  STRING);.  Tcl_L
26950 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
26960 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62 69  sqlite_static_bi
26970 6e 64 5f 6e 62 79 74 65 22 2c 0a 20 20 20 20 20  nd_nbyte",.     
26980 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 5f   (char*)&sqlite_
26990 73 74 61 74 69 63 5f 62 69 6e 64 5f 6e 62 79 74  static_bind_nbyt
269a0 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29  e, TCL_LINK_INT)
269b0 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28  ;.  Tcl_LinkVar(
269c0 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f  interp, "sqlite_
269d0 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 22 2c  temp_directory",
269e0 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
269f0 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
26a00 63 74 6f 72 79 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  ctory, TCL_LINK_
26a10 53 54 52 49 4e 47 29 3b 0a 20 20 54 63 6c 5f 4c  STRING);.  Tcl_L
26a20 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
26a30 62 69 74 6d 61 73 6b 5f 73 69 7a 65 22 2c 0a 20  bitmask_size",. 
26a40 20 20 20 20 20 28 63 68 61 72 2a 29 26 62 69 74       (char*)&bit
26a50 6d 61 73 6b 5f 73 69 7a 65 2c 20 54 43 4c 5f 4c  mask_size, TCL_L
26a60 49 4e 4b 5f 49 4e 54 7c 54 43 4c 5f 4c 49 4e 4b  INK_INT|TCL_LINK
26a70 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 20 20 54  _READ_ONLY);.  T
26a80 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
26a90 70 2c 20 22 73 71 6c 69 74 65 5f 73 79 6e 63 5f  p, "sqlite_sync_
26aa0 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63  count",.      (c
26ab0 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 73 79  har*)&sqlite3_sy
26ac0 6e 63 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49  nc_count, TCL_LI
26ad0 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c  NK_INT);.  Tcl_L
26ae0 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
26af0 73 71 6c 69 74 65 5f 66 75 6c 6c 73 79 6e 63 5f  sqlite_fullsync_
26b00 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63  count",.      (c
26b10 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 66 75  har*)&sqlite3_fu
26b20 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 2c 20 54 43  llsync_count, TC
26b30 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 69 66  L_LINK_INT);.#if
26b40 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
26b50 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20  ENABLE_FTS3) && 
26b60 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
26b70 45 53 54 29 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  EST).  Tcl_LinkV
26b80 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
26b90 74 65 5f 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70  te_fts3_enable_p
26ba0 61 72 65 6e 74 68 65 73 65 73 22 2c 0a 20 20 20  arentheses",.   
26bb0 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74     (char*)&sqlit
26bc0 65 33 5f 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70  e3_fts3_enable_p
26bd0 61 72 65 6e 74 68 65 73 65 73 2c 20 54 43 4c 5f  arentheses, TCL_
26be0 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64 69  LINK_INT);.#endi
26bf0 66 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  f.  return TCL_O
26c00 4b 3b 0a 7d 0a                                   K;.}.