/ Hex Artifact Content
Login

Artifact d915e5cf26c5ba2a9778ad5b26cbaf97412b8b74:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 43 6f 64 65 20 66  ******.** Code f
0180: 6f 72 20 74 65 73 74 69 6e 67 20 61 6c 6c 20 73  or testing all s
0190: 6f 72 74 73 20 6f 66 20 53 51 4c 69 74 65 20 69  orts of SQLite i
01a0: 6e 74 65 72 66 61 63 65 73 2e 20 20 54 68 69 73  nterfaces.  This
01b0: 20 63 6f 64 65 0a 2a 2a 20 69 73 20 6e 6f 74 20   code.** is not 
01c0: 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
01d0: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 20  SQLite library. 
01e0: 20 49 74 20 69 73 20 75 73 65 64 20 66 6f 72 20   It is used for 
01f0: 61 75 74 6f 6d 61 74 65 64 0a 2a 2a 20 74 65 73  automated.** tes
0200: 74 69 6e 67 20 6f 66 20 74 68 65 20 53 51 4c 69  ting of the SQLi
0210: 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a  te library..**.*
0220: 2a 20 24 49 64 3a 20 74 65 73 74 31 2e 63 2c 76  * $Id: test1.c,v
0230: 20 31 2e 33 33 30 20 32 30 30 38 2f 31 31 2f 32   1.330 2008/11/2
0240: 31 20 30 30 3a 31 30 3a 33 35 20 61 73 77 69 66  1 00:10:35 aswif
0250: 74 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c  t Exp $.*/.#incl
0260: 75 64 65 20 22 73 71 6c 69 74 65 49 6e 74 2e 68  ude "sqliteInt.h
0270: 22 0a 23 69 6e 63 6c 75 64 65 20 22 74 63 6c 2e  ".#include "tcl.
0280: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
0290: 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  lib.h>.#include 
02a0: 3c 73 74 72 69 6e 67 2e 68 3e 0a 0a 2f 2a 0a 2a  <string.h>../*.*
02b0: 2a 20 54 68 69 73 20 69 73 20 61 20 63 6f 70 79  * This is a copy
02c0: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 70 61   of the first pa
02d0: 72 74 20 6f 66 20 74 68 65 20 53 71 6c 69 74 65  rt of the Sqlite
02e0: 44 62 20 73 74 72 75 63 74 75 72 65 20 69 6e 20  Db structure in 
02f0: 0a 2a 2a 20 74 63 6c 73 71 6c 69 74 65 2e 63 2e  .** tclsqlite.c.
0300: 20 20 57 65 20 6e 65 65 64 20 69 74 20 68 65 72    We need it her
0310: 65 20 73 6f 20 74 68 61 74 20 74 68 65 20 67 65  e so that the ge
0320: 74 5f 73 71 6c 69 74 65 5f 70 6f 69 6e 74 65 72  t_sqlite_pointer
0330: 20 72 6f 75 74 69 6e 65 0a 2a 2a 20 63 61 6e 20   routine.** can 
0340: 65 78 74 72 61 63 74 20 74 68 65 20 73 71 6c 69  extract the sqli
0350: 74 65 33 2a 20 70 6f 69 6e 74 65 72 20 66 72 6f  te3* pointer fro
0360: 6d 20 61 6e 20 65 78 69 73 74 69 6e 67 20 54 63  m an existing Tc
0370: 6c 20 53 51 4c 69 74 65 0a 2a 2a 20 63 6f 6e 6e  l SQLite.** conn
0380: 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  ection..*/.struc
0390: 74 20 53 71 6c 69 74 65 44 62 20 7b 0a 20 20 73  t SqliteDb {.  s
03a0: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 7d 3b 0a 0a  qlite3 *db;.};..
03b0: 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 65  /*.** Convert te
03c0: 78 74 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  xt generated by 
03d0: 74 68 65 20 22 25 70 22 20 63 6f 6e 76 65 72 73  the "%p" convers
03e0: 69 6f 6e 20 66 6f 72 6d 61 74 20 62 61 63 6b 20  ion format back 
03f0: 69 6e 74 6f 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  into.** a pointe
0400: 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  r..*/.static int
0410: 20 74 65 73 74 48 65 78 54 6f 49 6e 74 28 69 6e   testHexToInt(in
0420: 74 20 68 29 7b 0a 20 20 69 66 28 20 68 3e 3d 27  t h){.  if( h>='
0430: 30 27 20 26 26 20 68 3c 3d 27 39 27 20 29 7b 0a  0' && h<='9' ){.
0440: 20 20 20 20 72 65 74 75 72 6e 20 68 20 2d 20 27      return h - '
0450: 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  0';.  }else if( 
0460: 68 3e 3d 27 61 27 20 26 26 20 68 3c 3d 27 66 27  h>='a' && h<='f'
0470: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 68   ){.    return h
0480: 20 2d 20 27 61 27 20 2b 20 31 30 3b 0a 20 20 7d   - 'a' + 10;.  }
0490: 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
04a0: 28 20 68 3e 3d 27 41 27 20 26 26 20 68 3c 3d 27  ( h>='A' && h<='
04b0: 46 27 20 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  F' );.    return
04c0: 20 68 20 2d 20 27 41 27 20 2b 20 31 30 3b 0a 20   h - 'A' + 10;. 
04d0: 20 7d 0a 7d 0a 76 6f 69 64 20 2a 73 71 6c 69 74   }.}.void *sqlit
04e0: 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28  e3TestTextToPtr(
04f0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
0500: 20 20 76 6f 69 64 20 2a 70 3b 0a 20 20 75 36 34    void *p;.  u64
0510: 20 76 3b 0a 20 20 75 33 32 20 76 32 3b 0a 20 20   v;.  u32 v2;.  
0520: 69 66 28 20 7a 5b 30 5d 3d 3d 27 30 27 20 26 26  if( z[0]=='0' &&
0530: 20 7a 5b 31 5d 3d 3d 27 78 27 20 29 7b 0a 20 20   z[1]=='x' ){.  
0540: 20 20 7a 20 2b 3d 20 32 3b 0a 20 20 7d 0a 20 20    z += 2;.  }.  
0550: 76 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28 20  v = 0;.  while( 
0560: 2a 7a 20 29 7b 0a 20 20 20 20 76 20 3d 20 28 76  *z ){.    v = (v
0570: 3c 3c 34 29 20 2b 20 74 65 73 74 48 65 78 54 6f  <<4) + testHexTo
0580: 49 6e 74 28 2a 7a 29 3b 0a 20 20 20 20 7a 2b 2b  Int(*z);.    z++
0590: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 69 7a 65  ;.  }.  if( size
05a0: 6f 66 28 70 29 3d 3d 73 69 7a 65 6f 66 28 76 29  of(p)==sizeof(v)
05b0: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 26   ){.    memcpy(&
05c0: 70 2c 20 26 76 2c 20 73 69 7a 65 6f 66 28 70 29  p, &v, sizeof(p)
05d0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
05e0: 61 73 73 65 72 74 28 20 73 69 7a 65 6f 66 28 70  assert( sizeof(p
05f0: 29 3d 3d 73 69 7a 65 6f 66 28 76 32 29 20 29 3b  )==sizeof(v2) );
0600: 0a 20 20 20 20 76 32 20 3d 20 28 75 33 32 29 76  .    v2 = (u32)v
0610: 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 26 70 2c  ;.    memcpy(&p,
0620: 20 26 76 32 2c 20 73 69 7a 65 6f 66 28 70 29 29   &v2, sizeof(p))
0630: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70  ;.  }.  return p
0640: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 54 43  ;.}.../*.** A TC
0650: 4c 20 63 6f 6d 6d 61 6e 64 20 74 68 61 74 20 72  L command that r
0660: 65 74 75 72 6e 73 20 74 68 65 20 61 64 64 72 65  eturns the addre
0670: 73 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ss of the sqlite
0680: 2a 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 66 6f 72  * pointer.** for
0690: 20 61 6e 20 73 71 6c 69 74 65 20 63 6f 6e 6e 65   an sqlite conne
06a0: 63 74 69 6f 6e 20 69 6e 73 74 61 6e 63 65 2e 20  ction instance. 
06b0: 20 42 61 64 20 74 68 69 6e 67 73 20 68 61 70 70   Bad things happ
06c0: 65 6e 20 69 66 20 74 68 65 0a 2a 2a 20 69 6e 70  en if the.** inp
06d0: 75 74 20 69 73 20 6e 6f 74 20 61 6e 20 73 71 6c  ut is not an sql
06e0: 69 74 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a  ite connection..
06f0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65  */.static int ge
0700: 74 5f 73 71 6c 69 74 65 5f 70 6f 69 6e 74 65 72  t_sqlite_pointer
0710: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
0720: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
0730: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
0740: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
0750: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
0760: 0a 29 7b 0a 20 20 73 74 72 75 63 74 20 53 71 6c  .){.  struct Sql
0770: 69 74 65 44 62 20 2a 70 3b 0a 20 20 54 63 6c 5f  iteDb *p;.  Tcl_
0780: 43 6d 64 49 6e 66 6f 20 63 6d 64 49 6e 66 6f 3b  CmdInfo cmdInfo;
0790: 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30  .  char zBuf[100
07a0: 5d 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ];.  if( objc!=2
07b0: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e   ){.    Tcl_Wron
07c0: 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c  gNumArgs(interp,
07d0: 20 31 2c 20 6f 62 6a 76 2c 20 22 53 51 4c 49 54   1, objv, "SQLIT
07e0: 45 2d 43 4f 4e 4e 45 43 54 49 4f 4e 22 29 3b 0a  E-CONNECTION");.
07f0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
0800: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
0810: 21 54 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64 49  !Tcl_GetCommandI
0820: 6e 66 6f 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  nfo(interp, Tcl_
0830: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
0840: 5d 29 2c 20 26 63 6d 64 49 6e 66 6f 29 20 29 7b  ]), &cmdInfo) ){
0850: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
0860: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 63  esult(interp, "c
0870: 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f 75 6e 64  ommand not found
0880: 3a 20 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  : ",.           
0890: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
08a0: 6a 76 5b 31 5d 29 2c 20 28 63 68 61 72 2a 29 30  jv[1]), (char*)0
08b0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
08c0: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 70  L_ERROR;.  }.  p
08d0: 20 3d 20 28 73 74 72 75 63 74 20 53 71 6c 69 74   = (struct Sqlit
08e0: 65 44 62 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62 6a  eDb*)cmdInfo.obj
08f0: 43 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 73 70  ClientData;.  sp
0900: 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 70 22  rintf(zBuf, "%p"
0910: 2c 20 70 2d 3e 64 62 29 3b 0a 20 20 69 66 28 20  , p->db);.  if( 
0920: 73 74 72 6e 63 6d 70 28 7a 42 75 66 2c 22 30 78  strncmp(zBuf,"0x
0930: 22 2c 32 29 20 29 7b 0a 20 20 20 20 73 70 72 69  ",2) ){.    spri
0940: 6e 74 66 28 7a 42 75 66 2c 20 22 30 78 25 70 22  ntf(zBuf, "0x%p"
0950: 2c 20 70 2d 3e 64 62 29 3b 0a 20 20 7d 0a 20 20  , p->db);.  }.  
0960: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
0970: 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30  (interp, zBuf, 0
0980: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
0990: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 44 65 63  OK;.}../*.** Dec
09a0: 6f 64 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ode a pointer to
09b0: 20 61 6e 20 73 71 6c 69 74 65 33 20 6f 62 6a 65   an sqlite3 obje
09c0: 63 74 2e 0a 2a 2f 0a 69 6e 74 20 67 65 74 44 62  ct..*/.int getDb
09d0: 50 6f 69 6e 74 65 72 28 54 63 6c 5f 49 6e 74 65  Pointer(Tcl_Inte
09e0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 63 6f 6e 73  rp *interp, cons
09f0: 74 20 63 68 61 72 20 2a 7a 41 2c 20 73 71 6c 69  t char *zA, sqli
0a00: 74 65 33 20 2a 2a 70 70 44 62 29 7b 0a 20 20 73  te3 **ppDb){.  s
0a10: 74 72 75 63 74 20 53 71 6c 69 74 65 44 62 20 2a  truct SqliteDb *
0a20: 70 3b 0a 20 20 54 63 6c 5f 43 6d 64 49 6e 66 6f  p;.  Tcl_CmdInfo
0a30: 20 63 6d 64 49 6e 66 6f 3b 0a 20 20 69 66 28 20   cmdInfo;.  if( 
0a40: 54 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64 49 6e  Tcl_GetCommandIn
0a50: 66 6f 28 69 6e 74 65 72 70 2c 20 7a 41 2c 20 26  fo(interp, zA, &
0a60: 63 6d 64 49 6e 66 6f 29 20 29 7b 0a 20 20 20 20  cmdInfo) ){.    
0a70: 70 20 3d 20 28 73 74 72 75 63 74 20 53 71 6c 69  p = (struct Sqli
0a80: 74 65 44 62 2a 29 63 6d 64 49 6e 66 6f 2e 6f 62  teDb*)cmdInfo.ob
0a90: 6a 43 6c 69 65 6e 74 44 61 74 61 3b 0a 20 20 20  jClientData;.   
0aa0: 20 2a 70 70 44 62 20 3d 20 70 2d 3e 64 62 3b 0a   *ppDb = p->db;.
0ab0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 70 70    }else{.    *pp
0ac0: 44 62 20 3d 20 28 73 71 6c 69 74 65 33 2a 29 73  Db = (sqlite3*)s
0ad0: 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
0ae0: 50 74 72 28 7a 41 29 3b 0a 20 20 7d 0a 20 20 72  Ptr(zA);.  }.  r
0af0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
0b00: 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
0b10: 6c 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61  lite3TestErrorNa
0b20: 6d 65 28 69 6e 74 20 72 63 29 7b 0a 20 20 63 6f  me(int rc){.  co
0b30: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 20  nst char *zName 
0b40: 3d 20 30 3b 0a 20 20 73 77 69 74 63 68 28 20 72  = 0;.  switch( r
0b50: 63 20 29 7b 0a 20 20 20 20 63 61 73 65 20 53 51  c ){.    case SQ
0b60: 4c 49 54 45 5f 4f 4b 3a 20 20 20 20 20 20 20 20  LITE_OK:        
0b70: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
0b80: 3d 20 22 53 51 4c 49 54 45 5f 4f 4b 22 3b 20 20  = "SQLITE_OK";  
0b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
0ba0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0bb0: 4c 49 54 45 5f 45 52 52 4f 52 3a 20 20 20 20 20  LITE_ERROR:     
0bc0: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
0bd0: 3d 20 22 53 51 4c 49 54 45 5f 45 52 52 4f 52 22  = "SQLITE_ERROR"
0be0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;             br
0bf0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0c00: 4c 49 54 45 5f 49 4e 54 45 52 4e 41 4c 3a 20 20  LITE_INTERNAL:  
0c10: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
0c20: 3d 20 22 53 51 4c 49 54 45 5f 49 4e 54 45 52 4e  = "SQLITE_INTERN
0c30: 41 4c 22 3b 20 20 20 20 20 20 20 20 20 20 62 72  AL";          br
0c40: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0c50: 4c 49 54 45 5f 50 45 52 4d 3a 20 20 20 20 20 20  LITE_PERM:      
0c60: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
0c70: 3d 20 22 53 51 4c 49 54 45 5f 50 45 52 4d 22 3b  = "SQLITE_PERM";
0c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
0c90: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0ca0: 4c 49 54 45 5f 41 42 4f 52 54 3a 20 20 20 20 20  LITE_ABORT:     
0cb0: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
0cc0: 3d 20 22 53 51 4c 49 54 45 5f 41 42 4f 52 54 22  = "SQLITE_ABORT"
0cd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;             br
0ce0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0cf0: 4c 49 54 45 5f 42 55 53 59 3a 20 20 20 20 20 20  LITE_BUSY:      
0d00: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
0d10: 3d 20 22 53 51 4c 49 54 45 5f 42 55 53 59 22 3b  = "SQLITE_BUSY";
0d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
0d30: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0d40: 4c 49 54 45 5f 4c 4f 43 4b 45 44 3a 20 20 20 20  LITE_LOCKED:    
0d50: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
0d60: 3d 20 22 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  = "SQLITE_LOCKED
0d70: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ";            br
0d80: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0d90: 4c 49 54 45 5f 4e 4f 4d 45 4d 3a 20 20 20 20 20  LITE_NOMEM:     
0da0: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
0db0: 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 22  = "SQLITE_NOMEM"
0dc0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;             br
0dd0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0de0: 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3a 20 20  LITE_READONLY:  
0df0: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
0e00: 3d 20 22 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e  = "SQLITE_READON
0e10: 4c 59 22 3b 20 20 20 20 20 20 20 20 20 20 62 72  LY";          br
0e20: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0e30: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3a 20  LITE_INTERRUPT: 
0e40: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
0e50: 3d 20 22 53 51 4c 49 54 45 5f 49 4e 54 45 52 52  = "SQLITE_INTERR
0e60: 55 50 54 22 3b 20 20 20 20 20 20 20 20 20 62 72  UPT";         br
0e70: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0e80: 4c 49 54 45 5f 49 4f 45 52 52 3a 20 20 20 20 20  LITE_IOERR:     
0e90: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
0ea0: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 22  = "SQLITE_IOERR"
0eb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;             br
0ec0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0ed0: 4c 49 54 45 5f 43 4f 52 52 55 50 54 3a 20 20 20  LITE_CORRUPT:   
0ee0: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
0ef0: 3d 20 22 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  = "SQLITE_CORRUP
0f00: 54 22 3b 20 20 20 20 20 20 20 20 20 20 20 62 72  T";           br
0f10: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0f20: 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 3a 20 20  LITE_NOTFOUND:  
0f30: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
0f40: 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55  = "SQLITE_NOTFOU
0f50: 4e 44 22 3b 20 20 20 20 20 20 20 20 20 20 62 72  ND";          br
0f60: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0f70: 4c 49 54 45 5f 46 55 4c 4c 3a 20 20 20 20 20 20  LITE_FULL:      
0f80: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
0f90: 3d 20 22 53 51 4c 49 54 45 5f 46 55 4c 4c 22 3b  = "SQLITE_FULL";
0fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
0fb0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
0fc0: 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 3a 20 20  LITE_CANTOPEN:  
0fd0: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
0fe0: 3d 20 22 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  = "SQLITE_CANTOP
0ff0: 45 4e 22 3b 20 20 20 20 20 20 20 20 20 20 62 72  EN";          br
1000: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1010: 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c 3a 20 20  LITE_PROTOCOL:  
1020: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
1030: 3d 20 22 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43  = "SQLITE_PROTOC
1040: 4f 4c 22 3b 20 20 20 20 20 20 20 20 20 20 62 72  OL";          br
1050: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1060: 4c 49 54 45 5f 45 4d 50 54 59 3a 20 20 20 20 20  LITE_EMPTY:     
1070: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
1080: 3d 20 22 53 51 4c 49 54 45 5f 45 4d 50 54 59 22  = "SQLITE_EMPTY"
1090: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;             br
10a0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
10b0: 4c 49 54 45 5f 53 43 48 45 4d 41 3a 20 20 20 20  LITE_SCHEMA:    
10c0: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
10d0: 3d 20 22 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  = "SQLITE_SCHEMA
10e0: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ";            br
10f0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1100: 4c 49 54 45 5f 54 4f 4f 42 49 47 3a 20 20 20 20  LITE_TOOBIG:    
1110: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
1120: 3d 20 22 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  = "SQLITE_TOOBIG
1130: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ";            br
1140: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1150: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 3a  LITE_CONSTRAINT:
1160: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
1170: 3d 20 22 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  = "SQLITE_CONSTR
1180: 41 49 4e 54 22 3b 20 20 20 20 20 20 20 20 62 72  AINT";        br
1190: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
11a0: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3a 20 20  LITE_MISMATCH:  
11b0: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
11c0: 3d 20 22 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54  = "SQLITE_MISMAT
11d0: 43 48 22 3b 20 20 20 20 20 20 20 20 20 20 62 72  CH";          br
11e0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
11f0: 4c 49 54 45 5f 4d 49 53 55 53 45 3a 20 20 20 20  LITE_MISUSE:    
1200: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
1210: 3d 20 22 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  = "SQLITE_MISUSE
1220: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ";            br
1230: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1240: 4c 49 54 45 5f 4e 4f 4c 46 53 3a 20 20 20 20 20  LITE_NOLFS:     
1250: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
1260: 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 4c 46 53 22  = "SQLITE_NOLFS"
1270: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;             br
1280: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1290: 4c 49 54 45 5f 41 55 54 48 3a 20 20 20 20 20 20  LITE_AUTH:      
12a0: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
12b0: 3d 20 22 53 51 4c 49 54 45 5f 41 55 54 48 22 3b  = "SQLITE_AUTH";
12c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
12d0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
12e0: 4c 49 54 45 5f 46 4f 52 4d 41 54 3a 20 20 20 20  LITE_FORMAT:    
12f0: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
1300: 3d 20 22 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54  = "SQLITE_FORMAT
1310: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ";            br
1320: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1330: 4c 49 54 45 5f 52 41 4e 47 45 3a 20 20 20 20 20  LITE_RANGE:     
1340: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
1350: 3d 20 22 53 51 4c 49 54 45 5f 52 41 4e 47 45 22  = "SQLITE_RANGE"
1360: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;             br
1370: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1380: 4c 49 54 45 5f 4e 4f 54 41 44 42 3a 20 20 20 20  LITE_NOTADB:    
1390: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
13a0: 3d 20 22 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42  = "SQLITE_NOTADB
13b0: 22 3b 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ";            br
13c0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
13d0: 4c 49 54 45 5f 52 4f 57 3a 20 20 20 20 20 20 20  LITE_ROW:       
13e0: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
13f0: 3d 20 22 53 51 4c 49 54 45 5f 52 4f 57 22 3b 20  = "SQLITE_ROW"; 
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
1410: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1420: 4c 49 54 45 5f 44 4f 4e 45 3a 20 20 20 20 20 20  LITE_DONE:      
1430: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
1440: 3d 20 22 53 51 4c 49 54 45 5f 44 4f 4e 45 22 3b  = "SQLITE_DONE";
1450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
1460: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1470: 4c 49 54 45 5f 49 4f 45 52 52 5f 52 45 41 44 3a  LITE_IOERR_READ:
1480: 20 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20            zName 
1490: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
14a0: 52 45 41 44 22 3b 20 20 20 20 20 20 20 20 62 72  READ";        br
14b0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
14c0: 4c 49 54 45 5f 49 4f 45 52 52 5f 53 48 4f 52 54  LITE_IOERR_SHORT
14d0: 5f 52 45 41 44 3a 20 20 20 20 7a 4e 61 6d 65 20  _READ:    zName 
14e0: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
14f0: 53 48 4f 52 54 5f 52 45 41 44 22 3b 20 20 62 72  SHORT_READ";  br
1500: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1510: 4c 49 54 45 5f 49 4f 45 52 52 5f 57 52 49 54 45  LITE_IOERR_WRITE
1520: 3a 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  :         zName 
1530: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
1540: 57 52 49 54 45 22 3b 20 20 20 20 20 20 20 62 72  WRITE";       br
1550: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1560: 4c 49 54 45 5f 49 4f 45 52 52 5f 46 53 59 4e 43  LITE_IOERR_FSYNC
1570: 3a 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  :         zName 
1580: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
1590: 46 53 59 4e 43 22 3b 20 20 20 20 20 20 20 62 72  FSYNC";       br
15a0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
15b0: 4c 49 54 45 5f 49 4f 45 52 52 5f 44 49 52 5f 46  LITE_IOERR_DIR_F
15c0: 53 59 4e 43 3a 20 20 20 20 20 7a 4e 61 6d 65 20  SYNC:     zName 
15d0: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
15e0: 44 49 52 5f 46 53 59 4e 43 22 3b 20 20 20 62 72  DIR_FSYNC";   br
15f0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1600: 4c 49 54 45 5f 49 4f 45 52 52 5f 54 52 55 4e 43  LITE_IOERR_TRUNC
1610: 41 54 45 3a 20 20 20 20 20 20 7a 4e 61 6d 65 20  ATE:      zName 
1620: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
1630: 54 52 55 4e 43 41 54 45 22 3b 20 20 20 20 62 72  TRUNCATE";    br
1640: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1650: 4c 49 54 45 5f 49 4f 45 52 52 5f 46 53 54 41 54  LITE_IOERR_FSTAT
1660: 3a 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  :         zName 
1670: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
1680: 46 53 54 41 54 22 3b 20 20 20 20 20 20 20 62 72  FSTAT";       br
1690: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
16a0: 4c 49 54 45 5f 49 4f 45 52 52 5f 55 4e 4c 4f 43  LITE_IOERR_UNLOC
16b0: 4b 3a 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  K:        zName 
16c0: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
16d0: 55 4e 4c 4f 43 4b 22 3b 20 20 20 20 20 20 62 72  UNLOCK";      br
16e0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
16f0: 4c 49 54 45 5f 49 4f 45 52 52 5f 52 44 4c 4f 43  LITE_IOERR_RDLOC
1700: 4b 3a 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  K:        zName 
1710: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
1720: 52 44 4c 4f 43 4b 22 3b 20 20 20 20 20 20 62 72  RDLOCK";      br
1730: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1740: 4c 49 54 45 5f 49 4f 45 52 52 5f 44 45 4c 45 54  LITE_IOERR_DELET
1750: 45 3a 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  E:        zName 
1760: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
1770: 44 45 4c 45 54 45 22 3b 20 20 20 20 20 20 62 72  DELETE";      br
1780: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1790: 4c 49 54 45 5f 49 4f 45 52 52 5f 42 4c 4f 43 4b  LITE_IOERR_BLOCK
17a0: 45 44 3a 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  ED:       zName 
17b0: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
17c0: 42 4c 4f 43 4b 45 44 22 3b 20 20 20 20 20 62 72  BLOCKED";     br
17d0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
17e0: 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
17f0: 3a 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  :         zName 
1800: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
1810: 4e 4f 4d 45 4d 22 3b 20 20 20 20 20 20 20 62 72  NOMEM";       br
1820: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1830: 4c 49 54 45 5f 49 4f 45 52 52 5f 41 43 43 45 53  LITE_IOERR_ACCES
1840: 53 3a 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20  S:        zName 
1850: 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  = "SQLITE_IOERR_
1860: 41 43 43 45 53 53 22 3b 20 20 20 20 20 20 62 72  ACCESS";      br
1870: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
1880: 4c 49 54 45 5f 49 4f 45 52 52 5f 43 48 45 43 4b  LITE_IOERR_CHECK
1890: 52 45 53 45 52 56 45 44 4c 4f 43 4b 3a 0a 20 20  RESERVEDLOCK:.  
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 4e 61               zNa
18c0: 6d 65 20 3d 20 22 53 51 4c 49 54 45 5f 49 4f 45  me = "SQLITE_IOE
18d0: 52 52 5f 43 48 45 43 4b 52 45 53 45 52 56 45 44  RR_CHECKRESERVED
18e0: 4c 4f 43 4b 22 3b 20 62 72 65 61 6b 3b 0a 20 20  LOCK"; break;.  
18f0: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4f    case SQLITE_IO
1900: 45 52 52 5f 4c 4f 43 4b 3a 20 20 20 20 20 20 20  ERR_LOCK:       
1910: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
1920: 54 45 5f 49 4f 45 52 52 5f 4c 4f 43 4b 22 3b 20  TE_IOERR_LOCK"; 
1930: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1940: 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20    default:      
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1960: 20 20 20 7a 4e 61 6d 65 20 3d 20 22 53 51 4c 49     zName = "SQLI
1970: 54 45 5f 55 6e 6b 6e 6f 77 6e 22 3b 20 20 20 20  TE_Unknown";    
1980: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1990: 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61 6d 65  }.  return zName
19a0: 3b 0a 7d 0a 23 64 65 66 69 6e 65 20 74 31 45 72  ;.}.#define t1Er
19b0: 72 6f 72 4e 61 6d 65 20 73 71 6c 69 74 65 33 54  rorName sqlite3T
19c0: 65 73 74 45 72 72 6f 72 4e 61 6d 65 0a 0a 2f 2a  estErrorName../*
19d0: 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 61 6e 20 73  .** Convert an s
19e0: 71 6c 69 74 65 33 5f 73 74 6d 74 2a 20 69 6e 74  qlite3_stmt* int
19f0: 6f 20 61 6e 20 73 71 6c 69 74 65 33 2a 2e 20 20  o an sqlite3*.  
1a00: 54 68 69 73 20 64 65 70 65 6e 64 73 20 6f 6e 20  This depends on 
1a10: 74 68 65 0a 2a 2a 20 66 61 63 74 20 74 68 61 74  the.** fact that
1a20: 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 69 73   the sqlite3* is
1a30: 20 74 68 65 20 66 69 72 73 74 20 66 69 65 6c 64   the first field
1a40: 20 69 6e 20 74 68 65 20 56 64 62 65 20 73 74 72   in the Vdbe str
1a50: 75 63 74 75 72 65 2e 0a 2a 2f 0a 23 64 65 66 69  ucture..*/.#defi
1a60: 6e 65 20 53 74 6d 74 54 6f 44 62 28 58 29 20 20  ne StmtToDb(X)  
1a70: 20 73 71 6c 69 74 65 33 5f 64 62 5f 68 61 6e 64   sqlite3_db_hand
1a80: 6c 65 28 58 29 0a 0a 2f 2a 0a 2a 2a 20 43 68 65  le(X)../*.** Che
1a90: 63 6b 20 61 20 72 65 74 75 72 6e 20 76 61 6c 75  ck a return valu
1aa0: 65 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 69  e to make sure i
1ab0: 74 20 61 67 72 65 65 73 20 77 69 74 68 20 74 68  t agrees with th
1ac0: 65 20 72 65 73 75 6c 74 73 0a 2a 2a 20 66 72 6f  e results.** fro
1ad0: 6d 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64  m sqlite3_errcod
1ae0: 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  e..*/.int sqlite
1af0: 33 54 65 73 74 45 72 72 43 6f 64 65 28 54 63 6c  3TestErrCode(Tcl
1b00: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
1b10: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e   sqlite3 *db, in
1b20: 74 20 72 63 29 7b 0a 20 20 69 66 28 20 72 63 21  t rc){.  if( rc!
1b30: 3d 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 26  =SQLITE_MISUSE &
1b40: 26 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  & rc!=SQLITE_OK 
1b50: 26 26 20 73 71 6c 69 74 65 33 5f 65 72 72 63 6f  && sqlite3_errco
1b60: 64 65 28 64 62 29 21 3d 72 63 20 29 7b 0a 20 20  de(db)!=rc ){.  
1b70: 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30 5d    char zBuf[200]
1b80: 3b 0a 20 20 20 20 69 6e 74 20 72 32 20 3d 20 73  ;.    int r2 = s
1b90: 71 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 64  qlite3_errcode(d
1ba0: 62 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28  b);.    sprintf(
1bb0: 7a 42 75 66 2c 20 22 65 72 72 6f 72 20 63 6f 64  zBuf, "error cod
1bc0: 65 20 25 73 20 28 25 64 29 20 64 6f 65 73 20 6e  e %s (%d) does n
1bd0: 6f 74 20 6d 61 74 63 68 20 73 71 6c 69 74 65 33  ot match sqlite3
1be0: 5f 65 72 72 63 6f 64 65 20 25 73 20 28 25 64 29  _errcode %s (%d)
1bf0: 22 2c 0a 20 20 20 20 20 20 20 74 31 45 72 72 6f  ",.       t1Erro
1c00: 72 4e 61 6d 65 28 72 63 29 2c 20 72 63 2c 20 74  rName(rc), rc, t
1c10: 31 45 72 72 6f 72 4e 61 6d 65 28 72 32 29 2c 20  1ErrorName(r2), 
1c20: 72 32 29 3b 0a 20 20 20 20 54 63 6c 5f 52 65 73  r2);.    Tcl_Res
1c30: 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  etResult(interp)
1c40: 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ;.    Tcl_Append
1c50: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
1c60: 42 75 66 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  Buf, 0);.    ret
1c70: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  urn 1;.  }.  ret
1c80: 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  urn 0;.}../*.** 
1c90: 44 65 63 6f 64 65 20 61 20 70 6f 69 6e 74 65 72  Decode a pointer
1ca0: 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 73   to an sqlite3_s
1cb0: 74 6d 74 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 73  tmt object..*/.s
1cc0: 74 61 74 69 63 20 69 6e 74 20 67 65 74 53 74 6d  tatic int getStm
1cd0: 74 50 6f 69 6e 74 65 72 28 0a 20 20 54 63 6c 5f  tPointer(.  Tcl_
1ce0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
1cf0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1d00: 41 72 67 2c 20 20 0a 20 20 73 71 6c 69 74 65 33  Arg,  .  sqlite3
1d10: 5f 73 74 6d 74 20 2a 2a 70 70 53 74 6d 74 0a 29  _stmt **ppStmt.)
1d20: 7b 0a 20 20 2a 70 70 53 74 6d 74 20 3d 20 28 73  {.  *ppStmt = (s
1d30: 71 6c 69 74 65 33 5f 73 74 6d 74 2a 29 73 71 6c  qlite3_stmt*)sql
1d40: 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74  ite3TestTextToPt
1d50: 72 28 7a 41 72 67 29 3b 0a 20 20 72 65 74 75 72  r(zArg);.  retur
1d60: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
1d70: 2a 2a 20 47 65 6e 65 72 61 74 65 20 61 20 74 65  ** Generate a te
1d80: 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  xt representatio
1d90: 6e 20 6f 66 20 61 20 70 6f 69 6e 74 65 72 20 74  n of a pointer t
1da0: 68 61 74 20 63 61 6e 20 62 65 20 75 6e 64 65 72  hat can be under
1db0: 73 74 6f 6f 64 0a 2a 2a 20 62 79 20 74 68 65 20  stood.** by the 
1dc0: 67 65 74 44 62 50 6f 69 6e 74 65 72 20 61 6e 64  getDbPointer and
1dd0: 20 67 65 74 56 6d 50 6f 69 6e 74 65 72 20 72 6f   getVmPointer ro
1de0: 75 74 69 6e 65 73 20 61 62 6f 76 65 2e 0a 2a 2a  utines above..**
1df0: 0a 2a 2a 20 54 68 65 20 70 72 6f 62 6c 65 6d 20  .** The problem 
1e00: 69 73 2c 20 6f 6e 20 73 6f 6d 65 20 6d 61 63 68  is, on some mach
1e10: 69 6e 65 73 20 28 53 6f 6c 61 72 69 73 29 20 69  ines (Solaris) i
1e20: 66 20 79 6f 75 20 64 6f 20 61 20 70 72 69 6e 74  f you do a print
1e30: 66 20 77 69 74 68 0a 2a 2a 20 22 25 70 22 20 79  f with.** "%p" y
1e40: 6f 75 20 63 61 6e 6e 6f 74 20 74 75 72 6e 20 61  ou cannot turn a
1e50: 72 6f 75 6e 64 20 61 6e 64 20 64 6f 20 61 20 73  round and do a s
1e60: 63 61 6e 66 20 77 69 74 68 20 74 68 65 20 73 61  canf with the sa
1e70: 6d 65 20 22 25 70 22 20 61 6e 64 0a 2a 2a 20 67  me "%p" and.** g
1e80: 65 74 20 79 6f 75 72 20 70 6f 69 6e 74 65 72 20  et your pointer 
1e90: 62 61 63 6b 2e 20 20 59 6f 75 20 68 61 76 65 20  back.  You have 
1ea0: 74 6f 20 70 72 65 70 65 6e 64 20 61 20 22 30 78  to prepend a "0x
1eb0: 22 20 62 65 66 6f 72 65 20 69 74 20 77 69 6c 6c  " before it will
1ec0: 0a 2a 2a 20 77 6f 72 6b 2e 20 20 4f 72 20 61 74  .** work.  Or at
1ed0: 20 6c 65 61 73 74 20 74 68 61 74 20 69 73 20 77   least that is w
1ee0: 68 61 74 20 69 73 20 72 65 70 6f 72 74 65 64 20  hat is reported 
1ef0: 74 6f 20 6d 65 20 28 64 72 68 29 2e 20 20 42 75  to me (drh).  Bu
1f00: 74 20 74 68 69 73 0a 2a 2a 20 62 65 68 61 76 69  t this.** behavi
1f10: 6f 72 20 76 61 72 69 65 73 20 66 72 6f 6d 20 6d  or varies from m
1f20: 61 63 68 69 6e 65 20 74 6f 20 6d 61 63 68 69 6e  achine to machin
1f30: 65 2e 20 20 54 68 65 20 73 6f 6c 75 74 69 6f 6e  e.  The solution
1f40: 20 75 73 65 64 20 68 65 72 20 69 73 0a 2a 2a 20   used her is.** 
1f50: 74 6f 20 74 65 73 74 20 74 68 65 20 73 74 72 69  to test the stri
1f60: 6e 67 20 72 69 67 68 74 20 61 66 74 65 72 20 69  ng right after i
1f70: 74 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 74  t is generated t
1f80: 6f 20 73 65 65 20 69 66 20 69 74 20 63 61 6e 20  o see if it can 
1f90: 62 65 0a 2a 2a 20 75 6e 64 65 72 73 74 6f 6f 64  be.** understood
1fa0: 20 62 79 20 73 63 61 6e 66 2c 20 61 6e 64 20 69   by scanf, and i
1fb0: 66 20 6e 6f 74 2c 20 74 72 79 20 70 72 65 70 65  f not, try prepe
1fc0: 6e 64 69 6e 67 20 61 6e 20 22 30 78 22 20 74 6f  nding an "0x" to
1fd0: 20 73 65 65 20 69 66 0a 2a 2a 20 74 68 61 74 20   see if.** that 
1fe0: 68 65 6c 70 73 2e 20 20 49 66 20 6e 6f 74 68 69  helps.  If nothi
1ff0: 6e 67 20 77 6f 72 6b 73 2c 20 61 20 66 61 74 61  ng works, a fata
2000: 6c 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72  l error is gener
2010: 61 74 65 64 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ated..*/.int sql
2020: 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e  ite3TestMakePoin
2030: 74 65 72 53 74 72 28 54 63 6c 5f 49 6e 74 65 72  terStr(Tcl_Inter
2040: 70 20 2a 69 6e 74 65 72 70 2c 20 63 68 61 72 20  p *interp, char 
2050: 2a 7a 50 74 72 2c 20 76 6f 69 64 20 2a 70 29 7b  *zPtr, void *p){
2060: 0a 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69  .  sqlite3_snpri
2070: 6e 74 66 28 31 30 30 2c 20 7a 50 74 72 2c 20 22  ntf(100, zPtr, "
2080: 25 70 22 2c 20 70 29 3b 0a 20 20 72 65 74 75 72  %p", p);.  retur
2090: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
20a0: 2a 2a 20 54 68 65 20 63 61 6c 6c 62 61 63 6b 20  ** The callback 
20b0: 72 6f 75 74 69 6e 65 20 66 6f 72 20 73 71 6c 69  routine for sqli
20c0: 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74 66 28  te3_exec_printf(
20d0: 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  )..*/.static int
20e0: 20 65 78 65 63 5f 70 72 69 6e 74 66 5f 63 62 28   exec_printf_cb(
20f0: 76 6f 69 64 20 2a 70 41 72 67 2c 20 69 6e 74 20  void *pArg, int 
2100: 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67  argc, char **arg
2110: 76 2c 20 63 68 61 72 20 2a 2a 6e 61 6d 65 29 7b  v, char **name){
2120: 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 20 2a  .  Tcl_DString *
2130: 73 74 72 20 3d 20 28 54 63 6c 5f 44 53 74 72 69  str = (Tcl_DStri
2140: 6e 67 2a 29 70 41 72 67 3b 0a 20 20 69 6e 74 20  ng*)pArg;.  int 
2150: 69 3b 0a 0a 20 20 69 66 28 20 54 63 6c 5f 44 53  i;..  if( Tcl_DS
2160: 74 72 69 6e 67 4c 65 6e 67 74 68 28 73 74 72 29  tringLength(str)
2170: 3d 3d 30 20 29 7b 0a 20 20 20 20 66 6f 72 28 69  ==0 ){.    for(i
2180: 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b 29  =0; i<argc; i++)
2190: 7b 0a 20 20 20 20 20 20 54 63 6c 5f 44 53 74 72  {.      Tcl_DStr
21a0: 69 6e 67 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74  ingAppendElement
21b0: 28 73 74 72 2c 20 6e 61 6d 65 5b 69 5d 20 3f 20  (str, name[i] ? 
21c0: 6e 61 6d 65 5b 69 5d 20 3a 20 22 4e 55 4c 4c 22  name[i] : "NULL"
21d0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 66  );.    }.  }.  f
21e0: 6f 72 28 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20  or(i=0; i<argc; 
21f0: 69 2b 2b 29 7b 0a 20 20 20 20 54 63 6c 5f 44 53  i++){.    Tcl_DS
2200: 74 72 69 6e 67 41 70 70 65 6e 64 45 6c 65 6d 65  tringAppendEleme
2210: 6e 74 28 73 74 72 2c 20 61 72 67 76 5b 69 5d 20  nt(str, argv[i] 
2220: 3f 20 61 72 67 76 5b 69 5d 20 3a 20 22 4e 55 4c  ? argv[i] : "NUL
2230: 4c 22 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  L");.  }.  retur
2240: 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68  n 0;.}../*.** Th
2250: 65 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 63 61  e I/O tracing ca
2260: 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 23 69 66 20 21  llback..*/.#if !
2270: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2280: 4d 49 54 5f 54 52 41 43 45 29 20 26 26 20 64 65  MIT_TRACE) && de
2290: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
22a0: 42 4c 45 5f 49 4f 54 52 41 43 45 29 0a 73 74 61  BLE_IOTRACE).sta
22b0: 74 69 63 20 46 49 4c 45 20 2a 69 6f 74 72 61 63  tic FILE *iotrac
22c0: 65 5f 66 69 6c 65 20 3d 20 30 3b 0a 73 74 61 74  e_file = 0;.stat
22d0: 69 63 20 76 6f 69 64 20 69 6f 5f 74 72 61 63 65  ic void io_trace
22e0: 5f 63 61 6c 6c 62 61 63 6b 28 63 6f 6e 73 74 20  _callback(const 
22f0: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 20 2e  char *zFormat, .
2300: 2e 2e 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61  ..){.  va_list a
2310: 70 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70  p;.  va_start(ap
2320: 2c 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 76 66  , zFormat);.  vf
2330: 70 72 69 6e 74 66 28 69 6f 74 72 61 63 65 5f 66  printf(iotrace_f
2340: 69 6c 65 2c 20 7a 46 6f 72 6d 61 74 2c 20 61 70  ile, zFormat, ap
2350: 29 3b 0a 20 20 76 61 5f 65 6e 64 28 61 70 29 3b  );.  va_end(ap);
2360: 0a 20 20 66 66 6c 75 73 68 28 69 6f 74 72 61 63  .  fflush(iotrac
2370: 65 5f 66 69 6c 65 29 3b 0a 7d 0a 23 65 6e 64 69  e_file);.}.#endi
2380: 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  f../*.** Usage: 
2390: 20 69 6f 5f 74 72 61 63 65 20 46 49 4c 45 4e 41   io_trace FILENA
23a0: 4d 45 0a 2a 2a 0a 2a 2a 20 54 75 72 6e 20 49 2f  ME.**.** Turn I/
23b0: 4f 20 74 72 61 63 69 6e 67 20 6f 6e 20 6f 72 20  O tracing on or 
23c0: 6f 66 66 2e 20 20 49 66 20 46 49 4c 45 4e 41 4d  off.  If FILENAM
23d0: 45 20 69 73 20 6e 6f 74 20 61 6e 20 65 6d 70 74  E is not an empt
23e0: 79 20 73 74 72 69 6e 67 2c 0a 2a 2a 20 49 2f 4f  y string,.** I/O
23f0: 20 74 72 61 63 69 6e 67 20 62 65 67 69 6e 73 20   tracing begins 
2400: 67 6f 69 6e 67 20 69 6e 74 6f 20 46 49 4c 45 4e  going into FILEN
2410: 41 4d 45 2e 20 49 66 20 46 49 4c 45 4e 41 4d 45  AME. If FILENAME
2420: 20 69 73 20 61 6e 20 65 6d 70 74 79 0a 2a 2a 20   is an empty.** 
2430: 73 74 72 69 6e 67 2c 20 49 2f 4f 20 74 72 61 63  string, I/O trac
2440: 69 6e 67 20 69 73 20 74 75 72 6e 65 64 20 6f 66  ing is turned of
2450: 66 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  f..*/.static int
2460: 20 74 65 73 74 5f 69 6f 5f 74 72 61 63 65 28 0a   test_io_trace(.
2470: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
2480: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
2490: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
24a0: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
24b0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
24c0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
24d0: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
24e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
24f0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
2500: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
2510: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
2520: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
2530: 6e 74 20 2a 2f 0a 29 7b 0a 23 69 66 20 21 64 65  nt */.){.#if !de
2540: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2550: 54 5f 54 52 41 43 45 29 20 26 26 20 64 65 66 69  T_TRACE) && defi
2560: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
2570: 45 5f 49 4f 54 52 41 43 45 29 0a 20 20 69 66 28  E_IOTRACE).  if(
2580: 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20   argc!=2 ){.    
2590: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
25a0: 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
25b0: 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
25c0: 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a  e \"", argv[0],.
25d0: 20 20 20 20 20 20 20 20 20 20 22 20 46 49 4c 45            " FILE
25e0: 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20  NAME\"", 0);.   
25f0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
2600: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 6f 74  R;.  }.  if( iot
2610: 72 61 63 65 5f 66 69 6c 65 20 29 7b 0a 20 20 20  race_file ){.   
2620: 20 69 66 28 20 69 6f 74 72 61 63 65 5f 66 69 6c   if( iotrace_fil
2630: 65 21 3d 73 74 64 6f 75 74 20 26 26 20 69 6f 74  e!=stdout && iot
2640: 72 61 63 65 5f 66 69 6c 65 21 3d 73 74 64 65 72  race_file!=stder
2650: 72 20 29 7b 0a 20 20 20 20 20 20 66 63 6c 6f 73  r ){.      fclos
2660: 65 28 69 6f 74 72 61 63 65 5f 66 69 6c 65 29 3b  e(iotrace_file);
2670: 0a 20 20 20 20 7d 0a 20 20 20 20 69 6f 74 72 61  .    }.    iotra
2680: 63 65 5f 66 69 6c 65 20 3d 20 30 3b 0a 20 20 20  ce_file = 0;.   
2690: 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
26a0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 61  = 0;.  }.  if( a
26b0: 72 67 76 5b 31 5d 5b 30 5d 20 29 7b 0a 20 20 20  rgv[1][0] ){.   
26c0: 20 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76   if( strcmp(argv
26d0: 5b 31 5d 2c 22 73 74 64 6f 75 74 22 29 3d 3d 30  [1],"stdout")==0
26e0: 20 29 7b 0a 20 20 20 20 20 20 69 6f 74 72 61 63   ){.      iotrac
26f0: 65 5f 66 69 6c 65 20 3d 20 73 74 64 6f 75 74 3b  e_file = stdout;
2700: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73  .    }else if( s
2710: 74 72 63 6d 70 28 61 72 67 76 5b 31 5d 2c 22 73  trcmp(argv[1],"s
2720: 74 64 65 72 72 22 29 3d 3d 30 20 29 7b 0a 20 20  tderr")==0 ){.  
2730: 20 20 20 20 69 6f 74 72 61 63 65 5f 66 69 6c 65      iotrace_file
2740: 20 3d 20 73 74 64 65 72 72 3b 0a 20 20 20 20 7d   = stderr;.    }
2750: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6f 74 72  else{.      iotr
2760: 61 63 65 5f 66 69 6c 65 20 3d 20 66 6f 70 65 6e  ace_file = fopen
2770: 28 61 72 67 76 5b 31 5d 2c 20 22 77 22 29 3b 0a  (argv[1], "w");.
2780: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
2790: 33 49 6f 54 72 61 63 65 20 3d 20 69 6f 5f 74 72  3IoTrace = io_tr
27a0: 61 63 65 5f 63 61 6c 6c 62 61 63 6b 3b 0a 20 20  ace_callback;.  
27b0: 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72  }.#endif.  retur
27c0: 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a  n TCL_OK;.}.../*
27d0: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
27e0: 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74 66 20  te3_exec_printf 
27f0: 20 44 42 20 20 46 4f 52 4d 41 54 20 20 53 54 52   DB  FORMAT  STR
2800: 49 4e 47 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  ING.**.** Invoke
2810: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65 78 65   the sqlite3_exe
2820: 63 5f 70 72 69 6e 74 66 28 29 20 69 6e 74 65 72  c_printf() inter
2830: 66 61 63 65 20 75 73 69 6e 67 20 74 68 65 20 6f  face using the o
2840: 70 65 6e 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  pen database.** 
2850: 44 42 2e 20 20 54 68 65 20 53 51 4c 20 69 73 20  DB.  The SQL is 
2860: 74 68 65 20 73 74 72 69 6e 67 20 46 4f 52 4d 41  the string FORMA
2870: 54 2e 20 20 54 68 65 20 66 6f 72 6d 61 74 20 73  T.  The format s
2880: 74 72 69 6e 67 20 73 68 6f 75 6c 64 20 63 6f 6e  tring should con
2890: 74 61 69 6e 0a 2a 2a 20 6f 6e 65 20 25 73 20 6f  tain.** one %s o
28a0: 72 20 25 71 2e 20 20 53 54 52 49 4e 47 20 69 73  r %q.  STRING is
28b0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 73 65 72   the value inser
28c0: 74 65 64 20 69 6e 74 6f 20 25 73 20 6f 72 20 25  ted into %s or %
28d0: 71 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  q..*/.static int
28e0: 20 74 65 73 74 5f 65 78 65 63 5f 70 72 69 6e 74   test_exec_print
28f0: 66 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  f(.  void *NotUs
2900: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
2910: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
2920: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
2930: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
2940: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
2950: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
2960: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2970: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
2980: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
2990: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
29a0: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
29b0: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
29c0: 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 54 63 6c  lite3 *db;.  Tcl
29d0: 5f 44 53 74 72 69 6e 67 20 73 74 72 3b 0a 20 20  _DString str;.  
29e0: 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a  int rc;.  char *
29f0: 7a 45 72 72 20 3d 20 30 3b 0a 20 20 63 68 61 72  zErr = 0;.  char
2a00: 20 2a 7a 53 71 6c 3b 0a 20 20 63 68 61 72 20 7a   *zSql;.  char z
2a10: 42 75 66 5b 33 30 5d 3b 0a 20 20 69 66 28 20 61  Buf[30];.  if( a
2a20: 72 67 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63  rgc!=4 ){.    Tc
2a30: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
2a40: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
2a50: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
2a60: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20  \"", argv[0], . 
2a70: 20 20 20 20 20 20 22 20 44 42 20 46 4f 52 4d 41        " DB FORMA
2a80: 54 20 53 54 52 49 4e 47 22 2c 20 30 29 3b 0a 20  T STRING", 0);. 
2a90: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
2aa0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
2ab0: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
2ac0: 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62  rp, argv[1], &db
2ad0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
2ae0: 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 44 53 74 72  RROR;.  Tcl_DStr
2af0: 69 6e 67 49 6e 69 74 28 26 73 74 72 29 3b 0a 20  ingInit(&str);. 
2b00: 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 5f   zSql = sqlite3_
2b10: 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 32 5d 2c  mprintf(argv[2],
2b20: 20 61 72 67 76 5b 33 5d 29 3b 0a 20 20 72 63 20   argv[3]);.  rc 
2b30: 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
2b40: 62 2c 20 7a 53 71 6c 2c 20 65 78 65 63 5f 70 72  b, zSql, exec_pr
2b50: 69 6e 74 66 5f 63 62 2c 20 26 73 74 72 2c 20 26  intf_cb, &str, &
2b60: 7a 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  zErr);.  sqlite3
2b70: 5f 66 72 65 65 28 7a 53 71 6c 29 3b 0a 20 20 73  _free(zSql);.  s
2b80: 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25 64  printf(zBuf, "%d
2b90: 22 2c 20 72 63 29 3b 0a 20 20 54 63 6c 5f 41 70  ", rc);.  Tcl_Ap
2ba0: 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
2bb0: 72 70 2c 20 7a 42 75 66 29 3b 0a 20 20 54 63 6c  rp, zBuf);.  Tcl
2bc0: 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  _AppendElement(i
2bd0: 6e 74 65 72 70 2c 20 72 63 3d 3d 53 51 4c 49 54  nterp, rc==SQLIT
2be0: 45 5f 4f 4b 20 3f 20 54 63 6c 5f 44 53 74 72 69  E_OK ? Tcl_DStri
2bf0: 6e 67 56 61 6c 75 65 28 26 73 74 72 29 20 3a 20  ngValue(&str) : 
2c00: 7a 45 72 72 29 3b 0a 20 20 54 63 6c 5f 44 53 74  zErr);.  Tcl_DSt
2c10: 72 69 6e 67 46 72 65 65 28 26 73 74 72 29 3b 0a  ringFree(&str);.
2c20: 20 20 69 66 28 20 7a 45 72 72 20 29 20 73 71 6c    if( zErr ) sql
2c30: 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29 3b  ite3_free(zErr);
2c40: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
2c50: 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
2c60: 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
2c70: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
2c80: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
2c90: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
2ca0: 64 62 5f 65 6e 74 65 72 20 44 42 0a 2a 2a 20 20  db_enter DB.**  
2cb0: 20 20 20 20 20 20 20 64 62 5f 6c 65 61 76 65 20         db_leave 
2cc0: 44 42 0a 2a 2a 0a 2a 2a 20 45 6e 74 65 72 20 6f  DB.**.** Enter o
2cd0: 72 20 6c 65 61 76 65 20 74 68 65 20 6d 75 74 65  r leave the mute
2ce0: 78 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 20  x on a database 
2cf0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 2a 2f 0a 73  connection..*/.s
2d00: 74 61 74 69 63 20 69 6e 74 20 64 62 5f 65 6e 74  tatic int db_ent
2d10: 65 72 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55  er(.  void *NotU
2d20: 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  sed,.  Tcl_Inter
2d30: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
2d40: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
2d50: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
2d60: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
2d70: 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20  /.  int argc,   
2d80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
2d90: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
2da0: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72  s */.  char **ar
2db0: 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gv            /*
2dc0: 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72   Text of each ar
2dd0: 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73  gument */.){.  s
2de0: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66  qlite3 *db;.  if
2df0: 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20 20  ( argc!=2 ){.   
2e00: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
2e10: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
2e20: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
2e30: 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
2e40: 20 0a 20 20 20 20 20 20 20 22 20 44 42 22 2c 20   .       " DB", 
2e50: 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
2e60: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
2e70: 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
2e80: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d  (interp, argv[1]
2e90: 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
2ea0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c  TCL_ERROR;.  sql
2eb0: 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
2ec0: 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 72  (db->mutex);.  r
2ed0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
2ee0: 73 74 61 74 69 63 20 69 6e 74 20 64 62 5f 6c 65  static int db_le
2ef0: 61 76 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  ave(.  void *Not
2f00: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
2f10: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
2f20: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
2f30: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
2f40: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
2f50: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
2f60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
2f70: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
2f80: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
2f90: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
2fa0: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
2fb0: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
2fc0: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
2fd0: 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a 20 20  f( argc!=2 ){.  
2fe0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
2ff0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
3000: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
3010: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
3020: 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 22 2c  , .       " DB",
3030: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
3040: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
3050: 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
3060: 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31  r(interp, argv[1
3070: 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ], &db) ) return
3080: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 71   TCL_ERROR;.  sq
3090: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61 76  lite3_mutex_leav
30a0: 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20  e(db->mutex);.  
30b0: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
30c0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
30d0: 73 71 6c 69 74 65 33 5f 65 78 65 63 20 20 44 42  sqlite3_exec  DB
30e0: 20 20 53 51 4c 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f    SQL.**.** Invo
30f0: 6b 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 65  ke the sqlite3_e
3100: 78 65 63 20 69 6e 74 65 72 66 61 63 65 20 75 73  xec interface us
3110: 69 6e 67 20 74 68 65 20 6f 70 65 6e 20 64 61 74  ing the open dat
3120: 61 62 61 73 65 20 44 42 0a 2a 2f 0a 73 74 61 74  abase DB.*/.stat
3130: 69 63 20 69 6e 74 20 74 65 73 74 5f 65 78 65 63  ic int test_exec
3140: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
3150: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
3160: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
3170: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
3180: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
3190: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
31a0: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
31b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
31c0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
31d0: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
31e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
31f0: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
3200: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  ment */.){.  sql
3210: 69 74 65 33 20 2a 64 62 3b 0a 20 20 54 63 6c 5f  ite3 *db;.  Tcl_
3220: 44 53 74 72 69 6e 67 20 73 74 72 3b 0a 20 20 69  DString str;.  i
3230: 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a  nt rc;.  char *z
3240: 45 72 72 20 3d 20 30 3b 0a 20 20 63 68 61 72 20  Err = 0;.  char 
3250: 2a 7a 53 71 6c 3b 0a 20 20 69 6e 74 20 69 2c 20  *zSql;.  int i, 
3260: 6a 3b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 33  j;.  char zBuf[3
3270: 30 5d 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  0];.  if( argc!=
3280: 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
3290: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
32a0: 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
32b0: 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
32c0: 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20  argv[0], .      
32d0: 20 22 20 44 42 20 53 51 4c 22 2c 20 30 29 3b 0a   " DB SQL", 0);.
32e0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
32f0: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
3300: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
3310: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64  erp, argv[1], &d
3320: 62 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  b) ) return TCL_
3330: 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 44 53 74  ERROR;.  Tcl_DSt
3340: 72 69 6e 67 49 6e 69 74 28 26 73 74 72 29 3b 0a  ringInit(&str);.
3350: 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
3360: 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 61  _mprintf("%s", a
3370: 72 67 76 5b 32 5d 29 3b 0a 20 20 66 6f 72 28 69  rgv[2]);.  for(i
3380: 3d 6a 3d 30 3b 20 7a 53 71 6c 5b 69 5d 3b 29 7b  =j=0; zSql[i];){
3390: 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 5b 69 5d  .    if( zSql[i]
33a0: 3d 3d 27 25 27 20 29 7b 0a 20 20 20 20 20 20 7a  =='%' ){.      z
33b0: 53 71 6c 5b 6a 2b 2b 5d 20 3d 20 28 74 65 73 74  Sql[j++] = (test
33c0: 48 65 78 54 6f 49 6e 74 28 7a 53 71 6c 5b 69 2b  HexToInt(zSql[i+
33d0: 31 5d 29 3c 3c 34 29 20 2b 20 74 65 73 74 48 65  1])<<4) + testHe
33e0: 78 54 6f 49 6e 74 28 7a 53 71 6c 5b 69 2b 32 5d  xToInt(zSql[i+2]
33f0: 29 3b 0a 20 20 20 20 20 20 69 20 2b 3d 20 33 3b  );.      i += 3;
3400: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
3410: 20 20 7a 53 71 6c 5b 6a 2b 2b 5d 20 3d 20 7a 53    zSql[j++] = zS
3420: 71 6c 5b 69 2b 2b 5d 3b 0a 20 20 20 20 7d 0a 20  ql[i++];.    }. 
3430: 20 7d 0a 20 20 7a 53 71 6c 5b 6a 5d 20 3d 20 30   }.  zSql[j] = 0
3440: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
3450: 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20  _exec(db, zSql, 
3460: 65 78 65 63 5f 70 72 69 6e 74 66 5f 63 62 2c 20  exec_printf_cb, 
3470: 26 73 74 72 2c 20 26 7a 45 72 72 29 3b 0a 20 20  &str, &zErr);.  
3480: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 53 71  sqlite3_free(zSq
3490: 6c 29 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42  l);.  sprintf(zB
34a0: 75 66 2c 20 22 25 64 22 2c 20 72 63 29 3b 0a 20  uf, "%d", rc);. 
34b0: 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65   Tcl_AppendEleme
34c0: 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29  nt(interp, zBuf)
34d0: 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c  ;.  Tcl_AppendEl
34e0: 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 72 63  ement(interp, rc
34f0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 3f 20 54 63  ==SQLITE_OK ? Tc
3500: 6c 5f 44 53 74 72 69 6e 67 56 61 6c 75 65 28 26  l_DStringValue(&
3510: 73 74 72 29 20 3a 20 7a 45 72 72 29 3b 0a 20 20  str) : zErr);.  
3520: 54 63 6c 5f 44 53 74 72 69 6e 67 46 72 65 65 28  Tcl_DStringFree(
3530: 26 73 74 72 29 3b 0a 20 20 69 66 28 20 7a 45 72  &str);.  if( zEr
3540: 72 20 29 20 73 71 6c 69 74 65 33 5f 66 72 65 65  r ) sqlite3_free
3550: 28 7a 45 72 72 29 3b 0a 20 20 69 66 28 20 73 71  (zErr);.  if( sq
3560: 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
3570: 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
3580: 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
3590: 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  ROR;.  return TC
35a0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
35b0: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 65  sage:  sqlite3_e
35c0: 78 65 63 5f 6e 72 20 20 44 42 20 20 53 51 4c 0a  xec_nr  DB  SQL.
35d0: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  **.** Invoke the
35e0: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 20 69 6e   sqlite3_exec in
35f0: 74 65 72 66 61 63 65 20 75 73 69 6e 67 20 74 68  terface using th
3600: 65 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20  e open database 
3610: 44 42 2e 20 20 44 69 73 63 61 72 64 0a 2a 2a 20  DB.  Discard.** 
3620: 61 6c 6c 20 72 65 73 75 6c 74 73 0a 2a 2f 0a 73  all results.*/.s
3630: 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65  tatic int test_e
3640: 78 65 63 5f 6e 72 28 0a 20 20 76 6f 69 64 20 2a  xec_nr(.  void *
3650: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
3660: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
3670: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
3680: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
3690: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
36a0: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
36b0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
36c0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
36d0: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
36e0: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
36f0: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
3700: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
3710: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
3720: 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72    int rc;.  char
3730: 20 2a 7a 45 72 72 20 3d 20 30 3b 0a 20 20 69 66   *zErr = 0;.  if
3740: 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20  ( argc!=3 ){.   
3750: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
3760: 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
3770: 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
3780: 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
3790: 20 0a 20 20 20 20 20 20 20 22 20 44 42 20 53 51   .       " DB SQ
37a0: 4c 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  L", 0);.    retu
37b0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
37c0: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
37d0: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
37e0: 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
37f0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
3800: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
3810: 65 63 28 64 62 2c 20 61 72 67 76 5b 32 5d 2c 20  ec(db, argv[2], 
3820: 30 2c 20 30 2c 20 26 7a 45 72 72 29 3b 0a 20 20  0, 0, &zErr);.  
3830: 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
3840: 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
3850: 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
3860: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65 74  TCL_ERROR;.  ret
3870: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
3880: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
3890: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f 74  ite3_mprintf_z_t
38a0: 65 73 74 20 20 53 45 50 41 52 41 54 4f 52 20 20  est  SEPARATOR  
38b0: 41 52 47 30 20 20 41 52 47 31 20 2e 2e 2e 0a 2a  ARG0  ARG1 ....*
38c0: 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 25 7a  *.** Test the %z
38d0: 20 66 6f 72 6d 61 74 20 6f 66 20 73 71 6c 69 74   format of sqlit
38e0: 65 4d 50 72 69 6e 74 66 28 29 2e 20 20 55 73 65  eMPrintf().  Use
38f0: 20 6d 75 6c 74 69 70 6c 65 20 6d 70 72 69 6e 74   multiple mprint
3900: 66 28 29 20 63 61 6c 6c 73 20 74 6f 20 0a 2a 2a  f() calls to .**
3910: 20 63 6f 6e 63 61 74 65 6e 61 74 65 20 61 72 67   concatenate arg
3920: 30 20 74 68 72 6f 75 67 68 20 61 72 67 6e 20 75  0 through argn u
3930: 73 69 6e 67 20 73 65 70 61 72 61 74 6f 72 20 61  sing separator a
3940: 73 20 74 68 65 20 73 65 70 61 72 61 74 6f 72 2e  s the separator.
3950: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72  .** Return the r
3960: 65 73 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  esult..*/.static
3970: 20 69 6e 74 20 74 65 73 74 5f 6d 70 72 69 6e 74   int test_mprint
3980: 66 5f 7a 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  f_z(.  void *Not
3990: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
39a0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
39b0: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
39c0: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
39d0: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
39e0: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
39f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
3a00: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
3a10: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
3a20: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
3a30: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
3a40: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
3a50: 63 68 61 72 20 2a 7a 52 65 73 75 6c 74 20 3d 20  char *zResult = 
3a60: 30 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 66  0;.  int i;..  f
3a70: 6f 72 28 69 3d 32 3b 20 69 3c 61 72 67 63 20 26  or(i=2; i<argc &
3a80: 26 20 28 69 3d 3d 32 20 7c 7c 20 7a 52 65 73 75  & (i==2 || zResu
3a90: 6c 74 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 7a  lt); i++){.    z
3aa0: 52 65 73 75 6c 74 20 3d 20 73 71 6c 69 74 65 33  Result = sqlite3
3ab0: 4d 50 72 69 6e 74 66 28 30 2c 20 22 25 7a 25 73  MPrintf(0, "%z%s
3ac0: 25 73 22 2c 20 7a 52 65 73 75 6c 74 2c 20 61 72  %s", zResult, ar
3ad0: 67 76 5b 31 5d 2c 20 61 72 67 76 5b 69 5d 29 3b  gv[1], argv[i]);
3ae0: 0a 20 20 7d 0a 20 20 54 63 6c 5f 41 70 70 65 6e  .  }.  Tcl_Appen
3af0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
3b00: 7a 52 65 73 75 6c 74 2c 20 30 29 3b 0a 20 20 73  zResult, 0);.  s
3b10: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 52 65 73  qlite3_free(zRes
3b20: 75 6c 74 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  ult);.  return T
3b30: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
3b40: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
3b50: 6d 70 72 69 6e 74 66 5f 6e 5f 74 65 73 74 20 20  mprintf_n_test  
3b60: 53 54 52 49 4e 47 0a 2a 2a 0a 2a 2a 20 54 65 73  STRING.**.** Tes
3b70: 74 20 74 68 65 20 25 6e 20 66 6f 72 6d 61 74 20  t the %n format 
3b80: 6f 66 20 73 71 6c 69 74 65 4d 50 72 69 6e 74 66  of sqliteMPrintf
3b90: 28 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20  ().  Return the 
3ba0: 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 0a 2a 2a  length of the.**
3bb0: 20 69 6e 70 75 74 20 73 74 72 69 6e 67 2e 0a 2a   input string..*
3bc0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73  /.static int tes
3bd0: 74 5f 6d 70 72 69 6e 74 66 5f 6e 28 0a 20 20 76  t_mprintf_n(.  v
3be0: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
3bf0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
3c00: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
3c10: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
3c20: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
3c30: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
3c40: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
3c50: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
3c60: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
3c70: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
3c80: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
3c90: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
3ca0: 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 53  */.){.  char *zS
3cb0: 74 72 3b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b  tr;.  int n = 0;
3cc0: 0a 20 20 7a 53 74 72 20 3d 20 73 71 6c 69 74 65  .  zStr = sqlite
3cd0: 33 4d 50 72 69 6e 74 66 28 30 2c 20 22 25 73 25  3MPrintf(0, "%s%
3ce0: 6e 22 2c 20 61 72 67 76 5b 31 5d 2c 20 26 6e 29  n", argv[1], &n)
3cf0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
3d00: 28 7a 53 74 72 29 3b 0a 20 20 54 63 6c 5f 53 65  (zStr);.  Tcl_Se
3d10: 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72  tObjResult(inter
3d20: 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a  p, Tcl_NewIntObj
3d30: 28 6e 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  (n));.  return T
3d40: 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
3d50: 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f  Usage:  sqlite3_
3d60: 73 6e 70 72 69 6e 74 66 5f 69 6e 74 20 20 53 49  snprintf_int  SI
3d70: 5a 45 20 46 4f 52 4d 41 54 20 20 49 4e 54 0a 2a  ZE FORMAT  INT.*
3d80: 2a 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 6f 66  *.** Test the of
3d90: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3da0: 66 28 29 20 72 6f 75 74 69 6e 65 2e 20 20 53 49  f() routine.  SI
3db0: 5a 45 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f  ZE is the size o
3dc0: 66 20 74 68 65 0a 2a 2a 20 6f 75 74 70 75 74 20  f the.** output 
3dd0: 62 75 66 66 65 72 20 69 6e 20 62 79 74 65 73 2e  buffer in bytes.
3de0: 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 73 69    The maximum si
3df0: 7a 65 20 69 73 20 31 30 30 2e 20 20 46 4f 52 4d  ze is 100.  FORM
3e00: 41 54 20 69 73 20 74 68 65 0a 2a 2a 20 66 6f 72  AT is the.** for
3e10: 6d 61 74 20 73 74 72 69 6e 67 2e 20 20 49 4e 54  mat string.  INT
3e20: 20 69 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 74   is a single int
3e30: 65 67 65 72 20 61 72 67 75 6d 65 6e 74 2e 20 20  eger argument.  
3e40: 54 68 65 20 46 4f 52 4d 41 54 0a 2a 2a 20 73 74  The FORMAT.** st
3e50: 72 69 6e 67 20 6d 75 73 74 20 72 65 71 75 69 72  ring must requir
3e60: 65 20 6e 6f 20 6d 6f 72 65 20 74 68 61 6e 20 74  e no more than t
3e70: 68 69 73 20 6f 6e 65 20 69 6e 74 65 67 65 72 20  his one integer 
3e80: 61 72 67 75 6d 65 6e 74 2e 20 20 49 66 0a 2a 2a  argument.  If.**
3e90: 20 59 6f 75 20 70 61 73 73 20 69 6e 20 61 20 66   You pass in a f
3ea0: 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 74 68 61  ormat string tha
3eb0: 74 20 72 65 71 75 69 72 65 73 20 6d 6f 72 65 20  t requires more 
3ec0: 74 68 61 6e 20 6f 6e 65 20 61 72 67 75 6d 65 6e  than one argumen
3ed0: 74 2c 0a 2a 2a 20 62 61 64 20 74 68 69 6e 67 73  t,.** bad things
3ee0: 20 77 69 6c 6c 20 68 61 70 70 65 6e 2e 0a 2a 2f   will happen..*/
3ef0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
3f00: 5f 73 6e 70 72 69 6e 74 66 5f 69 6e 74 28 0a 20  _snprintf_int(. 
3f10: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
3f20: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
3f30: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
3f40: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
3f50: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
3f60: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
3f70: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
3f80: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
3f90: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
3fa0: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
3fb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
3fc0: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
3fd0: 74 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 7a  t */.){.  char z
3fe0: 53 74 72 5b 31 30 30 5d 3b 0a 20 20 69 6e 74 20  Str[100];.  int 
3ff0: 6e 20 3d 20 61 74 6f 69 28 61 72 67 76 5b 31 5d  n = atoi(argv[1]
4000: 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  );.  const char 
4010: 2a 7a 46 6f 72 6d 61 74 20 3d 20 61 72 67 76 5b  *zFormat = argv[
4020: 32 5d 3b 0a 20 20 69 6e 74 20 61 31 20 3d 20 61  2];.  int a1 = a
4030: 74 6f 69 28 61 72 67 76 5b 33 5d 29 3b 0a 20 20  toi(argv[3]);.  
4040: 69 66 28 20 6e 3e 73 69 7a 65 6f 66 28 7a 53 74  if( n>sizeof(zSt
4050: 72 29 20 29 20 6e 20 3d 20 73 69 7a 65 6f 66 28  r) ) n = sizeof(
4060: 7a 53 74 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  zStr);.  sqlite3
4070: 5f 73 6e 70 72 69 6e 74 66 28 73 69 7a 65 6f 66  _snprintf(sizeof
4080: 28 7a 53 74 72 29 2c 20 7a 53 74 72 2c 20 22 61  (zStr), zStr, "a
4090: 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71  bcdefghijklmnopq
40a0: 72 73 74 75 76 77 78 79 7a 22 29 3b 0a 20 20 73  rstuvwxyz");.  s
40b0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
40c0: 6e 2c 20 7a 53 74 72 2c 20 7a 46 6f 72 6d 61 74  n, zStr, zFormat
40d0: 2c 20 61 31 29 3b 0a 20 20 54 63 6c 5f 41 70 70  , a1);.  Tcl_App
40e0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
40f0: 2c 20 7a 53 74 72 2c 20 30 29 3b 0a 20 20 72 65  , zStr, 0);.  re
4100: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
4110: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4120: 4d 49 54 5f 47 45 54 5f 54 41 42 4c 45 0a 0a 2f  MIT_GET_TABLE../
4130: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
4140: 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70  ite3_get_table_p
4150: 72 69 6e 74 66 20 20 44 42 20 20 46 4f 52 4d 41  rintf  DB  FORMA
4160: 54 20 20 53 54 52 49 4e 47 20 20 3f 2d 2d 6e 6f  T  STRING  ?--no
4170: 2d 63 6f 75 6e 74 73 3f 0a 2a 2a 0a 2a 2a 20 49  -counts?.**.** I
4180: 6e 76 6f 6b 65 20 74 68 65 20 73 71 6c 69 74 65  nvoke the sqlite
4190: 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e  3_get_table_prin
41a0: 74 66 28 29 20 69 6e 74 65 72 66 61 63 65 20 75  tf() interface u
41b0: 73 69 6e 67 20 74 68 65 20 6f 70 65 6e 20 64 61  sing the open da
41c0: 74 61 62 61 73 65 0a 2a 2a 20 44 42 2e 20 20 54  tabase.** DB.  T
41d0: 68 65 20 53 51 4c 20 69 73 20 74 68 65 20 73 74  he SQL is the st
41e0: 72 69 6e 67 20 46 4f 52 4d 41 54 2e 20 20 54 68  ring FORMAT.  Th
41f0: 65 20 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20  e format string 
4200: 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 0a 2a  should contain.*
4210: 2a 20 6f 6e 65 20 25 73 20 6f 72 20 25 71 2e 20  * one %s or %q. 
4220: 20 53 54 52 49 4e 47 20 69 73 20 74 68 65 20 76   STRING is the v
4230: 61 6c 75 65 20 69 6e 73 65 72 74 65 64 20 69 6e  alue inserted in
4240: 74 6f 20 25 73 20 6f 72 20 25 71 2e 0a 2a 2f 0a  to %s or %q..*/.
4250: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
4260: 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66  get_table_printf
4270: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
4280: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
4290: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
42a0: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
42b0: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
42c0: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
42d0: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
42e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
42f0: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
4300: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
4310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
4320: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
4330: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c  ment */.){.  sql
4340: 69 74 65 33 20 2a 64 62 3b 0a 20 20 54 63 6c 5f  ite3 *db;.  Tcl_
4350: 44 53 74 72 69 6e 67 20 73 74 72 3b 0a 20 20 69  DString str;.  i
4360: 6e 74 20 72 63 3b 0a 20 20 63 68 61 72 20 2a 7a  nt rc;.  char *z
4370: 45 72 72 20 3d 20 30 3b 0a 20 20 69 6e 74 20 6e  Err = 0;.  int n
4380: 52 6f 77 2c 20 6e 43 6f 6c 3b 0a 20 20 63 68 61  Row, nCol;.  cha
4390: 72 20 2a 2a 61 52 65 73 75 6c 74 3b 0a 20 20 69  r **aResult;.  i
43a0: 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 7a 42 75  nt i;.  char zBu
43b0: 66 5b 33 30 5d 3b 0a 20 20 63 68 61 72 20 2a 7a  f[30];.  char *z
43c0: 53 71 6c 3b 0a 20 20 69 6e 74 20 72 65 73 43 6f  Sql;.  int resCo
43d0: 75 6e 74 20 3d 20 2d 31 3b 0a 20 20 69 66 28 20  unt = -1;.  if( 
43e0: 61 72 67 63 3d 3d 35 20 29 7b 0a 20 20 20 20 69  argc==5 ){.    i
43f0: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e  f( Tcl_GetInt(in
4400: 74 65 72 70 2c 20 61 72 67 76 5b 34 5d 2c 20 26  terp, argv[4], &
4410: 72 65 73 43 6f 75 6e 74 29 20 29 20 72 65 74 75  resCount) ) retu
4420: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
4430: 7d 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34 20  }.  if( argc!=4 
4440: 26 26 20 61 72 67 63 21 3d 35 20 29 7b 0a 20 20  && argc!=5 ){.  
4450: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
4460: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
4470: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
4480: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
4490: 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 20 46  , .       " DB F
44a0: 4f 52 4d 41 54 20 53 54 52 49 4e 47 20 3f 43 4f  ORMAT STRING ?CO
44b0: 55 4e 54 3f 22 2c 20 30 29 3b 0a 20 20 20 20 72  UNT?", 0);.    r
44c0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
44d0: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
44e0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
44f0: 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20  argv[1], &db) ) 
4500: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
4510: 3b 0a 20 20 54 63 6c 5f 44 53 74 72 69 6e 67 49  ;.  Tcl_DStringI
4520: 6e 69 74 28 26 73 74 72 29 3b 0a 20 20 7a 53 71  nit(&str);.  zSq
4530: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  l = sqlite3_mpri
4540: 6e 74 66 28 61 72 67 76 5b 32 5d 2c 61 72 67 76  ntf(argv[2],argv
4550: 5b 33 5d 29 3b 0a 20 20 69 66 28 20 61 72 67 63  [3]);.  if( argc
4560: 3d 3d 35 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==5 ){.    rc = 
4570: 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c  sqlite3_get_tabl
4580: 65 28 64 62 2c 20 7a 53 71 6c 2c 20 26 61 52 65  e(db, zSql, &aRe
4590: 73 75 6c 74 2c 20 30 2c 20 30 2c 20 26 7a 45 72  sult, 0, 0, &zEr
45a0: 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  r);.  }else{.   
45b0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 67 65   rc = sqlite3_ge
45c0: 74 5f 74 61 62 6c 65 28 64 62 2c 20 7a 53 71 6c  t_table(db, zSql
45d0: 2c 20 26 61 52 65 73 75 6c 74 2c 20 26 6e 52 6f  , &aResult, &nRo
45e0: 77 2c 20 26 6e 43 6f 6c 2c 20 26 7a 45 72 72 29  w, &nCol, &zErr)
45f0: 3b 0a 20 20 20 20 72 65 73 43 6f 75 6e 74 20 3d  ;.    resCount =
4600: 20 28 6e 52 6f 77 2b 31 29 2a 6e 43 6f 6c 3b 0a   (nRow+1)*nCol;.
4610: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72    }.  sqlite3_fr
4620: 65 65 28 7a 53 71 6c 29 3b 0a 20 20 73 70 72 69  ee(zSql);.  spri
4630: 6e 74 66 28 7a 42 75 66 2c 20 22 25 64 22 2c 20  ntf(zBuf, "%d", 
4640: 72 63 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  rc);.  Tcl_Appen
4650: 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c  dElement(interp,
4660: 20 7a 42 75 66 29 3b 0a 20 20 69 66 28 20 72 63   zBuf);.  if( rc
4670: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
4680: 20 20 20 69 66 28 20 61 72 67 63 3d 3d 34 20 29     if( argc==4 )
4690: 7b 0a 20 20 20 20 20 20 73 70 72 69 6e 74 66 28  {.      sprintf(
46a0: 7a 42 75 66 2c 20 22 25 64 22 2c 20 6e 52 6f 77  zBuf, "%d", nRow
46b0: 29 3b 0a 20 20 20 20 20 20 54 63 6c 5f 41 70 70  );.      Tcl_App
46c0: 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72  endElement(inter
46d0: 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 20 20  p, zBuf);.      
46e0: 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 25  sprintf(zBuf, "%
46f0: 64 22 2c 20 6e 43 6f 6c 29 3b 0a 20 20 20 20 20  d", nCol);.     
4700: 20 54 63 6c 5f 41 70 70 65 6e 64 45 6c 65 6d 65   Tcl_AppendEleme
4710: 6e 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 29  nt(interp, zBuf)
4720: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28  ;.    }.    for(
4730: 69 3d 30 3b 20 69 3c 72 65 73 43 6f 75 6e 74 3b  i=0; i<resCount;
4740: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 54 63 6c   i++){.      Tcl
4750: 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  _AppendElement(i
4760: 6e 74 65 72 70 2c 20 61 52 65 73 75 6c 74 5b 69  nterp, aResult[i
4770: 5d 20 3f 20 61 52 65 73 75 6c 74 5b 69 5d 20 3a  ] ? aResult[i] :
4780: 20 22 4e 55 4c 4c 22 29 3b 0a 20 20 20 20 7d 0a   "NULL");.    }.
4790: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 54 63 6c    }else{.    Tcl
47a0: 5f 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  _AppendElement(i
47b0: 6e 74 65 72 70 2c 20 7a 45 72 72 29 3b 0a 20 20  nterp, zErr);.  
47c0: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  }.  sqlite3_free
47d0: 5f 74 61 62 6c 65 28 61 52 65 73 75 6c 74 29 3b  _table(aResult);
47e0: 0a 20 20 69 66 28 20 7a 45 72 72 20 29 20 73 71  .  if( zErr ) sq
47f0: 6c 69 74 65 33 5f 66 72 65 65 28 7a 45 72 72 29  lite3_free(zErr)
4800: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
4810: 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
4820: 70 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74  p, db, rc) ) ret
4830: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
4840: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
4850: 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  }..#endif /* SQL
4860: 49 54 45 5f 4f 4d 49 54 5f 47 45 54 5f 54 41 42  ITE_OMIT_GET_TAB
4870: 4c 45 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73  LE */.../*.** Us
4880: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6c 61  age:  sqlite3_la
4890: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 20  st_insert_rowid 
48a0: 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 73  DB.**.** Returns
48b0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57   the integer ROW
48c0: 49 44 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  ID of the most r
48d0: 65 63 65 6e 74 20 69 6e 73 65 72 74 2e 0a 2a 2f  ecent insert..*/
48e0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
48f0: 5f 6c 61 73 74 5f 72 6f 77 69 64 28 0a 20 20 76  _last_rowid(.  v
4900: 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20  oid *NotUsed,.  
4910: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
4920: 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
4930: 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
4940: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
4950: 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
4960: 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20 20   argc,          
4970: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
4980: 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
4990: 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20  char **argv     
49a0: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
49b0: 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  f each argument 
49c0: 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  */.){.  sqlite3 
49d0: 2a 64 62 3b 0a 20 20 63 68 61 72 20 7a 42 75 66  *db;.  char zBuf
49e0: 5b 33 30 5d 3b 0a 0a 20 20 69 66 28 20 61 72 67  [30];..  if( arg
49f0: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
4a00: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
4a10: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
4a20: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
4a30: 22 2c 20 61 72 67 76 5b 30 5d 2c 20 22 20 44 42  ", argv[0], " DB
4a40: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
4a50: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
4a60: 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
4a70: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72  inter(interp, ar
4a80: 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65  gv[1], &db) ) re
4a90: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
4aa0: 20 20 73 70 72 69 6e 74 66 28 7a 42 75 66 2c 20    sprintf(zBuf, 
4ab0: 22 25 6c 6c 64 22 2c 20 73 71 6c 69 74 65 33 5f  "%lld", sqlite3_
4ac0: 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
4ad0: 64 28 64 62 29 29 3b 0a 20 20 54 63 6c 5f 41 70  d(db));.  Tcl_Ap
4ae0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
4af0: 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72  p, zBuf, 0);.  r
4b00: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
4b10: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
4b20: 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 20 44 42    sqlite3_key DB
4b30: 20 4b 45 59 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74   KEY.**.** Set t
4b40: 68 65 20 63 6f 64 65 63 20 6b 65 79 2e 0a 2a 2f  he codec key..*/
4b50: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
4b60: 5f 6b 65 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  _key(.  void *No
4b70: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
4b80: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
4b90: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
4ba0: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
4bb0: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
4bc0: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
4bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4be0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
4bf0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
4c00: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
4c10: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
4c20: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
4c30: 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20   sqlite3 *db;.  
4c40: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b 65 79  const char *zKey
4c50: 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a 20 20  ;.  int nKey;.  
4c60: 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20  if( argc!=3 ){. 
4c70: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
4c80: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
4c90: 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
4ca0: 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30  d be \"", argv[0
4cb0: 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 49 4c 45  ],.       " FILE
4cc0: 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20  NAME\"", 0);.   
4cd0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
4ce0: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
4cf0: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
4d00: 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20  , argv[1], &db) 
4d10: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
4d20: 4f 52 3b 0a 20 20 7a 4b 65 79 20 3d 20 61 72 67  OR;.  zKey = arg
4d30: 76 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20 3d 20 73  v[2];.  nKey = s
4d40: 74 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a 23 69 66  trlen(zKey);.#if
4d50: 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43  def SQLITE_HAS_C
4d60: 4f 44 45 43 0a 20 20 73 71 6c 69 74 65 33 5f 6b  ODEC.  sqlite3_k
4d70: 65 79 28 64 62 2c 20 7a 4b 65 79 2c 20 6e 4b 65  ey(db, zKey, nKe
4d80: 79 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74  y);.#endif.  ret
4d90: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
4da0: 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c  *.** Usage:  sql
4db0: 69 74 65 33 5f 72 65 6b 65 79 20 44 42 20 4b 45  ite3_rekey DB KE
4dc0: 59 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74  Y.**.** Change t
4dd0: 68 65 20 63 6f 64 65 63 20 6b 65 79 2e 0a 2a 2f  he codec key..*/
4de0: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
4df0: 5f 72 65 6b 65 79 28 0a 20 20 76 6f 69 64 20 2a  _rekey(.  void *
4e00: 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49  NotUsed,.  Tcl_I
4e10: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20  nterp *interp,  
4e20: 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74    /* The TCL int
4e30: 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e  erpreter that in
4e40: 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61  voked this comma
4e50: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63  nd */.  int argc
4e60: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
4e70: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
4e80: 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20  ments */.  char 
4e90: 2a 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20  **argv          
4ea0: 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63    /* Text of eac
4eb0: 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b  h argument */.){
4ec0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
4ed0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b    const char *zK
4ee0: 65 79 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a  ey;.  int nKey;.
4ef0: 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29 7b    if( argc!=3 ){
4f00: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
4f10: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
4f20: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
4f30: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
4f40: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 49  [0],.       " FI
4f50: 4c 45 4e 41 4d 45 5c 22 22 2c 20 30 29 3b 0a 20  LENAME\"", 0);. 
4f60: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
4f70: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
4f80: 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65  etDbPointer(inte
4f90: 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62  rp, argv[1], &db
4fa0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
4fb0: 52 52 4f 52 3b 0a 20 20 7a 4b 65 79 20 3d 20 61  RROR;.  zKey = a
4fc0: 72 67 76 5b 32 5d 3b 0a 20 20 6e 4b 65 79 20 3d  rgv[2];.  nKey =
4fd0: 20 73 74 72 6c 65 6e 28 7a 4b 65 79 29 3b 0a 23   strlen(zKey);.#
4fe0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53  ifdef SQLITE_HAS
4ff0: 5f 43 4f 44 45 43 0a 20 20 73 71 6c 69 74 65 33  _CODEC.  sqlite3
5000: 5f 72 65 6b 65 79 28 64 62 2c 20 7a 4b 65 79 2c  _rekey(db, zKey,
5010: 20 6e 4b 65 79 29 3b 0a 23 65 6e 64 69 66 0a 20   nKey);.#endif. 
5020: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
5030: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
5040: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 20 44   sqlite3_close D
5050: 42 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 73 20 74  B.**.** Closes t
5060: 68 65 20 64 61 74 61 62 61 73 65 20 6f 70 65 6e  he database open
5070: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6f 70  ed by sqlite3_op
5080: 65 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  en..*/.static in
5090: 74 20 73 71 6c 69 74 65 5f 74 65 73 74 5f 63 6c  t sqlite_test_cl
50a0: 6f 73 65 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  ose(.  void *Not
50b0: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
50c0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
50d0: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
50e0: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
50f0: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
5100: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
5110: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
5120: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
5130: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
5140: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
5150: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
5160: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
5170: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
5180: 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 61 72 67  nt rc;.  if( arg
5190: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
51a0: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
51b0: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
51c0: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
51d0: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
51e0: 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c 22 22     " FILENAME\""
51f0: 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
5200: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
5210: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
5220: 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
5230: 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
5240: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
5250: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73  c = sqlite3_clos
5260: 65 28 64 62 29 3b 0a 20 20 54 63 6c 5f 53 65 74  e(db);.  Tcl_Set
5270: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
5280: 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61  char *)t1ErrorNa
5290: 6d 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54  me(rc), TCL_STAT
52a0: 49 43 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  IC);.  return TC
52b0: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49  L_OK;.}../*.** I
52c0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
52d0: 20 74 68 65 20 78 5f 63 6f 61 6c 65 73 63 65 28   the x_coalesce(
52e0: 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 52  ) function..** R
52f0: 65 74 75 72 6e 20 74 68 65 20 66 69 72 73 74 20  eturn the first 
5300: 61 72 67 75 6d 65 6e 74 20 6e 6f 6e 2d 4e 55 4c  argument non-NUL
5310: 4c 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73  L argument..*/.s
5320: 74 61 74 69 63 20 76 6f 69 64 20 74 31 5f 69 66  tatic void t1_if
5330: 6e 75 6c 6c 46 75 6e 63 28 0a 20 20 73 71 6c 69  nullFunc(.  sqli
5340: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
5350: 74 65 78 74 2c 0a 20 20 69 6e 74 20 61 72 67 63  text,.  int argc
5360: 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ,.  sqlite3_valu
5370: 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e  e **argv.){.  in
5380: 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  t i;.  for(i=0; 
5390: 69 3c 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20  i<argc; i++){.  
53a0: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 55 4c    if( SQLITE_NUL
53b0: 4c 21 3d 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  L!=sqlite3_value
53c0: 5f 74 79 70 65 28 61 72 67 76 5b 69 5d 29 20 29  _type(argv[i]) )
53d0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20  {.      int n = 
53e0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
53f0: 74 65 73 28 61 72 67 76 5b 69 5d 29 3b 0a 20 20  tes(argv[i]);.  
5400: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
5410: 6c 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c  lt_text(context,
5420: 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f   (char*)sqlite3_
5430: 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b  value_text(argv[
5440: 69 5d 29 2c 0a 20 20 20 20 20 20 20 20 20 20 6e  i]),.          n
5450: 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
5460: 4e 54 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  NT);.      break
5470: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
5480: 2a 0a 2a 2a 20 54 68 65 73 65 20 61 72 65 20 74  *.** These are t
5490: 65 73 74 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20  est functions.  
54a0: 20 20 68 65 78 38 28 29 20 69 6e 74 65 72 70 72    hex8() interpr
54b0: 65 74 73 20 69 74 73 20 61 72 67 75 6d 65 6e 74  ets its argument
54c0: 20 61 73 0a 2a 2a 20 55 54 46 38 20 61 6e 64 20   as.** UTF8 and 
54d0: 72 65 74 75 72 6e 73 20 61 20 68 65 78 20 65 6e  returns a hex en
54e0: 63 6f 64 69 6e 67 2e 20 20 68 65 78 31 36 6c 65  coding.  hex16le
54f0: 28 29 20 69 6e 74 65 72 70 72 65 74 73 20 69 74  () interprets it
5500: 73 20 61 72 67 75 6d 65 6e 74 0a 2a 2a 20 61 73  s argument.** as
5510: 20 55 54 46 31 36 6c 65 20 61 6e 64 20 72 65 74   UTF16le and ret
5520: 75 72 6e 73 20 61 20 68 65 78 20 65 6e 63 6f 64  urns a hex encod
5530: 69 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76  ing..*/.static v
5540: 6f 69 64 20 68 65 78 38 46 75 6e 63 28 73 71 6c  oid hex8Func(sql
5550: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 2c  ite3_context *p,
5560: 20 69 6e 74 20 61 72 67 63 2c 20 73 71 6c 69 74   int argc, sqlit
5570: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 29  e3_value **argv)
5580: 7b 0a 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  {.  const unsign
5590: 65 64 20 63 68 61 72 20 2a 7a 3b 0a 20 20 69 6e  ed char *z;.  in
55a0: 74 20 69 3b 0a 20 20 63 68 61 72 20 7a 42 75 66  t i;.  char zBuf
55b0: 5b 32 30 30 5d 3b 0a 20 20 7a 20 3d 20 73 71 6c  [200];.  z = sql
55c0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
55d0: 61 72 67 76 5b 30 5d 29 3b 0a 20 20 66 6f 72 28  argv[0]);.  for(
55e0: 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 42  i=0; i<sizeof(zB
55f0: 75 66 29 2f 32 20 2d 20 32 20 26 26 20 7a 5b 69  uf)/2 - 2 && z[i
5600: 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 73 70 72  ]; i++){.    spr
5610: 69 6e 74 66 28 26 7a 42 75 66 5b 69 2a 32 5d 2c  intf(&zBuf[i*2],
5620: 20 22 25 30 32 78 22 2c 20 7a 5b 69 5d 26 30 78   "%02x", z[i]&0x
5630: 66 66 29 3b 0a 20 20 7d 0a 20 20 7a 42 75 66 5b  ff);.  }.  zBuf[
5640: 69 2a 32 5d 20 3d 20 30 3b 0a 20 20 73 71 6c 69  i*2] = 0;.  sqli
5650: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
5660: 70 2c 20 28 63 68 61 72 2a 29 7a 42 75 66 2c 20  p, (char*)zBuf, 
5670: 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  -1, SQLITE_TRANS
5680: 49 45 4e 54 29 3b 0a 7d 0a 23 69 66 6e 64 65 66  IENT);.}.#ifndef
5690: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
56a0: 31 36 0a 73 74 61 74 69 63 20 76 6f 69 64 20 68  16.static void h
56b0: 65 78 31 36 46 75 6e 63 28 73 71 6c 69 74 65 33  ex16Func(sqlite3
56c0: 5f 63 6f 6e 74 65 78 74 20 2a 70 2c 20 69 6e 74  _context *p, int
56d0: 20 61 72 67 63 2c 20 73 71 6c 69 74 65 33 5f 76   argc, sqlite3_v
56e0: 61 6c 75 65 20 2a 2a 61 72 67 76 29 7b 0a 20 20  alue **argv){.  
56f0: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 73  const unsigned s
5700: 68 6f 72 74 20 69 6e 74 20 2a 7a 3b 0a 20 20 69  hort int *z;.  i
5710: 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 7a 42 75  nt i;.  char zBu
5720: 66 5b 34 30 30 5d 3b 0a 20 20 7a 20 3d 20 73 71  f[400];.  z = sq
5730: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
5740: 31 36 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 66  16(argv[0]);.  f
5750: 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66  or(i=0; i<sizeof
5760: 28 7a 42 75 66 29 2f 34 20 2d 20 34 20 26 26 20  (zBuf)/4 - 4 && 
5770: 7a 5b 69 5d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  z[i]; i++){.    
5780: 73 70 72 69 6e 74 66 28 26 7a 42 75 66 5b 69 2a  sprintf(&zBuf[i*
5790: 34 5d 2c 20 22 25 30 34 78 22 2c 20 7a 5b 69 5d  4], "%04x", z[i]
57a0: 26 30 78 66 66 29 3b 0a 20 20 7d 0a 20 20 7a 42  &0xff);.  }.  zB
57b0: 75 66 5b 69 2a 34 5d 20 3d 20 30 3b 0a 20 20 73  uf[i*4] = 0;.  s
57c0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
57d0: 78 74 28 70 2c 20 28 63 68 61 72 2a 29 7a 42 75  xt(p, (char*)zBu
57e0: 66 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52  f, -1, SQLITE_TR
57f0: 41 4e 53 49 45 4e 54 29 3b 0a 7d 0a 23 65 6e 64  ANSIENT);.}.#end
5800: 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 74 72 75  if../*.** A stru
5810: 63 74 75 72 65 20 69 6e 74 6f 20 77 68 69 63 68  cture into which
5820: 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74   to accumulate t
5830: 65 78 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 64  ext..*/.struct d
5840: 73 74 72 20 7b 0a 20 20 69 6e 74 20 6e 41 6c 6c  str {.  int nAll
5850: 6f 63 3b 20 20 2f 2a 20 53 70 61 63 65 20 61 6c  oc;  /* Space al
5860: 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 69 6e 74  located */.  int
5870: 20 6e 55 73 65 64 3b 20 20 20 2f 2a 20 53 70 61   nUsed;   /* Spa
5880: 63 65 20 75 73 65 64 20 2a 2f 0a 20 20 63 68 61  ce used */.  cha
5890: 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 68 65  r *z;     /* The
58a0: 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   space */.};../*
58b0: 0a 2a 2a 20 41 70 70 65 6e 64 20 74 65 78 74 20  .** Append text 
58c0: 74 6f 20 61 20 64 73 74 72 0a 2a 2f 0a 73 74 61  to a dstr.*/.sta
58d0: 74 69 63 20 76 6f 69 64 20 64 73 74 72 41 70 70  tic void dstrApp
58e0: 65 6e 64 28 73 74 72 75 63 74 20 64 73 74 72 20  end(struct dstr 
58f0: 2a 70 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  *p, const char *
5900: 7a 2c 20 69 6e 74 20 64 69 76 69 64 65 72 29 7b  z, int divider){
5910: 0a 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65  .  int n = strle
5920: 6e 28 7a 29 3b 0a 20 20 69 66 28 20 70 2d 3e 6e  n(z);.  if( p->n
5930: 55 73 65 64 20 2b 20 6e 20 2b 20 32 20 3e 20 70  Used + n + 2 > p
5940: 2d 3e 6e 41 6c 6c 6f 63 20 29 7b 0a 20 20 20 20  ->nAlloc ){.    
5950: 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 20 20  char *zNew;.    
5960: 70 2d 3e 6e 41 6c 6c 6f 63 20 3d 20 70 2d 3e 6e  p->nAlloc = p->n
5970: 41 6c 6c 6f 63 2a 32 20 2b 20 6e 20 2b 20 32 30  Alloc*2 + n + 20
5980: 30 3b 0a 20 20 20 20 7a 4e 65 77 20 3d 20 73 71  0;.    zNew = sq
5990: 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 28 70 2d  lite3_realloc(p-
59a0: 3e 7a 2c 20 70 2d 3e 6e 41 6c 6c 6f 63 29 3b 0a  >z, p->nAlloc);.
59b0: 20 20 20 20 69 66 28 20 7a 4e 65 77 3d 3d 30 20      if( zNew==0 
59c0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
59d0: 5f 66 72 65 65 28 70 2d 3e 7a 29 3b 0a 20 20 20  _free(p->z);.   
59e0: 20 20 20 6d 65 6d 73 65 74 28 70 2c 20 30 2c 20     memset(p, 0, 
59f0: 73 69 7a 65 6f 66 28 2a 70 29 29 3b 0a 20 20 20  sizeof(*p));.   
5a00: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d     return;.    }
5a10: 0a 20 20 20 20 70 2d 3e 7a 20 3d 20 7a 4e 65 77  .    p->z = zNew
5a20: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 69 76 69  ;.  }.  if( divi
5a30: 64 65 72 20 26 26 20 70 2d 3e 6e 55 73 65 64 3e  der && p->nUsed>
5a40: 30 20 29 7b 0a 20 20 20 20 70 2d 3e 7a 5b 70 2d  0 ){.    p->z[p-
5a50: 3e 6e 55 73 65 64 2b 2b 5d 20 3d 20 64 69 76 69  >nUsed++] = divi
5a60: 64 65 72 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70  der;.  }.  memcp
5a70: 79 28 26 70 2d 3e 7a 5b 70 2d 3e 6e 55 73 65 64  y(&p->z[p->nUsed
5a80: 5d 2c 20 7a 2c 20 6e 2b 31 29 3b 0a 20 20 70 2d  ], z, n+1);.  p-
5a90: 3e 6e 55 73 65 64 20 2b 3d 20 6e 3b 0a 7d 0a 0a  >nUsed += n;.}..
5aa0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 64 20 66 6f  /*.** Invoked fo
5ab0: 72 20 65 61 63 68 20 63 61 6c 6c 62 61 63 6b 20  r each callback 
5ac0: 66 72 6f 6d 20 73 71 6c 69 74 65 33 45 78 65 63  from sqlite3Exec
5ad0: 46 75 6e 63 0a 2a 2f 0a 73 74 61 74 69 63 20 69  Func.*/.static i
5ae0: 6e 74 20 65 78 65 63 46 75 6e 63 43 61 6c 6c 62  nt execFuncCallb
5af0: 61 63 6b 28 76 6f 69 64 20 2a 70 44 61 74 61 2c  ack(void *pData,
5b00: 20 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20   int argc, char 
5b10: 2a 2a 61 72 67 76 2c 20 63 68 61 72 20 2a 2a 4e  **argv, char **N
5b20: 6f 74 55 73 65 64 29 7b 0a 20 20 73 74 72 75 63  otUsed){.  struc
5b30: 74 20 64 73 74 72 20 2a 70 20 3d 20 28 73 74 72  t dstr *p = (str
5b40: 75 63 74 20 64 73 74 72 2a 29 70 44 61 74 61 3b  uct dstr*)pData;
5b50: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28  .  int i;.  for(
5b60: 69 3d 30 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b  i=0; i<argc; i++
5b70: 29 7b 0a 20 20 20 20 69 66 28 20 61 72 67 76 5b  ){.    if( argv[
5b80: 69 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 64  i]==0 ){.      d
5b90: 73 74 72 41 70 70 65 6e 64 28 70 2c 20 22 4e 55  strAppend(p, "NU
5ba0: 4c 4c 22 2c 20 27 20 27 29 3b 0a 20 20 20 20 7d  LL", ' ');.    }
5bb0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 73 74 72  else{.      dstr
5bc0: 41 70 70 65 6e 64 28 70 2c 20 61 72 67 76 5b 69  Append(p, argv[i
5bd0: 5d 2c 20 27 20 27 29 3b 0a 20 20 20 20 7d 0a 20  ], ' ');.    }. 
5be0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d   }.  return 0;.}
5bf0: 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65 6e  ../*.** Implemen
5c00: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 78 5f  tation of the x_
5c10: 73 71 6c 69 74 65 5f 65 78 65 63 28 29 20 66 75  sqlite_exec() fu
5c20: 6e 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 66 75  nction.  This fu
5c30: 6e 63 74 69 6f 6e 20 74 61 6b 65 73 0a 2a 2a 20  nction takes.** 
5c40: 61 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e  a single argumen
5c50: 74 20 61 6e 64 20 61 74 74 65 6d 70 74 73 20 74  t and attempts t
5c60: 6f 20 65 78 65 63 75 74 65 20 74 68 61 74 20 61  o execute that a
5c70: 72 67 75 6d 65 6e 74 20 61 73 20 53 51 4c 20 63  rgument as SQL c
5c80: 6f 64 65 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  ode..** This is 
5c90: 69 6c 6c 65 67 61 6c 20 61 6e 64 20 73 68 6f 75  illegal and shou
5ca0: 6c 64 20 73 65 74 20 74 68 65 20 53 51 4c 49 54  ld set the SQLIT
5cb0: 45 5f 4d 49 53 55 53 45 20 66 6c 61 67 20 6f 6e  E_MISUSE flag on
5cc0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 2a   the database..*
5cd0: 2a 0a 2a 2a 20 32 30 30 34 2d 4a 61 6e 2d 30 37  *.** 2004-Jan-07
5ce0: 3a 20 20 57 65 20 68 61 76 65 20 63 68 61 6e 67  :  We have chang
5cf0: 65 64 20 74 68 69 73 20 74 6f 20 6d 61 6b 65 20  ed this to make 
5d00: 69 74 20 6c 65 67 61 6c 20 74 6f 20 63 61 6c 6c  it legal to call
5d10: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a   sqlite3_exec().
5d20: 2a 2a 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  ** from within a
5d30: 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 2e 20   function call. 
5d40: 20 0a 2a 2a 20 0a 2a 2a 20 54 68 69 73 20 72 6f   .** .** This ro
5d50: 75 74 69 6e 65 20 73 69 6d 75 6c 61 74 65 73 20  utine simulates 
5d60: 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 68 61  the effect of ha
5d70: 76 69 6e 67 20 74 77 6f 20 74 68 72 65 61 64 73  ving two threads
5d80: 20 61 74 74 65 6d 70 74 20 74 6f 0a 2a 2a 20 75   attempt to.** u
5d90: 73 65 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  se the same data
5da0: 62 61 73 65 20 61 74 20 74 68 65 20 73 61 6d 65  base at the same
5db0: 20 74 69 6d 65 2e 0a 2a 2f 0a 73 74 61 74 69 63   time..*/.static
5dc0: 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 65   void sqlite3Exe
5dd0: 63 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65 33  cFunc(.  sqlite3
5de0: 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78  _context *contex
5df0: 74 2c 20 0a 20 20 69 6e 74 20 61 72 67 63 2c 20  t, .  int argc, 
5e00: 20 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75   .  sqlite3_valu
5e10: 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 73 74  e **argv.){.  st
5e20: 72 75 63 74 20 64 73 74 72 20 78 3b 0a 20 20 6d  ruct dstr x;.  m
5e30: 65 6d 73 65 74 28 26 78 2c 20 30 2c 20 73 69 7a  emset(&x, 0, siz
5e40: 65 6f 66 28 78 29 29 3b 0a 20 20 28 76 6f 69 64  eof(x));.  (void
5e50: 29 73 71 6c 69 74 65 33 5f 65 78 65 63 28 28 73  )sqlite3_exec((s
5e60: 71 6c 69 74 65 33 2a 29 73 71 6c 69 74 65 33 5f  qlite3*)sqlite3_
5e70: 75 73 65 72 5f 64 61 74 61 28 63 6f 6e 74 65 78  user_data(contex
5e80: 74 29 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  t),.      (char*
5e90: 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
5ea0: 65 78 74 28 61 72 67 76 5b 30 5d 29 2c 0a 20 20  ext(argv[0]),.  
5eb0: 20 20 20 20 65 78 65 63 46 75 6e 63 43 61 6c 6c      execFuncCall
5ec0: 62 61 63 6b 2c 20 26 78 2c 20 30 29 3b 0a 20 20  back, &x, 0);.  
5ed0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74  sqlite3_result_t
5ee0: 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 78 2e 7a  ext(context, x.z
5ef0: 2c 20 78 2e 6e 55 73 65 64 2c 20 53 51 4c 49 54  , x.nUsed, SQLIT
5f00: 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  E_TRANSIENT);.  
5f10: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 78 2e 7a  sqlite3_free(x.z
5f20: 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c  );.}../*.** Impl
5f30: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 6b  ementation of tk
5f40: 74 32 32 31 33 66 75 6e 63 28 29 2c 20 61 20 73  t2213func(), a s
5f50: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 74  calar function t
5f60: 68 61 74 20 74 61 6b 65 73 20 65 78 61 63 74 6c  hat takes exactl
5f70: 79 0a 2a 2a 20 6f 6e 65 20 61 72 67 75 6d 65 6e  y.** one argumen
5f80: 74 2e 20 49 74 20 68 61 73 20 74 77 6f 20 69 6e  t. It has two in
5f90: 74 65 72 65 73 74 69 6e 67 20 66 65 61 74 75 72  teresting featur
5fa0: 65 73 3a 0a 2a 2a 0a 2a 2a 20 2a 20 49 74 20 63  es:.**.** * It c
5fb0: 61 6c 6c 73 20 73 71 6c 69 74 65 33 5f 76 61 6c  alls sqlite3_val
5fc0: 75 65 5f 74 65 78 74 28 29 20 33 20 74 69 6d 65  ue_text() 3 time
5fd0: 73 20 6f 6e 20 74 68 65 20 61 72 67 75 6d 65 6e  s on the argumen
5fe0: 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t sqlite3_value*
5ff0: 2e 0a 2a 2a 20 20 20 49 66 20 74 68 65 20 74 68  ..**   If the th
6000: 72 65 65 20 70 6f 69 6e 74 65 72 73 20 72 65 74  ree pointers ret
6010: 75 72 6e 65 64 20 61 72 65 20 6e 6f 74 20 74 68  urned are not th
6020: 65 20 73 61 6d 65 20 61 6e 20 53 51 4c 20 65 72  e same an SQL er
6030: 72 6f 72 20 69 73 20 72 61 69 73 65 64 2e 0a 2a  ror is raised..*
6040: 2a 0a 2a 2a 20 2a 20 4f 74 68 65 72 77 69 73 65  *.** * Otherwise
6050: 20 69 74 20 72 65 74 75 72 6e 73 20 61 20 63 6f   it returns a co
6060: 70 79 20 6f 66 20 74 68 65 20 74 65 78 74 20 72  py of the text r
6070: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
6080: 20 69 74 73 20 0a 2a 2a 20 20 20 61 72 67 75 6d   its .**   argum
6090: 65 6e 74 20 69 6e 20 73 75 63 68 20 61 20 77 61  ent in such a wa
60a0: 79 20 61 73 20 74 68 65 20 56 44 42 45 20 72 65  y as the VDBE re
60b0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20  presentation is 
60c0: 61 20 4d 65 6d 2a 20 63 65 6c 6c 20 0a 2a 2a 20  a Mem* cell .** 
60d0: 20 20 77 69 74 68 20 74 68 65 20 4d 45 4d 5f 54    with the MEM_T
60e0: 65 72 6d 20 66 6c 61 67 20 63 6c 65 61 72 2e 20  erm flag clear. 
60f0: 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20 23 32  .**.** Ticket #2
6100: 32 31 33 20 63 61 6e 20 74 68 65 72 65 66 6f 72  213 can therefor
6110: 65 20 62 65 20 74 65 73 74 65 64 20 62 79 20 65  e be tested by e
6120: 76 61 6c 75 61 74 69 6e 67 20 74 68 65 20 66 6f  valuating the fo
6130: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 53 51 4c 20 65  llowing.** SQL e
6140: 78 70 72 65 73 73 69 6f 6e 3a 0a 2a 2a 0a 2a 2a  xpression:.**.**
6150: 20 20 20 74 6b 74 32 32 31 33 66 75 6e 63 28 74     tkt2213func(t
6160: 6b 74 32 32 31 33 66 75 6e 63 28 27 61 20 73 74  kt2213func('a st
6170: 72 69 6e 67 27 29 29 3b 0a 2a 2f 0a 73 74 61 74  ring'));.*/.stat
6180: 69 63 20 76 6f 69 64 20 74 6b 74 32 32 31 33 46  ic void tkt2213F
6190: 75 6e 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74  unction(.  sqlit
61a0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74  e3_context *cont
61b0: 65 78 74 2c 20 0a 20 20 69 6e 74 20 61 72 67 63  ext, .  int argc
61c0: 2c 20 20 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ,  .  sqlite3_va
61d0: 6c 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  lue **argv.){.  
61e0: 69 6e 74 20 6e 54 65 78 74 3b 0a 20 20 75 6e 73  int nText;.  uns
61f0: 69 67 6e 65 64 20 63 68 61 72 20 63 6f 6e 73 74  igned char const
6200: 20 2a 7a 54 65 78 74 31 3b 0a 20 20 75 6e 73 69   *zText1;.  unsi
6210: 67 6e 65 64 20 63 68 61 72 20 63 6f 6e 73 74 20  gned char const 
6220: 2a 7a 54 65 78 74 32 3b 0a 20 20 75 6e 73 69 67  *zText2;.  unsig
6230: 6e 65 64 20 63 68 61 72 20 63 6f 6e 73 74 20 2a  ned char const *
6240: 7a 54 65 78 74 33 3b 0a 0a 20 20 6e 54 65 78 74  zText3;..  nText
6250: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
6260: 5f 62 79 74 65 73 28 61 72 67 76 5b 30 5d 29 3b  _bytes(argv[0]);
6270: 0a 20 20 7a 54 65 78 74 31 20 3d 20 73 71 6c 69  .  zText1 = sqli
6280: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61  te3_value_text(a
6290: 72 67 76 5b 30 5d 29 3b 0a 20 20 7a 54 65 78 74  rgv[0]);.  zText
62a0: 32 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  2 = sqlite3_valu
62b0: 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b  e_text(argv[0]);
62c0: 0a 20 20 7a 54 65 78 74 33 20 3d 20 73 71 6c 69  .  zText3 = sqli
62d0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61  te3_value_text(a
62e0: 72 67 76 5b 30 5d 29 3b 0a 0a 20 20 69 66 28 20  rgv[0]);..  if( 
62f0: 7a 54 65 78 74 31 21 3d 7a 54 65 78 74 32 20 7c  zText1!=zText2 |
6300: 7c 20 7a 54 65 78 74 32 21 3d 7a 54 65 78 74 33  | zText2!=zText3
6310: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f   ){.    sqlite3_
6320: 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e  result_error(con
6330: 74 65 78 74 2c 20 22 74 6b 74 32 32 31 33 20 69  text, "tkt2213 i
6340: 73 20 6e 6f 74 20 66 69 78 65 64 22 2c 20 2d 31  s not fixed", -1
6350: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
6360: 63 68 61 72 20 2a 7a 43 6f 70 79 20 3d 20 28 63  char *zCopy = (c
6370: 68 61 72 20 2a 29 73 71 6c 69 74 65 33 5f 6d 61  har *)sqlite3_ma
6380: 6c 6c 6f 63 28 6e 54 65 78 74 29 3b 0a 20 20 20  lloc(nText);.   
6390: 20 6d 65 6d 63 70 79 28 7a 43 6f 70 79 2c 20 7a   memcpy(zCopy, z
63a0: 54 65 78 74 31 2c 20 6e 54 65 78 74 29 3b 0a 20  Text1, nText);. 
63b0: 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c     sqlite3_resul
63c0: 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20  t_text(context, 
63d0: 7a 43 6f 70 79 2c 20 6e 54 65 78 74 2c 20 73 71  zCopy, nText, sq
63e0: 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d  lite3_free);.  }
63f0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  .}../*.** The fo
6400: 6c 6c 6f 77 69 6e 67 20 53 51 4c 20 66 75 6e 63  llowing SQL func
6410: 74 69 6f 6e 20 74 61 6b 65 73 20 34 20 61 72 67  tion takes 4 arg
6420: 75 6d 65 6e 74 73 2e 20 20 54 68 65 20 32 6e 64  uments.  The 2nd
6430: 20 61 6e 64 0a 2a 2a 20 34 74 68 20 61 72 67 75   and.** 4th argu
6440: 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 6f 6e 65  ment must be one
6450: 20 6f 66 20 74 68 65 73 65 20 73 74 72 69 6e 67   of these string
6460: 73 3a 20 20 27 74 65 78 74 27 2c 20 27 74 65 78  s:  'text', 'tex
6470: 74 31 36 27 2c 0a 2a 2a 20 6f 72 20 27 62 6c 6f  t16',.** or 'blo
6480: 62 27 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  b' corresponding
6490: 20 74 6f 20 41 50 49 20 66 75 6e 63 74 69 6f 6e   to API function
64a0: 73 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 73 71 6c  s.**.**      sql
64b0: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
64c0: 29 0a 2a 2a 20 20 20 20 20 20 73 71 6c 69 74 65  ).**      sqlite
64d0: 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36 28 29  3_value_text16()
64e0: 0a 2a 2a 20 20 20 20 20 20 73 71 6c 69 74 65 33  .**      sqlite3
64f0: 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 29 0a 2a 2a  _value_blob().**
6500: 0a 2a 2a 20 54 68 65 20 74 68 69 72 64 20 61 72  .** The third ar
6510: 67 75 6d 65 6e 74 20 69 73 20 61 20 73 74 72 69  gument is a stri
6520: 6e 67 2c 20 65 69 74 68 65 72 20 27 62 79 74 65  ng, either 'byte
6530: 73 27 20 6f 72 20 27 62 79 74 65 73 31 36 27 20  s' or 'bytes16' 
6540: 6f 72 20 27 6e 6f 6f 70 27 2c 0a 2a 2a 20 63 6f  or 'noop',.** co
6550: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 41  rresponding to A
6560: 50 49 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  PIs:.**.**      
6570: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
6580: 74 65 73 28 29 0a 2a 2a 20 20 20 20 20 20 73 71  tes().**      sq
6590: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65  lite3_value_byte
65a0: 73 31 36 28 29 0a 2a 2a 20 20 20 20 20 20 6e 6f  s16().**      no
65b0: 6f 70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 41 50 49  op.**.** The API
65c0: 73 20 64 65 73 69 67 6e 61 74 65 64 20 62 79 20  s designated by 
65d0: 74 68 65 20 32 6e 64 20 74 68 72 6f 75 67 68 20  the 2nd through 
65e0: 34 74 68 20 61 72 67 75 6d 65 6e 74 73 20 61 72  4th arguments ar
65f0: 65 20 61 70 70 6c 69 65 64 0a 2a 2a 20 74 6f 20  e applied.** to 
6600: 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
6610: 6e 74 20 69 6e 20 6f 72 64 65 72 2e 20 20 49 66  nt in order.  If
6620: 20 74 68 65 20 70 6f 69 6e 74 65 72 73 20 72 65   the pointers re
6630: 74 75 72 6e 65 64 20 62 79 20 74 68 65 0a 2a 2a  turned by the.**
6640: 20 73 65 63 6f 6e 64 20 61 6e 64 20 66 6f 75 72   second and four
6650: 74 68 20 61 72 65 20 64 69 66 66 65 72 65 6e 74  th are different
6660: 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72  , this routine r
6670: 65 74 75 72 6e 73 20 31 2e 20 20 4f 74 68 65 72  eturns 1.  Other
6680: 77 69 73 65 2c 0a 2a 2a 20 74 68 69 73 20 72 6f  wise,.** this ro
6690: 75 74 69 6e 65 20 72 65 74 75 72 6e 73 20 30 2e  utine returns 0.
66a0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63  .**.** This func
66b0: 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
66c0: 74 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 6e  test to see when
66d0: 20 72 65 74 75 72 6e 65 64 20 70 6f 69 6e 74 65   returned pointe
66e0: 72 73 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 5f  rs from.** the _
66f0: 74 65 78 74 28 29 2c 20 5f 74 65 78 74 31 36 28  text(), _text16(
6700: 29 20 61 6e 64 20 5f 62 6c 6f 62 28 29 20 41 50  ) and _blob() AP
6710: 49 73 20 62 65 63 6f 6d 65 20 69 6e 76 61 6c 69  Is become invali
6720: 64 61 74 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  dated..*/.static
6730: 20 76 6f 69 64 20 70 74 72 43 68 6e 67 46 75 6e   void ptrChngFun
6740: 63 74 69 6f 6e 28 0a 20 20 73 71 6c 69 74 65 33  ction(.  sqlite3
6750: 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78  _context *contex
6760: 74 2c 20 0a 20 20 69 6e 74 20 61 72 67 63 2c 20  t, .  int argc, 
6770: 20 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75   .  sqlite3_valu
6780: 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 63 6f  e **argv.){.  co
6790: 6e 73 74 20 76 6f 69 64 20 2a 70 31 2c 20 2a 70  nst void *p1, *p
67a0: 32 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  2;.  const char 
67b0: 2a 7a 43 6d 64 3b 0a 20 20 69 66 28 20 61 72 67  *zCmd;.  if( arg
67c0: 63 21 3d 34 20 29 20 72 65 74 75 72 6e 3b 0a 20  c!=4 ) return;. 
67d0: 20 7a 43 6d 64 20 3d 20 28 63 6f 6e 73 74 20 63   zCmd = (const c
67e0: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
67f0: 75 65 5f 74 65 78 74 28 61 72 67 76 5b 31 5d 29  ue_text(argv[1])
6800: 3b 0a 20 20 69 66 28 20 7a 43 6d 64 3d 3d 30 20  ;.  if( zCmd==0 
6810: 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20  ) return;.  if( 
6820: 73 74 72 63 6d 70 28 7a 43 6d 64 2c 22 74 65 78  strcmp(zCmd,"tex
6830: 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 31  t")==0 ){.    p1
6840: 20 3d 20 28 63 6f 6e 73 74 20 76 6f 69 64 2a 29   = (const void*)
6850: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
6860: 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a 23 69 66  xt(argv[0]);.#if
6870: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
6880: 5f 55 54 46 31 36 0a 20 20 7d 65 6c 73 65 20 69  _UTF16.  }else i
6890: 66 28 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c 20  f( strcmp(zCmd, 
68a0: 22 74 65 78 74 31 36 22 29 3d 3d 30 20 29 7b 0a  "text16")==0 ){.
68b0: 20 20 20 20 70 31 20 3d 20 28 63 6f 6e 73 74 20      p1 = (const 
68c0: 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 76 61  void*)sqlite3_va
68d0: 6c 75 65 5f 74 65 78 74 31 36 28 61 72 67 76 5b  lue_text16(argv[
68e0: 30 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65  0]);.#endif.  }e
68f0: 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
6900: 43 6d 64 2c 20 22 62 6c 6f 62 22 29 3d 3d 30 20  Cmd, "blob")==0 
6910: 29 7b 0a 20 20 20 20 70 31 20 3d 20 28 63 6f 6e  ){.    p1 = (con
6920: 73 74 20 76 6f 69 64 2a 29 73 71 6c 69 74 65 33  st void*)sqlite3
6930: 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 61 72 67 76  _value_blob(argv
6940: 5b 30 5d 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  [0]);.  }else{. 
6950: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20     return;.  }. 
6960: 20 7a 43 6d 64 20 3d 20 28 63 6f 6e 73 74 20 63   zCmd = (const c
6970: 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
6980: 75 65 5f 74 65 78 74 28 61 72 67 76 5b 32 5d 29  ue_text(argv[2])
6990: 3b 0a 20 20 69 66 28 20 7a 43 6d 64 3d 3d 30 20  ;.  if( zCmd==0 
69a0: 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20  ) return;.  if( 
69b0: 73 74 72 63 6d 70 28 7a 43 6d 64 2c 22 62 79 74  strcmp(zCmd,"byt
69c0: 65 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  es")==0 ){.    s
69d0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
69e0: 65 73 28 61 72 67 76 5b 30 5d 29 3b 0a 23 69 66  es(argv[0]);.#if
69f0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
6a00: 5f 55 54 46 31 36 0a 20 20 7d 65 6c 73 65 20 69  _UTF16.  }else i
6a10: 66 28 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c 20  f( strcmp(zCmd, 
6a20: 22 62 79 74 65 73 31 36 22 29 3d 3d 30 20 29 7b  "bytes16")==0 ){
6a30: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  .    sqlite3_val
6a40: 75 65 5f 62 79 74 65 73 31 36 28 61 72 67 76 5b  ue_bytes16(argv[
6a50: 30 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65  0]);.#endif.  }e
6a60: 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 7a  lse if( strcmp(z
6a70: 43 6d 64 2c 20 22 6e 6f 6f 70 22 29 3d 3d 30 20  Cmd, "noop")==0 
6a80: 29 7b 0a 20 20 20 20 2f 2a 20 64 6f 20 6e 6f 74  ){.    /* do not
6a90: 68 69 6e 67 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  hing */.  }else{
6aa0: 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d  .    return;.  }
6ab0: 0a 20 20 7a 43 6d 64 20 3d 20 28 63 6f 6e 73 74  .  zCmd = (const
6ac0: 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76   char*)sqlite3_v
6ad0: 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 33  alue_text(argv[3
6ae0: 5d 29 3b 0a 20 20 69 66 28 20 7a 43 6d 64 3d 3d  ]);.  if( zCmd==
6af0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66  0 ) return;.  if
6b00: 28 20 73 74 72 63 6d 70 28 7a 43 6d 64 2c 22 74  ( strcmp(zCmd,"t
6b10: 65 78 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ext")==0 ){.    
6b20: 70 32 20 3d 20 28 63 6f 6e 73 74 20 76 6f 69 64  p2 = (const void
6b30: 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  *)sqlite3_value_
6b40: 74 65 78 74 28 61 72 67 76 5b 30 5d 29 3b 0a 23  text(argv[0]);.#
6b50: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
6b60: 49 54 5f 55 54 46 31 36 0a 20 20 7d 65 6c 73 65  IT_UTF16.  }else
6b70: 20 69 66 28 20 73 74 72 63 6d 70 28 7a 43 6d 64   if( strcmp(zCmd
6b80: 2c 20 22 74 65 78 74 31 36 22 29 3d 3d 30 20 29  , "text16")==0 )
6b90: 7b 0a 20 20 20 20 70 32 20 3d 20 28 63 6f 6e 73  {.    p2 = (cons
6ba0: 74 20 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f  t void*)sqlite3_
6bb0: 76 61 6c 75 65 5f 74 65 78 74 31 36 28 61 72 67  value_text16(arg
6bc0: 76 5b 30 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20  v[0]);.#endif.  
6bd0: 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
6be0: 28 7a 43 6d 64 2c 20 22 62 6c 6f 62 22 29 3d 3d  (zCmd, "blob")==
6bf0: 30 20 29 7b 0a 20 20 20 20 70 32 20 3d 20 28 63  0 ){.    p2 = (c
6c00: 6f 6e 73 74 20 76 6f 69 64 2a 29 73 71 6c 69 74  onst void*)sqlit
6c10: 65 33 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 61 72  e3_value_blob(ar
6c20: 67 76 5b 30 5d 29 3b 0a 20 20 7d 65 6c 73 65 7b  gv[0]);.  }else{
6c30: 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d  .    return;.  }
6c40: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
6c50: 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 70  t_int(context, p
6c60: 31 21 3d 70 32 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a  1!=p2);.}.../*.*
6c70: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
6c80: 5f 74 65 73 74 5f 63 72 65 61 74 65 5f 66 75 6e  _test_create_fun
6c90: 63 74 69 6f 6e 20 44 42 0a 2a 2a 0a 2a 2a 20 43  ction DB.**.** C
6ca0: 61 6c 6c 20 74 68 65 20 73 71 6c 69 74 65 33 5f  all the sqlite3_
6cb0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20  create_function 
6cc0: 41 50 49 20 6f 6e 20 74 68 65 20 67 69 76 65 6e  API on the given
6cd0: 20 64 61 74 61 62 61 73 65 20 69 6e 20 6f 72 64   database in ord
6ce0: 65 72 0a 2a 2a 20 74 6f 20 63 72 65 61 74 65 20  er.** to create 
6cf0: 61 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d 65 64  a function named
6d00: 20 22 78 5f 63 6f 61 6c 65 73 63 65 22 2e 20 20   "x_coalesce".  
6d10: 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 64 6f  This function do
6d20: 65 73 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  es the same thin
6d30: 67 0a 2a 2a 20 61 73 20 74 68 65 20 22 63 6f 61  g.** as the "coa
6d40: 6c 65 73 63 65 22 20 66 75 6e 63 74 69 6f 6e 2e  lesce" function.
6d50: 20 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20    This function 
6d60: 61 6c 73 6f 20 72 65 67 69 73 74 65 72 73 20 61  also registers a
6d70: 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 0a 2a  n SQL function.*
6d80: 2a 20 6e 61 6d 65 64 20 22 78 5f 73 71 6c 69 74  * named "x_sqlit
6d90: 65 5f 65 78 65 63 22 20 74 68 61 74 20 69 6e 76  e_exec" that inv
6da0: 6f 6b 65 73 20 73 71 6c 69 74 65 33 5f 65 78 65  okes sqlite3_exe
6db0: 63 28 29 2e 20 20 49 6e 76 6f 6b 69 6e 67 20 73  c().  Invoking s
6dc0: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a 2a 2a  qlite3_exec().**
6dd0: 20 69 6e 20 74 68 69 73 20 77 61 79 20 69 73 20   in this way is 
6de0: 69 6c 6c 65 67 61 6c 20 72 65 63 75 72 73 69 6f  illegal recursio
6df0: 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20 72 61 69  n and should rai
6e00: 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53  se an SQLITE_MIS
6e10: 55 53 45 20 65 72 72 6f 72 2e 0a 2a 2a 20 54 68  USE error..** Th
6e20: 65 20 65 66 66 65 63 74 20 69 73 20 73 69 6d 69  e effect is simi
6e30: 6c 61 72 20 74 6f 20 74 72 79 69 6e 67 20 74 6f  lar to trying to
6e40: 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 64 61   use the same da
6e50: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
6e60: 6e 20 66 72 6f 6d 0a 2a 2a 20 74 77 6f 20 74 68  n from.** two th
6e70: 72 65 61 64 73 20 61 74 20 74 68 65 20 73 61 6d  reads at the sam
6e80: 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e time..**.** Th
6e90: 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f 74 69 76  e original motiv
6ea0: 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 72  ation for this r
6eb0: 6f 75 74 69 6e 65 20 77 61 73 20 74 6f 20 62 65  outine was to be
6ec0: 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c 20 74 68   able to call th
6ed0: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 72 65  e.** sqlite3_cre
6ee0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 20 66 75 6e  ate_function fun
6ef0: 63 74 69 6f 6e 20 77 68 69 6c 65 20 61 20 71 75  ction while a qu
6f00: 65 72 79 20 69 73 20 69 6e 20 70 72 6f 67 72 65  ery is in progre
6f10: 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74  ss in order.** t
6f20: 6f 20 74 65 73 74 20 74 68 65 20 53 51 4c 49 54  o test the SQLIT
6f30: 45 5f 4d 49 53 55 53 45 20 64 65 74 65 63 74 69  E_MISUSE detecti
6f40: 6f 6e 20 6c 6f 67 69 63 2e 0a 2a 2f 0a 73 74 61  on logic..*/.sta
6f50: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 72 65  tic int test_cre
6f60: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 0a 20 20  ate_function(.  
6f70: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
6f80: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
6f90: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
6fa0: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
6fb0: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
6fc0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
6fd0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
6fe0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
6ff0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
7000: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
7010: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
7020: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
7030: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 3b   */.){.  int rc;
7040: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
7050: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29  .  if( argc!=2 )
7060: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
7070: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
7080: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
7090: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
70a0: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 44  v[0],.       " D
70b0: 42 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  B\"", 0);.    re
70c0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
70d0: 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50    }.  if( getDbP
70e0: 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61  ointer(interp, a
70f0: 72 67 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72  rgv[1], &db) ) r
7100: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
7110: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
7120: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
7130: 64 62 2c 20 22 78 5f 63 6f 61 6c 65 73 63 65 22  db, "x_coalesce"
7140: 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 41 4e 59  , -1, SQLITE_ANY
7150: 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 74 31  , 0, .        t1
7160: 5f 69 66 6e 75 6c 6c 46 75 6e 63 2c 20 30 2c 20  _ifnullFunc, 0, 
7170: 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  0);.  if( rc==SQ
7180: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
7190: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
71a0: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
71b0: 22 68 65 78 38 22 2c 20 31 2c 20 53 51 4c 49 54  "hex8", 1, SQLIT
71c0: 45 5f 41 4e 59 2c 20 30 2c 20 0a 20 20 20 20 20  E_ANY, 0, .     
71d0: 20 20 20 20 20 68 65 78 38 46 75 6e 63 2c 20 30       hex8Func, 0
71e0: 2c 20 30 29 3b 0a 20 20 7d 0a 23 69 66 6e 64 65  , 0);.  }.#ifnde
71f0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
7200: 46 31 36 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  F16.  if( rc==SQ
7210: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
7220: 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61  c = sqlite3_crea
7230: 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20  te_function(db, 
7240: 22 68 65 78 31 36 22 2c 20 31 2c 20 53 51 4c 49  "hex16", 1, SQLI
7250: 54 45 5f 41 4e 59 2c 20 30 2c 20 0a 20 20 20 20  TE_ANY, 0, .    
7260: 20 20 20 20 20 20 68 65 78 31 36 46 75 6e 63 2c        hex16Func,
7270: 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 23 65 6e 64   0, 0);.  }.#end
7280: 69 66 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  if.  if( rc==SQL
7290: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
72a0: 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74   = sqlite3_creat
72b0: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22  e_function(db, "
72c0: 74 6b 74 32 32 31 33 66 75 6e 63 22 2c 20 31 2c  tkt2213func", 1,
72d0: 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c 20   SQLITE_ANY, 0, 
72e0: 0a 20 20 20 20 20 20 20 20 20 20 74 6b 74 32 32  .          tkt22
72f0: 31 33 46 75 6e 63 74 69 6f 6e 2c 20 30 2c 20 30  13Function, 0, 0
7300: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d  );.  }.  if( rc=
7310: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
7320: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
7330: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64  reate_function(d
7340: 62 2c 20 22 70 6f 69 6e 74 65 72 5f 63 68 61 6e  b, "pointer_chan
7350: 67 65 22 2c 20 34 2c 20 53 51 4c 49 54 45 5f 41  ge", 4, SQLITE_A
7360: 4e 59 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20  NY, 0, .        
7370: 20 20 70 74 72 43 68 6e 67 46 75 6e 63 74 69 6f    ptrChngFunctio
7380: 6e 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a 23  n, 0, 0);.  }..#
7390: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
73a0: 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 20 55 73  IT_UTF16.  /* Us
73b0: 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 72  e the sqlite3_cr
73c0: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28  eate_function16(
73d0: 29 20 41 50 49 20 68 65 72 65 2e 20 4d 61 69 6e  ) API here. Main
73e0: 6c 79 20 66 6f 72 20 66 75 6e 2c 20 62 75 74 20  ly for fun, but 
73f0: 61 6c 73 6f 20 0a 20 20 2a 2a 20 62 65 63 61 75  also .  ** becau
7400: 73 65 20 69 74 20 69 73 20 6e 6f 74 20 74 65 73  se it is not tes
7410: 74 65 64 20 61 6e 79 77 68 65 72 65 20 65 6c 73  ted anywhere els
7420: 65 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d  e. */.  if( rc==
7430: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
7440: 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 55 74   const void *zUt
7450: 66 31 36 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  f16;.    sqlite3
7460: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20  _value *pVal;.  
7470: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
7480: 65 6e 74 65 72 28 64 62 2d 3e 6d 75 74 65 78 29  enter(db->mutex)
7490: 3b 0a 20 20 20 20 70 56 61 6c 20 3d 20 73 71 6c  ;.    pVal = sql
74a0: 69 74 65 33 56 61 6c 75 65 4e 65 77 28 64 62 29  ite3ValueNew(db)
74b0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 61 6c  ;.    sqlite3Val
74c0: 75 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d  ueSetStr(pVal, -
74d0: 31 2c 20 22 78 5f 73 71 6c 69 74 65 5f 65 78 65  1, "x_sqlite_exe
74e0: 63 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  c", SQLITE_UTF8,
74f0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
7500: 0a 20 20 20 20 7a 55 74 66 31 36 20 3d 20 73 71  .    zUtf16 = sq
7510: 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 70  lite3ValueText(p
7520: 56 61 6c 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  Val, SQLITE_UTF1
7530: 36 4e 41 54 49 56 45 29 3b 0a 20 20 20 20 69 66  6NATIVE);.    if
7540: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
7550: 65 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  ed ){.      rc =
7560: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
7570: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7580: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
7590: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 31 36 28 64  ate_function16(d
75a0: 62 2c 20 7a 55 74 66 31 36 2c 20 0a 20 20 20 20  b, zUtf16, .    
75b0: 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20 53              1, S
75c0: 51 4c 49 54 45 5f 55 54 46 31 36 2c 20 64 62 2c  QLITE_UTF16, db,
75d0: 20 73 71 6c 69 74 65 33 45 78 65 63 46 75 6e 63   sqlite3ExecFunc
75e0: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  , 0, 0);.    }. 
75f0: 20 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46     sqlite3ValueF
7600: 72 65 65 28 70 56 61 6c 29 3b 0a 20 20 20 20 73  ree(pVal);.    s
7610: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
7620: 76 65 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20  ve(db->mutex);. 
7630: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28   }.#endif..  if(
7640: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
7650: 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20  ode(interp, db, 
7660: 72 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  rc) ) return TCL
7670: 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f 53 65  _ERROR;.  Tcl_Se
7680: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
7690: 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e  (char *)t1ErrorN
76a0: 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 72  ame(rc), 0);.  r
76b0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
76c0: 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
76d0: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
76e0: 20 78 5f 63 6f 75 6e 74 28 29 20 61 67 67 72 65   x_count() aggre
76f0: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  gate function..*
7700: 2a 0a 2a 2a 20 78 5f 63 6f 75 6e 74 28 29 20 63  *.** x_count() c
7710: 6f 75 6e 74 73 20 74 68 65 20 6e 75 6d 62 65 72  ounts the number
7720: 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 20 61 72 67   of non-null arg
7730: 75 6d 65 6e 74 73 2e 20 20 42 75 74 20 74 68 65  uments.  But the
7740: 72 65 20 61 72 65 0a 2a 2a 20 73 6f 6d 65 20 74  re are.** some t
7750: 77 69 73 74 73 20 66 6f 72 20 74 65 73 74 69 6e  wists for testin
7760: 67 20 70 75 72 70 6f 73 65 73 2e 0a 2a 2a 0a 2a  g purposes..**.*
7770: 2a 20 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e  * If the argumen
7780: 74 20 74 6f 20 78 5f 63 6f 75 6e 74 28 29 20 69  t to x_count() i
7790: 73 20 34 30 20 74 68 65 6e 20 61 20 55 54 46 2d  s 40 then a UTF-
77a0: 38 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72  8 error is repor
77b0: 74 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 74  ted.** on the st
77c0: 65 70 20 66 75 6e 63 74 69 6f 6e 2e 20 20 49 66  ep function.  If
77d0: 20 78 5f 63 6f 75 6e 74 28 34 31 29 20 69 73 20   x_count(41) is 
77e0: 73 65 65 6e 2c 20 74 68 65 6e 20 61 20 55 54 46  seen, then a UTF
77f0: 2d 31 36 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20  -16 error.** is 
7800: 72 65 70 6f 72 74 65 64 20 6f 6e 20 74 68 65 20  reported on the 
7810: 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 20 20  step function.  
7820: 49 66 20 74 68 65 20 74 6f 74 61 6c 20 63 6f 75  If the total cou
7830: 6e 74 20 69 73 20 34 32 2c 20 74 68 65 6e 0a 2a  nt is 42, then.*
7840: 2a 20 61 20 55 54 46 2d 38 20 65 72 72 6f 72 20  * a UTF-8 error 
7850: 69 73 20 72 65 70 6f 72 74 65 64 20 6f 6e 20 74  is reported on t
7860: 68 65 20 66 69 6e 61 6c 69 7a 65 20 66 75 6e 63  he finalize func
7870: 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  tion..*/.typedef
7880: 20 73 74 72 75 63 74 20 74 31 43 6f 75 6e 74 43   struct t1CountC
7890: 74 78 20 74 31 43 6f 75 6e 74 43 74 78 3b 0a 73  tx t1CountCtx;.s
78a0: 74 72 75 63 74 20 74 31 43 6f 75 6e 74 43 74 78  truct t1CountCtx
78b0: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 7d 3b 0a 73   {.  int n;.};.s
78c0: 74 61 74 69 63 20 76 6f 69 64 20 74 31 43 6f 75  tatic void t1Cou
78d0: 6e 74 53 74 65 70 28 0a 20 20 73 71 6c 69 74 65  ntStep(.  sqlite
78e0: 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65  3_context *conte
78f0: 78 74 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a  xt,.  int argc,.
7900: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
7910: 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 74 31 43 6f  **argv.){.  t1Co
7920: 75 6e 74 43 74 78 20 2a 70 3b 0a 20 20 70 20 3d  untCtx *p;.  p =
7930: 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65 67 61   sqlite3_aggrega
7940: 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f 6e 74 65  te_context(conte
7950: 78 74 2c 20 73 69 7a 65 6f 66 28 2a 70 29 29 3b  xt, sizeof(*p));
7960: 0a 20 20 69 66 28 20 28 61 72 67 63 3d 3d 30 20  .  if( (argc==0 
7970: 7c 7c 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 21 3d  || SQLITE_NULL!=
7980: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
7990: 70 65 28 61 72 67 76 5b 30 5d 29 20 29 20 26 26  pe(argv[0]) ) &&
79a0: 20 70 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 2b 2b   p ){.    p->n++
79b0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 61 72 67 63  ;.  }.  if( argc
79c0: 3e 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 76 20  >0 ){.    int v 
79d0: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
79e0: 69 6e 74 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20  int(argv[0]);.  
79f0: 20 20 69 66 28 20 76 3d 3d 34 30 20 29 7b 0a 20    if( v==40 ){. 
7a00: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73       sqlite3_res
7a10: 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78  ult_error(contex
7a20: 74 2c 20 22 76 61 6c 75 65 20 6f 66 20 34 30 20  t, "value of 40 
7a30: 68 61 6e 64 65 64 20 74 6f 20 78 5f 63 6f 75 6e  handed to x_coun
7a40: 74 22 2c 20 2d 31 29 3b 0a 23 69 66 6e 64 65 66  t", -1);.#ifndef
7a50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
7a60: 31 36 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  16.    }else if(
7a70: 20 76 3d 3d 34 31 20 29 7b 0a 20 20 20 20 20 20   v==41 ){.      
7a80: 63 6f 6e 73 74 20 63 68 61 72 20 7a 55 74 66 31  const char zUtf1
7a90: 36 45 72 72 4d 73 67 5b 5d 20 3d 20 7b 20 30 2c  6ErrMsg[] = { 0,
7aa0: 20 30 78 36 31 2c 20 30 2c 20 30 78 36 32 2c 20   0x61, 0, 0x62, 
7ab0: 30 2c 20 30 78 36 33 2c 20 30 2c 20 30 2c 20 30  0, 0x63, 0, 0, 0
7ac0: 7d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  };.      sqlite3
7ad0: 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 31 36 28  _result_error16(
7ae0: 63 6f 6e 74 65 78 74 2c 20 26 7a 55 74 66 31 36  context, &zUtf16
7af0: 45 72 72 4d 73 67 5b 31 2d 53 51 4c 49 54 45 5f  ErrMsg[1-SQLITE_
7b00: 42 49 47 45 4e 44 49 41 4e 5d 2c 20 2d 31 29 3b  BIGENDIAN], -1);
7b10: 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a 20 20  .#endif.    }.  
7b20: 7d 0a 7d 20 20 20 0a 73 74 61 74 69 63 20 76 6f  }.}   .static vo
7b30: 69 64 20 74 31 43 6f 75 6e 74 46 69 6e 61 6c 69  id t1CountFinali
7b40: 7a 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  ze(sqlite3_conte
7b50: 78 74 20 2a 63 6f 6e 74 65 78 74 29 7b 0a 20 20  xt *context){.  
7b60: 74 31 43 6f 75 6e 74 43 74 78 20 2a 70 3b 0a 20  t1CountCtx *p;. 
7b70: 20 70 20 3d 20 73 71 6c 69 74 65 33 5f 61 67 67   p = sqlite3_agg
7b80: 72 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63  regate_context(c
7b90: 6f 6e 74 65 78 74 2c 20 73 69 7a 65 6f 66 28 2a  ontext, sizeof(*
7ba0: 70 29 29 3b 0a 20 20 69 66 28 20 70 20 29 7b 0a  p));.  if( p ){.
7bb0: 20 20 20 20 69 66 28 20 70 2d 3e 6e 3d 3d 34 32      if( p->n==42
7bc0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
7bd0: 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72 28 63  3_result_error(c
7be0: 6f 6e 74 65 78 74 2c 20 22 78 5f 63 6f 75 6e 74  ontext, "x_count
7bf0: 20 74 6f 74 61 6c 73 20 74 6f 20 34 32 22 2c 20   totals to 42", 
7c00: 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  -1);.    }else{.
7c10: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
7c20: 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78 74  sult_int(context
7c30: 2c 20 70 20 3f 20 70 2d 3e 6e 20 3a 20 30 29 3b  , p ? p->n : 0);
7c40: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 73 74  .    }.  }.}..st
7c50: 61 74 69 63 20 76 6f 69 64 20 6c 65 67 61 63 79  atic void legacy
7c60: 43 6f 75 6e 74 53 74 65 70 28 0a 20 20 73 71 6c  CountStep(.  sql
7c70: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f  ite3_context *co
7c80: 6e 74 65 78 74 2c 0a 20 20 69 6e 74 20 61 72 67  ntext,.  int arg
7c90: 63 2c 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  c,.  sqlite3_val
7ca0: 75 65 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 2f  ue **argv.){.  /
7cb0: 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 7d 0a 0a 23 69  * no-op */.}..#i
7cc0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
7cd0: 54 5f 44 45 50 52 45 43 41 54 45 44 0a 73 74 61  T_DEPRECATED.sta
7ce0: 74 69 63 20 76 6f 69 64 20 6c 65 67 61 63 79 43  tic void legacyC
7cf0: 6f 75 6e 74 46 69 6e 61 6c 69 7a 65 28 73 71 6c  ountFinalize(sql
7d00: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f  ite3_context *co
7d10: 6e 74 65 78 74 29 7b 0a 20 20 73 71 6c 69 74 65  ntext){.  sqlite
7d20: 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e  3_result_int(con
7d30: 74 65 78 74 2c 20 73 71 6c 69 74 65 33 5f 61 67  text, sqlite3_ag
7d40: 67 72 65 67 61 74 65 5f 63 6f 75 6e 74 28 63 6f  gregate_count(co
7d50: 6e 74 65 78 74 29 29 3b 0a 7d 0a 23 65 6e 64 69  ntext));.}.#endi
7d60: 66 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  f../*.** Usage: 
7d70: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
7d80: 61 67 67 72 65 67 61 74 65 20 44 42 0a 2a 2a 0a  aggregate DB.**.
7d90: 2a 2a 20 43 61 6c 6c 20 74 68 65 20 73 71 6c 69  ** Call the sqli
7da0: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
7db0: 69 6f 6e 20 41 50 49 20 6f 6e 20 74 68 65 20 67  ion API on the g
7dc0: 69 76 65 6e 20 64 61 74 61 62 61 73 65 20 69 6e  iven database in
7dd0: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 63 72 65   order.** to cre
7de0: 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 6e  ate a function n
7df0: 61 6d 65 64 20 22 78 5f 63 6f 75 6e 74 22 2e 20  amed "x_count". 
7e00: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   This function i
7e10: 73 20 73 69 6d 69 6c 61 72 0a 2a 2a 20 74 6f 20  s similar.** to 
7e20: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f 75  the built-in cou
7e30: 6e 74 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 77  nt() function, w
7e40: 69 74 68 20 61 20 66 65 77 20 73 70 65 63 69 61  ith a few specia
7e50: 6c 20 71 75 69 72 6b 73 0a 2a 2a 20 66 6f 72 20  l quirks.** for 
7e60: 74 65 73 74 69 6e 67 20 74 68 65 20 73 71 6c 69  testing the sqli
7e70: 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f 72  te3_result_error
7e80: 28 29 20 41 50 49 73 2e 0a 2a 2a 0a 2a 2a 20 54  () APIs..**.** T
7e90: 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d 6f 74 69  he original moti
7ea0: 76 61 74 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  vation for this 
7eb0: 72 6f 75 74 69 6e 65 20 77 61 73 20 74 6f 20 62  routine was to b
7ec0: 65 20 61 62 6c 65 20 74 6f 20 63 61 6c 6c 20 74  e able to call t
7ed0: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 72  he.** sqlite3_cr
7ee0: 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 20 66  eate_aggregate f
7ef0: 75 6e 63 74 69 6f 6e 20 77 68 69 6c 65 20 61 20  unction while a 
7f00: 71 75 65 72 79 20 69 73 20 69 6e 20 70 72 6f 67  query is in prog
7f10: 72 65 73 73 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  ress in order.**
7f20: 20 74 6f 20 74 65 73 74 20 74 68 65 20 53 51 4c   to test the SQL
7f30: 49 54 45 5f 4d 49 53 55 53 45 20 64 65 74 65 63  ITE_MISUSE detec
7f40: 74 69 6f 6e 20 6c 6f 67 69 63 2e 20 20 53 65 65  tion logic.  See
7f50: 20 6d 69 73 75 73 65 2e 74 65 73 74 2e 0a 2a 2a   misuse.test..**
7f60: 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65  .** This routine
7f70: 20 77 61 73 20 6c 61 74 65 72 20 65 78 74 65 6e   was later exten
7f80: 64 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20  ded to test the 
7f90: 75 73 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 72  use of sqlite3_r
7fa0: 65 73 75 6c 74 5f 65 72 72 6f 72 28 29 0a 2a 2a  esult_error().**
7fb0: 20 77 69 74 68 69 6e 20 61 67 67 72 65 67 61 74   within aggregat
7fc0: 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  e functions..**.
7fd0: 2a 2a 20 4c 61 74 65 72 3a 20 49 74 20 69 73 20  ** Later: It is 
7fe0: 6e 6f 77 20 61 6c 73 6f 20 65 78 74 65 6e 64 65  now also extende
7ff0: 64 20 74 6f 20 72 65 67 69 73 74 65 72 20 74 68  d to register th
8000: 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
8010: 74 69 6f 6e 0a 2a 2a 20 22 6c 65 67 61 63 79 5f  tion.** "legacy_
8020: 63 6f 75 6e 74 28 29 22 20 77 69 74 68 20 74 68  count()" with th
8030: 65 20 73 75 70 70 6c 69 65 64 20 64 61 74 61 62  e supplied datab
8040: 61 73 65 20 68 61 6e 64 6c 65 2e 20 54 68 69 73  ase handle. This
8050: 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 74   is used.** to t
8060: 65 73 74 20 74 68 65 20 64 65 70 72 65 63 61 74  est the deprecat
8070: 65 64 20 73 71 6c 69 74 65 33 5f 61 67 67 72 65  ed sqlite3_aggre
8080: 67 61 74 65 5f 63 6f 75 6e 74 28 29 20 41 50 49  gate_count() API
8090: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
80a0: 74 65 73 74 5f 63 72 65 61 74 65 5f 61 67 67 72  test_create_aggr
80b0: 65 67 61 74 65 28 0a 20 20 76 6f 69 64 20 2a 4e  egate(.  void *N
80c0: 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
80d0: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
80e0: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
80f0: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
8100: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
8110: 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
8120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8130: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
8140: 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
8150: 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
8160: 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
8170: 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
8180: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
8190: 20 69 6e 74 20 72 63 3b 0a 20 20 69 66 28 20 61   int rc;.  if( a
81a0: 72 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63  rgc!=2 ){.    Tc
81b0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
81c0: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
81d0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
81e0: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
81f0: 20 20 20 20 20 22 20 46 49 4c 45 4e 41 4d 45 5c       " FILENAME\
8200: 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  "", 0);.    retu
8210: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
8220: 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
8230: 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67  nter(interp, arg
8240: 76 5b 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74  v[1], &db) ) ret
8250: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
8260: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
8270: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62  eate_function(db
8280: 2c 20 22 78 5f 63 6f 75 6e 74 22 2c 20 30 2c 20  , "x_count", 0, 
8290: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c 20  SQLITE_UTF8, 0, 
82a0: 30 2c 0a 20 20 20 20 20 20 74 31 43 6f 75 6e 74  0,.      t1Count
82b0: 53 74 65 70 2c 74 31 43 6f 75 6e 74 46 69 6e 61  Step,t1CountFina
82c0: 6c 69 7a 65 29 3b 0a 20 20 69 66 28 20 72 63 3d  lize);.  if( rc=
82d0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
82e0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
82f0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64  reate_function(d
8300: 62 2c 20 22 78 5f 63 6f 75 6e 74 22 2c 20 31 2c  b, "x_count", 1,
8310: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30 2c   SQLITE_UTF8, 0,
8320: 20 30 2c 0a 20 20 20 20 20 20 20 20 74 31 43 6f   0,.        t1Co
8330: 75 6e 74 53 74 65 70 2c 74 31 43 6f 75 6e 74 46  untStep,t1CountF
8340: 69 6e 61 6c 69 7a 65 29 3b 0a 20 20 7d 0a 23 69  inalize);.  }.#i
8350: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8360: 54 5f 44 45 50 52 45 43 41 54 45 44 0a 20 20 69  T_DEPRECATED.  i
8370: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
8380: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
8390: 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63  ite3_create_func
83a0: 74 69 6f 6e 28 64 62 2c 20 22 6c 65 67 61 63 79  tion(db, "legacy
83b0: 5f 63 6f 75 6e 74 22 2c 20 30 2c 20 53 51 4c 49  _count", 0, SQLI
83c0: 54 45 5f 41 4e 59 2c 20 30 2c 20 30 2c 0a 20 20  TE_ANY, 0, 0,.  
83d0: 20 20 20 20 20 20 6c 65 67 61 63 79 43 6f 75 6e        legacyCoun
83e0: 74 53 74 65 70 2c 20 6c 65 67 61 63 79 43 6f 75  tStep, legacyCou
83f0: 6e 74 46 69 6e 61 6c 69 7a 65 0a 20 20 20 20 29  ntFinalize.    )
8400: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69  ;.  }.#endif.  i
8410: 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72  f( sqlite3TestEr
8420: 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64 62  rCode(interp, db
8430: 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
8440: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
8450: 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70  SetResult(interp
8460: 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72 6f  , (char *)t1Erro
8470: 72 4e 61 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20  rName(rc), 0);. 
8480: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
8490: 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  }.../*.** Usage:
84a0: 20 20 70 72 69 6e 74 66 20 54 45 58 54 0a 2a 2a    printf TEXT.**
84b0: 0a 2a 2a 20 53 65 6e 64 20 6f 75 74 70 75 74 20  .** Send output 
84c0: 74 6f 20 70 72 69 6e 74 66 2e 20 20 55 73 65 20  to printf.  Use 
84d0: 74 68 69 73 20 72 61 74 68 65 72 20 74 68 61 6e  this rather than
84e0: 20 70 75 74 73 20 74 6f 20 6d 65 72 67 65 20 74   puts to merge t
84f0: 68 65 20 6f 75 74 70 75 74 0a 2a 2a 20 69 6e 20  he output.** in 
8500: 74 68 65 20 63 6f 72 72 65 63 74 20 73 65 71 75  the correct sequ
8510: 65 6e 63 65 20 77 69 74 68 20 64 65 62 75 67 67  ence with debugg
8520: 69 6e 67 20 70 72 69 6e 74 66 73 20 69 6e 73 65  ing printfs inse
8530: 72 74 65 64 20 69 6e 74 6f 20 43 20 63 6f 64 65  rted into C code
8540: 2e 0a 2a 2a 20 50 75 74 73 20 75 73 65 73 20 61  ..** Puts uses a
8550: 20 73 65 70 61 72 61 74 65 20 62 75 66 66 65 72   separate buffer
8560: 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 20 73   and debugging s
8570: 74 61 74 65 6d 65 6e 74 73 20 77 69 6c 6c 20 62  tatements will b
8580: 65 20 6f 75 74 20 6f 66 0a 2a 2a 20 73 65 71 75  e out of.** sequ
8590: 65 6e 63 65 20 69 66 20 69 74 20 69 73 20 75 73  ence if it is us
85a0: 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ed..*/.static in
85b0: 74 20 74 65 73 74 5f 70 72 69 6e 74 66 28 0a 20  t test_printf(. 
85c0: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
85d0: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
85e0: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
85f0: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
8600: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
8610: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
8620: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
8630: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
8640: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
8650: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
8660: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
8670: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
8680: 74 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 72  t */.){.  if( ar
8690: 67 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=2 ){.    Tcl
86a0: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
86b0: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
86c0: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
86d0: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20  "", argv[0],.   
86e0: 20 20 20 20 22 20 54 45 58 54 5c 22 22 2c 20 30      " TEXT\"", 0
86f0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
8700: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 70  L_ERROR;.  }.  p
8710: 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 72  rintf("%s\n", ar
8720: 67 76 5b 31 5d 29 3b 0a 20 20 72 65 74 75 72 6e  gv[1]);.  return
8730: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 0a 2f 2a   TCL_OK;.}..../*
8740: 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
8750: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 20  te3_mprintf_int 
8760: 46 4f 52 4d 41 54 20 49 4e 54 45 47 45 52 20 49  FORMAT INTEGER I
8770: 4e 54 45 47 45 52 20 49 4e 54 45 47 45 52 0a 2a  NTEGER INTEGER.*
8780: 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74  *.** Call mprint
8790: 66 20 77 69 74 68 20 74 68 72 65 65 20 69 6e 74  f with three int
87a0: 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 0a 2a  eger arguments.*
87b0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c  /.static int sql
87c0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74  ite3_mprintf_int
87d0: 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65  (.  void *NotUse
87e0: 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  d,.  Tcl_Interp 
87f0: 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
8800: 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
8810: 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
8820: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
8830: 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20    int argc,     
8840: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8850: 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
8860: 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  */.  char **argv
8870: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
8880: 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67 75  ext of each argu
8890: 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ment */.){.  int
88a0: 20 61 5b 33 5d 2c 20 69 3b 0a 20 20 63 68 61 72   a[3], i;.  char
88b0: 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67 63 21   *z;.  if( argc!
88c0: 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =5 ){.    Tcl_Ap
88d0: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
88e0: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
88f0: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
8900: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
8910: 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e   " FORMAT INT IN
8920: 54 20 49 4e 54 5c 22 22 2c 20 30 29 3b 0a 20 20  T INT\"", 0);.  
8930: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
8940: 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d  OR;.  }.  for(i=
8950: 32 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a 20 20  2; i<5; i++){.  
8960: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
8970: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d  (interp, argv[i]
8980: 2c 20 26 61 5b 69 2d 32 5d 29 20 29 20 72 65 74  , &a[i-2]) ) ret
8990: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
89a0: 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33   }.  z = sqlite3
89b0: 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b 31 5d  _mprintf(argv[1]
89c0: 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 5b  , a[0], a[1], a[
89d0: 32 5d 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e  2]);.  Tcl_Appen
89e0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
89f0: 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  z, 0);.  sqlite3
8a00: 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72 65 74 75  _free(z);.  retu
8a10: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
8a20: 0a 2a 2a 20 49 66 20 7a 4e 75 6d 20 72 65 70 72  .** If zNum repr
8a30: 65 73 65 6e 74 73 20 61 6e 20 69 6e 74 65 67 65  esents an intege
8a40: 72 20 74 68 61 74 20 77 69 6c 6c 20 66 69 74 20  r that will fit 
8a50: 69 6e 20 36 34 2d 62 69 74 73 2c 20 74 68 65 6e  in 64-bits, then
8a60: 20 73 65 74 0a 2a 2a 20 2a 70 56 61 6c 75 65 20   set.** *pValue 
8a70: 74 6f 20 74 68 61 74 20 69 6e 74 65 67 65 72 20  to that integer 
8a80: 61 6e 64 20 72 65 74 75 72 6e 20 74 72 75 65 2e  and return true.
8a90: 20 20 4f 74 68 65 72 77 69 73 65 20 72 65 74 75    Otherwise retu
8aa0: 72 6e 20 66 61 6c 73 65 2e 0a 2a 2f 0a 73 74 61  rn false..*/.sta
8ab0: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 47  tic int sqlite3G
8ac0: 65 74 49 6e 74 36 34 28 63 6f 6e 73 74 20 63 68  etInt64(const ch
8ad0: 61 72 20 2a 7a 4e 75 6d 2c 20 69 36 34 20 2a 70  ar *zNum, i64 *p
8ae0: 56 61 6c 75 65 29 7b 0a 20 20 69 66 28 20 73 71  Value){.  if( sq
8af0: 6c 69 74 65 33 46 69 74 73 49 6e 36 34 42 69 74  lite3FitsIn64Bit
8b00: 73 28 7a 4e 75 6d 2c 20 30 29 20 29 7b 0a 20 20  s(zNum, 0) ){.  
8b10: 20 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28    sqlite3Atoi64(
8b20: 7a 4e 75 6d 2c 20 70 56 61 6c 75 65 29 3b 0a 20  zNum, pValue);. 
8b30: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
8b40: 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a  .  return 0;.}..
8b50: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
8b60: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e  lite3_mprintf_in
8b70: 74 36 34 20 46 4f 52 4d 41 54 20 49 4e 54 45 47  t64 FORMAT INTEG
8b80: 45 52 20 49 4e 54 45 47 45 52 20 49 4e 54 45 47  ER INTEGER INTEG
8b90: 45 52 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70  ER.**.** Call mp
8ba0: 72 69 6e 74 66 20 77 69 74 68 20 74 68 72 65 65  rintf with three
8bb0: 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20   64-bit integer 
8bc0: 61 72 67 75 6d 65 6e 74 73 0a 2a 2f 0a 73 74 61  arguments.*/.sta
8bd0: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  tic int sqlite3_
8be0: 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34 28 0a 20  mprintf_int64(. 
8bf0: 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a   void *NotUsed,.
8c00: 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
8c10: 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
8c20: 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
8c30: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
8c40: 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
8c50: 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20  nt argc,        
8c60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
8c70: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
8c80: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20    char **argv   
8c90: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
8ca0: 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e   of each argumen
8cb0: 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b  t */.){.  int i;
8cc0: 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  .  sqlite_int64 
8cd0: 61 5b 33 5d 3b 0a 20 20 63 68 61 72 20 2a 7a 3b  a[3];.  char *z;
8ce0: 0a 20 20 69 66 28 20 61 72 67 63 21 3d 35 20 29  .  if( argc!=5 )
8cf0: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
8d00: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
8d10: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
8d20: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
8d30: 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46  v[0],.       " F
8d40: 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54 20 49 4e  ORMAT INT INT IN
8d50: 54 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  T\"", 0);.    re
8d60: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
8d70: 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20 69    }.  for(i=2; i
8d80: 3c 35 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66  <5; i++){.    if
8d90: 28 20 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74  ( !sqlite3GetInt
8da0: 36 34 28 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69  64(argv[i], &a[i
8db0: 2d 32 5d 29 20 29 7b 0a 20 20 20 20 20 20 54 63  -2]) ){.      Tc
8dc0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
8dd0: 6e 74 65 72 70 2c 20 22 61 72 67 75 6d 65 6e 74  nterp, "argument
8de0: 20 69 73 20 6e 6f 74 20 61 20 76 61 6c 69 64 20   is not a valid 
8df0: 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 22 2c  64-bit integer",
8e00: 20 30 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72   0);.      retur
8e10: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20  n TCL_ERROR;.   
8e20: 20 7d 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c   }.  }.  z = sql
8e30: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67  ite3_mprintf(arg
8e40: 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d  v[1], a[0], a[1]
8e50: 2c 20 61 5b 32 5d 29 3b 0a 20 20 54 63 6c 5f 41  , a[2]);.  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 7a 2c 20 30 29 3b 0a 20 20 73 71 6c  rp, z, 0);.  sql
8e80: 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20  ite3_free(z);.  
8e90: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
8ea0: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
8eb0: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
8ec0: 73 74 72 20 46 4f 52 4d 41 54 20 49 4e 54 45 47  str FORMAT INTEG
8ed0: 45 52 20 49 4e 54 45 47 45 52 20 53 54 52 49 4e  ER INTEGER STRIN
8ee0: 47 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72  G.**.** Call mpr
8ef0: 69 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e  intf with two in
8f00: 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20  teger arguments 
8f10: 61 6e 64 20 6f 6e 65 20 73 74 72 69 6e 67 20 61  and one string a
8f20: 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69  rgument.*/.stati
8f30: 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 70  c int sqlite3_mp
8f40: 72 69 6e 74 66 5f 73 74 72 28 0a 20 20 76 6f 69  rintf_str(.  voi
8f50: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
8f60: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
8f70: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
8f80: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
8f90: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
8fa0: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
8fb0: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
8fc0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
8fd0: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
8fe0: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
8ff0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
9000: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
9010: 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20  .){.  int a[3], 
9020: 69 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20  i;.  char *z;.  
9030: 69 66 28 20 61 72 67 63 3c 34 20 7c 7c 20 61 72  if( argc<4 || ar
9040: 67 63 3e 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f  gc>5 ){.    Tcl_
9050: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
9060: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
9070: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
9080: 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20  ", argv[0],.    
9090: 20 20 20 22 20 46 4f 52 4d 41 54 20 49 4e 54 20     " FORMAT INT 
90a0: 49 4e 54 20 3f 53 54 52 49 4e 47 3f 5c 22 22 2c  INT ?STRING?\"",
90b0: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
90c0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
90d0: 20 66 6f 72 28 69 3d 32 3b 20 69 3c 34 3b 20 69   for(i=2; i<4; i
90e0: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c  ++){.    if( Tcl
90f0: 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c 20  _GetInt(interp, 
9100: 61 72 67 76 5b 69 5d 2c 20 26 61 5b 69 2d 32 5d  argv[i], &a[i-2]
9110: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
9120: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20  RROR;.  }.  z = 
9130: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
9140: 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d 2c 20 61  argv[1], a[0], a
9150: 5b 31 5d 2c 20 61 72 67 63 3e 34 20 3f 20 61 72  [1], argc>4 ? ar
9160: 67 76 5b 34 5d 20 3a 20 4e 55 4c 4c 29 3b 0a 20  gv[4] : NULL);. 
9170: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
9180: 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b  t(interp, z, 0);
9190: 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28  .  sqlite3_free(
91a0: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  z);.  return TCL
91b0: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
91c0: 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 73 6e  age:  sqlite3_sn
91d0: 70 72 69 6e 74 66 5f 73 74 72 20 49 4e 54 45 47  printf_str INTEG
91e0: 45 52 20 46 4f 52 4d 41 54 20 49 4e 54 45 47 45  ER FORMAT INTEGE
91f0: 52 20 49 4e 54 45 47 45 52 20 53 54 52 49 4e 47  R INTEGER STRING
9200: 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69  .**.** Call mpri
9210: 6e 74 66 20 77 69 74 68 20 74 77 6f 20 69 6e 74  ntf with two int
9220: 65 67 65 72 20 61 72 67 75 6d 65 6e 74 73 20 61  eger arguments a
9230: 6e 64 20 6f 6e 65 20 73 74 72 69 6e 67 20 61 72  nd one string ar
9240: 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61 74 69 63  gument.*/.static
9250: 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6e 70   int sqlite3_snp
9260: 72 69 6e 74 66 5f 73 74 72 28 0a 20 20 76 6f 69  rintf_str(.  voi
9270: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
9280: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
9290: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
92a0: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
92b0: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
92c0: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
92d0: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
92e0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
92f0: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
9300: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
9310: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
9320: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
9330: 0a 29 7b 0a 20 20 69 6e 74 20 61 5b 33 5d 2c 20  .){.  int a[3], 
9340: 69 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 63 68  i;.  int n;.  ch
9350: 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61 72 67  ar *z;.  if( arg
9360: 63 3c 35 20 7c 7c 20 61 72 67 63 3e 36 20 29 7b  c<5 || argc>6 ){
9370: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
9380: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
9390: 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
93a0: 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76  uld be \"", argv
93b0: 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 49 4e  [0],.       " IN
93c0: 54 20 46 4f 52 4d 41 54 20 49 4e 54 20 49 4e 54  T FORMAT INT INT
93d0: 20 3f 53 54 52 49 4e 47 3f 5c 22 22 2c 20 30 29   ?STRING?\"", 0)
93e0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
93f0: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
9400: 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e 74  ( Tcl_GetInt(int
9410: 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 6e  erp, argv[1], &n
9420: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
9430: 52 52 4f 52 3b 0a 20 20 69 66 28 20 6e 3c 30 20  RROR;.  if( n<0 
9440: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
9450: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
9460: 22 4e 20 6d 75 73 74 20 62 65 20 6e 6f 6e 2d 6e  "N must be non-n
9470: 65 67 61 74 69 76 65 22 2c 20 30 29 3b 0a 20 20  egative", 0);.  
9480: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
9490: 4f 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d  OR;.  }.  for(i=
94a0: 33 3b 20 69 3c 35 3b 20 69 2b 2b 29 7b 0a 20 20  3; i<5; i++){.  
94b0: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
94c0: 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 69 5d  (interp, argv[i]
94d0: 2c 20 26 61 5b 69 2d 33 5d 29 20 29 20 72 65 74  , &a[i-3]) ) ret
94e0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
94f0: 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33   }.  z = sqlite3
9500: 5f 6d 61 6c 6c 6f 63 28 20 6e 2b 31 20 29 3b 0a  _malloc( n+1 );.
9510: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
9520: 74 66 28 6e 2c 20 7a 2c 20 61 72 67 76 5b 32 5d  tf(n, z, argv[2]
9530: 2c 20 61 5b 30 5d 2c 20 61 5b 31 5d 2c 20 61 72  , a[0], a[1], ar
9540: 67 63 3e 34 20 3f 20 61 72 67 76 5b 35 5d 20 3a  gc>4 ? argv[5] :
9550: 20 4e 55 4c 4c 29 3b 0a 20 20 54 63 6c 5f 41 70   NULL);.  Tcl_Ap
9560: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
9570: 70 2c 20 7a 2c 20 30 29 3b 0a 20 20 73 71 6c 69  p, z, 0);.  sqli
9580: 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 72  te3_free(z);.  r
9590: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
95a0: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
95b0: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 64  qlite3_mprintf_d
95c0: 6f 75 62 6c 65 20 46 4f 52 4d 41 54 20 49 4e 54  ouble FORMAT INT
95d0: 45 47 45 52 20 49 4e 54 45 47 45 52 20 44 4f 55  EGER INTEGER DOU
95e0: 42 4c 45 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 20 6d  BLE.**.** Call m
95f0: 70 72 69 6e 74 66 20 77 69 74 68 20 74 77 6f 20  printf with two 
9600: 69 6e 74 65 67 65 72 20 61 72 67 75 6d 65 6e 74  integer argument
9610: 73 20 61 6e 64 20 6f 6e 65 20 64 6f 75 62 6c 65  s and one double
9620: 20 61 72 67 75 6d 65 6e 74 0a 2a 2f 0a 73 74 61   argument.*/.sta
9630: 74 69 63 20 69 6e 74 20 73 71 6c 69 74 65 33 5f  tic int sqlite3_
9640: 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 28 0a  mprintf_double(.
9650: 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c    void *NotUsed,
9660: 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
9670: 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
9680: 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
9690: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
96a0: 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
96b0: 69 6e 74 20 61 72 67 63 2c 20 20 20 20 20 20 20  int argc,       
96c0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
96d0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
96e0: 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20  .  char **argv  
96f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
9700: 74 20 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65  t of each argume
9710: 6e 74 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 61  nt */.){.  int a
9720: 5b 33 5d 2c 20 69 3b 0a 20 20 64 6f 75 62 6c 65  [3], i;.  double
9730: 20 72 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20   r;.  char *z;. 
9740: 20 69 66 28 20 61 72 67 63 21 3d 35 20 29 7b 0a   if( argc!=5 ){.
9750: 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
9760: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
9770: 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
9780: 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b  ld be \"", argv[
9790: 30 5d 2c 0a 20 20 20 20 20 20 20 22 20 46 4f 52  0],.       " FOR
97a0: 4d 41 54 20 49 4e 54 20 49 4e 54 20 44 4f 55 42  MAT INT INT DOUB
97b0: 4c 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72  LE\"", 0);.    r
97c0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
97d0: 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32 3b 20  .  }.  for(i=2; 
97e0: 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<4; i++){.    i
97f0: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e  f( Tcl_GetInt(in
9800: 74 65 72 70 2c 20 61 72 67 76 5b 69 5d 2c 20 26  terp, argv[i], &
9810: 61 5b 69 2d 32 5d 29 20 29 20 72 65 74 75 72 6e  a[i-2]) ) return
9820: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
9830: 20 20 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75    if( Tcl_GetDou
9840: 62 6c 65 28 69 6e 74 65 72 70 2c 20 61 72 67 76  ble(interp, argv
9850: 5b 34 5d 2c 20 26 72 29 20 29 20 72 65 74 75 72  [4], &r) ) retur
9860: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a  n TCL_ERROR;.  z
9870: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
9880: 74 66 28 61 72 67 76 5b 31 5d 2c 20 61 5b 30 5d  tf(argv[1], a[0]
9890: 2c 20 61 5b 31 5d 2c 20 72 29 3b 0a 20 20 54 63  , a[1], r);.  Tc
98a0: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
98b0: 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20 20  nterp, z, 0);.  
98c0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b  sqlite3_free(z);
98d0: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
98e0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
98f0: 3a 20 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e  :  sqlite3_mprin
9900: 74 66 5f 73 63 61 6c 65 64 20 46 4f 52 4d 41 54  tf_scaled FORMAT
9910: 20 44 4f 55 42 4c 45 20 44 4f 55 42 4c 45 0a 2a   DOUBLE DOUBLE.*
9920: 2a 0a 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74  *.** Call mprint
9930: 66 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  f with a single 
9940: 64 6f 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20  double argument 
9950: 77 68 69 63 68 20 69 73 20 74 68 65 20 70 72 6f  which is the pro
9960: 64 75 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74  duct of the.** t
9970: 77 6f 20 61 72 67 75 6d 65 6e 74 73 20 67 69 76  wo arguments giv
9980: 65 6e 20 61 62 6f 76 65 2e 20 20 54 68 69 73 20  en above.  This 
9990: 69 73 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  is used to gener
99a0: 61 74 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64  ate overflow and
99b0: 20 75 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f   underflow.** do
99c0: 75 62 6c 65 73 20 74 6f 20 74 65 73 74 20 74 68  ubles to test th
99d0: 61 74 20 74 68 65 79 20 61 72 65 20 63 6f 6e 76  at they are conv
99e0: 65 72 74 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a  erted properly..
99f0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71  */.static int sq
9a00: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63  lite3_mprintf_sc
9a10: 61 6c 65 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f  aled(.  void *No
9a20: 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74  tUsed,.  Tcl_Int
9a30: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
9a40: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
9a50: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
9a60: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
9a70: 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20   */.  int argc, 
9a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9a90: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
9aa0: 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  nts */.  char **
9ab0: 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20  argv            
9ac0: 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20  /* Text of each 
9ad0: 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20  argument */.){. 
9ae0: 20 69 6e 74 20 69 3b 0a 20 20 64 6f 75 62 6c 65   int i;.  double
9af0: 20 72 5b 32 5d 3b 0a 20 20 63 68 61 72 20 2a 7a   r[2];.  char *z
9b00: 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 34 20  ;.  if( argc!=4 
9b10: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
9b20: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
9b30: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
9b40: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
9b50: 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20 22 20  gv[0],.       " 
9b60: 46 4f 52 4d 41 54 20 44 4f 55 42 4c 45 20 44 4f  FORMAT DOUBLE DO
9b70: 55 42 4c 45 5c 22 22 2c 20 30 29 3b 0a 20 20 20  UBLE\"", 0);.   
9b80: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
9b90: 52 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 32  R;.  }.  for(i=2
9ba0: 3b 20 69 3c 34 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<4; i++){.   
9bb0: 20 69 66 28 20 54 63 6c 5f 47 65 74 44 6f 75 62   if( Tcl_GetDoub
9bc0: 6c 65 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  le(interp, argv[
9bd0: 69 5d 2c 20 26 72 5b 69 2d 32 5d 29 20 29 20 72  i], &r[i-2]) ) r
9be0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
9bf0: 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c 69 74  .  }.  z = sqlit
9c00: 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67 76 5b  e3_mprintf(argv[
9c10: 31 5d 2c 20 72 5b 30 5d 2a 72 5b 31 5d 29 3b 0a  1], r[0]*r[1]);.
9c20: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
9c30: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29  lt(interp, z, 0)
9c40: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
9c50: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  (z);.  return TC
9c60: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
9c70: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d  sage:  sqlite3_m
9c80: 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79 20 46  printf_stronly F
9c90: 4f 52 4d 41 54 20 53 54 52 49 4e 47 0a 2a 2a 0a  ORMAT STRING.**.
9ca0: 2a 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20  ** Call mprintf 
9cb0: 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f  with a single do
9cc0: 75 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68  uble argument wh
9cd0: 69 63 68 20 69 73 20 74 68 65 20 70 72 6f 64 75  ich is the produ
9ce0: 63 74 20 6f 66 20 74 68 65 0a 2a 2a 20 74 77 6f  ct of the.** two
9cf0: 20 61 72 67 75 6d 65 6e 74 73 20 67 69 76 65 6e   arguments given
9d00: 20 61 62 6f 76 65 2e 20 20 54 68 69 73 20 69 73   above.  This is
9d10: 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
9d20: 65 20 6f 76 65 72 66 6c 6f 77 20 61 6e 64 20 75  e overflow and u
9d30: 6e 64 65 72 66 6c 6f 77 0a 2a 2a 20 64 6f 75 62  nderflow.** doub
9d40: 6c 65 73 20 74 6f 20 74 65 73 74 20 74 68 61 74  les to test that
9d50: 20 74 68 65 79 20 61 72 65 20 63 6f 6e 76 65 72   they are conver
9d60: 74 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 2a 2f  ted properly..*/
9d70: 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69  .static int sqli
9d80: 74 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f  te3_mprintf_stro
9d90: 6e 6c 79 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74  nly(.  void *Not
9da0: 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Used,.  Tcl_Inte
9db0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
9dc0: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
9dd0: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
9de0: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
9df0: 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20  */.  int argc,  
9e00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9e10: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
9e20: 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  ts */.  char **a
9e30: 72 67 76 20 20 20 20 20 20 20 20 20 20 20 20 2f  rgv            /
9e40: 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68 20 61  * Text of each a
9e50: 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20  rgument */.){.  
9e60: 63 68 61 72 20 2a 7a 3b 0a 20 20 69 66 28 20 61  char *z;.  if( a
9e70: 72 67 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63  rgc!=3 ){.    Tc
9e80: 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
9e90: 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
9ea0: 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
9eb0: 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c 0a 20 20  \"", argv[0],.  
9ec0: 20 20 20 20 20 22 20 46 4f 52 4d 41 54 20 53 54       " FORMAT ST
9ed0: 52 49 4e 47 5c 22 22 2c 20 30 29 3b 0a 20 20 20  RING\"", 0);.   
9ee0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
9ef0: 52 3b 0a 20 20 7d 0a 20 20 7a 20 3d 20 73 71 6c  R;.  }.  z = sql
9f00: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 61 72 67  ite3_mprintf(arg
9f10: 76 5b 31 5d 2c 20 61 72 67 76 5b 32 5d 29 3b 0a  v[1], argv[2]);.
9f20: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
9f30: 6c 74 28 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29  lt(interp, z, 0)
9f40: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65  ;.  sqlite3_free
9f50: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43  (z);.  return TC
9f60: 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
9f70: 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 6d  sage:  sqlite3_m
9f80: 70 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65  printf_hexdouble
9f90: 20 46 4f 52 4d 41 54 20 48 45 58 0a 2a 2a 0a 2a   FORMAT HEX.**.*
9fa0: 2a 20 43 61 6c 6c 20 6d 70 72 69 6e 74 66 20 77  * Call mprintf w
9fb0: 69 74 68 20 61 20 73 69 6e 67 6c 65 20 64 6f 75  ith a single dou
9fc0: 62 6c 65 20 61 72 67 75 6d 65 6e 74 20 77 68 69  ble argument whi
9fd0: 63 68 20 69 73 20 64 65 72 69 76 65 64 20 66 72  ch is derived fr
9fe0: 6f 6d 20 74 68 65 0a 2a 2a 20 68 65 78 61 64 65  om the.** hexade
9ff0: 63 69 6d 61 6c 20 65 6e 63 6f 64 69 6e 67 20 6f  cimal encoding o
a000: 66 20 61 6e 20 49 45 45 45 20 64 6f 75 62 6c 65  f an IEEE double
a010: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
a020: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 5f  sqlite3_mprintf_
a030: 68 65 78 64 6f 75 62 6c 65 28 0a 20 20 76 6f 69  hexdouble(.  voi
a040: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
a050: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
a060: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
a070: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
a080: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
a090: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
a0a0: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
a0b0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
a0c0: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
a0d0: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
a0e0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
a0f0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
a100: 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 20  .){.  char *z;. 
a110: 20 64 6f 75 62 6c 65 20 72 3b 0a 20 20 75 6e 73   double r;.  uns
a120: 69 67 6e 65 64 20 69 6e 74 20 78 31 2c 20 78 32  igned int x1, x2
a130: 3b 0a 20 20 73 71 6c 69 74 65 5f 75 69 6e 74 36  ;.  sqlite_uint6
a140: 34 20 64 3b 0a 20 20 69 66 28 20 61 72 67 63 21  4 d;.  if( argc!
a150: 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
a160: 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
a170: 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
a180: 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
a190: 20 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20   argv[0],.      
a1a0: 20 22 20 46 4f 52 4d 41 54 20 53 54 52 49 4e 47   " FORMAT STRING
a1b0: 5c 22 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  \"", 0);.    ret
a1c0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
a1d0: 20 7d 0a 20 20 69 66 28 20 73 73 63 61 6e 66 28   }.  if( sscanf(
a1e0: 61 72 67 76 5b 32 5d 2c 20 22 25 30 38 78 25 30  argv[2], "%08x%0
a1f0: 38 78 22 2c 20 26 78 32 2c 20 26 78 31 29 21 3d  8x", &x2, &x1)!=
a200: 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
a210: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
a220: 2c 20 22 32 6e 64 20 61 72 67 75 6d 65 6e 74 20  , "2nd argument 
a230: 73 68 6f 75 6c 64 20 62 65 20 31 36 2d 63 68 61  should be 16-cha
a240: 72 61 63 74 65 72 73 20 6f 66 20 68 65 78 22 2c  racters of hex",
a250: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
a260: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
a270: 20 64 20 3d 20 78 32 3b 0a 20 20 64 20 3d 20 28   d = x2;.  d = (
a280: 64 3c 3c 33 32 29 20 2b 20 78 31 3b 0a 20 20 6d  d<<32) + x1;.  m
a290: 65 6d 63 70 79 28 26 72 2c 20 26 64 2c 20 73 69  emcpy(&r, &d, si
a2a0: 7a 65 6f 66 28 72 29 29 3b 0a 20 20 7a 20 3d 20  zeof(r));.  z = 
a2b0: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
a2c0: 61 72 67 76 5b 31 5d 2c 20 72 29 3b 0a 20 20 54  argv[1], r);.  T
a2d0: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
a2e0: 69 6e 74 65 72 70 2c 20 7a 2c 20 30 29 3b 0a 20  interp, z, 0);. 
a2f0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 29   sqlite3_free(z)
a300: 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
a310: 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
a320: 65 3a 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  e: sqlite3_enabl
a330: 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 20 3f  e_shared_cache ?
a340: 42 4f 4f 4c 45 41 4e 3f 0a 2a 2a 0a 2a 2f 0a 23  BOOLEAN?.**.*/.#
a350: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
a360: 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
a370: 41 43 48 45 29 0a 73 74 61 74 69 63 20 69 6e 74  ACHE).static int
a380: 20 74 65 73 74 5f 65 6e 61 62 6c 65 5f 73 68 61   test_enable_sha
a390: 72 65 64 28 0a 20 20 43 6c 69 65 6e 74 44 61 74  red(.  ClientDat
a3a0: 61 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a  a clientData, /*
a3b0: 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69   Pointer to sqli
a3c0: 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66  te3_enable_XXX f
a3d0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c  unction */.  Tcl
a3e0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
a3f0: 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69      /* The TCL i
a400: 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20  nterpreter that 
a410: 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d  invoked this com
a420: 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62  mand */.  int ob
a430: 6a 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  jc,             
a440: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
a450: 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c  guments */.  Tcl
a460: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
a470: 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61  []  /* Command a
a480: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20  rguments */.){. 
a490: 20 69 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 65   int rc;.  int e
a4a0: 6e 61 62 6c 65 3b 0a 20 20 69 6e 74 20 72 65 74  nable;.  int ret
a4b0: 20 3d 20 30 3b 0a 0a 20 20 69 66 28 20 6f 62 6a   = 0;..  if( obj
a4c0: 63 21 3d 32 20 26 26 20 6f 62 6a 63 21 3d 31 20  c!=2 && objc!=1 
a4d0: 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
a4e0: 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
a4f0: 31 2c 20 6f 62 6a 76 2c 20 22 3f 42 4f 4f 4c 45  1, objv, "?BOOLE
a500: 41 4e 3f 22 29 3b 0a 20 20 20 20 72 65 74 75 72  AN?");.    retur
a510: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
a520: 0a 20 20 72 65 74 20 3d 20 73 71 6c 69 74 65 33  .  ret = sqlite3
a530: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 68 61  GlobalConfig.sha
a540: 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b  redCacheEnabled;
a550: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d 32 20  ..  if( objc==2 
a560: 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47  ){.    if( Tcl_G
a570: 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a  etBooleanFromObj
a580: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d  (interp, objv[1]
a590: 2c 20 26 65 6e 61 62 6c 65 29 20 29 7b 0a 20 20  , &enable) ){.  
a5a0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
a5b0: 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20  RROR;.    }.    
a5c0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 6e 61  rc = sqlite3_ena
a5d0: 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65  ble_shared_cache
a5e0: 28 65 6e 61 62 6c 65 29 3b 0a 20 20 20 20 69 66  (enable);.    if
a5f0: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
a600: 29 7b 0a 20 20 20 20 20 20 54 63 6c 5f 53 65 74  ){.      Tcl_Set
a610: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
a620: 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 45 72  char *)sqlite3Er
a630: 72 53 74 72 28 72 63 29 2c 20 54 43 4c 5f 53 54  rStr(rc), TCL_ST
a640: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 72 65 74  ATIC);.      ret
a650: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
a660: 20 20 20 7d 0a 20 20 7d 0a 20 20 54 63 6c 5f 53     }.  }.  Tcl_S
a670: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
a680: 72 70 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65  rp, Tcl_NewBoole
a690: 61 6e 4f 62 6a 28 72 65 74 29 29 3b 0a 20 20 72  anObj(ret));.  r
a6a0: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
a6b0: 23 65 6e 64 69 66 0a 0a 0a 0a 2f 2a 0a 2a 2a 20  #endif..../*.** 
a6c0: 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 65  Usage: sqlite3_e
a6d0: 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63  xtended_result_c
a6e0: 6f 64 65 73 20 20 20 44 42 20 20 20 20 42 4f 4f  odes   DB    BOO
a6f0: 4c 45 41 4e 0a 2a 2a 0a 2a 2f 0a 73 74 61 74 69  LEAN.**.*/.stati
a700: 63 20 69 6e 74 20 74 65 73 74 5f 65 78 74 65 6e  c int test_exten
a710: 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73  ded_result_codes
a720: 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63  (.  ClientData c
a730: 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f  lientData, /* Po
a740: 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  inter to sqlite3
a750: 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63  _enable_XXX func
a760: 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  tion */.  Tcl_In
a770: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
a780: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
a790: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
a7a0: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
a7b0: 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  d */.  int objc,
a7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a7d0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
a7e0: 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62  ents */.  Tcl_Ob
a7f0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20  j *CONST objv[] 
a800: 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
a810: 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e  ments */.){.  in
a820: 74 20 65 6e 61 62 6c 65 3b 0a 20 20 73 71 6c 69  t enable;.  sqli
a830: 74 65 33 20 2a 64 62 3b 0a 0a 20 20 69 66 28 20  te3 *db;..  if( 
a840: 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
a850: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
a860: 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
a870: 20 22 44 42 20 42 4f 4f 4c 45 41 4e 22 29 3b 0a   "DB BOOLEAN");.
a880: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
a890: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
a8a0: 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
a8b0: 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
a8c0: 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
a8d0: 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
a8e0: 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
a8f0: 47 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62  GetBooleanFromOb
a900: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
a910: 5d 2c 20 26 65 6e 61 62 6c 65 29 20 29 20 72 65  ], &enable) ) re
a920: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
a930: 20 20 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64    sqlite3_extend
a940: 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64 65 73 28  ed_result_codes(
a950: 64 62 2c 20 65 6e 61 62 6c 65 29 3b 0a 20 20 72  db, enable);.  r
a960: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
a970: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
a980: 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e  lite3_libversion
a990: 5f 6e 75 6d 62 65 72 0a 2a 2a 0a 2a 2f 0a 73 74  _number.**.*/.st
a9a0: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6c 69  atic int test_li
a9b0: 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28  bversion_number(
a9c0: 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c  .  ClientData cl
a9d0: 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69  ientData, /* Poi
a9e0: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f  nter to sqlite3_
a9f0: 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74  enable_XXX funct
aa00: 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74  ion */.  Tcl_Int
aa10: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
aa20: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
aa30: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
aa40: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
aa50: 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20   */.  int objc, 
aa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aa70: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
aa80: 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a  nts */.  Tcl_Obj
aa90: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20   *CONST objv[]  
aaa0: 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d  /* Command argum
aab0: 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c  ents */.){.  Tcl
aac0: 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
aad0: 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
aae0: 4f 62 6a 28 73 71 6c 69 74 65 33 5f 6c 69 62 76  Obj(sqlite3_libv
aaf0: 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29 29  ersion_number())
ab00: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
ab10: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
ab20: 67 65 3a 20 73 71 6c 69 74 65 33 5f 74 61 62 6c  ge: sqlite3_tabl
ab30: 65 5f 63 6f 6c 75 6d 6e 5f 6d 65 74 61 64 61 74  e_column_metadat
ab40: 61 20 44 42 20 64 62 6e 61 6d 65 20 74 62 6c 6e  a DB dbname tbln
ab50: 61 6d 65 20 63 6f 6c 6e 61 6d 65 0a 2a 2a 0a 2a  ame colname.**.*
ab60: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
ab70: 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45  ENABLE_COLUMN_ME
ab80: 54 41 44 41 54 41 0a 73 74 61 74 69 63 20 69 6e  TADATA.static in
ab90: 74 20 74 65 73 74 5f 74 61 62 6c 65 5f 63 6f 6c  t test_table_col
aba0: 75 6d 6e 5f 6d 65 74 61 64 61 74 61 28 0a 20 20  umn_metadata(.  
abb0: 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
abc0: 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65  tData, /* Pointe
abd0: 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61  r to sqlite3_ena
abe0: 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e  ble_XXX function
abf0: 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
ac00: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
ac10: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
ac20: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
ac30: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
ac40: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20  .  int objc,    
ac50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
ac60: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
ac70: 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43   */.  Tcl_Obj *C
ac80: 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20  ONST objv[]  /* 
ac90: 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74  Command argument
aca0: 73 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  s */.){.  sqlite
acb0: 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 63  3 *db;.  const c
acc0: 68 61 72 20 2a 7a 44 62 3b 0a 20 20 63 6f 6e 73  har *zDb;.  cons
acd0: 74 20 63 68 61 72 20 2a 7a 54 62 6c 3b 0a 20 20  t char *zTbl;.  
ace0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 6f 6c  const char *zCol
acf0: 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 54 63  ;.  int rc;.  Tc
ad00: 6c 5f 4f 62 6a 20 2a 70 52 65 74 3b 0a 0a 20 20  l_Obj *pRet;..  
ad10: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 61 74  const char *zDat
ad20: 61 74 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63  atype;.  const c
ad30: 68 61 72 20 2a 7a 43 6f 6c 6c 73 65 71 3b 0a 20  har *zCollseq;. 
ad40: 20 69 6e 74 20 6e 6f 74 6e 75 6c 6c 3b 0a 20 20   int notnull;.  
ad50: 69 6e 74 20 70 72 69 6d 61 72 79 6b 65 79 3b 0a  int primarykey;.
ad60: 20 20 69 6e 74 20 61 75 74 6f 69 6e 63 72 65 6d    int autoincrem
ad70: 65 6e 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  ent;..  if( objc
ad80: 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=5 ){.    Tcl_W
ad90: 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
ada0: 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44 42  rp, 1, objv, "DB
adb0: 20 64 62 6e 61 6d 65 20 74 62 6c 6e 61 6d 65 20   dbname tblname 
adc0: 63 6f 6c 6e 61 6d 65 22 29 3b 0a 20 20 20 20 72  colname");.    r
add0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
ade0: 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
adf0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
ae00: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
ae10: 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
ae20: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
ae30: 0a 20 20 7a 44 62 20 3d 20 54 63 6c 5f 47 65 74  .  zDb = Tcl_Get
ae40: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b  String(objv[2]);
ae50: 0a 20 20 7a 54 62 6c 20 3d 20 54 63 6c 5f 47 65  .  zTbl = Tcl_Ge
ae60: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 33 5d 29  tString(objv[3])
ae70: 3b 0a 20 20 7a 43 6f 6c 20 3d 20 54 63 6c 5f 47  ;.  zCol = Tcl_G
ae80: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 34 5d  etString(objv[4]
ae90: 29 3b 0a 0a 20 20 69 66 28 20 73 74 72 6c 65 6e  );..  if( strlen
aea0: 28 7a 44 62 29 3d 3d 30 20 29 20 7a 44 62 20 3d  (zDb)==0 ) zDb =
aeb0: 20 30 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69   0;..  rc = sqli
aec0: 74 65 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e  te3_table_column
aed0: 5f 6d 65 74 61 64 61 74 61 28 64 62 2c 20 7a 44  _metadata(db, zD
aee0: 62 2c 20 7a 54 62 6c 2c 20 7a 43 6f 6c 2c 20 0a  b, zTbl, zCol, .
aef0: 20 20 20 20 20 20 26 7a 44 61 74 61 74 79 70 65        &zDatatype
af00: 2c 20 26 7a 43 6f 6c 6c 73 65 71 2c 20 26 6e 6f  , &zCollseq, &no
af10: 74 6e 75 6c 6c 2c 20 26 70 72 69 6d 61 72 79 6b  tnull, &primaryk
af20: 65 79 2c 20 26 61 75 74 6f 69 6e 63 72 65 6d 65  ey, &autoincreme
af30: 6e 74 29 3b 0a 0a 20 20 69 66 28 20 72 63 21 3d  nt);..  if( rc!=
af40: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
af50: 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
af60: 74 28 69 6e 74 65 72 70 2c 20 73 71 6c 69 74 65  t(interp, sqlite
af70: 33 5f 65 72 72 6d 73 67 28 64 62 29 2c 20 30 29  3_errmsg(db), 0)
af80: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
af90: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 70  _ERROR;.  }..  p
afa0: 52 65 74 20 3d 20 54 63 6c 5f 4e 65 77 4f 62 6a  Ret = Tcl_NewObj
afb0: 28 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62  ();.  Tcl_ListOb
afc0: 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 30  jAppendElement(0
afd0: 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 53  , pRet, Tcl_NewS
afe0: 74 72 69 6e 67 4f 62 6a 28 7a 44 61 74 61 74 79  tringObj(zDataty
aff0: 70 65 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f  pe, -1));.  Tcl_
b000: 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
b010: 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20 54 63  ment(0, pRet, Tc
b020: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a  l_NewStringObj(z
b030: 43 6f 6c 6c 73 65 71 2c 20 2d 31 29 29 3b 0a 20  Collseq, -1));. 
b040: 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
b050: 6e 64 45 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65  ndElement(0, pRe
b060: 74 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a  t, Tcl_NewIntObj
b070: 28 6e 6f 74 6e 75 6c 6c 29 29 3b 0a 20 20 54 63  (notnull));.  Tc
b080: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
b090: 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20  lement(0, pRet, 
b0a0: 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 70 72  Tcl_NewIntObj(pr
b0b0: 69 6d 61 72 79 6b 65 79 29 29 3b 0a 20 20 54 63  imarykey));.  Tc
b0c0: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
b0d0: 6c 65 6d 65 6e 74 28 30 2c 20 70 52 65 74 2c 20  lement(0, pRet, 
b0e0: 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 75  Tcl_NewIntObj(au
b0f0: 74 6f 69 6e 63 72 65 6d 65 6e 74 29 29 3b 0a 20  toincrement));. 
b100: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
b110: 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74 29 3b  t(interp, pRet);
b120: 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ..  return TCL_O
b130: 4b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  K;.}.#endif..#if
b140: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b150: 5f 49 4e 43 52 42 4c 4f 42 0a 0a 2f 2a 0a 2a 2a  _INCRBLOB../*.**
b160: 20 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 72 65   sqlite3_blob_re
b170: 61 64 20 20 43 48 41 4e 4e 45 4c 20 4f 46 46 53  ad  CHANNEL OFFS
b180: 45 54 20 4e 0a 2a 2a 0a 2a 2a 20 20 20 54 68 69  ET N.**.**   Thi
b190: 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65  s command is use
b1a0: 64 20 74 6f 20 74 65 73 74 20 74 68 65 20 73 71  d to test the sq
b1b0: 6c 69 74 65 33 5f 62 6c 6f 62 5f 72 65 61 64 28  lite3_blob_read(
b1c0: 29 20 69 6e 20 77 61 79 73 20 74 68 61 74 0a 2a  ) in ways that.*
b1d0: 2a 20 20 20 74 68 65 20 54 63 6c 20 63 68 61 6e  *   the Tcl chan
b1e0: 6e 65 6c 20 69 6e 74 65 72 66 61 63 65 20 64 6f  nel interface do
b1f0: 65 73 20 6e 6f 74 2e 20 54 68 65 20 66 69 72 73  es not. The firs
b200: 74 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c  t argument shoul
b210: 64 0a 2a 2a 20 20 20 62 65 20 74 68 65 20 6e 61  d.**   be the na
b220: 6d 65 20 6f 66 20 61 20 76 61 6c 69 64 20 63 68  me of a valid ch
b230: 61 6e 6e 65 6c 20 63 72 65 61 74 65 64 20 62 79  annel created by
b240: 20 74 68 65 20 5b 69 6e 63 72 62 6c 6f 62 5d 20   the [incrblob] 
b250: 6d 65 74 68 6f 64 0a 2a 2a 20 20 20 6f 66 20 61  method.**   of a
b260: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
b270: 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  . This function 
b280: 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 5f 62 6c  calls sqlite3_bl
b290: 6f 62 5f 72 65 61 64 28 29 0a 2a 2a 20 20 20 74  ob_read().**   t
b2a0: 6f 20 72 65 61 64 20 4e 20 62 79 74 65 73 20 66  o read N bytes f
b2b0: 72 6f 6d 20 6f 66 66 73 65 74 20 4f 46 46 53 45  rom offset OFFSE
b2c0: 54 20 66 72 6f 6d 20 74 68 65 20 75 6e 64 65 72  T from the under
b2d0: 6c 79 69 6e 67 20 53 51 4c 69 74 65 0a 2a 2a 20  lying SQLite.** 
b2e0: 20 20 62 6c 6f 62 20 68 61 6e 64 6c 65 2e 0a 2a    blob handle..*
b2f0: 2a 0a 2a 2a 20 20 20 4f 6e 20 73 75 63 63 65 73  *.**   On succes
b300: 73 2c 20 61 20 62 79 74 65 2d 61 72 72 61 79 20  s, a byte-array 
b310: 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 69 6e  object containin
b320: 67 20 74 68 65 20 72 65 61 64 20 64 61 74 61 20  g the read data 
b330: 69 73 20 0a 2a 2a 20 20 20 72 65 74 75 72 6e 65  is .**   returne
b340: 64 2e 20 4f 6e 20 66 61 69 6c 75 72 65 2c 20 74  d. On failure, t
b350: 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 72  he interpreter r
b360: 65 73 75 6c 74 20 69 73 20 73 65 74 20 74 6f 20  esult is set to 
b370: 74 68 65 0a 2a 2a 20 20 20 74 65 78 74 20 72 65  the.**   text re
b380: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
b390: 74 68 65 20 72 65 74 75 72 6e 65 64 20 65 72 72  the returned err
b3a0: 6f 72 20 63 6f 64 65 20 28 69 2e 65 2e 20 22 53  or code (i.e. "S
b3b0: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 22 29 0a 2a 2a  QLITE_NOMEM").**
b3c0: 20 20 20 61 6e 64 20 61 20 54 63 6c 20 65 78 63     and a Tcl exc
b3d0: 65 70 74 69 6f 6e 20 69 73 20 74 68 72 6f 77 6e  eption is thrown
b3e0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
b3f0: 74 65 73 74 5f 62 6c 6f 62 5f 72 65 61 64 28 0a  test_blob_read(.
b400: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69    ClientData cli
b410: 65 6e 74 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20  entData, /* Not 
b420: 75 73 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  used */.  Tcl_In
b430: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
b440: 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
b450: 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
b460: 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
b470: 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  d */.  int objc,
b480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b490: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
b4a0: 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62  ents */.  Tcl_Ob
b4b0: 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20  j *CONST objv[] 
b4c0: 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
b4d0: 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63  ments */.){.  Tc
b4e0: 6c 5f 43 68 61 6e 6e 65 6c 20 63 68 61 6e 6e 65  l_Channel channe
b4f0: 6c 3b 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20  l;.  ClientData 
b500: 69 6e 73 74 61 6e 63 65 44 61 74 61 3b 0a 20 20  instanceData;.  
b510: 73 71 6c 69 74 65 33 5f 62 6c 6f 62 20 2a 70 42  sqlite3_blob *pB
b520: 6c 6f 62 3b 0a 20 20 69 6e 74 20 6e 6f 74 55 73  lob;.  int notUs
b530: 65 64 3b 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b  ed;.  int nByte;
b540: 0a 20 20 69 6e 74 20 69 4f 66 66 73 65 74 3b 0a  .  int iOffset;.
b550: 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20    unsigned char 
b560: 2a 7a 42 75 66 3b 0a 20 20 69 6e 74 20 72 63 3b  *zBuf;.  int rc;
b570: 0a 20 20 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  .  .  if( objc!=
b580: 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  4 ){.    Tcl_Wro
b590: 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
b5a0: 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 43 48 41 4e  , 1, objv, "CHAN
b5b0: 4e 45 4c 20 4f 46 46 53 45 54 20 4e 22 29 3b 0a  NEL OFFSET N");.
b5c0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
b5d0: 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 63 68 61  RROR;.  }..  cha
b5e0: 6e 6e 65 6c 20 3d 20 54 63 6c 5f 47 65 74 43 68  nnel = Tcl_GetCh
b5f0: 61 6e 6e 65 6c 28 69 6e 74 65 72 70 2c 20 54 63  annel(interp, Tc
b600: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
b610: 5b 31 5d 29 2c 20 26 6e 6f 74 55 73 65 64 29 3b  [1]), &notUsed);
b620: 0a 20 20 69 66 28 20 21 63 68 61 6e 6e 65 6c 0a  .  if( !channel.
b630: 20 20 20 7c 7c 20 54 43 4c 5f 4f 4b 21 3d 54 63     || TCL_OK!=Tc
b640: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
b650: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
b660: 20 26 69 4f 66 66 73 65 74 29 0a 20 20 20 7c 7c   &iOffset).   ||
b670: 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74   TCL_OK!=Tcl_Get
b680: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
b690: 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 6e 42 79  p, objv[3], &nBy
b6a0: 74 65 29 0a 20 20 20 7c 7c 20 6e 42 79 74 65 3c  te).   || nByte<
b6b0: 30 20 7c 7c 20 69 4f 66 66 73 65 74 3c 30 0a 20  0 || iOffset<0. 
b6c0: 20 29 7b 20 0a 20 20 20 20 72 65 74 75 72 6e 20   ){ .    return 
b6d0: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
b6e0: 20 20 69 6e 73 74 61 6e 63 65 44 61 74 61 20 3d    instanceData =
b6f0: 20 54 63 6c 5f 47 65 74 43 68 61 6e 6e 65 6c 49   Tcl_GetChannelI
b700: 6e 73 74 61 6e 63 65 44 61 74 61 28 63 68 61 6e  nstanceData(chan
b710: 6e 65 6c 29 3b 0a 20 20 70 42 6c 6f 62 20 3d 20  nel);.  pBlob = 
b720: 2a 28 28 73 71 6c 69 74 65 33 5f 62 6c 6f 62 20  *((sqlite3_blob 
b730: 2a 2a 29 69 6e 73 74 61 6e 63 65 44 61 74 61 29  **)instanceData)
b740: 3b 0a 0a 20 20 7a 42 75 66 20 3d 20 28 75 6e 73  ;..  zBuf = (uns
b750: 69 67 6e 65 64 20 63 68 61 72 20 2a 29 54 63 6c  igned char *)Tcl
b760: 5f 41 6c 6c 6f 63 28 6e 42 79 74 65 29 3b 0a 20  _Alloc(nByte);. 
b770: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 6c   rc = sqlite3_bl
b780: 6f 62 5f 72 65 61 64 28 70 42 6c 6f 62 2c 20 7a  ob_read(pBlob, z
b790: 42 75 66 2c 20 6e 42 79 74 65 2c 20 69 4f 66 66  Buf, nByte, iOff
b7a0: 73 65 74 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  set);.  if( rc==
b7b0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
b7c0: 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
b7d0: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
b7e0: 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28 7a 42  wByteArrayObj(zB
b7f0: 75 66 2c 20 6e 42 79 74 65 29 29 3b 0a 20 20 7d  uf, nByte));.  }
b800: 65 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 53 65  else{.    Tcl_Se
b810: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  tResult(interp, 
b820: 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 54  (char *)sqlite3T
b830: 65 73 74 45 72 72 6f 72 4e 61 6d 65 28 72 63 29  estErrorName(rc)
b840: 2c 20 54 43 4c 5f 56 4f 4c 41 54 49 4c 45 29 3b  , TCL_VOLATILE);
b850: 0a 20 20 7d 0a 20 20 54 63 6c 5f 46 72 65 65 28  .  }.  Tcl_Free(
b860: 28 63 68 61 72 20 2a 29 7a 42 75 66 29 3b 0a 0a  (char *)zBuf);..
b870: 20 20 72 65 74 75 72 6e 20 28 72 63 3d 3d 53 51    return (rc==SQ
b880: 4c 49 54 45 5f 4f 4b 20 3f 20 54 43 4c 5f 4f 4b  LITE_OK ? TCL_OK
b890: 20 3a 20 54 43 4c 5f 45 52 52 4f 52 29 3b 0a 7d   : TCL_ERROR);.}
b8a0: 0a 0a 2f 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  ../*.** sqlite3_
b8b0: 62 6c 6f 62 5f 77 72 69 74 65 20 43 48 41 4e 4e  blob_write CHANN
b8c0: 45 4c 20 4f 46 46 53 45 54 20 44 41 54 41 20 3f  EL OFFSET DATA ?
b8d0: 4e 44 41 54 41 3f 0a 2a 2a 0a 2a 2a 20 20 20 54  NDATA?.**.**   T
b8e0: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75  his command is u
b8f0: 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20  sed to test the 
b900: 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 77 72 69  sqlite3_blob_wri
b910: 74 65 28 29 20 69 6e 20 77 61 79 73 20 74 68 61  te() in ways tha
b920: 74 0a 2a 2a 20 20 20 74 68 65 20 54 63 6c 20 63  t.**   the Tcl c
b930: 68 61 6e 6e 65 6c 20 69 6e 74 65 72 66 61 63 65  hannel interface
b940: 20 64 6f 65 73 20 6e 6f 74 2e 20 54 68 65 20 66   does not. The f
b950: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 73 68  irst argument sh
b960: 6f 75 6c 64 0a 2a 2a 20 20 20 62 65 20 74 68 65  ould.**   be the
b970: 20 6e 61 6d 65 20 6f 66 20 61 20 76 61 6c 69 64   name of a valid
b980: 20 63 68 61 6e 6e 65 6c 20 63 72 65 61 74 65 64   channel created
b990: 20 62 79 20 74 68 65 20 5b 69 6e 63 72 62 6c 6f   by the [incrblo
b9a0: 62 5d 20 6d 65 74 68 6f 64 0a 2a 2a 20 20 20 6f  b] method.**   o
b9b0: 66 20 61 20 64 61 74 61 62 61 73 65 20 68 61 6e  f a database han
b9c0: 64 6c 65 2e 20 54 68 69 73 20 66 75 6e 63 74 69  dle. This functi
b9d0: 6f 6e 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33  on calls sqlite3
b9e0: 5f 62 6c 6f 62 5f 77 72 69 74 65 28 29 0a 2a 2a  _blob_write().**
b9f0: 20 20 20 74 6f 20 77 72 69 74 65 20 74 68 65 20     to write the 
ba00: 44 41 54 41 20 62 79 74 65 2d 61 72 72 61 79 20  DATA byte-array 
ba10: 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  to the underlyin
ba20: 67 20 53 51 4c 69 74 65 20 62 6c 6f 62 20 68 61  g SQLite blob ha
ba30: 6e 64 6c 65 2e 0a 2a 2a 20 20 20 61 74 20 6f 66  ndle..**   at of
ba40: 66 73 65 74 20 4f 46 46 53 45 54 2e 0a 2a 2a 0a  fset OFFSET..**.
ba50: 2a 2a 20 20 20 4f 6e 20 73 75 63 63 65 73 73 2c  **   On success,
ba60: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   an empty string
ba70: 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 4f 6e   is returned. On
ba80: 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 69 6e   failure, the in
ba90: 74 65 72 70 72 65 74 65 72 0a 2a 2a 20 20 20 72  terpreter.**   r
baa0: 65 73 75 6c 74 20 69 73 20 73 65 74 20 74 6f 20  esult is set to 
bab0: 74 68 65 20 74 65 78 74 20 72 65 70 72 65 73 65  the text represe
bac0: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 72  ntation of the r
bad0: 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 63 6f  eturned error co
bae0: 64 65 20 0a 2a 2a 20 20 20 28 69 2e 65 2e 20 22  de .**   (i.e. "
baf0: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 22 29 20 61  SQLITE_NOMEM") a
bb00: 6e 64 20 61 20 54 63 6c 20 65 78 63 65 70 74 69  nd a Tcl excepti
bb10: 6f 6e 20 69 73 20 74 68 72 6f 77 6e 2e 0a 2a 2f  on is thrown..*/
bb20: 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
bb30: 5f 62 6c 6f 62 5f 77 72 69 74 65 28 0a 20 20 43  _blob_write(.  C
bb40: 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
bb50: 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75 73 65  Data, /* Not use
bb60: 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  d */.  Tcl_Inter
bb70: 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
bb80: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
bb90: 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
bba0: 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
bbb0: 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
bbc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
bbd0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
bbe0: 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
bbf0: 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
bc00: 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
bc10: 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f 43  ts */.){.  Tcl_C
bc20: 68 61 6e 6e 65 6c 20 63 68 61 6e 6e 65 6c 3b 0a  hannel channel;.
bc30: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 69 6e 73    ClientData ins
bc40: 74 61 6e 63 65 44 61 74 61 3b 0a 20 20 73 71 6c  tanceData;.  sql
bc50: 69 74 65 33 5f 62 6c 6f 62 20 2a 70 42 6c 6f 62  ite3_blob *pBlob
bc60: 3b 0a 20 20 69 6e 74 20 6e 6f 74 55 73 65 64 3b  ;.  int notUsed;
bc70: 0a 20 20 69 6e 74 20 69 4f 66 66 73 65 74 3b 0a  .  int iOffset;.
bc80: 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 75 6e 73    int rc;..  uns
bc90: 69 67 6e 65 64 20 63 68 61 72 20 2a 7a 42 75 66  igned char *zBuf
bca0: 3b 0a 20 20 69 6e 74 20 6e 42 75 66 3b 0a 20 20  ;.  int nBuf;.  
bcb0: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 26  .  if( objc!=4 &
bcc0: 26 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20  & objc!=5 ){.   
bcd0: 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67   Tcl_WrongNumArg
bce0: 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
bcf0: 76 2c 20 22 43 48 41 4e 4e 45 4c 20 4f 46 46 53  v, "CHANNEL OFFS
bd00: 45 54 20 44 41 54 41 20 3f 4e 44 41 54 41 3f 22  ET DATA ?NDATA?"
bd10: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
bd20: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
bd30: 63 68 61 6e 6e 65 6c 20 3d 20 54 63 6c 5f 47 65  channel = Tcl_Ge
bd40: 74 43 68 61 6e 6e 65 6c 28 69 6e 74 65 72 70 2c  tChannel(interp,
bd50: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
bd60: 62 6a 76 5b 31 5d 29 2c 20 26 6e 6f 74 55 73 65  bjv[1]), &notUse
bd70: 64 29 3b 0a 20 20 69 66 28 20 21 63 68 61 6e 6e  d);.  if( !chann
bd80: 65 6c 20 7c 7c 20 54 43 4c 5f 4f 4b 21 3d 54 63  el || TCL_OK!=Tc
bd90: 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
bda0: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
bdb0: 20 26 69 4f 66 66 73 65 74 29 20 29 7b 20 0a 20   &iOffset) ){ . 
bdc0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
bdd0: 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 6e 73 74  ROR;.  }..  inst
bde0: 61 6e 63 65 44 61 74 61 20 3d 20 54 63 6c 5f 47  anceData = Tcl_G
bdf0: 65 74 43 68 61 6e 6e 65 6c 49 6e 73 74 61 6e 63  etChannelInstanc
be00: 65 44 61 74 61 28 63 68 61 6e 6e 65 6c 29 3b 0a  eData(channel);.
be10: 20 20 70 42 6c 6f 62 20 3d 20 2a 28 28 73 71 6c    pBlob = *((sql
be20: 69 74 65 33 5f 62 6c 6f 62 20 2a 2a 29 69 6e 73  ite3_blob **)ins
be30: 74 61 6e 63 65 44 61 74 61 29 3b 0a 0a 20 20 7a  tanceData);..  z
be40: 42 75 66 20 3d 20 54 63 6c 5f 47 65 74 42 79 74  Buf = Tcl_GetByt
be50: 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62  eArrayFromObj(ob
be60: 6a 76 5b 33 5d 2c 20 26 6e 42 75 66 29 3b 0a 20  jv[3], &nBuf);. 
be70: 20 69 66 28 20 6f 62 6a 63 3d 3d 35 20 26 26 20   if( objc==5 && 
be80: 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
be90: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34  j(interp, objv[4
bea0: 5d 2c 20 26 6e 42 75 66 29 20 29 7b 0a 20 20 20  ], &nBuf) ){.   
beb0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
bec0: 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  R;.  }.  rc = sq
bed0: 6c 69 74 65 33 5f 62 6c 6f 62 5f 77 72 69 74 65  lite3_blob_write
bee0: 28 70 42 6c 6f 62 2c 20 7a 42 75 66 2c 20 6e 42  (pBlob, zBuf, nB
bef0: 75 66 2c 20 69 4f 66 66 73 65 74 29 3b 0a 20 20  uf, iOffset);.  
bf00: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
bf10: 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74  K ){.    Tcl_Set
bf20: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28  Result(interp, (
bf30: 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 54 65  char *)sqlite3Te
bf40: 73 74 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  stErrorName(rc),
bf50: 20 54 43 4c 5f 56 4f 4c 41 54 49 4c 45 29 3b 0a   TCL_VOLATILE);.
bf60: 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 28 72    }..  return (r
bf70: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 3f 20 54  c==SQLITE_OK ? T
bf80: 43 4c 5f 4f 4b 20 3a 20 54 43 4c 5f 45 52 52 4f  CL_OK : TCL_ERRO
bf90: 52 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  R);.}.#endif../*
bfa0: 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74  .** Usage: sqlit
bfb0: 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
bfc0: 69 6f 6e 5f 76 32 20 44 42 2d 48 41 4e 44 4c 45  ion_v2 DB-HANDLE
bfd0: 20 4e 41 4d 45 20 43 4d 50 2d 50 52 4f 43 20 44   NAME CMP-PROC D
bfe0: 45 4c 2d 50 52 4f 43 0a 2a 2a 0a 2a 2a 20 20 20  EL-PROC.**.**   
bff0: 54 68 69 73 20 54 63 6c 20 70 72 6f 63 20 69 73  This Tcl proc is
c000: 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
c010: 67 20 74 68 65 20 65 78 70 65 72 69 6d 65 6e 74  g the experiment
c020: 61 6c 0a 2a 2a 20 20 20 73 71 6c 69 74 65 33 5f  al.**   sqlite3_
c030: 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
c040: 5f 76 32 28 29 20 69 6e 74 65 72 66 61 63 65 2e  _v2() interface.
c050: 0a 2a 2f 0a 73 74 72 75 63 74 20 54 65 73 74 43  .*/.struct TestC
c060: 6f 6c 6c 61 74 69 6f 6e 58 20 7b 0a 20 20 54 63  ollationX {.  Tc
c070: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
c080: 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 43 6d  ;.  Tcl_Obj *pCm
c090: 70 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 44  p;.  Tcl_Obj *pD
c0a0: 65 6c 3b 0a 7d 3b 0a 74 79 70 65 64 65 66 20 73  el;.};.typedef s
c0b0: 74 72 75 63 74 20 54 65 73 74 43 6f 6c 6c 61 74  truct TestCollat
c0c0: 69 6f 6e 58 20 54 65 73 74 43 6f 6c 6c 61 74 69  ionX TestCollati
c0d0: 6f 6e 58 3b 0a 73 74 61 74 69 63 20 76 6f 69 64  onX;.static void
c0e0: 20 74 65 73 74 43 72 65 61 74 65 43 6f 6c 6c 61   testCreateColla
c0f0: 74 69 6f 6e 44 65 6c 28 76 6f 69 64 20 2a 70 43  tionDel(void *pC
c100: 74 78 29 7b 0a 20 20 54 65 73 74 43 6f 6c 6c 61  tx){.  TestColla
c110: 74 69 6f 6e 58 20 2a 70 20 3d 20 28 54 65 73 74  tionX *p = (Test
c120: 43 6f 6c 6c 61 74 69 6f 6e 58 20 2a 29 70 43 74  CollationX *)pCt
c130: 78 3b 0a 0a 20 20 69 6e 74 20 72 63 20 3d 20 54  x;..  int rc = T
c140: 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 70 2d 3e  cl_EvalObjEx(p->
c150: 69 6e 74 65 72 70 2c 20 70 2d 3e 70 44 65 6c 2c  interp, p->pDel,
c160: 20 54 43 4c 5f 45 56 41 4c 5f 44 49 52 45 43 54   TCL_EVAL_DIRECT
c170: 7c 54 43 4c 5f 45 56 41 4c 5f 47 4c 4f 42 41 4c  |TCL_EVAL_GLOBAL
c180: 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 54 43 4c  );.  if( rc!=TCL
c190: 5f 4f 4b 20 29 7b 0a 20 20 20 20 54 63 6c 5f 42  _OK ){.    Tcl_B
c1a0: 61 63 6b 67 72 6f 75 6e 64 45 72 72 6f 72 28 70  ackgroundError(p
c1b0: 2d 3e 69 6e 74 65 72 70 29 3b 0a 20 20 7d 0a 0a  ->interp);.  }..
c1c0: 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75    Tcl_DecrRefCou
c1d0: 6e 74 28 70 2d 3e 70 43 6d 70 29 3b 0a 20 20 54  nt(p->pCmp);.  T
c1e0: 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28  cl_DecrRefCount(
c1f0: 70 2d 3e 70 44 65 6c 29 3b 0a 20 20 73 71 6c 69  p->pDel);.  sqli
c200: 74 65 33 5f 66 72 65 65 28 28 76 6f 69 64 20 2a  te3_free((void *
c210: 29 70 29 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e  )p);.}.static in
c220: 74 20 74 65 73 74 43 72 65 61 74 65 43 6f 6c 6c  t testCreateColl
c230: 61 74 69 6f 6e 43 6d 70 28 0a 20 20 76 6f 69 64  ationCmp(.  void
c240: 20 2a 70 43 74 78 2c 0a 20 20 69 6e 74 20 6e 4c   *pCtx,.  int nL
c250: 65 66 74 2c 0a 20 20 63 6f 6e 73 74 20 76 6f 69  eft,.  const voi
c260: 64 20 2a 7a 4c 65 66 74 2c 0a 20 20 69 6e 74 20  d *zLeft,.  int 
c270: 6e 52 69 67 68 74 2c 0a 20 20 63 6f 6e 73 74 20  nRight,.  const 
c280: 76 6f 69 64 20 2a 7a 52 69 67 68 74 0a 29 7b 0a  void *zRight.){.
c290: 20 20 54 65 73 74 43 6f 6c 6c 61 74 69 6f 6e 58    TestCollationX
c2a0: 20 2a 70 20 3d 20 28 54 65 73 74 43 6f 6c 6c 61   *p = (TestColla
c2b0: 74 69 6f 6e 58 20 2a 29 70 43 74 78 3b 0a 20 20  tionX *)pCtx;.  
c2c0: 54 63 6c 5f 4f 62 6a 20 2a 70 53 63 72 69 70 74  Tcl_Obj *pScript
c2d0: 20 3d 20 54 63 6c 5f 44 75 70 6c 69 63 61 74 65   = Tcl_Duplicate
c2e0: 4f 62 6a 28 70 2d 3e 70 43 6d 70 29 3b 0a 20 20  Obj(p->pCmp);.  
c2f0: 69 6e 74 20 69 52 65 73 20 3d 20 30 3b 0a 0a 20  int iRes = 0;.. 
c300: 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e   Tcl_IncrRefCoun
c310: 74 28 70 53 63 72 69 70 74 29 3b 0a 20 20 54 63  t(pScript);.  Tc
c320: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
c330: 6c 65 6d 65 6e 74 28 30 2c 20 70 53 63 72 69 70  lement(0, pScrip
c340: 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  t, Tcl_NewString
c350: 4f 62 6a 28 28 63 68 61 72 20 2a 29 7a 4c 65 66  Obj((char *)zLef
c360: 74 2c 20 6e 4c 65 66 74 29 29 3b 0a 20 20 54 63  t, nLeft));.  Tc
c370: 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
c380: 6c 65 6d 65 6e 74 28 30 2c 20 70 53 63 72 69 70  lement(0, pScrip
c390: 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  t, Tcl_NewString
c3a0: 4f 62 6a 28 28 63 68 61 72 20 2a 29 7a 52 69 67  Obj((char *)zRig
c3b0: 68 74 2c 6e 52 69 67 68 74 29 29 3b 0a 0a 20 20  ht,nRight));..  
c3c0: 69 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f  if( TCL_OK!=Tcl_
c3d0: 45 76 61 6c 4f 62 6a 45 78 28 70 2d 3e 69 6e 74  EvalObjEx(p->int
c3e0: 65 72 70 2c 20 70 53 63 72 69 70 74 2c 20 54 43  erp, pScript, TC
c3f0: 4c 5f 45 56 41 4c 5f 44 49 52 45 43 54 7c 54 43  L_EVAL_DIRECT|TC
c400: 4c 5f 45 56 41 4c 5f 47 4c 4f 42 41 4c 29 0a 20  L_EVAL_GLOBAL). 
c410: 20 20 7c 7c 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c    || TCL_OK!=Tcl
c420: 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 70  _GetIntFromObj(p
c430: 2d 3e 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  ->interp, Tcl_Ge
c440: 74 4f 62 6a 52 65 73 75 6c 74 28 70 2d 3e 69 6e  tObjResult(p->in
c450: 74 65 72 70 29 2c 20 26 69 52 65 73 29 0a 20 20  terp), &iRes).  
c460: 29 7b 0a 20 20 20 20 54 63 6c 5f 42 61 63 6b 67  ){.    Tcl_Backg
c470: 72 6f 75 6e 64 45 72 72 6f 72 28 70 2d 3e 69 6e  roundError(p->in
c480: 74 65 72 70 29 3b 0a 20 20 7d 0a 20 20 54 63 6c  terp);.  }.  Tcl
c490: 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70 53  _DecrRefCount(pS
c4a0: 63 72 69 70 74 29 3b 0a 0a 20 20 72 65 74 75 72  cript);..  retur
c4b0: 6e 20 69 52 65 73 3b 0a 7d 0a 73 74 61 74 69 63  n iRes;.}.static
c4c0: 20 69 6e 74 20 74 65 73 74 5f 63 72 65 61 74 65   int test_create
c4d0: 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 76 32 28 0a 20  _collation_v2(. 
c4e0: 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
c4f0: 6e 74 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75  ntData, /* Not u
c500: 73 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74  sed */.  Tcl_Int
c510: 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
c520: 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
c530: 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
c540: 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
c550: 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20   */.  int objc, 
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c570: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
c580: 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a  nts */.  Tcl_Obj
c590: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20   *CONST objv[]  
c5a0: 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d  /* Command argum
c5b0: 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 65 73  ents */.){.  Tes
c5c0: 74 43 6f 6c 6c 61 74 69 6f 6e 58 20 2a 70 3b 0a  tCollationX *p;.
c5d0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
c5e0: 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
c5f0: 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54  objc!=5 ){.    T
c600: 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28  cl_WrongNumArgs(
c610: 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c  interp, 1, objv,
c620: 20 22 44 42 2d 48 41 4e 44 4c 45 20 4e 41 4d 45   "DB-HANDLE NAME
c630: 20 43 4d 50 2d 50 52 4f 43 20 44 45 4c 2d 50 52   CMP-PROC DEL-PR
c640: 4f 43 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  OC");.    return
c650: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
c660: 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
c670: 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
c680: 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
c690: 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ), &db) ) return
c6a0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 70   TCL_ERROR;..  p
c6b0: 20 3d 20 28 54 65 73 74 43 6f 6c 6c 61 74 69 6f   = (TestCollatio
c6c0: 6e 58 20 2a 29 73 71 6c 69 74 65 33 5f 6d 61 6c  nX *)sqlite3_mal
c6d0: 6c 6f 63 28 73 69 7a 65 6f 66 28 54 65 73 74 43  loc(sizeof(TestC
c6e0: 6f 6c 6c 61 74 69 6f 6e 58 29 29 3b 0a 20 20 70  ollationX));.  p
c6f0: 2d 3e 70 43 6d 70 20 3d 20 6f 62 6a 76 5b 33 5d  ->pCmp = objv[3]
c700: 3b 0a 20 20 70 2d 3e 70 44 65 6c 20 3d 20 6f 62  ;.  p->pDel = ob
c710: 6a 76 5b 34 5d 3b 0a 20 20 70 2d 3e 69 6e 74 65  jv[4];.  p->inte
c720: 72 70 20 3d 20 69 6e 74 65 72 70 3b 0a 20 20 54  rp = interp;.  T
c730: 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28  cl_IncrRefCount(
c740: 70 2d 3e 70 43 6d 70 29 3b 0a 20 20 54 63 6c 5f  p->pCmp);.  Tcl_
c750: 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70 2d 3e  IncrRefCount(p->
c760: 70 44 65 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 73  pDel);..  rc = s
c770: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f  qlite3_create_co
c780: 6c 6c 61 74 69 6f 6e 5f 76 32 28 64 62 2c 20 54  llation_v2(db, T
c790: 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
c7a0: 76 5b 32 5d 29 2c 20 31 36 2c 20 0a 20 20 20 20  v[2]), 16, .    
c7b0: 20 20 28 76 6f 69 64 20 2a 29 70 2c 20 74 65 73    (void *)p, tes
c7c0: 74 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e  tCreateCollation
c7d0: 43 6d 70 2c 20 74 65 73 74 43 72 65 61 74 65 43  Cmp, testCreateC
c7e0: 6f 6c 6c 61 74 69 6f 6e 44 65 6c 0a 20 20 29 3b  ollationDel.  );
c7f0: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
c800: 45 5f 4d 49 53 55 53 45 20 29 7b 0a 20 20 20 20  E_MISUSE ){.    
c810: 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
c820: 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65  (interp, "sqlite
c830: 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 65  3_create_collate
c840: 5f 76 32 28 29 20 66 61 69 6c 65 64 20 74 6f 20  _v2() failed to 
c850: 64 65 74 65 63 74 20 22 0a 20 20 20 20 20 20 22  detect ".      "
c860: 61 6e 20 69 6e 76 61 6c 69 64 20 65 6e 63 6f 64  an invalid encod
c870: 69 6e 67 22 2c 20 28 63 68 61 72 2a 29 30 29 3b  ing", (char*)0);
c880: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
c890: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20  ERROR;.  }.  rc 
c8a0: 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  = sqlite3_create
c8b0: 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 76 32 28 64 62  _collation_v2(db
c8c0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
c8d0: 6f 62 6a 76 5b 32 5d 29 2c 20 53 51 4c 49 54 45  objv[2]), SQLITE
c8e0: 5f 55 54 46 38 2c 20 0a 20 20 20 20 20 20 28 76  _UTF8, .      (v
c8f0: 6f 69 64 20 2a 29 70 2c 20 74 65 73 74 43 72 65  oid *)p, testCre
c900: 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 43 6d 70 2c  ateCollationCmp,
c910: 20 74 65 73 74 43 72 65 61 74 65 43 6f 6c 6c 61   testCreateColla
c920: 74 69 6f 6e 44 65 6c 0a 20 20 29 3b 0a 20 20 72  tionDel.  );.  r
c930: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
c940: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
c950: 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e  lite3_load_exten
c960: 73 69 6f 6e 20 44 42 2d 48 41 4e 44 4c 45 20 46  sion DB-HANDLE F
c970: 49 4c 45 20 3f 50 52 4f 43 3f 0a 2a 2f 0a 73 74  ILE ?PROC?.*/.st
c980: 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 6c 6f  atic int test_lo
c990: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0a 20 20  ad_extension(.  
c9a0: 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
c9b0: 74 44 61 74 61 2c 20 2f 2a 20 4e 6f 74 20 75 73  tData, /* Not us
c9c0: 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65  ed */.  Tcl_Inte
c9d0: 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f  rp *interp,    /
c9e0: 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70  * The TCL interp
c9f0: 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b  reter that invok
ca00: 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  ed this command 
ca10: 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20  */.  int objc,  
ca20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
ca30: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
ca40: 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20  ts */.  Tcl_Obj 
ca50: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f  *CONST objv[]  /
ca60: 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65  * Command argume
ca70: 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 54 63 6c 5f  nts */.){.  Tcl_
ca80: 43 6d 64 49 6e 66 6f 20 63 6d 64 49 6e 66 6f 3b  CmdInfo cmdInfo;
ca90: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a  .  sqlite3 *db;.
caa0: 20 20 69 6e 74 20 72 63 3b 0a 20 20 63 68 61 72    int rc;.  char
cab0: 20 2a 7a 44 62 3b 0a 20 20 63 68 61 72 20 2a 7a   *zDb;.  char *z
cac0: 46 69 6c 65 3b 0a 20 20 63 68 61 72 20 2a 7a 50  File;.  char *zP
cad0: 72 6f 63 20 3d 20 30 3b 0a 20 20 63 68 61 72 20  roc = 0;.  char 
cae0: 2a 7a 45 72 72 20 3d 20 30 3b 0a 0a 20 20 69 66  *zErr = 0;..  if
caf0: 28 20 6f 62 6a 63 21 3d 34 20 26 26 20 6f 62 6a  ( objc!=4 && obj
cb00: 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
cb10: 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74  WrongNumArgs(int
cb20: 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 44  erp, 1, objv, "D
cb30: 42 2d 48 41 4e 44 4c 45 20 46 49 4c 45 20 3f 50  B-HANDLE FILE ?P
cb40: 52 4f 43 3f 22 29 3b 0a 20 20 20 20 72 65 74 75  ROC?");.    retu
cb50: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
cb60: 7d 0a 20 20 7a 44 62 20 3d 20 54 63 6c 5f 47 65  }.  zDb = Tcl_Ge
cb70: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
cb80: 3b 0a 20 20 7a 46 69 6c 65 20 3d 20 54 63 6c 5f  ;.  zFile = Tcl_
cb90: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32  GetString(objv[2
cba0: 5d 29 3b 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d  ]);.  if( objc==
cbb0: 34 20 29 7b 0a 20 20 20 20 7a 50 72 6f 63 20 3d  4 ){.    zProc =
cbc0: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
cbd0: 62 6a 76 5b 33 5d 29 3b 0a 20 20 7d 0a 0a 20 20  bjv[3]);.  }..  
cbe0: 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 43  /* Extract the C
cbf0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
cc00: 20 66 72 6f 6d 20 74 68 65 20 54 63 6c 20 63 6f   from the Tcl co
cc10: 6d 6d 61 6e 64 20 6e 61 6d 65 20 2a 2f 0a 20 20  mmand name */.  
cc20: 69 66 28 20 21 54 63 6c 5f 47 65 74 43 6f 6d 6d  if( !Tcl_GetComm
cc30: 61 6e 64 49 6e 66 6f 28 69 6e 74 65 72 70 2c 20  andInfo(interp, 
cc40: 7a 44 62 2c 20 26 63 6d 64 49 6e 66 6f 29 20 29  zDb, &cmdInfo) )
cc50: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
cc60: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
cc70: 63 6f 6d 6d 61 6e 64 20 6e 6f 74 20 66 6f 75 6e  command not foun
cc80: 64 3a 20 22 2c 20 7a 44 62 2c 20 28 63 68 61 72  d: ", zDb, (char
cc90: 2a 29 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  *)0);.    return
cca0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
ccb0: 20 20 64 62 20 3d 20 28 28 73 74 72 75 63 74 20    db = ((struct 
ccc0: 53 71 6c 69 74 65 44 62 2a 29 63 6d 64 49 6e 66  SqliteDb*)cmdInf
ccd0: 6f 2e 6f 62 6a 43 6c 69 65 6e 74 44 61 74 61 29  o.objClientData)
cce0: 2d 3e 64 62 3b 0a 20 20 61 73 73 65 72 74 28 64  ->db;.  assert(d
ccf0: 62 29 3b 0a 0a 20 20 2f 2a 20 43 61 6c 6c 20 74  b);..  /* Call t
cd00: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 43 20  he underlying C 
cd10: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 20 61 6e 20  function. If an 
cd20: 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 73 65  error occurs, se
cd30: 74 20 72 63 20 74 6f 20 0a 20 20 2a 2a 20 54 43  t rc to .  ** TC
cd40: 4c 5f 45 52 52 4f 52 20 61 6e 64 20 6c 6f 61 64  L_ERROR and load
cd50: 20 61 6e 79 20 65 72 72 6f 72 20 73 74 72 69 6e   any error strin
cd60: 67 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72  g into the inter
cd70: 70 72 65 74 65 72 2e 20 49 66 20 6e 6f 20 0a 20  preter. If no . 
cd80: 20 2a 2a 20 65 72 72 6f 72 20 6f 63 63 75 72 73   ** error occurs
cd90: 2c 20 73 65 74 20 72 63 20 74 6f 20 54 43 4c 5f  , set rc to TCL_
cda0: 4f 4b 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20  OK..  */.#ifdef 
cdb0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44  SQLITE_OMIT_LOAD
cdc0: 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 72 63 20  _EXTENSION.  rc 
cdd0: 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
cde0: 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74 65 33    zErr = sqlite3
cdf0: 5f 6d 70 72 69 6e 74 66 28 22 74 68 69 73 20 62  _mprintf("this b
ce00: 75 69 6c 64 20 6f 6d 69 74 73 20 73 71 6c 69 74  uild omits sqlit
ce10: 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  e3_load_extensio
ce20: 6e 28 29 22 29 3b 0a 23 65 6c 73 65 0a 20 20 72  n()");.#else.  r
ce30: 63 20 3d 20 73 71 6c 69 74 65 33 5f 6c 6f 61 64  c = sqlite3_load
ce40: 5f 65 78 74 65 6e 73 69 6f 6e 28 64 62 2c 20 7a  _extension(db, z
ce50: 46 69 6c 65 2c 20 7a 50 72 6f 63 2c 20 26 7a 45  File, zProc, &zE
ce60: 72 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  rr);.#endif.  if
ce70: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
ce80: 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65  ){.    Tcl_SetRe
ce90: 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 45 72  sult(interp, zEr
cea0: 72 20 3f 20 7a 45 72 72 20 3a 20 22 22 2c 20 54  r ? zErr : "", T
ceb0: 43 4c 5f 56 4f 4c 41 54 49 4c 45 29 3b 0a 20 20  CL_VOLATILE);.  
cec0: 20 20 72 63 20 3d 20 54 43 4c 5f 45 52 52 4f 52    rc = TCL_ERROR
ced0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
cee0: 63 20 3d 20 54 43 4c 5f 4f 4b 3b 0a 20 20 7d 0a  c = TCL_OK;.  }.
cef0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
cf00: 45 72 72 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20  Err);..  return 
cf10: 72 63 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  rc;.}../*.** Usa
cf20: 67 65 3a 20 73 71 6c 69 74 65 33 5f 65 6e 61 62  ge: sqlite3_enab
cf30: 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  le_load_extensio
cf40: 6e 20 44 42 2d 48 41 4e 44 4c 45 20 4f 4e 4f 46  n DB-HANDLE ONOF
cf50: 46 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  F.*/.static int 
cf60: 74 65 73 74 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64  test_enable_load
cf70: 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63  (.  ClientData c
cf80: 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 4e 6f  lientData, /* No
cf90: 74 20 75 73 65 64 20 2a 2f 0a 20 20 54 63 6c 5f  t used */.  Tcl_
cfa0: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
cfb0: 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
cfc0: 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
cfd0: 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
cfe0: 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a  and */.  int obj
cff0: 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
d000: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
d010: 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f  uments */.  Tcl_
d020: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
d030: 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72  ]  /* Command ar
d040: 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20  guments */.){.  
d050: 54 63 6c 5f 43 6d 64 49 6e 66 6f 20 63 6d 64 49  Tcl_CmdInfo cmdI
d060: 6e 66 6f 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  nfo;.  sqlite3 *
d070: 64 62 3b 0a 20 20 63 68 61 72 20 2a 7a 44 62 3b  db;.  char *zDb;
d080: 0a 20 20 69 6e 74 20 6f 6e 6f 66 66 3b 0a 0a 20  .  int onoff;.. 
d090: 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
d0a0: 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
d0b0: 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
d0c0: 6f 62 6a 76 2c 20 22 44 42 2d 48 41 4e 44 4c 45  objv, "DB-HANDLE
d0d0: 20 4f 4e 4f 46 46 22 29 3b 0a 20 20 20 20 72 65   ONOFF");.    re
d0e0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
d0f0: 20 20 7d 0a 20 20 7a 44 62 20 3d 20 54 63 6c 5f    }.  zDb = Tcl_
d100: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
d110: 5d 29 3b 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63  ]);..  /* Extrac
d120: 74 20 74 68 65 20 43 20 64 61 74 61 62 61 73 65  t the C database
d130: 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74 68 65   handle from the
d140: 20 54 63 6c 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d   Tcl command nam
d150: 65 20 2a 2f 0a 20 20 69 66 28 20 21 54 63 6c 5f  e */.  if( !Tcl_
d160: 47 65 74 43 6f 6d 6d 61 6e 64 49 6e 66 6f 28 69  GetCommandInfo(i
d170: 6e 74 65 72 70 2c 20 7a 44 62 2c 20 26 63 6d 64  nterp, zDb, &cmd
d180: 49 6e 66 6f 29 20 29 7b 0a 20 20 20 20 54 63 6c  Info) ){.    Tcl
d190: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
d1a0: 74 65 72 70 2c 20 22 63 6f 6d 6d 61 6e 64 20 6e  terp, "command n
d1b0: 6f 74 20 66 6f 75 6e 64 3a 20 22 2c 20 7a 44 62  ot found: ", zDb
d1c0: 2c 20 28 63 68 61 72 2a 29 30 29 3b 0a 20 20 20  , (char*)0);.   
d1d0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
d1e0: 52 3b 0a 20 20 7d 0a 20 20 64 62 20 3d 20 28 28  R;.  }.  db = ((
d1f0: 73 74 72 75 63 74 20 53 71 6c 69 74 65 44 62 2a  struct SqliteDb*
d200: 29 63 6d 64 49 6e 66 6f 2e 6f 62 6a 43 6c 69 65  )cmdInfo.objClie
d210: 6e 74 44 61 74 61 29 2d 3e 64 62 3b 0a 20 20 61  ntData)->db;.  a
d220: 73 73 65 72 74 28 64 62 29 3b 0a 0a 20 20 2f 2a  ssert(db);..  /*
d230: 20 47 65 74 20 74 68 65 20 6f 6e 6f 66 66 20 70   Get the onoff p
d240: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 69 66  arameter */.  if
d250: 28 20 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e  ( Tcl_GetBoolean
d260: 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
d270: 6f 62 6a 76 5b 32 5d 2c 20 26 6f 6e 6f 66 66 29  objv[2], &onoff)
d280: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
d290: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 23  CL_ERROR;.  }..#
d2a0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
d2b0: 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
d2c0: 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
d2d0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 74 68 69  ult(interp, "thi
d2e0: 73 20 62 75 69 6c 64 20 6f 6d 69 74 73 20 73 71  s build omits sq
d2f0: 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e  lite3_load_exten
d300: 73 69 6f 6e 28 29 22 29 3b 0a 20 20 72 65 74 75  sion()");.  retu
d310: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 23 65  rn TCL_ERROR;.#e
d320: 6c 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 65 6e  lse.  sqlite3_en
d330: 61 62 6c 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  able_load_extens
d340: 69 6f 6e 28 64 62 2c 20 6f 6e 6f 66 66 29 3b 0a  ion(db, onoff);.
d350: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
d360: 0a 23 65 6e 64 69 66 0a 7d 0a 0a 2f 2a 0a 2a 2a  .#endif.}../*.**
d370: 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65 5f   Usage:  sqlite_
d380: 61 62 6f 72 74 0a 2a 2a 0a 2a 2a 20 53 68 75 74  abort.**.** Shut
d390: 64 6f 77 6e 20 74 68 65 20 70 72 6f 63 65 73 73  down the process
d3a0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 54   immediately.  T
d3b0: 68 69 73 20 69 73 20 6e 6f 74 20 61 20 63 6c 65  his is not a cle
d3c0: 61 6e 20 73 68 75 74 64 6f 77 6e 2e 0a 2a 2a 20  an shutdown..** 
d3d0: 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20  This command is 
d3e0: 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65  used to test the
d3f0: 20 72 65 63 6f 76 65 72 61 62 69 6c 69 74 79 20   recoverability 
d400: 6f 66 20 61 20 64 61 74 61 62 61 73 65 20 69 6e  of a database in
d410: 0a 2a 2a 20 74 68 65 20 65 76 65 6e 74 20 6f 66  .** the event of
d420: 20 61 20 70 72 6f 67 72 61 6d 20 63 72 61 73 68   a program crash
d430: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
d440: 73 71 6c 69 74 65 5f 61 62 6f 72 74 28 0a 20 20  sqlite_abort(.  
d450: 76 6f 69 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20  void *NotUsed,. 
d460: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
d470: 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
d480: 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
d490: 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
d4a0: 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
d4b0: 74 20 61 72 67 63 2c 20 20 20 20 20 20 20 20 20  t argc,         
d4c0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
d4d0: 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
d4e0: 20 63 68 61 72 20 2a 2a 61 72 67 76 20 20 20 20   char **argv    
d4f0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
d500: 6f 66 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  of each argument
d510: 20 2a 2f 0a 29 7b 0a 20 20 61 73 73 65 72 74 28   */.){.  assert(
d520: 20 69 6e 74 65 72 70 3d 3d 30 20 29 3b 20 20 20   interp==0 );   
d530: 2f 2a 20 54 68 69 73 20 77 69 6c 6c 20 61 6c 77  /* This will alw
d540: 61 79 73 20 66 61 69 6c 20 2a 2f 0a 20 20 72 65  ays fail */.  re
d550: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
d560: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
d570: 69 6e 67 20 72 6f 75 74 69 6e 65 20 69 73 20 61  ing routine is a
d580: 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 53 51   user-defined SQ
d590: 4c 20 66 75 6e 63 74 69 6f 6e 20 77 68 6f 73 65  L function whose
d5a0: 20 70 75 72 70 6f 73 65 0a 2a 2a 20 69 73 20 74   purpose.** is t
d5b0: 6f 20 74 65 73 74 20 74 68 65 20 73 71 6c 69 74  o test the sqlit
d5c0: 65 5f 73 65 74 5f 72 65 73 75 6c 74 28 29 20 41  e_set_result() A
d5d0: 50 49 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  PI..*/.static vo
d5e0: 69 64 20 74 65 73 74 46 75 6e 63 28 73 71 6c 69  id testFunc(sqli
d5f0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e  te3_context *con
d600: 74 65 78 74 2c 20 69 6e 74 20 61 72 67 63 2c 20  text, int argc, 
d610: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
d620: 61 72 67 76 29 7b 0a 20 20 77 68 69 6c 65 28 20  argv){.  while( 
d630: 61 72 67 63 3e 3d 32 20 29 7b 0a 20 20 20 20 63  argc>=2 ){.    c
d640: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 72 67 30  onst char *zArg0
d650: 20 3d 20 28 63 68 61 72 2a 29 73 71 6c 69 74 65   = (char*)sqlite
d660: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
d670: 76 5b 30 5d 29 3b 0a 20 20 20 20 69 66 28 20 7a  v[0]);.    if( z
d680: 41 72 67 30 20 29 7b 0a 20 20 20 20 20 20 69 66  Arg0 ){.      if
d690: 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49  ( 0==sqlite3StrI
d6a0: 43 6d 70 28 7a 41 72 67 30 2c 20 22 69 6e 74 22  Cmp(zArg0, "int"
d6b0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ) ){.        sql
d6c0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28  ite3_result_int(
d6d0: 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69 74 65 33  context, sqlite3
d6e0: 5f 76 61 6c 75 65 5f 69 6e 74 28 61 72 67 76 5b  _value_int(argv[
d6f0: 31 5d 29 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  1]));.      }els
d700: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
d710: 49 43 6d 70 28 7a 41 72 67 30 2c 22 69 6e 74 36  ICmp(zArg0,"int6
d720: 34 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  4")==0 ){.      
d730: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
d740: 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74 2c 20  _int64(context, 
d750: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e  sqlite3_value_in
d760: 74 36 34 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20  t64(argv[1]));. 
d770: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
d780: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 41  qlite3StrICmp(zA
d790: 72 67 30 2c 22 73 74 72 69 6e 67 22 29 3d 3d 30  rg0,"string")==0
d7a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
d7b0: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
d7c0: 63 6f 6e 74 65 78 74 2c 20 28 63 68 61 72 2a 29  context, (char*)
d7d0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
d7e0: 78 74 28 61 72 67 76 5b 31 5d 29 2c 20 2d 31 2c  xt(argv[1]), -1,
d7f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
d800: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
d810: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
d820: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
d830: 41 72 67 30 2c 22 64 6f 75 62 6c 65 22 29 3d 3d  Arg0,"double")==
d840: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
d850: 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62  ite3_result_doub
d860: 6c 65 28 63 6f 6e 74 65 78 74 2c 20 73 71 6c 69  le(context, sqli
d870: 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65  te3_value_double
d880: 28 61 72 67 76 5b 31 5d 29 29 3b 0a 20 20 20 20  (argv[1]));.    
d890: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
d8a0: 74 65 33 53 74 72 49 43 6d 70 28 7a 41 72 67 30  te3StrICmp(zArg0
d8b0: 2c 22 6e 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20  ,"null")==0 ){. 
d8c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
d8d0: 65 73 75 6c 74 5f 6e 75 6c 6c 28 63 6f 6e 74 65  esult_null(conte
d8e0: 78 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  xt);.      }else
d8f0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
d900: 43 6d 70 28 7a 41 72 67 30 2c 22 76 61 6c 75 65  Cmp(zArg0,"value
d910: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
d920: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
d930: 76 61 6c 75 65 28 63 6f 6e 74 65 78 74 2c 20 61  value(context, a
d940: 72 67 76 5b 73 71 6c 69 74 65 33 5f 76 61 6c 75  rgv[sqlite3_valu
d950: 65 5f 69 6e 74 28 61 72 67 76 5b 31 5d 29 5d 29  e_int(argv[1])])
d960: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
d970: 20 20 20 20 20 20 20 67 6f 74 6f 20 65 72 72 6f         goto erro
d980: 72 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  r_out;.      }. 
d990: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
d9a0: 67 6f 74 6f 20 65 72 72 6f 72 5f 6f 75 74 3b 0a  goto error_out;.
d9b0: 20 20 20 20 7d 0a 20 20 20 20 61 72 67 63 20 2d      }.    argc -
d9c0: 3d 20 32 3b 0a 20 20 20 20 61 72 67 76 20 2b 3d  = 2;.    argv +=
d9d0: 20 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e   2;.  }.  return
d9e0: 3b 0a 0a 65 72 72 6f 72 5f 6f 75 74 3a 0a 20 20  ;..error_out:.  
d9f0: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
da00: 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 22 66 69  rror(context,"fi
da10: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 73 68 6f  rst argument sho
da20: 75 6c 64 20 62 65 20 6f 6e 65 20 6f 66 3a 20 22  uld be one of: "
da30: 0a 20 20 20 20 20 20 22 69 6e 74 20 69 6e 74 36  .      "int int6
da40: 34 20 73 74 72 69 6e 67 20 64 6f 75 62 6c 65 20  4 string double 
da50: 6e 75 6c 6c 20 76 61 6c 75 65 22 2c 20 2d 31 29  null value", -1)
da60: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
da70: 3a 20 20 20 73 71 6c 69 74 65 5f 72 65 67 69 73  :   sqlite_regis
da80: 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f  ter_test_functio
da90: 6e 20 20 44 42 20 20 4e 41 4d 45 0a 2a 2a 0a 2a  n  DB  NAME.**.*
daa0: 2a 20 52 65 67 69 73 74 65 72 20 74 68 65 20 74  * Register the t
dab0: 65 73 74 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  est SQL function
dac0: 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
dad0: 20 44 42 20 75 6e 64 65 72 20 74 68 65 20 6e 61   DB under the na
dae0: 6d 65 20 4e 41 4d 45 2e 0a 2a 2f 0a 73 74 61 74  me NAME..*/.stat
daf0: 69 63 20 69 6e 74 20 74 65 73 74 5f 72 65 67 69  ic int test_regi
db00: 73 74 65 72 5f 66 75 6e 63 28 0a 20 20 76 6f 69  ster_func(.  voi
db10: 64 20 2a 4e 6f 74 55 73 65 64 2c 0a 20 20 54 63  d *NotUsed,.  Tc
db20: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
db30: 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20  ,    /* The TCL 
db40: 69 6e 74 65 72 70 72 65 74 65 72 20 74 68 61 74  interpreter that
db50: 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f   invoked this co
db60: 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 61  mmand */.  int a
db70: 72 67 63 2c 20 20 20 20 20 20 20 20 20 20 20 20  rgc,            
db80: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
db90: 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 63 68  rguments */.  ch
dba0: 61 72 20 2a 2a 61 72 67 76 20 20 20 20 20 20 20  ar **argv       
dbb0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
dbc0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 2a 2f  each argument */
dbd0: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
dbe0: 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  b;.  int rc;.  i
dbf0: 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  f( argc!=3 ){.  
dc00: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
dc10: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
dc20: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
dc30: 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
dc40: 2c 20 0a 20 20 20 20 20 20 20 22 20 44 42 20 46  , .       " DB F
dc50: 55 4e 43 54 49 4f 4e 2d 4e 41 4d 45 22 2c 20 30  UNCTION-NAME", 0
dc60: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
dc70: 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
dc80: 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
dc90: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
dca0: 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
dcb0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
dcc0: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
dcd0: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 61 72 67  function(db, arg
dce0: 76 5b 32 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45  v[2], -1, SQLITE
dcf0: 5f 55 54 46 38 2c 20 30 2c 20 0a 20 20 20 20 20  _UTF8, 0, .     
dd00: 20 74 65 73 74 46 75 6e 63 2c 20 30 2c 20 30 29   testFunc, 0, 0)
dd10: 3b 0a 20 20 69 66 28 20 72 63 21 3d 30 20 29 7b  ;.  if( rc!=0 ){
dd20: 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
dd30: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71  esult(interp, sq
dd40: 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 2c  lite3ErrStr(rc),
dd50: 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
dd60: 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
dd70: 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74   if( sqlite3Test
dd80: 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20  ErrCode(interp, 
dd90: 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  db, rc) ) return
dda0: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 65   TCL_ERROR;.  re
ddb0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
ddc0: 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71  /*.** Usage:  sq
ddd0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 20  lite3_finalize  
dde0: 53 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 46 69 6e 61  STMT .**.** Fina
ddf0: 6c 69 7a 65 20 61 20 73 74 61 74 65 6d 65 6e 74  lize a statement
de00: 20 68 61 6e 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74   handle..*/.stat
de10: 69 63 20 69 6e 74 20 74 65 73 74 5f 66 69 6e 61  ic int test_fina
de20: 6c 69 7a 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  lize(.  void * c
de30: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
de40: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
de50: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
de60: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
de70: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
de80: 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
de90: 20 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74   int rc;.  sqlit
dea0: 65 33 20 2a 64 62 20 3d 20 30 3b 0a 0a 20 20 69  e3 *db = 0;..  i
deb0: 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20  f( objc!=2 ){.  
dec0: 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
ded0: 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
dee0: 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
def0: 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 20   be \"",.       
df00: 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
df10: 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
df20: 29 2c 20 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29  ), " <STMT>", 0)
df30: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
df40: 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69  _ERROR;.  }..  i
df50: 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65  f( getStmtPointe
df60: 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
df70: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
df80: 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75  , &pStmt) ) retu
df90: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
dfa0: 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20   if( pStmt ){.  
dfb0: 20 20 64 62 20 3d 20 53 74 6d 74 54 6f 44 62 28    db = StmtToDb(
dfc0: 70 53 74 6d 74 29 3b 0a 20 20 7d 0a 20 20 72 63  pStmt);.  }.  rc
dfd0: 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c   = sqlite3_final
dfe0: 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 54 63  ize(pStmt);.  Tc
dff0: 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65  l_SetResult(inte
e000: 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72  rp, (char *)t1Er
e010: 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c  rorName(rc), TCL
e020: 5f 53 54 41 54 49 43 29 3b 0a 20 20 69 66 28 20  _STATIC);.  if( 
e030: 64 62 20 26 26 20 73 71 6c 69 74 65 33 54 65 73  db && sqlite3Tes
e040: 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
e050: 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75 72   db, rc) ) retur
e060: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
e070: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
e080: 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
e090: 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74 61 74  qlite3_stmt_stat
e0a0: 75 73 20 20 53 54 4d 54 20 20 43 4f 44 45 20 20  us  STMT  CODE  
e0b0: 52 45 53 45 54 46 4c 41 47 0a 2a 2a 0a 2a 2a 20  RESETFLAG.**.** 
e0c0: 47 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  Get the value of
e0d0: 20 61 20 73 74 61 74 75 73 20 63 6f 75 6e 74 65   a status counte
e0e0: 72 20 66 72 6f 6d 20 61 20 73 74 61 74 65 6d 65  r from a stateme
e0f0: 6e 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  nt..*/.static in
e100: 74 20 74 65 73 74 5f 73 74 6d 74 5f 73 74 61 74  t test_stmt_stat
e110: 75 73 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  us(.  void * cli
e120: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
e130: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
e140: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
e150: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
e160: 5b 5d 0a 29 7b 0a 20 20 69 6e 74 20 69 56 61 6c  [].){.  int iVal
e170: 75 65 3b 0a 20 20 69 6e 74 20 69 2c 20 6f 70 2c  ue;.  int i, op,
e180: 20 72 65 73 65 74 46 6c 61 67 3b 0a 20 20 63 6f   resetFlag;.  co
e190: 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 4e 61 6d  nst char *zOpNam
e1a0: 65 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  e;.  sqlite3_stm
e1b0: 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 73 74 61  t *pStmt;..  sta
e1c0: 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74  tic const struct
e1d0: 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61   {.    const cha
e1e0: 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 69 6e  r *zName;.    in
e1f0: 74 20 6f 70 3b 0a 20 20 7d 20 61 4f 70 5b 5d 20  t op;.  } aOp[] 
e200: 3d 20 7b 0a 20 20 20 20 7b 20 22 53 51 4c 49 54  = {.    { "SQLIT
e210: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 46 55 4c  E_STMTSTATUS_FUL
e220: 4c 53 43 41 4e 5f 53 54 45 50 22 2c 20 20 20 53  LSCAN_STEP",   S
e230: 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
e240: 5f 46 55 4c 4c 53 43 41 4e 5f 53 54 45 50 20 20  _FULLSCAN_STEP  
e250: 20 7d 2c 0a 20 20 20 20 7b 20 22 53 51 4c 49 54   },.    { "SQLIT
e260: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52  E_STMTSTATUS_SOR
e270: 54 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 53  T",            S
e280: 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
e290: 5f 53 4f 52 54 20 20 20 20 20 20 20 20 20 20 20  _SORT           
e2a0: 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69 66 28 20 6f   },.  };.  if( o
e2b0: 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63  bjc!=4 ){.    Tc
e2c0: 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69  l_WrongNumArgs(i
e2d0: 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20  nterp, 1, objv, 
e2e0: 22 53 54 4d 54 20 50 41 52 41 4d 45 54 45 52 20  "STMT PARAMETER 
e2f0: 52 45 53 45 54 46 4c 41 47 22 29 3b 0a 20 20 20  RESETFLAG");.   
e300: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
e310: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
e320: 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
e330: 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
e340: 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
e350: 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
e360: 5f 45 52 52 4f 52 3b 0a 20 20 7a 4f 70 4e 61 6d  _ERROR;.  zOpNam
e370: 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  e = Tcl_GetStrin
e380: 67 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20 66 6f  g(objv[2]);.  fo
e390: 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69  r(i=0; i<ArraySi
e3a0: 7a 65 28 61 4f 70 29 3b 20 69 2b 2b 29 7b 0a 20  ze(aOp); i++){. 
e3b0: 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 4f     if( strcmp(aO
e3c0: 70 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 7a 4f 70 4e  p[i].zName, zOpN
e3d0: 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ame)==0 ){.     
e3e0: 20 6f 70 20 3d 20 61 4f 70 5b 69 5d 2e 6f 70 3b   op = aOp[i].op;
e3f0: 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
e400: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 69 3e    }.  }.  if( i>
e410: 3d 41 72 72 61 79 53 69 7a 65 28 61 4f 70 29 20  =ArraySize(aOp) 
e420: 29 7b 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47  ){.    if( Tcl_G
e430: 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  etIntFromObj(int
e440: 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 6f  erp, objv[2], &o
e450: 70 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  p) ) return TCL_
e460: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
e470: 20 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46   Tcl_GetBooleanF
e480: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
e490: 62 6a 76 5b 33 5d 2c 20 26 72 65 73 65 74 46 6c  bjv[3], &resetFl
e4a0: 61 67 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ag) ) return TCL
e4b0: 5f 45 52 52 4f 52 3b 0a 20 20 69 56 61 6c 75 65  _ERROR;.  iValue
e4c0: 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f   = sqlite3_stmt_
e4d0: 73 74 61 74 75 73 28 70 53 74 6d 74 2c 20 6f 70  status(pStmt, op
e4e0: 2c 20 72 65 73 65 74 46 6c 61 67 29 3b 0a 20 20  , resetFlag);.  
e4f0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
e500: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
e510: 49 6e 74 4f 62 6a 28 69 56 61 6c 75 65 29 29 3b  IntObj(iValue));
e520: 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
e530: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  ;.}../*.** Usage
e540: 3a 20 20 73 71 6c 69 74 65 33 5f 6e 65 78 74 5f  :  sqlite3_next_
e550: 73 74 6d 74 20 20 44 42 20 20 53 54 4d 54 0a 2a  stmt  DB  STMT.*
e560: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
e570: 6e 65 78 74 20 73 74 61 74 6d 65 6e 74 20 69 6e  next statment in
e580: 20 73 65 71 75 65 6e 63 65 20 61 66 74 65 72 20   sequence after 
e590: 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  STMT..*/.static 
e5a0: 69 6e 74 20 74 65 73 74 5f 6e 65 78 74 5f 73 74  int test_next_st
e5b0: 6d 74 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  mt(.  void * cli
e5c0: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
e5d0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
e5e0: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
e5f0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
e600: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
e610: 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 73  stmt *pStmt;.  s
e620: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 30 3b 0a  qlite3 *db = 0;.
e630: 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b    char zBuf[50];
e640: 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
e650: 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
e660: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
e670: 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
e680: 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20  hould be \"",.  
e690: 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
e6a0: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b  ingFromObj(objv[
e6b0: 30 5d 2c 20 30 29 2c 20 22 20 44 42 20 53 54 4d  0], 0), " DB STM
e6c0: 54 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  T", 0);.    retu
e6d0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
e6e0: 7d 0a 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f  }..  if( getDbPo
e6f0: 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
e700: 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
e710: 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
e720: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
e730: 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
e740: 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
e750: 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32  GetString(objv[2
e760: 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
e770: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
e780: 20 20 70 53 74 6d 74 20 3d 20 73 71 6c 69 74 65    pStmt = sqlite
e790: 33 5f 6e 65 78 74 5f 73 74 6d 74 28 64 62 2c 20  3_next_stmt(db, 
e7a0: 70 53 74 6d 74 29 3b 0a 20 20 69 66 28 20 70 53  pStmt);.  if( pS
e7b0: 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28 20 73  tmt ){.    if( s
e7c0: 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50 6f  qlite3TestMakePo
e7d0: 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70 2c  interStr(interp,
e7e0: 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20 29 20   zBuf, pStmt) ) 
e7f0: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
e800: 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  ;.    Tcl_Append
e810: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a  Result(interp, z
e820: 42 75 66 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72  Buf, 0);.  }.  r
e830: 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
e840: 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
e850: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 20 20 53  sqlite3_reset  S
e860: 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 73 65 74  TMT .**.** Reset
e870: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 68 61 6e   a statement han
e880: 64 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  dle..*/.static i
e890: 6e 74 20 74 65 73 74 5f 72 65 73 65 74 28 0a 20  nt test_reset(. 
e8a0: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
e8b0: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
e8c0: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
e8d0: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
e8e0: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
e8f0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  .  sqlite3_stmt 
e900: 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63  *pStmt;.  int rc
e910: 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
e920: 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
e930: 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
e940: 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
e950: 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20  should be \"",. 
e960: 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
e970: 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76  ringFromObj(objv
e980: 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 53 54 4d 54  [0], 0), " <STMT
e990: 3e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  >", 0);.    retu
e9a0: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
e9b0: 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74  }..  if( getStmt
e9c0: 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
e9d0: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
e9e0: 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20  jv[1]), &pStmt) 
e9f0: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
ea00: 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69  OR;..  rc = sqli
ea10: 74 65 33 5f 72 65 73 65 74 28 70 53 74 6d 74 29  te3_reset(pStmt)
ea20: 3b 0a 20 20 69 66 28 20 70 53 74 6d 74 20 26 26  ;.  if( pStmt &&
ea30: 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43   sqlite3TestErrC
ea40: 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74  ode(interp, Stmt
ea50: 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29  ToDb(pStmt), rc)
ea60: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
ea70: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
ea80: 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69 6e  Tcl_SetResult(in
ea90: 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 74 31  terp, (char *)t1
eaa0: 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54  ErrorName(rc), T
eab0: 43 4c 5f 53 54 41 54 49 43 29 3b 0a 2f 2a 0a 20  CL_STATIC);./*. 
eac0: 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 72   if( rc ){.    r
ead0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
eae0: 0a 20 20 7d 0a 2a 2f 0a 20 20 72 65 74 75 72 6e  .  }.*/.  return
eaf0: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
eb00: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
eb10: 33 5f 65 78 70 69 72 65 64 20 53 54 4d 54 20 0a  3_expired STMT .
eb20: 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 54 52 55  **.** Return TRU
eb30: 45 20 69 66 20 61 20 72 65 63 6f 6d 70 69 6c 61  E if a recompila
eb40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 74 61 74  tion of the stat
eb50: 65 6d 65 6e 74 20 69 73 20 72 65 63 6f 6d 6d 65  ement is recomme
eb60: 6e 64 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  nded..*/.static 
eb70: 69 6e 74 20 74 65 73 74 5f 65 78 70 69 72 65 64  int test_expired
eb80: 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
eb90: 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
eba0: 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
ebb0: 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
ebc0: 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
ebd0: 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .){.#ifndef SQLI
ebe0: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
ebf0: 45 44 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ED.  sqlite3_stm
ec00: 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 66 28 20  t *pStmt;.  if( 
ec10: 6f 62 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54  objc!=2 ){.    T
ec20: 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
ec30: 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
ec40: 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
ec50: 20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63   \"",.        Tc
ec60: 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f  l_GetStringFromO
ec70: 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20  bj(objv[0], 0), 
ec80: 22 20 3c 53 54 4d 54 3e 22 2c 20 30 29 3b 0a 20  " <STMT>", 0);. 
ec90: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
eca0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67  ROR;.  }.  if( g
ecb0: 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
ecc0: 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
ecd0: 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
ece0: 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
ecf0: 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
ed00: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
ed10: 65 72 70 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c  erp, Tcl_NewBool
ed20: 65 61 6e 4f 62 6a 28 73 71 6c 69 74 65 33 5f 65  eanObj(sqlite3_e
ed30: 78 70 69 72 65 64 28 70 53 74 6d 74 29 29 29 3b  xpired(pStmt)));
ed40: 0a 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e  .#endif.  return
ed50: 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
ed60: 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
ed70: 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 69  3_transfer_bindi
ed80: 6e 67 73 20 46 52 4f 4d 53 54 4d 54 20 54 4f 53  ngs FROMSTMT TOS
ed90: 54 4d 54 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66  TMT.**.** Transf
eda0: 65 72 20 61 6c 6c 20 62 69 6e 64 69 6e 67 73 20  er all bindings 
edb0: 66 72 6f 6d 20 46 52 4f 4d 53 54 4d 54 20 6f 76  from FROMSTMT ov
edc0: 65 72 20 74 6f 20 54 4f 53 54 4d 54 0a 2a 2f 0a  er to TOSTMT.*/.
edd0: 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
ede0: 74 72 61 6e 73 66 65 72 5f 62 69 6e 64 28 0a 20  transfer_bind(. 
edf0: 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61   void * clientDa
ee00: 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ta,.  Tcl_Interp
ee10: 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20   *interp,.  int 
ee20: 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20  objc,.  Tcl_Obj 
ee30: 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b  *CONST objv[].){
ee40: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
ee50: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a  OMIT_DEPRECATED.
ee60: 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
ee70: 70 53 74 6d 74 31 2c 20 2a 70 53 74 6d 74 32 3b  pStmt1, *pStmt2;
ee80: 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29  .  if( objc!=3 )
ee90: 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
eea0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
eeb0: 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
eec0: 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
eed0: 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
eee0: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
eef0: 5d 2c 20 30 29 2c 20 22 20 46 52 4f 4d 2d 53 54  ], 0), " FROM-ST
ef00: 4d 54 20 54 4f 2d 53 54 4d 54 22 2c 20 30 29 3b  MT TO-STMT", 0);
ef10: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
ef20: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
ef30: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
ef40: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
ef50: 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
ef60: 26 70 53 74 6d 74 31 29 29 20 72 65 74 75 72 6e  &pStmt1)) return
ef70: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
ef80: 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
ef90: 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
efa0: 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 2c  String(objv[2]),
efb0: 20 26 70 53 74 6d 74 32 29 29 20 72 65 74 75 72   &pStmt2)) retur
efc0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
efd0: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
efe0: 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63  interp, .     Tc
eff0: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69  l_NewIntObj(sqli
f000: 74 65 33 5f 74 72 61 6e 73 66 65 72 5f 62 69 6e  te3_transfer_bin
f010: 64 69 6e 67 73 28 70 53 74 6d 74 31 2c 70 53 74  dings(pStmt1,pSt
f020: 6d 74 32 29 29 29 3b 0a 23 65 6e 64 69 66 0a 20  mt2)));.#endif. 
f030: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
f040: 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
f050: 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
f060: 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e   DB.**.** Return
f070: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
f080: 68 61 6e 67 65 73 20 6d 61 64 65 20 74 6f 20 74  hanges made to t
f090: 68 65 20 64 61 74 61 62 61 73 65 20 62 79 20 74  he database by t
f0a0: 68 65 20 6c 61 73 74 20 53 51 4c 0a 2a 2a 20 65  he last SQL.** e
f0b0: 78 65 63 75 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 61  xecution..*/.sta
f0c0: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 68 61  tic int test_cha
f0d0: 6e 67 65 73 28 0a 20 20 76 6f 69 64 20 2a 20 63  nges(.  void * c
f0e0: 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
f0f0: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
f100: 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
f110: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
f120: 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
f130: 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 6f 62 6a  3 *db;.  if( obj
f140: 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
f150: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
f160: 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
f170: 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
f180: 22 2c 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ",.       Tcl_Ge
f190: 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
f1a0: 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20  , " DB", 0);.   
f1b0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f1c0: 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
f1d0: 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
f1e0: 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
f1f0: 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
f200: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
f210: 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  R;.  Tcl_SetObjR
f220: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
f230: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69  l_NewIntObj(sqli
f240: 74 65 33 5f 63 68 61 6e 67 65 73 28 64 62 29 29  te3_changes(db))
f250: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
f260: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  OK;.}../*.** Thi
f270: 73 20 69 73 20 74 68 65 20 22 73 74 61 74 69 63  s is the "static
f280: 5f 62 69 6e 64 5f 76 61 6c 75 65 22 20 74 68 61  _bind_value" tha
f290: 74 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  t variables are 
f2a0: 62 6f 75 6e 64 20 74 6f 20 77 68 65 6e 0a 2a 2a  bound to when.**
f2b0: 20 74 68 65 20 46 4c 41 47 20 6f 70 74 69 6f 6e   the FLAG option
f2c0: 20 6f 66 20 73 71 6c 69 74 65 33 5f 62 69 6e 64   of sqlite3_bind
f2d0: 20 69 73 20 22 73 74 61 74 69 63 22 0a 2a 2f 0a   is "static".*/.
f2e0: 73 74 61 74 69 63 20 63 68 61 72 20 2a 73 71 6c  static char *sql
f2f0: 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f  ite_static_bind_
f300: 76 61 6c 75 65 20 3d 20 30 3b 0a 73 74 61 74 69  value = 0;.stati
f310: 63 20 69 6e 74 20 73 71 6c 69 74 65 5f 73 74 61  c int sqlite_sta
f320: 74 69 63 5f 62 69 6e 64 5f 6e 62 79 74 65 20 3d  tic_bind_nbyte =
f330: 20 30 3b 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65   0;../*.** Usage
f340: 3a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 20  :  sqlite3_bind 
f350: 20 56 4d 20 20 49 44 58 20 20 56 41 4c 55 45 20   VM  IDX  VALUE 
f360: 20 46 4c 41 47 53 0a 2a 2a 0a 2a 2a 20 53 65 74   FLAGS.**.** Set
f370: 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  s the value of t
f380: 68 65 20 49 44 58 2d 74 68 20 6f 63 63 75 72 61  he IDX-th occura
f390: 6e 63 65 20 6f 66 20 22 3f 22 20 69 6e 20 74 68  nce of "?" in th
f3a0: 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 0a 2a  e original SQL.*
f3b0: 2a 20 73 74 72 69 6e 67 2e 20 20 56 41 4c 55 45  * string.  VALUE
f3c0: 20 69 73 20 74 68 65 20 6e 65 77 20 76 61 6c 75   is the new valu
f3d0: 65 2e 20 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e  e.  If FLAGS=="n
f3e0: 75 6c 6c 22 20 74 68 65 6e 20 56 41 4c 55 45 20  ull" then VALUE 
f3f0: 69 73 0a 2a 2a 20 69 67 6e 6f 72 65 64 20 61 6e  is.** ignored an
f400: 64 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 73  d the value is s
f410: 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 49 66 20  et to NULL.  If 
f420: 46 4c 41 47 53 3d 3d 22 73 74 61 74 69 63 22 20  FLAGS=="static" 
f430: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 76 61 6c 75  then.** the valu
f440: 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  e is set to the 
f450: 76 61 6c 75 65 20 6f 66 20 61 20 73 74 61 74 69  value of a stati
f460: 63 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 64  c variable named
f470: 0a 2a 2a 20 22 73 71 6c 69 74 65 5f 73 74 61 74  .** "sqlite_stat
f480: 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 22 2e 20  ic_bind_value". 
f490: 20 49 66 20 46 4c 41 47 53 3d 3d 22 6e 6f 72 6d   If FLAGS=="norm
f4a0: 61 6c 22 20 74 68 65 6e 20 61 20 63 6f 70 79 0a  al" then a copy.
f4b0: 2a 2a 20 6f 66 20 74 68 65 20 56 41 4c 55 45 20  ** of the VALUE 
f4c0: 69 73 20 6d 61 64 65 2e 20 20 49 66 20 46 4c 41  is made.  If FLA
f4d0: 47 53 3d 3d 22 62 6c 6f 62 31 30 22 20 74 68 65  GS=="blob10" the
f4e0: 6e 20 61 20 56 41 4c 55 45 20 69 73 20 69 67 6e  n a VALUE is ign
f4f0: 6f 72 65 64 0a 2a 2a 20 61 6e 20 61 20 31 30 2d  ored.** an a 10-
f500: 62 79 74 65 20 62 6c 6f 62 20 22 61 62 63 5c 30  byte blob "abc\0
f510: 30 30 78 79 7a 5c 30 30 30 70 71 22 20 69 73 20  00xyz\000pq" is 
f520: 69 6e 73 65 72 74 65 64 2e 0a 2a 2f 0a 73 74 61  inserted..*/.sta
f530: 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
f540: 64 28 0a 20 20 76 6f 69 64 20 2a 4e 6f 74 55 73  d(.  void *NotUs
f550: 65 64 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70  ed,.  Tcl_Interp
f560: 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
f570: 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
f580: 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
f590: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
f5a0: 0a 20 20 69 6e 74 20 61 72 67 63 2c 20 20 20 20  .  int argc,    
f5b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
f5c0: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
f5d0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 72 67   */.  char **arg
f5e0: 76 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  v            /* 
f5f0: 54 65 78 74 20 6f 66 20 65 61 63 68 20 61 72 67  Text of each arg
f600: 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a 20 20 73 71  ument */.){.  sq
f610: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
f620: 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 69  t;.  int rc;.  i
f630: 6e 74 20 69 64 78 3b 0a 20 20 69 66 28 20 61 72  nt idx;.  if( ar
f640: 67 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63 6c  gc!=5 ){.    Tcl
f650: 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
f660: 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
f670: 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
f680: 22 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20  "", argv[0], .  
f690: 20 20 20 20 20 22 20 56 4d 20 49 44 58 20 56 41       " VM IDX VA
f6a0: 4c 55 45 20 28 6e 75 6c 6c 7c 73 74 61 74 69 63  LUE (null|static
f6b0: 7c 6e 6f 72 6d 61 6c 29 5c 22 22 2c 20 30 29 3b  |normal)\"", 0);
f6c0: 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
f6d0: 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
f6e0: 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
f6f0: 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
f700: 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
f710: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
f720: 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e  f( Tcl_GetInt(in
f730: 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26  terp, argv[2], &
f740: 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43  idx) ) return TC
f750: 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 73  L_ERROR;.  if( s
f760: 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 6e  trcmp(argv[4],"n
f770: 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ull")==0 ){.    
f780: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e  rc = sqlite3_bin
f790: 64 5f 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64  d_null(pStmt, id
f7a0: 78 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  x);.  }else if( 
f7b0: 73 74 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22  strcmp(argv[4],"
f7c0: 73 74 61 74 69 63 22 29 3d 3d 30 20 29 7b 0a 20  static")==0 ){. 
f7d0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
f7e0: 62 69 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c  bind_text(pStmt,
f7f0: 20 69 64 78 2c 20 73 71 6c 69 74 65 5f 73 74 61   idx, sqlite_sta
f800: 74 69 63 5f 62 69 6e 64 5f 76 61 6c 75 65 2c 20  tic_bind_value, 
f810: 2d 31 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 20  -1, 0);.  }else 
f820: 69 66 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b  if( strcmp(argv[
f830: 34 5d 2c 22 73 74 61 74 69 63 2d 6e 62 79 74 65  4],"static-nbyte
f840: 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63  s")==0 ){.    rc
f850: 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
f860: 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c  text(pStmt, idx,
f870: 20 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62   sqlite_static_b
f880: 69 6e 64 5f 76 61 6c 75 65 2c 0a 20 20 20 20 20  ind_value,.     
f890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8b0: 20 20 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f    sqlite_static_
f8c0: 62 69 6e 64 5f 6e 62 79 74 65 2c 20 30 29 3b 0a  bind_nbyte, 0);.
f8d0: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63    }else if( strc
f8e0: 6d 70 28 61 72 67 76 5b 34 5d 2c 22 6e 6f 72 6d  mp(argv[4],"norm
f8f0: 61 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  al")==0 ){.    r
f900: 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
f910: 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 64 78  _text(pStmt, idx
f920: 2c 20 61 72 67 76 5b 33 5d 2c 20 2d 31 2c 20 53  , argv[3], -1, S
f930: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
f940: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 74  ;.  }else if( st
f950: 72 63 6d 70 28 61 72 67 76 5b 34 5d 2c 22 62 6c  rcmp(argv[4],"bl
f960: 6f 62 31 30 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ob10")==0 ){.   
f970: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69   rc = sqlite3_bi
f980: 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69  nd_text(pStmt, i
f990: 64 78 2c 20 22 61 62 63 5c 30 30 30 78 79 7a 5c  dx, "abc\000xyz\
f9a0: 30 30 30 70 71 22 2c 20 31 30 2c 20 53 51 4c 49  000pq", 10, SQLI
f9b0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d 65  TE_STATIC);.  }e
f9c0: 6c 73 65 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  lse{.    Tcl_App
f9d0: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
f9e0: 2c 20 22 34 74 68 20 61 72 67 75 6d 65 6e 74 20  , "4th argument 
f9f0: 73 68 6f 75 6c 64 20 62 65 20 22 0a 20 20 20 20  should be ".    
fa00: 20 20 20 20 22 5c 22 6e 75 6c 6c 5c 22 20 6f 72      "\"null\" or
fa10: 20 5c 22 73 74 61 74 69 63 5c 22 20 6f 72 20 5c   \"static\" or \
fa20: 22 6e 6f 72 6d 61 6c 5c 22 22 2c 20 30 29 3b 0a  "normal\"", 0);.
fa30: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
fa40: 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
fa50: 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
fa60: 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54  de(interp, StmtT
fa70: 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20  oDb(pStmt), rc) 
fa80: 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
fa90: 4f 52 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  OR;.  if( rc ){.
faa0: 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30      char zBuf[50
fab0: 5d 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 7a  ];.    sprintf(z
fac0: 42 75 66 2c 20 22 28 25 64 29 20 22 2c 20 72 63  Buf, "(%d) ", rc
fad0: 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  );.    Tcl_Appen
fae0: 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
faf0: 7a 42 75 66 2c 20 73 71 6c 69 74 65 33 45 72 72  zBuf, sqlite3Err
fb00: 53 74 72 28 72 63 29 2c 20 30 29 3b 0a 20 20 20  Str(rc), 0);.   
fb10: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
fb20: 52 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  R;.  }.  return 
fb30: 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 23 69 66 6e 64  TCL_OK;.}..#ifnd
fb40: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
fb50: 54 46 31 36 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65  TF16./*.** Usage
fb60: 3a 20 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61  : add_test_colla
fb70: 74 65 20 3c 64 62 20 70 74 72 3e 20 3c 75 74 66  te <db ptr> <utf
fb80: 38 3e 20 3c 75 74 66 31 36 6c 65 3e 20 3c 75 74  8> <utf16le> <ut
fb90: 66 31 36 62 65 3e 0a 2a 2a 0a 2a 2a 20 54 68 69  f16be>.**.** Thi
fba0: 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73  s function is us
fbb0: 65 64 20 74 6f 20 74 65 73 74 20 74 68 61 74 20  ed to test that 
fbc0: 53 51 4c 69 74 65 20 73 65 6c 65 63 74 73 20 74  SQLite selects t
fbd0: 68 65 20 63 6f 72 72 65 63 74 20 63 6f 6c 6c 61  he correct colla
fbe0: 74 69 6f 6e 0a 2a 2a 20 73 65 71 75 65 6e 63 65  tion.** sequence
fbf0: 20 63 61 6c 6c 62 61 63 6b 20 77 68 65 6e 20 6d   callback when m
fc00: 75 6c 74 69 70 6c 65 20 76 65 72 73 69 6f 6e 73  ultiple versions
fc10: 20 28 66 6f 72 20 64 69 66 66 65 72 65 6e 74 20   (for different 
fc20: 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 73 29 0a  text encodings).
fc30: 2a 2a 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  ** are available
fc40: 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c 69 6e 67 20  ..**.** Calling 
fc50: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 72 65 67  this routine reg
fc60: 69 73 74 65 72 73 20 74 68 65 20 63 6f 6c 6c 61  isters the colla
fc70: 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 22 74  tion sequence "t
fc80: 65 73 74 5f 63 6f 6c 6c 61 74 65 22 0a 2a 2a 20  est_collate".** 
fc90: 77 69 74 68 20 64 61 74 61 62 61 73 65 20 68 61  with database ha
fca0: 6e 64 6c 65 20 3c 64 62 3e 2e 20 54 68 65 20 73  ndle <db>. The s
fcb0: 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 6d  econd argument m
fcc0: 75 73 74 20 62 65 20 61 20 6c 69 73 74 20 6f 66  ust be a list of
fcd0: 20 74 68 72 65 65 0a 2a 2a 20 62 6f 6f 6c 65 61   three.** boolea
fce0: 6e 20 76 61 6c 75 65 73 2e 20 49 66 20 74 68 65  n values. If the
fcf0: 20 66 69 72 73 74 20 69 73 20 74 72 75 65 2c 20   first is true, 
fd00: 74 68 65 6e 20 61 20 76 65 72 73 69 6f 6e 20 6f  then a version o
fd10: 66 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 69  f test_collate i
fd20: 73 0a 2a 2a 20 72 65 67 69 73 74 65 72 65 64 20  s.** registered 
fd30: 66 6f 72 20 55 54 46 2d 38 2c 20 69 66 20 74 68  for UTF-8, if th
fd40: 65 20 73 65 63 6f 6e 64 20 69 73 20 74 72 75 65  e second is true
fd50: 2c 20 61 20 76 65 72 73 69 6f 6e 20 69 73 20 72  , a version is r
fd60: 65 67 69 73 74 65 72 65 64 20 66 6f 72 0a 2a 2a  egistered for.**
fd70: 20 55 54 46 2d 31 36 6c 65 2c 20 69 66 20 74 68   UTF-16le, if th
fd80: 65 20 74 68 69 72 64 20 69 73 20 74 72 75 65 2c  e third is true,
fd90: 20 61 20 55 54 46 2d 31 36 62 65 20 76 65 72 73   a UTF-16be vers
fda0: 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
fdb0: 2e 0a 2a 2a 20 50 72 65 76 69 6f 75 73 20 76 65  ..** Previous ve
fdc0: 72 73 69 6f 6e 73 20 6f 66 20 74 65 73 74 5f 63  rsions of test_c
fdd0: 6f 6c 6c 61 74 65 20 61 72 65 20 64 65 6c 65 74  ollate are delet
fde0: 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ed..**.** The co
fdf0: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
fe00: 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 20 69 73   test_collate is
fe10: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
fe20: 63 61 6c 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 66  calling the.** f
fe30: 6f 6c 6c 6f 77 69 6e 67 20 54 43 4c 20 73 63 72  ollowing TCL scr
fe40: 69 70 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 22 74 65  ipt:.**.**   "te
fe50: 73 74 5f 63 6f 6c 6c 61 74 65 20 3c 65 6e 63 3e  st_collate <enc>
fe60: 20 3c 6c 68 73 3e 20 3c 72 68 73 3e 22 0a 2a 2a   <lhs> <rhs>".**
fe70: 0a 2a 2a 20 54 68 65 20 3c 6c 68 73 3e 20 61 6e  .** The <lhs> an
fe80: 64 20 3c 72 68 73 3e 20 61 72 65 20 74 68 65 20  d <rhs> are the 
fe90: 74 77 6f 20 76 61 6c 75 65 73 20 62 65 69 6e 67  two values being
fea0: 20 63 6f 6d 70 61 72 65 64 2c 20 65 6e 63 6f 64   compared, encod
feb0: 65 64 20 69 6e 20 55 54 46 2d 38 2e 0a 2a 2a 20  ed in UTF-8..** 
fec0: 54 68 65 20 3c 65 6e 63 3e 20 70 61 72 61 6d 65  The <enc> parame
fed0: 74 65 72 20 69 73 20 74 68 65 20 65 6e 63 6f 64  ter is the encod
fee0: 69 6e 67 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ing of the colla
fef0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 74 68  tion function th
ff00: 61 74 0a 2a 2a 20 53 51 4c 69 74 65 20 73 65 6c  at.** SQLite sel
ff10: 65 63 74 65 64 20 74 6f 20 63 61 6c 6c 2e 20 54  ected to call. T
ff20: 68 65 20 54 43 4c 20 74 65 73 74 20 73 63 72 69  he TCL test scri
ff30: 70 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  pt implements th
ff40: 65 0a 2a 2a 20 22 74 65 73 74 5f 63 6f 6c 6c 61  e.** "test_colla
ff50: 74 65 22 20 70 72 6f 63 2e 0a 2a 2a 0a 2a 2a 20  te" proc..**.** 
ff60: 4e 6f 74 65 20 74 68 61 74 20 74 68 69 73 20 77  Note that this w
ff70: 69 6c 6c 20 6f 6e 6c 79 20 77 6f 72 6b 20 77 69  ill only work wi
ff80: 74 68 20 6f 6e 65 20 69 6e 74 65 70 72 65 74 65  th one inteprete
ff90: 72 20 61 74 20 61 20 74 69 6d 65 2c 20 61 73 20  r at a time, as 
ffa0: 74 68 65 0a 2a 2a 20 69 6e 74 65 72 70 20 70 6f  the.** interp po
ffb0: 69 6e 74 65 72 20 74 6f 20 75 73 65 20 77 68 65  inter to use whe
ffc0: 6e 20 65 76 61 6c 75 61 74 69 6e 67 20 74 68 65  n evaluating the
ffd0: 20 54 43 4c 20 73 63 72 69 70 74 20 69 73 20 73   TCL script is s
ffe0: 74 6f 72 65 64 20 69 6e 0a 2a 2a 20 70 54 65 73  tored in.** pTes
fff0: 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72 70 2e 0a  tCollateInterp..
10000 2a 2f 0a 73 74 61 74 69 63 20 54 63 6c 5f 49 6e  */.static Tcl_In
10010 74 65 72 70 2a 20 70 54 65 73 74 43 6f 6c 6c 61  terp* pTestColla
10020 74 65 49 6e 74 65 72 70 3b 0a 73 74 61 74 69 63  teInterp;.static
10030 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 6c 61 74   int test_collat
10040 65 5f 66 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a  e_func(.  void *
10050 70 43 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 2c  pCtx, .  int nA,
10060 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 41 2c   const void *zA,
10070 0a 20 20 69 6e 74 20 6e 42 2c 20 63 6f 6e 73 74  .  int nB, const
10080 20 76 6f 69 64 20 2a 7a 42 0a 29 7b 0a 20 20 54   void *zB.){.  T
10090 63 6c 5f 49 6e 74 65 72 70 20 2a 69 20 3d 20 70  cl_Interp *i = p
100a0 54 65 73 74 43 6f 6c 6c 61 74 65 49 6e 74 65 72  TestCollateInter
100b0 70 3b 0a 20 20 69 6e 74 20 65 6e 63 69 6e 20 3d  p;.  int encin =
100c0 20 28 69 6e 74 29 70 43 74 78 3b 0a 20 20 69 6e   (int)pCtx;.  in
100d0 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 3b 0a  t res;.  int n;.
100e0 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
100f0 20 2a 70 56 61 6c 3b 0a 20 20 54 63 6c 5f 4f 62   *pVal;.  Tcl_Ob
10100 6a 20 2a 70 58 3b 0a 0a 20 20 70 58 20 3d 20 54  j *pX;..  pX = T
10110 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28  cl_NewStringObj(
10120 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20  "test_collate", 
10130 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52  -1);.  Tcl_IncrR
10140 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 0a 20 20  efCount(pX);..  
10150 73 77 69 74 63 68 28 20 65 6e 63 69 6e 20 29 7b  switch( encin ){
10160 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45  .    case SQLITE
10170 5f 55 54 46 38 3a 0a 20 20 20 20 20 20 54 63 6c  _UTF8:.      Tcl
10180 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
10190 65 6d 65 6e 74 28 69 2c 70 58 2c 54 63 6c 5f 4e  ement(i,pX,Tcl_N
101a0 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 55 54 46  ewStringObj("UTF
101b0 2d 38 22 2c 2d 31 29 29 3b 0a 20 20 20 20 20 20  -8",-1));.      
101c0 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
101d0 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 3a 0a  SQLITE_UTF16LE:.
101e0 20 20 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62        Tcl_ListOb
101f0 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69  jAppendElement(i
10200 2c 70 58 2c 54 63 6c 5f 4e 65 77 53 74 72 69 6e  ,pX,Tcl_NewStrin
10210 67 4f 62 6a 28 22 55 54 46 2d 31 36 4c 45 22 2c  gObj("UTF-16LE",
10220 2d 31 29 29 3b 0a 20 20 20 20 20 20 62 72 65 61  -1));.      brea
10230 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51 4c 49  k;.    case SQLI
10240 54 45 5f 55 54 46 31 36 42 45 3a 0a 20 20 20 20  TE_UTF16BE:.    
10250 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70    Tcl_ListObjApp
10260 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70 58 2c  endElement(i,pX,
10270 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
10280 28 22 55 54 46 2d 31 36 42 45 22 2c 2d 31 29 29  ("UTF-16BE",-1))
10290 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
102a0 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
102b0 20 20 61 73 73 65 72 74 28 30 29 3b 0a 20 20 7d    assert(0);.  }
102c0 0a 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c 69 74  ..  pVal = sqlit
102d0 65 33 56 61 6c 75 65 4e 65 77 28 30 29 3b 0a 20  e3ValueNew(0);. 
102e0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
102f0 53 74 72 28 70 56 61 6c 2c 20 6e 41 2c 20 7a 41  Str(pVal, nA, zA
10300 2c 20 65 6e 63 69 6e 2c 20 53 51 4c 49 54 45 5f  , encin, SQLITE_
10310 53 54 41 54 49 43 29 3b 0a 20 20 6e 20 3d 20 73  STATIC);.  n = s
10320 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74  qlite3_value_byt
10330 65 73 28 70 56 61 6c 29 3b 0a 20 20 54 63 6c 5f  es(pVal);.  Tcl_
10340 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65  ListObjAppendEle
10350 6d 65 6e 74 28 69 2c 70 58 2c 0a 20 20 20 20 20  ment(i,pX,.     
10360 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
10370 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  j((char*)sqlite3
10380 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c  _value_text(pVal
10390 29 2c 6e 29 29 3b 0a 20 20 73 71 6c 69 74 65 33  ),n));.  sqlite3
103a0 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c  ValueSetStr(pVal
103b0 2c 20 6e 42 2c 20 7a 42 2c 20 65 6e 63 69 6e 2c  , nB, zB, encin,
103c0 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
103d0 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76  .  n = sqlite3_v
103e0 61 6c 75 65 5f 62 79 74 65 73 28 70 56 61 6c 29  alue_bytes(pVal)
103f0 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
10400 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 2c 70  ppendElement(i,p
10410 58 2c 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77  X,.      Tcl_New
10420 53 74 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a  StringObj((char*
10430 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
10440 65 78 74 28 70 56 61 6c 29 2c 6e 29 29 3b 0a 20  ext(pVal),n));. 
10450 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
10460 65 28 70 56 61 6c 29 3b 0a 0a 20 20 54 63 6c 5f  e(pVal);..  Tcl_
10470 45 76 61 6c 4f 62 6a 45 78 28 69 2c 20 70 58 2c  EvalObjEx(i, pX,
10480 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52   0);.  Tcl_DecrR
10490 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54  efCount(pX);.  T
104a0 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a  cl_GetIntFromObj
104b0 28 69 2c 20 54 63 6c 5f 47 65 74 4f 62 6a 52 65  (i, Tcl_GetObjRe
104c0 73 75 6c 74 28 69 29 2c 20 26 72 65 73 29 3b 0a  sult(i), &res);.
104d0 20 20 72 65 74 75 72 6e 20 72 65 73 3b 0a 7d 0a    return res;.}.
104e0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
104f0 63 6f 6c 6c 61 74 65 28 0a 20 20 76 6f 69 64 20  collate(.  void 
10500 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
10510 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
10520 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
10530 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
10540 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
10550 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20  ite3 *db;.  int 
10560 76 61 6c 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  val;.  sqlite3_v
10570 61 6c 75 65 20 2a 70 56 61 6c 3b 0a 20 20 69 6e  alue *pVal;.  in
10580 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
10590 63 21 3d 35 20 29 20 67 6f 74 6f 20 62 61 64 5f  c!=5 ) goto bad_
105a0 61 72 67 73 3b 0a 20 20 70 54 65 73 74 43 6f 6c  args;.  pTestCol
105b0 6c 61 74 65 49 6e 74 65 72 70 20 3d 20 69 6e 74  lateInterp = int
105c0 65 72 70 3b 0a 20 20 69 66 28 20 67 65 74 44 62  erp;.  if( getDb
105d0 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
105e0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
105f0 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
10600 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
10610 0a 0a 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21 3d  ..  if( TCL_OK!=
10620 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46 72  Tcl_GetBooleanFr
10630 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
10640 6a 76 5b 32 5d 2c 20 26 76 61 6c 29 20 29 20 72  jv[2], &val) ) r
10650 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
10660 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
10670 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
10680 28 64 62 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61  (db, "test_colla
10690 74 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  te", SQLITE_UTF8
106a0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 28 76 6f  , .          (vo
106b0 69 64 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 38  id *)SQLITE_UTF8
106c0 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f 6c 6c 61  , val?test_colla
106d0 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20 20 69 66  te_func:0);.  if
106e0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
106f0 29 7b 0a 20 20 20 20 63 6f 6e 73 74 20 76 6f 69  ){.    const voi
10700 64 20 2a 7a 55 74 66 31 36 3b 0a 20 20 20 20 69  d *zUtf16;.    i
10710 66 28 20 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47  f( TCL_OK!=Tcl_G
10720 65 74 42 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a  etBooleanFromObj
10730 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d  (interp, objv[3]
10740 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75 72 6e  , &val) ) return
10750 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20   TCL_ERROR;.    
10760 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72 65  rc = sqlite3_cre
10770 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62  ate_collation(db
10780 2c 20 22 74 65 73 74 5f 63 6f 6c 6c 61 74 65 22  , "test_collate"
10790 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
107a0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 28  , .            (
107b0 76 6f 69 64 20 2a 29 53 51 4c 49 54 45 5f 55 54  void *)SQLITE_UT
107c0 46 31 36 4c 45 2c 20 76 61 6c 3f 74 65 73 74 5f  F16LE, val?test_
107d0 63 6f 6c 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b  collate_func:0);
107e0 0a 20 20 20 20 69 66 28 20 54 43 4c 5f 4f 4b 21  .    if( TCL_OK!
107f0 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c 65 61 6e 46  =Tcl_GetBooleanF
10800 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
10810 62 6a 76 5b 34 5d 2c 20 26 76 61 6c 29 20 29 20  bjv[4], &val) ) 
10820 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
10830 3b 0a 0a 23 69 66 20 30 0a 20 20 20 20 69 66 28  ;..#if 0.    if(
10840 20 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63   sqlite3_iMalloc
10850 46 61 69 6c 3e 30 20 29 7b 0a 20 20 20 20 20 20  Fail>0 ){.      
10860 73 71 6c 69 74 65 33 5f 69 4d 61 6c 6c 6f 63 46  sqlite3_iMallocF
10870 61 69 6c 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e  ail++;.    }.#en
10880 64 69 66 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  dif.    sqlite3_
10890 6d 75 74 65 78 5f 65 6e 74 65 72 28 64 62 2d 3e  mutex_enter(db->
108a0 6d 75 74 65 78 29 3b 0a 20 20 20 20 70 56 61 6c  mutex);.    pVal
108b0 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
108c0 65 77 28 64 62 29 3b 0a 20 20 20 20 73 71 6c 69  ew(db);.    sqli
108d0 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 70  te3ValueSetStr(p
108e0 56 61 6c 2c 20 2d 31 2c 20 22 74 65 73 74 5f 63  Val, -1, "test_c
108f0 6f 6c 6c 61 74 65 22 2c 20 53 51 4c 49 54 45 5f  ollate", SQLITE_
10900 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
10910 54 49 43 29 3b 0a 20 20 20 20 7a 55 74 66 31 36  TIC);.    zUtf16
10920 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 54   = sqlite3ValueT
10930 65 78 74 28 70 56 61 6c 2c 20 53 51 4c 49 54 45  ext(pVal, SQLITE
10940 5f 55 54 46 31 36 4e 41 54 49 56 45 29 3b 0a 20  _UTF16NATIVE);. 
10950 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f     if( db->mallo
10960 63 46 61 69 6c 65 64 20 29 7b 0a 20 20 20 20 20  cFailed ){.     
10970 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
10980 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  EM;.    }else{. 
10990 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
109a0 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
109b0 6f 6e 31 36 28 64 62 2c 20 7a 55 74 66 31 36 2c  on16(db, zUtf16,
109c0 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 2c   SQLITE_UTF16BE,
109d0 20 0a 20 20 20 20 20 20 20 20 20 20 28 76 6f 69   .          (voi
109e0 64 20 2a 29 53 51 4c 49 54 45 5f 55 54 46 31 36  d *)SQLITE_UTF16
109f0 42 45 2c 20 76 61 6c 3f 74 65 73 74 5f 63 6f 6c  BE, val?test_col
10a00 6c 61 74 65 5f 66 75 6e 63 3a 30 29 3b 0a 20 20  late_func:0);.  
10a10 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
10a20 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29 3b 0a  alueFree(pVal);.
10a30 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
10a40 78 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65  x_leave(db->mute
10a50 78 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71  x);.  }.  if( sq
10a60 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
10a70 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
10a80 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
10a90 52 4f 52 3b 0a 20 20 0a 20 20 69 66 28 20 72 63  ROR;.  .  if( rc
10aa0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
10ab0 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
10ac0 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71 6c 69  ult(interp, sqli
10ad0 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65  te3TestErrorName
10ae0 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65  (rc), 0);.    re
10af0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
10b00 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c    }.  return TCL
10b10 5f 4f 4b 3b 0a 0a 62 61 64 5f 61 72 67 73 3a 0a  _OK;..bad_args:.
10b20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
10b30 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
10b40 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
10b50 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20 20 54   be \"",.      T
10b60 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d  cl_GetStringFrom
10b70 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c  Obj(objv[0], 0),
10b80 20 22 20 3c 44 42 3e 20 3c 75 74 66 38 3e 20 3c   " <DB> <utf8> <
10b90 75 74 66 31 36 6c 65 3e 20 3c 75 74 66 31 36 62  utf16le> <utf16b
10ba0 65 3e 22 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  e>", 0);.  retur
10bb0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 7d 0a 0a  n TCL_ERROR;.}..
10bc0 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68 65 20 63  /*.** When the c
10bd0 6f 6c 6c 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ollation needed 
10be0 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 6f  callback is invo
10bf0 6b 65 64 2c 20 72 65 63 6f 72 64 20 74 68 65 20  ked, record the 
10c00 6e 61 6d 65 20 6f 66 20 0a 2a 2a 20 74 68 65 20  name of .** the 
10c10 72 65 71 75 65 73 74 65 64 20 63 6f 6c 6c 61 74  requested collat
10c20 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 68 65 72  ing function her
10c30 65 2e 20 20 54 68 65 20 72 65 63 6f 72 64 65 64  e.  The recorded
10c40 20 6e 61 6d 65 20 69 73 20 6c 69 6e 6b 65 64 0a   name is linked.
10c50 2a 2a 20 74 6f 20 61 20 54 43 4c 20 76 61 72 69  ** to a TCL vari
10c60 61 62 6c 65 20 61 6e 64 20 75 73 65 64 20 74 6f  able and used to
10c70 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   make sure that 
10c80 74 68 65 20 72 65 71 75 65 73 74 65 64 20 63 6f  the requested co
10c90 6c 6c 61 74 69 6f 6e 0a 2a 2a 20 6e 61 6d 65 20  llation.** name 
10ca0 69 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2f 0a 73  is correct..*/.s
10cb0 74 61 74 69 63 20 63 68 61 72 20 7a 4e 65 65 64  tatic char zNeed
10cc0 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b 32 30 30 5d  edCollation[200]
10cd0 3b 0a 73 74 61 74 69 63 20 63 68 61 72 20 2a 70  ;.static char *p
10ce0 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e  zNeededCollation
10cf0 20 3d 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74   = zNeededCollat
10d00 69 6f 6e 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 43 61 6c  ion;.../*.** Cal
10d10 6c 65 64 20 77 68 65 6e 20 61 20 63 6f 6c 6c 61  led when a colla
10d20 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
10d30 20 6e 65 65 64 65 64 2e 20 20 52 65 67 69 73 74   needed.  Regist
10d40 65 72 65 64 20 75 73 69 6e 67 0a 2a 2a 20 73 71  ered using.** sq
10d50 6c 69 74 65 33 5f 63 6f 6c 6c 61 74 69 6f 6e 5f  lite3_collation_
10d60 6e 65 65 64 65 64 31 36 28 29 2e 0a 2a 2f 0a 73  needed16()..*/.s
10d70 74 61 74 69 63 20 76 6f 69 64 20 74 65 73 74 5f  tatic void test_
10d80 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 5f 63  collate_needed_c
10d90 62 28 0a 20 20 76 6f 69 64 20 2a 70 43 74 78 2c  b(.  void *pCtx,
10da0 20 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c   .  sqlite3 *db,
10db0 0a 20 20 69 6e 74 20 65 54 65 78 74 52 65 70 2c  .  int eTextRep,
10dc0 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  .  const void *p
10dd0 4e 61 6d 65 0a 29 7b 0a 20 20 69 6e 74 20 65 6e  Name.){.  int en
10de0 63 20 3d 20 45 4e 43 28 64 62 29 3b 0a 20 20 69  c = ENC(db);.  i
10df0 6e 74 20 69 3b 0a 20 20 63 68 61 72 20 2a 7a 3b  nt i;.  char *z;
10e00 0a 20 20 66 6f 72 28 7a 20 3d 20 28 63 68 61 72  .  for(z = (char
10e10 2a 29 70 4e 61 6d 65 2c 20 69 3d 30 3b 20 2a 7a  *)pName, i=0; *z
10e20 20 7c 7c 20 7a 5b 31 5d 3b 20 7a 2b 2b 29 7b 0a   || z[1]; z++){.
10e30 20 20 20 20 69 66 28 20 2a 7a 20 29 20 7a 4e 65      if( *z ) zNe
10e40 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b 69 2b  ededCollation[i+
10e50 2b 5d 20 3d 20 2a 7a 3b 0a 20 20 7d 0a 20 20 7a  +] = *z;.  }.  z
10e60 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f 6e 5b  NeededCollation[
10e70 69 5d 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65  i] = 0;.  sqlite
10e80 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69  3_create_collati
10e90 6f 6e 28 0a 20 20 20 20 20 20 64 62 2c 20 22 74  on(.      db, "t
10ea0 65 73 74 5f 63 6f 6c 6c 61 74 65 22 2c 20 45 4e  est_collate", EN
10eb0 43 28 64 62 29 2c 20 28 76 6f 69 64 20 2a 29 65  C(db), (void *)e
10ec0 6e 63 2c 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65  nc, test_collate
10ed0 5f 66 75 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  _func);.}../*.**
10ee0 20 55 73 61 67 65 3a 20 61 64 64 5f 74 65 73 74   Usage: add_test
10ef0 5f 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 20  _collate_needed 
10f00 44 42 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  DB.*/.static int
10f10 20 74 65 73 74 5f 63 6f 6c 6c 61 74 65 5f 6e 65   test_collate_ne
10f20 65 64 65 64 28 0a 20 20 76 6f 69 64 20 2a 20 63  eded(.  void * c
10f30 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
10f40 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
10f50 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
10f60 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
10f70 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
10f80 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
10f90 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
10fa0 29 20 67 6f 74 6f 20 62 61 64 5f 61 72 67 73 3b  ) goto bad_args;
10fb0 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e  .  if( getDbPoin
10fc0 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
10fd0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
10fe0 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  ]), &db) ) retur
10ff0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72  n TCL_ERROR;.  r
11000 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 6c  c = sqlite3_coll
11010 61 74 69 6f 6e 5f 6e 65 65 64 65 64 31 36 28 64  ation_needed16(d
11020 62 2c 20 30 2c 20 74 65 73 74 5f 63 6f 6c 6c 61  b, 0, test_colla
11030 74 65 5f 6e 65 65 64 65 64 5f 63 62 29 3b 0a 20  te_needed_cb);. 
11040 20 7a 4e 65 65 64 65 64 43 6f 6c 6c 61 74 69 6f   zNeededCollatio
11050 6e 5b 30 5d 20 3d 20 30 3b 0a 20 20 69 66 28 20  n[0] = 0;.  if( 
11060 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
11070 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
11080 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
11090 45 52 52 4f 52 3b 0a 20 20 72 65 74 75 72 6e 20  ERROR;.  return 
110a0 54 43 4c 5f 4f 4b 3b 0a 0a 62 61 64 5f 61 72 67  TCL_OK;..bad_arg
110b0 73 3a 0a 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75  s:.  Tcl_WrongNu
110c0 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c  mArgs(interp, 1,
110d0 20 6f 62 6a 76 2c 20 22 44 42 22 29 3b 0a 20 20   objv, "DB");.  
110e0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
110f0 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d  ;.}../*.** tclcm
11100 64 3a 20 20 20 61 64 64 5f 61 6c 69 67 6e 6d 65  d:   add_alignme
11110 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61 74 69 6f  nt_test_collatio
11120 6e 73 20 20 44 42 0a 2a 2a 0a 2a 2a 20 41 64 64  ns  DB.**.** Add
11130 20 74 77 6f 20 6e 65 77 20 63 6f 6c 6c 61 74 69   two new collati
11140 6e 67 20 73 65 71 75 65 6e 63 65 73 20 74 6f 20  ng sequences to 
11150 74 68 65 20 64 61 74 61 62 61 73 65 20 44 42 0a  the database DB.
11160 2a 2a 0a 2a 2a 20 20 20 20 20 75 74 66 31 36 5f  **.**     utf16_
11170 61 6c 69 67 6e 65 64 0a 2a 2a 20 20 20 20 20 75  aligned.**     u
11180 74 66 31 36 5f 75 6e 61 6c 69 67 6e 65 64 0a 2a  tf16_unaligned.*
11190 2a 0a 2a 2a 20 42 6f 74 68 20 63 6f 6c 6c 61 74  *.** Both collat
111a0 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 75 73  ing sequences us
111b0 65 20 74 68 65 20 73 61 6d 65 20 73 6f 72 74 20  e the same sort 
111c0 6f 72 64 65 72 20 61 73 20 42 49 4e 41 52 59 2e  order as BINARY.
111d0 0a 2a 2a 20 54 68 65 20 6f 6e 6c 79 20 64 69 66  .** The only dif
111e0 66 65 72 65 6e 63 65 20 69 73 20 74 68 61 74 20  ference is that 
111f0 74 68 65 20 75 74 66 31 36 5f 61 6c 69 67 6e 65  the utf16_aligne
11200 64 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73  d collating.** s
11210 65 71 75 65 6e 63 65 20 69 73 20 64 65 63 6c 61  equence is decla
11220 72 65 64 20 77 69 74 68 20 74 68 65 20 53 51 4c  red with the SQL
11230 49 54 45 5f 55 54 46 31 36 5f 41 4c 49 47 4e 45  ITE_UTF16_ALIGNE
11240 44 20 66 6c 61 67 2e 0a 2a 2a 20 42 6f 74 68 20  D flag..** Both 
11250 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
11260 6f 6e 73 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  ons increment th
11270 65 20 75 6e 61 6c 69 67 6e 65 64 20 75 74 66 31  e unaligned utf1
11280 36 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 77 68 65  6 counter.** whe
11290 6e 65 76 65 72 20 74 68 65 79 20 73 65 65 20 61  never they see a
112a0 20 73 74 72 69 6e 67 20 74 68 61 74 20 62 65 67   string that beg
112b0 69 6e 73 20 6f 6e 20 61 6e 20 6f 64 64 20 62 79  ins on an odd by
112c0 74 65 20 62 6f 75 6e 64 61 72 79 2e 0a 2a 2f 0a  te boundary..*/.
112d0 73 74 61 74 69 63 20 69 6e 74 20 75 6e 61 6c 69  static int unali
112e0 67 6e 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75 6e  gned_string_coun
112f0 74 65 72 20 3d 20 30 3b 0a 73 74 61 74 69 63 20  ter = 0;.static 
11300 69 6e 74 20 61 6c 69 67 6e 6d 65 6e 74 43 6f 6c  int alignmentCol
11310 6c 46 75 6e 63 28 0a 20 20 76 6f 69 64 20 2a 4e  lFunc(.  void *N
11320 6f 74 55 73 65 64 2c 0a 20 20 69 6e 74 20 6e 4b  otUsed,.  int nK
11330 65 79 31 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey1, const void 
11340 2a 70 4b 65 79 31 2c 0a 20 20 69 6e 74 20 6e 4b  *pKey1,.  int nK
11350 65 79 32 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  ey2, const void 
11360 2a 70 4b 65 79 32 0a 29 7b 0a 20 20 69 6e 74 20  *pKey2.){.  int 
11370 72 63 2c 20 6e 3b 0a 20 20 6e 20 3d 20 6e 4b 65  rc, n;.  n = nKe
11380 79 31 3c 6e 4b 65 79 32 20 3f 20 6e 4b 65 79 31  y1<nKey2 ? nKey1
11390 20 3a 20 6e 4b 65 79 32 3b 0a 20 20 69 66 28 20   : nKey2;.  if( 
113a0 6e 4b 65 79 31 3e 30 20 26 26 20 31 3d 3d 28 31  nKey1>0 && 1==(1
113b0 26 28 69 6e 74 29 70 4b 65 79 31 29 20 29 20 75  &(int)pKey1) ) u
113c0 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e 67 5f  naligned_string_
113d0 63 6f 75 6e 74 65 72 2b 2b 3b 0a 20 20 69 66 28  counter++;.  if(
113e0 20 6e 4b 65 79 32 3e 30 20 26 26 20 31 3d 3d 28   nKey2>0 && 1==(
113f0 31 26 28 69 6e 74 29 70 4b 65 79 32 29 20 29 20  1&(int)pKey2) ) 
11400 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69 6e 67  unaligned_string
11410 5f 63 6f 75 6e 74 65 72 2b 2b 3b 0a 20 20 72 63  _counter++;.  rc
11420 20 3d 20 6d 65 6d 63 6d 70 28 70 4b 65 79 31 2c   = memcmp(pKey1,
11430 20 70 4b 65 79 32 2c 20 6e 29 3b 0a 20 20 69 66   pKey2, n);.  if
11440 28 20 72 63 3d 3d 30 20 29 7b 0a 20 20 20 20 72  ( rc==0 ){.    r
11450 63 20 3d 20 6e 4b 65 79 31 20 2d 20 6e 4b 65 79  c = nKey1 - nKey
11460 32 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  2;.  }.  return 
11470 72 63 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e 74  rc;.}.static int
11480 20 61 64 64 5f 61 6c 69 67 6e 6d 65 6e 74 5f 74   add_alignment_t
11490 65 73 74 5f 63 6f 6c 6c 61 74 69 6f 6e 73 28 0a  est_collations(.
114a0 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
114b0 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
114c0 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
114d0 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
114e0 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
114f0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
11500 0a 20 20 69 66 28 20 6f 62 6a 63 3e 3d 32 20 29  .  if( objc>=2 )
11510 7b 0a 20 20 20 20 69 66 28 20 67 65 74 44 62 50  {.    if( getDbP
11520 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
11530 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
11540 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65  v[1]), &db) ) re
11550 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
11560 20 20 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61      sqlite3_crea
11570 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 64 62 2c  te_collation(db,
11580 20 22 75 74 66 31 36 5f 75 6e 61 6c 69 67 6e 65   "utf16_unaligne
11590 64 22 2c 0a 20 20 20 20 20 20 20 20 53 51 4c 49  d",.        SQLI
115a0 54 45 5f 55 54 46 31 36 2c 20 0a 20 20 20 20 20  TE_UTF16, .     
115b0 20 20 20 30 2c 20 61 6c 69 67 6e 6d 65 6e 74 43     0, alignmentC
115c0 6f 6c 6c 46 75 6e 63 29 3b 0a 20 20 20 20 73 71  ollFunc);.    sq
115d0 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
115e0 6c 61 74 69 6f 6e 28 64 62 2c 20 22 75 74 66 31  lation(db, "utf1
115f0 36 5f 61 6c 69 67 6e 65 64 22 2c 0a 20 20 20 20  6_aligned",.    
11600 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36      SQLITE_UTF16
11610 20 7c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 5f   | SQLITE_UTF16_
11620 41 4c 49 47 4e 45 44 2c 20 0a 20 20 20 20 20 20  ALIGNED, .      
11630 20 20 30 2c 20 61 6c 69 67 6e 6d 65 6e 74 43 6f    0, alignmentCo
11640 6c 6c 46 75 6e 63 29 3b 0a 20 20 7d 0a 20 20 72  llFunc);.  }.  r
11650 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
11660 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  .}.#endif /* !de
11670 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
11680 54 5f 55 54 46 31 36 29 20 2a 2f 0a 0a 2f 2a 0a  T_UTF16) */../*.
11690 2a 2a 20 55 73 61 67 65 3a 20 61 64 64 5f 74 65  ** Usage: add_te
116a0 73 74 5f 66 75 6e 63 74 69 6f 6e 20 3c 64 62 20  st_function <db 
116b0 70 74 72 3e 20 3c 75 74 66 38 3e 20 3c 75 74 66  ptr> <utf8> <utf
116c0 31 36 6c 65 3e 20 3c 75 74 66 31 36 62 65 3e 0a  16le> <utf16be>.
116d0 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  **.** This funct
116e0 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 74  ion is used to t
116f0 65 73 74 20 74 68 61 74 20 53 51 4c 69 74 65 20  est that SQLite 
11700 73 65 6c 65 63 74 73 20 74 68 65 20 63 6f 72 72  selects the corr
11710 65 63 74 20 75 73 65 72 0a 2a 2a 20 66 75 6e 63  ect user.** func
11720 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 77 68  tion callback wh
11730 65 6e 20 6d 75 6c 74 69 70 6c 65 20 76 65 72 73  en multiple vers
11740 69 6f 6e 73 20 28 66 6f 72 20 64 69 66 66 65 72  ions (for differ
11750 65 6e 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  ent text encodin
11760 67 73 29 0a 2a 2a 20 61 72 65 20 61 76 61 69 6c  gs).** are avail
11770 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 43 61 6c 6c  able..**.** Call
11780 69 6e 67 20 74 68 69 73 20 72 6f 75 74 69 6e 65  ing this routine
11790 20 72 65 67 69 73 74 65 72 73 20 75 70 20 74 6f   registers up to
117a0 20 74 68 72 65 65 20 76 65 72 73 69 6f 6e 73 20   three versions 
117b0 6f 66 20 74 68 65 20 75 73 65 72 20 66 75 6e 63  of the user func
117c0 74 69 6f 6e 0a 2a 2a 20 22 74 65 73 74 5f 66 75  tion.** "test_fu
117d0 6e 63 74 69 6f 6e 22 20 77 69 74 68 20 64 61 74  nction" with dat
117e0 61 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 64 62  abase handle <db
117f0 3e 2e 20 20 49 66 20 74 68 65 20 73 65 63 6f 6e  >.  If the secon
11800 64 20 61 72 67 75 6d 65 6e 74 20 69 73 0a 2a 2a  d argument is.**
11810 20 74 72 75 65 2c 20 74 68 65 6e 20 61 20 76 65   true, then a ve
11820 72 73 69 6f 6e 20 6f 66 20 74 65 73 74 5f 66 75  rsion of test_fu
11830 6e 63 74 69 6f 6e 20 69 73 20 72 65 67 69 73 74  nction is regist
11840 65 72 65 64 20 66 6f 72 20 55 54 46 2d 38 2c 20  ered for UTF-8, 
11850 69 66 20 74 68 65 0a 2a 2a 20 74 68 69 72 64 20  if the.** third 
11860 69 73 20 74 72 75 65 2c 20 61 20 76 65 72 73 69  is true, a versi
11870 6f 6e 20 69 73 20 72 65 67 69 73 74 65 72 65 64  on is registered
11880 20 66 6f 72 20 55 54 46 2d 31 36 6c 65 2c 20 69   for UTF-16le, i
11890 66 20 74 68 65 20 66 6f 75 72 74 68 20 69 73 0a  f the fourth is.
118a0 2a 2a 20 74 72 75 65 2c 20 61 20 55 54 46 2d 31  ** true, a UTF-1
118b0 36 62 65 20 76 65 72 73 69 6f 6e 20 69 73 20 61  6be version is a
118c0 76 61 69 6c 61 62 6c 65 2e 20 20 50 72 65 76 69  vailable.  Previ
118d0 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ous versions of.
118e0 2a 2a 20 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  ** test_function
118f0 20 61 72 65 20 64 65 6c 65 74 65 64 2e 0a 2a 2a   are deleted..**
11900 0a 2a 2a 20 54 68 65 20 75 73 65 72 20 66 75 6e  .** The user fun
11910 63 74 69 6f 6e 20 69 73 20 69 6d 70 6c 65 6d 65  ction is impleme
11920 6e 74 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20  nted by calling 
11930 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 54 43  the following TC
11940 4c 20 73 63 72 69 70 74 3a 0a 2a 2a 0a 2a 2a 20  L script:.**.** 
11950 20 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e    "test_function
11960 20 3c 65 6e 63 3e 20 3c 61 72 67 3e 22 0a 2a 2a   <enc> <arg>".**
11970 0a 2a 2a 20 57 68 65 72 65 20 3c 65 6e 63 3e 20  .** Where <enc> 
11980 69 73 20 6f 6e 65 20 6f 66 20 55 54 46 2d 38 2c  is one of UTF-8,
11990 20 55 54 46 2d 31 36 4c 45 20 6f 72 20 55 54 46   UTF-16LE or UTF
119a0 31 36 42 45 2c 20 61 6e 64 20 3c 61 72 67 3e 20  16BE, and <arg> 
119b0 69 73 20 74 68 65 0a 2a 2a 20 73 69 6e 67 6c 65  is the.** single
119c0 20 61 72 67 75 6d 65 6e 74 20 70 61 73 73 65 64   argument passed
119d0 20 74 6f 20 74 68 65 20 53 51 4c 20 66 75 6e 63   to the SQL func
119e0 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20  tion. The value 
119f0 72 65 74 75 72 6e 65 64 20 62 79 0a 2a 2a 20 74  returned by.** t
11a00 68 65 20 54 43 4c 20 73 63 72 69 70 74 20 69 73  he TCL script is
11a10 20 75 73 65 64 20 61 73 20 74 68 65 20 72 65 74   used as the ret
11a20 75 72 6e 20 76 61 6c 75 65 20 6f 66 20 74 68 65  urn value of the
11a30 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2e 20 49   SQL function. I
11a40 74 0a 2a 2a 20 69 73 20 70 61 73 73 65 64 20 74  t.** is passed t
11a50 6f 20 53 51 4c 69 74 65 20 75 73 69 6e 67 20 55  o SQLite using U
11a60 54 46 2d 31 36 42 45 20 66 6f 72 20 61 20 55 54  TF-16BE for a UT
11a70 46 2d 38 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  F-8 test_functio
11a80 6e 28 29 2c 20 55 54 46 2d 38 0a 2a 2a 20 66 6f  n(), UTF-8.** fo
11a90 72 20 61 20 55 54 46 2d 31 36 4c 45 20 74 65 73  r a UTF-16LE tes
11aa0 74 5f 66 75 6e 63 74 69 6f 6e 28 29 2c 20 61 6e  t_function(), an
11ab0 64 20 55 54 46 2d 31 36 4c 45 20 66 6f 72 20 61  d UTF-16LE for a
11ac0 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
11ad0 20 74 68 61 74 0a 2a 2a 20 70 72 65 66 65 72 73   that.** prefers
11ae0 20 55 54 46 2d 31 36 42 45 2e 0a 2a 2f 0a 23 69   UTF-16BE..*/.#i
11af0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
11b00 54 5f 55 54 46 31 36 0a 73 74 61 74 69 63 20 76  T_UTF16.static v
11b10 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  oid test_functio
11b20 6e 5f 75 74 66 38 28 0a 20 20 73 71 6c 69 74 65  n_utf8(.  sqlite
11b30 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c  3_context *pCtx,
11b40 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20   .  int nArg,.  
11b50 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
11b60 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e  argv.){.  Tcl_In
11b70 74 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20  terp *interp;.  
11b80 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73  Tcl_Obj *pX;.  s
11b90 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
11ba0 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20 28  al;.  interp = (
11bb0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c  Tcl_Interp *)sql
11bc0 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 70  ite3_user_data(p
11bd0 43 74 78 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c  Ctx);.  pX = Tcl
11be0 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74  _NewStringObj("t
11bf0 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d  est_function", -
11c00 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65  1);.  Tcl_IncrRe
11c10 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63  fCount(pX);.  Tc
11c20 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45  l_ListObjAppendE
11c30 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70  lement(interp, p
11c40 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67  X, Tcl_NewString
11c50 4f 62 6a 28 22 55 54 46 2d 38 22 2c 20 2d 31 29  Obj("UTF-8", -1)
11c60 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  );.  Tcl_ListObj
11c70 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e  AppendElement(in
11c80 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20 20 20  terp, pX, .     
11c90 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62   Tcl_NewStringOb
11ca0 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  j((char*)sqlite3
11cb0 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76  _value_text(argv
11cc0 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20 54 63  [0]), -1));.  Tc
11cd0 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e 74 65  l_EvalObjEx(inte
11ce0 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20 54 63  rp, pX, 0);.  Tc
11cf0 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 70  l_DecrRefCount(p
11d00 58 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  X);.  sqlite3_re
11d10 73 75 6c 74 5f 74 65 78 74 28 70 43 74 78 2c 20  sult_text(pCtx, 
11d20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73  Tcl_GetStringRes
11d30 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 2d 31 2c  ult(interp), -1,
11d40 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
11d50 54 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73 71 6c  T);.  pVal = sql
11d60 69 74 65 33 56 61 6c 75 65 4e 65 77 28 30 29 3b  ite3ValueNew(0);
11d70 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  .  sqlite3ValueS
11d80 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31 2c 20  etStr(pVal, -1, 
11d90 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52 65 73  Tcl_GetStringRes
11da0 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a 20 20  ult(interp), .  
11db0 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 2c      SQLITE_UTF8,
11dc0 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
11dd0 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
11de0 74 5f 74 65 78 74 31 36 62 65 28 70 43 74 78 2c  t_text16be(pCtx,
11df0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
11e00 65 78 74 31 36 62 65 28 70 56 61 6c 29 2c 0a 20  ext16be(pVal),. 
11e10 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f       -1, SQLITE_
11e20 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71  TRANSIENT);.  sq
11e30 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 70  lite3ValueFree(p
11e40 56 61 6c 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76  Val);.}.static v
11e50 6f 69 64 20 74 65 73 74 5f 66 75 6e 63 74 69 6f  oid test_functio
11e60 6e 5f 75 74 66 31 36 6c 65 28 0a 20 20 73 71 6c  n_utf16le(.  sql
11e70 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
11e80 74 78 2c 20 0a 20 20 69 6e 74 20 6e 41 72 67 2c  tx, .  int nArg,
11e90 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
11ea0 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20 54 63 6c   **argv.){.  Tcl
11eb0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 3b  _Interp *interp;
11ec0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a  .  Tcl_Obj *pX;.
11ed0 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
11ee0 2a 70 56 61 6c 3b 0a 20 20 69 6e 74 65 72 70 20  *pVal;.  interp 
11ef0 3d 20 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 29  = (Tcl_Interp *)
11f00 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
11f10 61 28 70 43 74 78 29 3b 0a 20 20 70 58 20 3d 20  a(pCtx);.  pX = 
11f20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
11f30 28 22 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 22  ("test_function"
11f40 2c 20 2d 31 29 3b 0a 20 20 54 63 6c 5f 49 6e 63  , -1);.  Tcl_Inc
11f50 72 52 65 66 43 6f 75 6e 74 28 70 58 29 3b 0a 20  rRefCount(pX);. 
11f60 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65   Tcl_ListObjAppe
11f70 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70  ndElement(interp
11f80 2c 20 70 58 2c 20 54 63 6c 5f 4e 65 77 53 74 72  , pX, Tcl_NewStr
11f90 69 6e 67 4f 62 6a 28 22 55 54 46 2d 31 36 4c 45  ingObj("UTF-16LE
11fa0 22 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c  ", -1));.  Tcl_L
11fb0 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
11fc0 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58 2c 20  ent(interp, pX, 
11fd0 0a 20 20 20 20 20 20 54 63 6c 5f 4e 65 77 53 74  .      Tcl_NewSt
11fe0 72 69 6e 67 4f 62 6a 28 28 63 68 61 72 2a 29 73  ringObj((char*)s
11ff0 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
12000 74 28 61 72 67 76 5b 30 5d 29 2c 20 2d 31 29 29  t(argv[0]), -1))
12010 3b 0a 20 20 54 63 6c 5f 45 76 61 6c 4f 62 6a 45  ;.  Tcl_EvalObjE
12020 78 28 69 6e 74 65 72 70 2c 20 70 58 2c 20 30 29  x(interp, pX, 0)
12030 3b 0a 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43  ;.  Tcl_DecrRefC
12040 6f 75 6e 74 28 70 58 29 3b 0a 20 20 70 56 61 6c  ount(pX);.  pVal
12050 20 3d 20 73 71 6c 69 74 65 33 56 61 6c 75 65 4e   = sqlite3ValueN
12060 65 77 28 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  ew(0);.  sqlite3
12070 56 61 6c 75 65 53 65 74 53 74 72 28 70 56 61 6c  ValueSetStr(pVal
12080 2c 20 2d 31 2c 20 54 63 6c 5f 47 65 74 53 74 72  , -1, Tcl_GetStr
12090 69 6e 67 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ingResult(interp
120a0 29 2c 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45  ), .      SQLITE
120b0 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
120c0 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33  ATIC);.  sqlite3
120d0 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43 74  _result_text(pCt
120e0 78 2c 28 63 68 61 72 2a 29 73 71 6c 69 74 65 33  x,(char*)sqlite3
120f0 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 56 61 6c  _value_text(pVal
12100 29 2c 2d 31 2c 53 51 4c 49 54 45 5f 54 52 41 4e  ),-1,SQLITE_TRAN
12110 53 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65  SIENT);.  sqlite
12120 33 56 61 6c 75 65 46 72 65 65 28 70 56 61 6c 29  3ValueFree(pVal)
12130 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  ;.}.static void 
12140 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 5f 75 74  test_function_ut
12150 66 31 36 62 65 28 0a 20 20 73 71 6c 69 74 65 33  f16be(.  sqlite3
12160 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 2c 20  _context *pCtx, 
12170 0a 20 20 69 6e 74 20 6e 41 72 67 2c 0a 20 20 73  .  int nArg,.  s
12180 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
12190 72 67 76 0a 29 7b 0a 20 20 54 63 6c 5f 49 6e 74  rgv.){.  Tcl_Int
121a0 65 72 70 20 2a 69 6e 74 65 72 70 3b 0a 20 20 54  erp *interp;.  T
121b0 63 6c 5f 4f 62 6a 20 2a 70 58 3b 0a 20 20 73 71  cl_Obj *pX;.  sq
121c0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
121d0 6c 3b 0a 20 20 69 6e 74 65 72 70 20 3d 20 28 54  l;.  interp = (T
121e0 63 6c 5f 49 6e 74 65 72 70 20 2a 29 73 71 6c 69  cl_Interp *)sqli
121f0 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 70 43  te3_user_data(pC
12200 74 78 29 3b 0a 20 20 70 58 20 3d 20 54 63 6c 5f  tx);.  pX = Tcl_
12210 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 74 65  NewStringObj("te
12220 73 74 5f 66 75 6e 63 74 69 6f 6e 22 2c 20 2d 31  st_function", -1
12230 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52 65 66  );.  Tcl_IncrRef
12240 43 6f 75 6e 74 28 70 58 29 3b 0a 20 20 54 63 6c  Count(pX);.  Tcl
12250 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
12260 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 58  ement(interp, pX
12270 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
12280 62 6a 28 22 55 54 46 2d 31 36 42 45 22 2c 20 2d  bj("UTF-16BE", -
12290 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  1));.  Tcl_ListO
122a0 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
122b0 69 6e 74 65 72 70 2c 20 70 58 2c 20 0a 20 20 20  interp, pX, .   
122c0 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67     Tcl_NewString
122d0 4f 62 6a 28 28 63 68 61 72 2a 29 73 71 6c 69 74  Obj((char*)sqlit
122e0 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72  e3_value_text(ar
122f0 67 76 5b 30 5d 29 2c 20 2d 31 29 29 3b 0a 20 20  gv[0]), -1));.  
12300 54 63 6c 5f 45 76 61 6c 4f 62 6a 45 78 28 69 6e  Tcl_EvalObjEx(in
12310 74 65 72 70 2c 20 70 58 2c 20 30 29 3b 0a 20 20  terp, pX, 0);.  
12320 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
12330 28 70 58 29 3b 0a 20 20 70 56 61 6c 20 3d 20 73  (pX);.  pVal = s
12340 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 30  qlite3ValueNew(0
12350 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75  );.  sqlite3Valu
12360 65 53 65 74 53 74 72 28 70 56 61 6c 2c 20 2d 31  eSetStr(pVal, -1
12370 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 52  , Tcl_GetStringR
12380 65 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 0a  esult(interp), .
12390 20 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46        SQLITE_UTF
123a0 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  8, SQLITE_STATIC
123b0 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73  );.  sqlite3_res
123c0 75 6c 74 5f 74 65 78 74 31 36 28 70 43 74 78 2c  ult_text16(pCtx,
123d0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
123e0 65 78 74 31 36 6c 65 28 70 56 61 6c 29 2c 0a 20  ext16le(pVal),. 
123f0 20 20 20 20 20 2d 31 2c 20 53 51 4c 49 54 45 5f       -1, SQLITE_
12400 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 73 71  TRANSIENT);.  sq
12410 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
12420 74 31 36 62 65 28 70 43 74 78 2c 20 73 71 6c 69  t16be(pCtx, sqli
12430 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 31 36  te3_value_text16
12440 6c 65 28 70 56 61 6c 29 2c 0a 20 20 20 20 20 20  le(pVal),.      
12450 2d 31 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  -1, SQLITE_TRANS
12460 49 45 4e 54 29 3b 0a 20 20 73 71 6c 69 74 65 33  IENT);.  sqlite3
12470 5f 72 65 73 75 6c 74 5f 74 65 78 74 31 36 6c 65  _result_text16le
12480 28 70 43 74 78 2c 20 73 71 6c 69 74 65 33 5f 76  (pCtx, sqlite3_v
12490 61 6c 75 65 5f 74 65 78 74 31 36 6c 65 28 70 56  alue_text16le(pV
124a0 61 6c 29 2c 0a 20 20 20 20 20 20 2d 31 2c 20 53  al),.      -1, S
124b0 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
124c0 3b 0a 20 20 73 71 6c 69 74 65 33 56 61 6c 75 65  ;.  sqlite3Value
124d0 46 72 65 65 28 70 56 61 6c 29 3b 0a 7d 0a 23 65  Free(pVal);.}.#e
124e0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
124f0 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 73 74 61  MIT_UTF16 */.sta
12500 74 69 63 20 69 6e 74 20 74 65 73 74 5f 66 75 6e  tic int test_fun
12510 63 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20  ction(.  void * 
12520 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
12530 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
12540 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
12550 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
12560 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66  bjv[].){.#ifndef
12570 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
12580 31 36 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  16.  sqlite3 *db
12590 3b 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 0a 20 20  ;.  int val;..  
125a0 69 66 28 20 6f 62 6a 63 21 3d 35 20 29 20 67 6f  if( objc!=5 ) go
125b0 74 6f 20 62 61 64 5f 61 72 67 73 3b 0a 20 20 69  to bad_args;.  i
125c0 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
125d0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
125e0 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
125f0 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
12600 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 69 66 28 20  L_ERROR;..  if( 
12610 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42  TCL_OK!=Tcl_GetB
12620 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e  ooleanFromObj(in
12630 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
12640 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  val) ) return TC
12650 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76  L_ERROR;.  if( v
12660 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  al ){.    sqlite
12670 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
12680 6e 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63  n(db, "test_func
12690 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45  tion", 1, SQLITE
126a0 5f 55 54 46 38 2c 20 0a 20 20 20 20 20 20 20 20  _UTF8, .        
126b0 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66 75 6e  interp, test_fun
126c0 63 74 69 6f 6e 5f 75 74 66 38 2c 20 30 2c 20 30  ction_utf8, 0, 0
126d0 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 54 43 4c  );.  }.  if( TCL
126e0 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42 6f 6f 6c  _OK!=Tcl_GetBool
126f0 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  eanFromObj(inter
12700 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c  p, objv[3], &val
12710 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
12720 52 52 4f 52 3b 0a 20 20 69 66 28 20 76 61 6c 20  RROR;.  if( val 
12730 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 63  ){.    sqlite3_c
12740 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64  reate_function(d
12750 62 2c 20 22 74 65 73 74 5f 66 75 6e 63 74 69 6f  b, "test_functio
12760 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54  n", 1, SQLITE_UT
12770 46 31 36 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  F16LE, .        
12780 69 6e 74 65 72 70 2c 20 74 65 73 74 5f 66 75 6e  interp, test_fun
12790 63 74 69 6f 6e 5f 75 74 66 31 36 6c 65 2c 20 30  ction_utf16le, 0
127a0 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  , 0);.  }.  if( 
127b0 54 43 4c 5f 4f 4b 21 3d 54 63 6c 5f 47 65 74 42  TCL_OK!=Tcl_GetB
127c0 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e  ooleanFromObj(in
127d0 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26  terp, objv[4], &
127e0 76 61 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  val) ) return TC
127f0 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 76  L_ERROR;.  if( v
12800 61 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  al ){.    sqlite
12810 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  3_create_functio
12820 6e 28 64 62 2c 20 22 74 65 73 74 5f 66 75 6e 63  n(db, "test_func
12830 74 69 6f 6e 22 2c 20 31 2c 20 53 51 4c 49 54 45  tion", 1, SQLITE
12840 5f 55 54 46 31 36 42 45 2c 20 0a 20 20 20 20 20  _UTF16BE, .     
12850 20 20 20 69 6e 74 65 72 70 2c 20 74 65 73 74 5f     interp, test_
12860 66 75 6e 63 74 69 6f 6e 5f 75 74 66 31 36 62 65  function_utf16be
12870 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20  , 0, 0);.  }..  
12880 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 62  return TCL_OK;.b
12890 61 64 5f 61 72 67 73 3a 0a 20 20 54 63 6c 5f 41  ad_args:.  Tcl_A
128a0 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
128b0 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
128c0 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
128d0 2c 0a 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  ,.      Tcl_GetS
128e0 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
128f0 76 5b 30 5d 2c 20 30 29 2c 20 22 20 3c 44 42 3e  v[0], 0), " <DB>
12900 20 3c 75 74 66 38 3e 20 3c 75 74 66 31 36 6c 65   <utf8> <utf16le
12910 3e 20 3c 75 74 66 31 36 62 65 3e 22 2c 20 30 29  > <utf16be>", 0)
12920 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
12930 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
12940 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52  .  return TCL_ER
12950 52 4f 52 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  ROR;.}../*.** Us
12960 61 67 65 3a 20 20 20 20 20 20 20 20 20 74 65 73  age:         tes
12970 74 5f 65 72 72 73 74 72 20 3c 65 72 72 20 63 6f  t_errstr <err co
12980 64 65 3e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74  de>.**.** Test t
12990 68 61 74 20 74 68 65 20 65 6e 67 6c 69 73 68 20  hat the english 
129a0 6c 61 6e 67 75 61 67 65 20 73 74 72 69 6e 67 20  language string 
129b0 65 71 75 69 76 61 6c 65 6e 74 73 20 66 6f 72 20  equivalents for 
129c0 73 71 6c 69 74 65 20 65 72 72 6f 72 20 63 6f 64  sqlite error cod
129d0 65 73 0a 2a 2a 20 61 72 65 20 73 61 6e 65 2e 20  es.** are sane. 
129e0 54 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73  The parameter is
129f0 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
12a00 65 73 65 6e 74 69 6e 67 20 61 6e 20 73 71 6c 69  esenting an sqli
12a10 74 65 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a  te error code..*
12a20 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20  * The result is 
12a30 61 20 6c 69 73 74 20 6f 66 20 74 77 6f 20 65 6c  a list of two el
12a40 65 6d 65 6e 74 73 2c 20 74 68 65 20 73 74 72 69  ements, the stri
12a50 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ng representatio
12a60 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 65 72 72 6f  n of the.** erro
12a70 72 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20 65  r code and the e
12a80 6e 67 6c 69 73 68 20 6c 61 6e 67 75 61 67 65 20  nglish language 
12a90 65 78 70 6c 61 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a  explanation..*/.
12aa0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
12ab0 65 72 72 73 74 72 28 0a 20 20 76 6f 69 64 20 2a  errstr(.  void *
12ac0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
12ad0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
12ae0 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
12af0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
12b00 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 63 68 61 72  objv[].){.  char
12b10 20 2a 7a 43 6f 64 65 3b 0a 20 20 69 6e 74 20 69   *zCode;.  int i
12b20 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 31 20  ;.  if( objc!=1 
12b30 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
12b40 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
12b50 31 2c 20 6f 62 6a 76 2c 20 22 3c 65 72 72 6f 72  1, objv, "<error
12b60 20 63 6f 64 65 3e 22 29 3b 0a 20 20 7d 0a 0a 20   code>");.  }.. 
12b70 20 7a 43 6f 64 65 20 3d 20 54 63 6c 5f 47 65 74   zCode = Tcl_Get
12b80 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 3b  String(objv[1]);
12b90 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 32 30  .  for(i=0; i<20
12ba0 30 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  0; i++){.    if(
12bb0 20 30 3d 3d 73 74 72 63 6d 70 28 74 31 45 72 72   0==strcmp(t1Err
12bc0 6f 72 4e 61 6d 65 28 69 29 2c 20 7a 43 6f 64 65  orName(i), zCode
12bd0 29 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20  ) ) break;.  }. 
12be0 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
12bf0 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29 73  nterp, (char *)s
12c00 71 6c 69 74 65 33 45 72 72 53 74 72 28 69 29 2c  qlite3ErrStr(i),
12c10 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
12c20 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
12c30 73 61 67 65 3a 20 20 20 20 62 72 65 61 6b 70 6f  sage:    breakpo
12c40 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72  int.**.** This r
12c50 6f 75 74 69 6e 65 20 65 78 69 73 74 73 20 66 6f  outine exists fo
12c60 72 20 6f 6e 65 20 70 75 72 70 6f 73 65 20 2d 20  r one purpose - 
12c70 74 6f 20 70 72 6f 76 69 64 65 20 61 20 70 6c 61  to provide a pla
12c80 63 65 20 74 6f 20 70 75 74 20 61 0a 2a 2a 20 62  ce to put a.** b
12c90 72 65 61 6b 70 6f 69 6e 74 20 77 69 74 68 20 47  reakpoint with G
12ca0 44 42 20 74 68 61 74 20 63 61 6e 20 62 65 20 74  DB that can be t
12cb0 72 69 67 67 65 72 65 64 20 75 73 69 6e 67 20 54  riggered using T
12cc0 43 4c 20 63 6f 64 65 2e 20 20 54 68 65 20 75 73  CL code.  The us
12cd0 65 0a 2a 2a 20 66 6f 72 20 74 68 69 73 20 69 73  e.** for this is
12ce0 20 77 68 65 6e 20 61 20 70 61 72 74 69 63 75 6c   when a particul
12cf0 61 72 20 74 65 73 74 20 66 61 69 6c 73 20 6f 6e  ar test fails on
12d00 20 28 73 61 79 29 20 74 68 65 20 31 34 38 35 74   (say) the 1485t
12d10 68 20 69 74 65 72 61 74 69 6f 6e 2e 0a 2a 2a 20  h iteration..** 
12d20 49 6e 20 74 68 65 20 54 43 4c 20 74 65 73 74 20  In the TCL test 
12d30 73 63 72 69 70 74 2c 20 77 65 20 63 61 6e 20 61  script, we can a
12d40 64 64 20 63 6f 64 65 20 6c 69 6b 65 20 74 68 69  dd code like thi
12d50 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 69 66 20  s:.**.**     if 
12d60 7b 24 69 3d 3d 31 34 38 35 7d 20 62 72 65 61 6b  {$i==1485} break
12d70 70 6f 69 6e 74 0a 2a 2a 0a 2a 2a 20 54 68 65 6e  point.**.** Then
12d80 20 72 75 6e 20 74 65 73 74 66 69 78 74 75 72 65   run testfixture
12d90 20 69 6e 20 74 68 65 20 64 65 62 75 67 67 65 72   in the debugger
12da0 20 61 6e 64 20 77 61 69 74 20 66 6f 72 20 74 68   and wait for th
12db0 65 20 62 72 65 61 6b 70 6f 69 6e 74 20 74 6f 0a  e breakpoint to.
12dc0 2a 2a 20 66 69 72 65 2e 20 20 54 68 65 6e 20 61  ** fire.  Then a
12dd0 64 64 69 74 69 6f 6e 61 6c 20 62 72 65 61 6b 70  dditional breakp
12de0 6f 69 6e 74 73 20 63 61 6e 20 62 65 20 73 65 74  oints can be set
12df0 20 74 6f 20 74 72 61 63 65 20 64 6f 77 6e 20 74   to trace down t
12e00 68 65 20 62 75 67 2e 0a 2a 2f 0a 73 74 61 74 69  he bug..*/.stati
12e10 63 20 69 6e 74 20 74 65 73 74 5f 62 72 65 61 6b  c int test_break
12e20 70 6f 69 6e 74 28 0a 20 20 76 6f 69 64 20 2a 4e  point(.  void *N
12e30 6f 74 55 73 65 64 2c 0a 20 20 54 63 6c 5f 49 6e  otUsed,.  Tcl_In
12e40 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
12e50 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
12e60 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
12e70 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
12e80 64 20 2a 2f 0a 20 20 69 6e 74 20 61 72 67 63 2c  d */.  int argc,
12e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12ea0 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
12eb0 65 6e 74 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ents */.  char *
12ec0 2a 61 72 67 76 20 20 20 20 20 20 20 20 20 20 20  *argv           
12ed0 20 2f 2a 20 54 65 78 74 20 6f 66 20 65 61 63 68   /* Text of each
12ee0 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 29 7b 0a   argument */.){.
12ef0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
12f00 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
12f10 6f 74 68 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f 2a 0a  othing */.}../*.
12f20 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
12f30 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f  te3_bind_zeroblo
12f40 62 20 20 53 54 4d 54 20 49 44 58 20 4e 0a 2a 2a  b  STMT IDX N.**
12f50 0a 2a 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c  .** Test the sql
12f60 69 74 65 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c  ite3_bind_zerobl
12f70 6f 62 20 69 6e 74 65 72 66 61 63 65 2e 20 20 53  ob interface.  S
12f80 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72 65  TMT is a prepare
12f90 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  d statement..** 
12fa0 49 44 58 20 69 73 20 74 68 65 20 69 6e 64 65 78  IDX is the index
12fb0 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69   of a wildcard i
12fc0 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
12fd0 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20  tatement.  This 
12fe0 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73  command.** binds
12ff0 20 61 20 4e 2d 62 79 74 65 20 7a 65 72 6f 2d 66   a N-byte zero-f
13000 69 6c 6c 65 64 20 42 4c 4f 42 20 74 6f 20 74 68  illed BLOB to th
13010 65 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73  e wildcard..*/.s
13020 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62  tatic int test_b
13030 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62 28 0a 20 20  ind_zeroblob(.  
13040 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
13050 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
13060 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
13070 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
13080 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
13090 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
130a0 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78  pStmt;.  int idx
130b0 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  ;.  int n;.  int
130c0 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
130d0 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57  !=4 ){.    Tcl_W
130e0 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65  rongNumArgs(inte
130f0 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54  rp, 1, objv, "ST
13100 4d 54 20 49 44 58 20 4e 22 29 3b 0a 20 20 20 20  MT IDX N");.    
13110 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
13120 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
13130 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
13140 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
13150 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
13160 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
13170 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
13180 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
13190 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
131a0 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20   &idx) ) return 
131b0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
131c0 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
131d0 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
131e0 33 5d 2c 20 26 6e 29 20 29 20 72 65 74 75 72 6e  3], &n) ) return
131f0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
13200 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
13210 5f 7a 65 72 6f 62 6c 6f 62 28 70 53 74 6d 74 2c  _zeroblob(pStmt,
13220 20 69 64 78 2c 20 6e 29 3b 0a 20 20 69 66 28 20   idx, n);.  if( 
13230 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
13240 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d 74 54  de(interp, StmtT
13250 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63 29 20  oDb(pStmt), rc) 
13260 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
13270 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  OR;.  if( rc!=SQ
13280 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
13290 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
132a0 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54  .  }..  return T
132b0 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
132c0 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33  Usage:   sqlite3
132d0 5f 62 69 6e 64 5f 69 6e 74 20 20 53 54 4d 54 20  _bind_int  STMT 
132e0 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54 65  N VALUE.**.** Te
132f0 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62  st the sqlite3_b
13300 69 6e 64 5f 69 6e 74 20 69 6e 74 65 72 66 61 63  ind_int interfac
13310 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70 72  e.  STMT is a pr
13320 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
13330 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e  ..** N is the in
13340 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72  dex of a wildcar
13350 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  d in the prepare
13360 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  d statement.  Th
13370 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69  is command.** bi
13380 6e 64 73 20 61 20 33 32 2d 62 69 74 20 69 6e 74  nds a 32-bit int
13390 65 67 65 72 20 56 41 4c 55 45 20 74 6f 20 74 68  eger VALUE to th
133a0 61 74 20 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a  at wildcard..*/.
133b0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
133c0 62 69 6e 64 5f 69 6e 74 28 0a 20 20 76 6f 69 64  bind_int(.  void
133d0 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
133e0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
133f0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
13400 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
13410 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
13420 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
13430 74 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  t;.  int idx;.  
13440 69 6e 74 20 76 61 6c 75 65 3b 0a 20 20 69 6e 74  int value;.  int
13450 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63   rc;..  if( objc
13460 21 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=4 ){.    Tcl_A
13470 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
13480 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
13490 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
134a0 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65  ,.        Tcl_Ge
134b0 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f  tStringFromObj(o
134c0 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54  bjv[0], 0), " ST
134d0 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20 30 29 3b  MT N VALUE", 0);
134e0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
134f0 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
13500 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
13510 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
13520 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
13530 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
13540 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
13550 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
13560 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
13570 76 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65  v[2], &idx) ) re
13580 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
13590 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
135a0 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
135b0 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29  objv[3], &value)
135c0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
135d0 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ROR;..  rc = sql
135e0 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 70 53  ite3_bind_int(pS
135f0 74 6d 74 2c 20 69 64 78 2c 20 76 61 6c 75 65 29  tmt, idx, value)
13600 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
13610 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
13620 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
13630 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  t), rc) ) return
13640 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
13650 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
13660 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
13670 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
13680 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
13690 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  .../*.** Usage: 
136a0 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69    sqlite3_bind_i
136b0 6e 74 36 34 20 20 53 54 4d 54 20 4e 20 56 41 4c  nt64  STMT N VAL
136c0 55 45 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  UE.**.** Test th
136d0 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  e sqlite3_bind_i
136e0 6e 74 36 34 20 69 6e 74 65 72 66 61 63 65 2e 20  nt64 interface. 
136f0 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61   STMT is a prepa
13700 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  red statement..*
13710 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78  * N is the index
13720 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69   of a wildcard i
13730 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
13740 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20  tatement.  This 
13750 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73  command.** binds
13760 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
13770 72 20 56 41 4c 55 45 20 74 6f 20 74 68 61 74 20  r VALUE to that 
13780 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61  wildcard..*/.sta
13790 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
137a0 64 5f 69 6e 74 36 34 28 0a 20 20 76 6f 69 64 20  d_int64(.  void 
137b0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
137c0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
137d0 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
137e0 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
137f0 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
13800 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74  ite3_stmt *pStmt
13810 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69  ;.  int idx;.  i
13820 36 34 20 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20  64 value;.  int 
13830 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  rc;..  if( objc!
13840 3d 34 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =4 ){.    Tcl_Ap
13850 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
13860 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
13870 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
13880 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74  .        Tcl_Get
13890 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
138a0 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d  jv[0], 0), " STM
138b0 54 20 4e 20 56 41 4c 55 45 22 2c 20 30 29 3b 0a  T N VALUE", 0);.
138c0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
138d0 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  RROR;.  }..  if(
138e0 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
138f0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
13900 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
13910 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
13920 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
13930 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
13940 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
13950 5b 32 5d 2c 20 26 69 64 78 29 20 29 20 72 65 74  [2], &idx) ) ret
13960 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
13970 20 69 66 28 20 54 63 6c 5f 47 65 74 57 69 64 65   if( Tcl_GetWide
13980 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
13990 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 76 61 6c  p, objv[3], &val
139a0 75 65 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ue) ) return TCL
139b0 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20  _ERROR;..  rc = 
139c0 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
139d0 36 34 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76  64(pStmt, idx, v
139e0 61 6c 75 65 29 3b 0a 20 20 69 66 28 20 73 71 6c  alue);.  if( sql
139f0 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65 28  ite3TestErrCode(
13a00 69 6e 74 65 72 70 2c 20 53 74 6d 74 54 6f 44 62  interp, StmtToDb
13a10 28 70 53 74 6d 74 29 2c 20 72 63 29 20 29 20 72  (pStmt), rc) ) r
13a20 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
13a30 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
13a40 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75  E_OK ){.    retu
13a50 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
13a60 7d 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  }..  return TCL_
13a70 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 55 73  OK;.}.../*.** Us
13a80 61 67 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62  age:   sqlite3_b
13a90 69 6e 64 5f 64 6f 75 62 6c 65 20 20 53 54 4d 54  ind_double  STMT
13aa0 20 4e 20 56 41 4c 55 45 0a 2a 2a 0a 2a 2a 20 54   N VALUE.**.** T
13ab0 65 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f  est the sqlite3_
13ac0 62 69 6e 64 5f 64 6f 75 62 6c 65 20 69 6e 74 65  bind_double inte
13ad0 72 66 61 63 65 2e 20 20 53 54 4d 54 20 69 73 20  rface.  STMT is 
13ae0 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  a prepared state
13af0 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68  ment..** N is th
13b00 65 20 69 6e 64 65 78 20 6f 66 20 61 20 77 69 6c  e index of a wil
13b10 64 63 61 72 64 20 69 6e 20 74 68 65 20 70 72 65  dcard in the pre
13b20 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e  pared statement.
13b30 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a    This command.*
13b40 2a 20 62 69 6e 64 73 20 61 20 36 34 2d 62 69 74  * binds a 64-bit
13b50 20 69 6e 74 65 67 65 72 20 56 41 4c 55 45 20 74   integer VALUE t
13b60 6f 20 74 68 61 74 20 77 69 6c 64 63 61 72 64 2e  o that wildcard.
13b70 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
13b80 65 73 74 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28  est_bind_double(
13b90 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
13ba0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
13bb0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
13bc0 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
13bd0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
13be0 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
13bf0 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
13c00 69 64 78 3b 0a 20 20 64 6f 75 62 6c 65 20 76 61  idx;.  double va
13c10 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  lue;.  int rc;. 
13c20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 56 61   const char *zVa
13c30 6c 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 74  l;.  int i;.  st
13c40 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63  atic const struc
13c50 74 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68  t {.    const ch
13c60 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f  ar *zName;     /
13c70 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 73 70  * Name of the sp
13c80 65 63 69 61 6c 20 66 6c 6f 61 74 69 6e 67 20 70  ecial floating p
13c90 6f 69 6e 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  oint value */.  
13ca0 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 69    unsigned int i
13cb0 55 70 70 65 72 3b 20 20 20 2f 2a 20 55 70 70 65  Upper;   /* Uppe
13cc0 72 20 33 32 20 62 69 74 73 20 2a 2f 0a 20 20 20  r 32 bits */.   
13cd0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 69 4c   unsigned int iL
13ce0 6f 77 65 72 3b 20 20 20 2f 2a 20 4c 6f 77 65 72  ower;   /* Lower
13cf0 20 33 32 20 62 69 74 73 20 2a 2f 0a 20 20 7d 20   32 bits */.  } 
13d00 61 53 70 65 63 69 61 6c 46 70 5b 5d 20 3d 20 7b  aSpecialFp[] = {
13d10 0a 20 20 20 20 7b 20 20 22 4e 61 4e 22 2c 20 20  .    {  "NaN",  
13d20 20 20 20 20 30 78 37 66 66 66 66 66 66 66 2c 20      0x7fffffff, 
13d30 30 78 66 66 66 66 66 66 66 66 20 7d 2c 0a 20 20  0xffffffff },.  
13d40 20 20 7b 20 20 22 53 4e 61 4e 22 2c 20 20 20 20    {  "SNaN",    
13d50 20 30 78 37 66 66 37 66 66 66 66 2c 20 30 78 66   0x7ff7ffff, 0xf
13d60 66 66 66 66 66 66 66 20 7d 2c 0a 20 20 20 20 7b  fffffff },.    {
13d70 20 20 22 2d 4e 61 4e 22 2c 20 20 20 20 20 30 78    "-NaN",     0x
13d80 66 66 66 66 66 66 66 66 2c 20 30 78 66 66 66 66  ffffffff, 0xffff
13d90 66 66 66 66 20 7d 2c 0a 20 20 20 20 7b 20 20 22  ffff },.    {  "
13da0 2d 53 4e 61 4e 22 2c 20 20 20 20 30 78 66 66 66  -SNaN",    0xfff
13db0 37 66 66 66 66 2c 20 30 78 66 66 66 66 66 66 66  7ffff, 0xfffffff
13dc0 66 20 7d 2c 0a 20 20 20 20 7b 20 20 22 2b 49 6e  f },.    {  "+In
13dd0 66 22 2c 20 20 20 20 20 30 78 37 66 66 30 30 30  f",     0x7ff000
13de0 30 30 2c 20 30 78 30 30 30 30 30 30 30 30 20 7d  00, 0x00000000 }
13df0 2c 0a 20 20 20 20 7b 20 20 22 2d 49 6e 66 22 2c  ,.    {  "-Inf",
13e00 20 20 20 20 20 30 78 66 66 66 30 30 30 30 30 2c       0xfff00000,
13e10 20 30 78 30 30 30 30 30 30 30 30 20 7d 2c 0a 20   0x00000000 },. 
13e20 20 20 20 7b 20 20 22 45 70 73 69 6c 6f 6e 22 2c     {  "Epsilon",
13e30 20 20 30 78 30 30 30 30 30 30 30 30 2c 20 30 78    0x00000000, 0x
13e40 30 30 30 30 30 30 30 31 20 7d 2c 0a 20 20 20 20  00000001 },.    
13e50 7b 20 20 22 2d 45 70 73 69 6c 6f 6e 22 2c 20 30  {  "-Epsilon", 0
13e60 78 38 30 30 30 30 30 30 30 2c 20 30 78 30 30 30  x80000000, 0x000
13e70 30 30 30 30 31 20 7d 2c 0a 20 20 20 20 7b 20 20  00001 },.    {  
13e80 22 4e 61 4e 30 22 2c 20 20 20 20 20 30 78 37 66  "NaN0",     0x7f
13e90 66 38 30 30 30 30 2c 20 30 78 30 30 30 30 30 30  f80000, 0x000000
13ea0 30 30 20 7d 2c 0a 20 20 20 20 7b 20 20 22 2d 4e  00 },.    {  "-N
13eb0 61 4e 30 22 2c 20 20 20 20 30 78 66 66 66 38 30  aN0",    0xfff80
13ec0 30 30 30 2c 20 30 78 30 30 30 30 30 30 30 30 20  000, 0x00000000 
13ed0 7d 2c 0a 20 20 7d 3b 0a 0a 20 20 69 66 28 20 6f  },.  };..  if( o
13ee0 62 6a 63 21 3d 34 20 29 7b 0a 20 20 20 20 54 63  bjc!=4 ){.    Tc
13ef0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
13f00 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
13f10 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
13f20 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c  \"",.        Tcl
13f30 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
13f40 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
13f50 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 22 2c 20   STMT N VALUE", 
13f60 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
13f70 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
13f80 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
13f90 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
13fa0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
13fb0 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
13fc0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
13fd0 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74    if( Tcl_GetInt
13fe0 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20  FromObj(interp, 
13ff0 6f 62 6a 76 5b 32 5d 2c 20 26 69 64 78 29 20 29  objv[2], &idx) )
14000 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
14010 52 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65 72 63 65  R;..  /* Interce
14020 70 74 20 74 68 65 20 73 74 72 69 6e 67 20 22 4e  pt the string "N
14030 61 4e 22 20 61 6e 64 20 67 65 6e 65 72 61 74 65  aN" and generate
14040 20 61 20 4e 61 4e 20 76 61 6c 75 65 20 66 6f 72   a NaN value for
14050 20 69 74 2e 0a 20 20 2a 2a 20 41 6c 6c 20 6f 74   it..  ** All ot
14060 68 65 72 20 73 74 72 69 6e 67 73 20 61 72 65 20  her strings are 
14070 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 20 74  passed through t
14080 6f 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65 46  o Tcl_GetDoubleF
14090 72 6f 6d 4f 62 6a 28 29 2e 0a 20 20 2a 2a 20 54  romObj()..  ** T
140a0 63 6c 5f 47 65 74 44 6f 75 62 6c 65 46 72 6f 6d  cl_GetDoubleFrom
140b0 4f 62 6a 28 29 20 73 68 6f 75 6c 64 20 75 6e 64  Obj() should und
140c0 65 72 73 74 61 6e 64 20 22 4e 61 4e 22 20 62 75  erstand "NaN" bu
140d0 74 20 73 6f 6d 65 20 76 65 72 73 69 6f 6e 73 0a  t some versions.
140e0 20 20 2a 2a 20 63 6f 6e 74 61 69 6e 20 61 20 62    ** contain a b
140f0 75 67 2e 0a 20 20 2a 2f 0a 20 20 7a 56 61 6c 20  ug..  */.  zVal 
14100 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  = Tcl_GetString(
14110 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 66 6f 72 28  objv[3]);.  for(
14120 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 61 53  i=0; i<sizeof(aS
14130 70 65 63 69 61 6c 46 70 29 2f 73 69 7a 65 6f 66  pecialFp)/sizeof
14140 28 61 53 70 65 63 69 61 6c 46 70 5b 30 5d 29 3b  (aSpecialFp[0]);
14150 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 73   i++){.    if( s
14160 74 72 63 6d 70 28 61 53 70 65 63 69 61 6c 46 70  trcmp(aSpecialFp
14170 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 7a 56 61 6c 29  [i].zName, zVal)
14180 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
14190 69 74 65 33 5f 75 69 6e 74 36 34 20 78 3b 0a 20  ite3_uint64 x;. 
141a0 20 20 20 20 20 78 20 3d 20 61 53 70 65 63 69 61       x = aSpecia
141b0 6c 46 70 5b 69 5d 2e 69 55 70 70 65 72 3b 0a 20  lFp[i].iUpper;. 
141c0 20 20 20 20 20 78 20 3c 3c 3d 20 33 32 3b 0a 20       x <<= 32;. 
141d0 20 20 20 20 20 78 20 7c 3d 20 61 53 70 65 63 69       x |= aSpeci
141e0 61 6c 46 70 5b 69 5d 2e 69 4c 6f 77 65 72 3b 0a  alFp[i].iLower;.
141f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 69        assert( si
14200 7a 65 6f 66 28 76 61 6c 75 65 29 3d 3d 38 20 29  zeof(value)==8 )
14210 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
14220 73 69 7a 65 6f 66 28 78 29 3d 3d 38 20 29 3b 0a  sizeof(x)==8 );.
14230 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 76 61        memcpy(&va
14240 6c 75 65 2c 20 26 78 2c 20 38 29 3b 0a 20 20 20  lue, &x, 8);.   
14250 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
14260 20 20 7d 0a 20 20 69 66 28 20 69 3e 3d 73 69 7a    }.  if( i>=siz
14270 65 6f 66 28 61 53 70 65 63 69 61 6c 46 70 29 2f  eof(aSpecialFp)/
14280 73 69 7a 65 6f 66 28 61 53 70 65 63 69 61 6c 46  sizeof(aSpecialF
14290 70 5b 30 5d 29 20 26 26 0a 20 20 20 20 20 20 20  p[0]) &&.       
142a0 20 20 54 63 6c 5f 47 65 74 44 6f 75 62 6c 65 46    Tcl_GetDoubleF
142b0 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
142c0 62 6a 76 5b 33 5d 2c 20 26 76 61 6c 75 65 29 20  bjv[3], &value) 
142d0 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
142e0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72  L_ERROR;.  }.  r
142f0 63 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  c = sqlite3_bind
14300 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20 69  _double(pStmt, i
14310 64 78 2c 20 76 61 6c 75 65 29 3b 0a 20 20 69 66  dx, value);.  if
14320 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
14330 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d  Code(interp, Stm
14340 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63  tToDb(pStmt), rc
14350 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
14360 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d  RROR;.  if( rc!=
14370 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
14380 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
14390 52 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e  R;.  }..  return
143a0 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a   TCL_OK;.}../*.*
143b0 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74  * Usage:   sqlit
143c0 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 20 20 53 54  e3_bind_null  ST
143d0 4d 54 20 4e 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20  MT N.**.** Test 
143e0 74 68 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64  the sqlite3_bind
143f0 5f 6e 75 6c 6c 20 69 6e 74 65 72 66 61 63 65 2e  _null interface.
14400 20 20 53 54 4d 54 20 69 73 20 61 20 70 72 65 70    STMT is a prep
14410 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a  ared statement..
14420 2a 2a 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65  ** N is the inde
14430 78 20 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20  x of a wildcard 
14440 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
14450 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73  statement.  This
14460 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64   command.** bind
14470 73 20 61 20 4e 55 4c 4c 20 74 6f 20 74 68 65 20  s a NULL to the 
14480 77 69 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61  wildcard..*/.sta
14490 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
144a0 64 5f 6e 75 6c 6c 28 0a 20 20 76 6f 69 64 20 2a  d_null(.  void *
144b0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
144c0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
144d0 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
144e0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
144f0 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
14500 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
14510 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e  .  int idx;.  in
14520 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  t rc;..  if( obj
14530 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
14540 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
14550 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
14560 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
14570 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f 47  ",.        Tcl_G
14580 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28  etStringFromObj(
14590 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53  objv[0], 0), " S
145a0 54 4d 54 20 4e 22 2c 20 30 29 3b 0a 20 20 20 20  TMT N", 0);.    
145b0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
145c0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74  ;.  }..  if( get
145d0 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65  StmtPointer(inte
145e0 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  rp, Tcl_GetStrin
145f0 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74  g(objv[1]), &pSt
14600 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  mt) ) return TCL
14610 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63  _ERROR;.  if( Tc
14620 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28  l_GetIntFromObj(
14630 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c  interp, objv[2],
14640 20 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20   &idx) ) return 
14650 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63  TCL_ERROR;..  rc
14660 20 3d 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f   = sqlite3_bind_
14670 6e 75 6c 6c 28 70 53 74 6d 74 2c 20 69 64 78 29  null(pStmt, idx)
14680 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54  ;.  if( sqlite3T
14690 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72  estErrCode(inter
146a0 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d  p, StmtToDb(pStm
146b0 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e  t), rc) ) return
146c0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
146d0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
146e0 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  ){.    return TC
146f0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20  L_ERROR;.  }..  
14700 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
14710 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20  ../*.** Usage:  
14720 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
14730 78 74 20 20 53 54 4d 54 20 4e 20 53 54 52 49 4e  xt  STMT N STRIN
14740 47 20 42 59 54 45 53 0a 2a 2a 0a 2a 2a 20 54 65  G BYTES.**.** Te
14750 73 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 62  st the sqlite3_b
14760 69 6e 64 5f 74 65 78 74 20 69 6e 74 65 72 66 61  ind_text interfa
14770 63 65 2e 20 20 53 54 4d 54 20 69 73 20 61 20 70  ce.  STMT is a p
14780 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
14790 74 2e 0a 2a 2a 20 4e 20 69 73 20 74 68 65 20 69  t..** N is the i
147a0 6e 64 65 78 20 6f 66 20 61 20 77 69 6c 64 63 61  ndex of a wildca
147b0 72 64 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  rd in the prepar
147c0 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  ed statement.  T
147d0 68 69 73 20 63 6f 6d 6d 61 6e 64 0a 2a 2a 20 62  his command.** b
147e0 69 6e 64 73 20 61 20 55 54 46 2d 38 20 73 74 72  inds a UTF-8 str
147f0 69 6e 67 20 53 54 52 49 4e 47 20 74 6f 20 74 68  ing STRING to th
14800 65 20 77 69 6c 64 63 61 72 64 2e 20 20 54 68 65  e wildcard.  The
14810 20 73 74 72 69 6e 67 20 69 73 20 42 59 54 45 53   string is BYTES
14820 20 62 79 74 65 73 0a 2a 2a 20 6c 6f 6e 67 2e 0a   bytes.** long..
14830 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
14840 73 74 5f 62 69 6e 64 5f 74 65 78 74 28 0a 20 20  st_bind_text(.  
14850 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
14860 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
14870 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
14880 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
14890 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
148a0 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
148b0 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20 69 64 78  pStmt;.  int idx
148c0 3b 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 0a 20  ;.  int bytes;. 
148d0 20 63 68 61 72 20 2a 76 61 6c 75 65 3b 0a 20 20   char *value;.  
148e0 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f  int rc;..  if( o
148f0 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54 63  bjc!=5 ){.    Tc
14900 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
14910 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20  nterp, "wrong # 
14920 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20  args: should be 
14930 5c 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c  \"",.        Tcl
14940 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62  _GetStringFromOb
14950 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22  j(objv[0], 0), "
14960 20 53 54 4d 54 20 4e 20 56 41 4c 55 45 20 42 59   STMT N VALUE BY
14970 54 45 53 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  TES", 0);.    re
14980 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
14990 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
149a0 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
149b0 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
149c0 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
149d0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
149e0 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
149f0 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
14a00 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
14a10 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54 43  idx) ) return TC
14a20 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75 65  L_ERROR;.  value
14a30 20 3d 20 28 63 68 61 72 2a 29 54 63 6c 5f 47 65   = (char*)Tcl_Ge
14a40 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62  tByteArrayFromOb
14a50 6a 28 6f 62 6a 76 5b 33 5d 2c 20 26 62 79 74 65  j(objv[3], &byte
14a60 73 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65  s);.  if( Tcl_Ge
14a70 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
14a80 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 26 62 79  rp, objv[4], &by
14a90 74 65 73 29 20 29 20 72 65 74 75 72 6e 20 54 43  tes) ) return TC
14aa0 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d  L_ERROR;..  rc =
14ab0 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65   sqlite3_bind_te
14ac0 78 74 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 76  xt(pStmt, idx, v
14ad0 61 6c 75 65 2c 20 62 79 74 65 73 2c 20 53 51 4c  alue, bytes, SQL
14ae0 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
14af0 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
14b00 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c  tErrCode(interp,
14b10 20 53 74 6d 74 54 6f 44 62 28 70 53 74 6d 74 29   StmtToDb(pStmt)
14b20 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20 54  , rc) ) return T
14b30 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
14b40 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
14b50 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
14b60 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 73 71  esult(interp, sq
14b70 6c 69 74 65 33 54 65 73 74 45 72 72 6f 72 4e 61  lite3TestErrorNa
14b80 6d 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 20 20  me(rc), 0);.    
14b90 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
14ba0 3b 0a 20 20 7d 0a 0a 20 20 72 65 74 75 72 6e 20  ;.  }..  return 
14bb0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
14bc0 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69 74 65   Usage:   sqlite
14bd0 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 3f 2d  3_bind_text16 ?-
14be0 73 74 61 74 69 63 3f 20 53 54 4d 54 20 4e 20 53  static? STMT N S
14bf0 54 52 49 4e 47 20 42 59 54 45 53 0a 2a 2a 0a 2a  TRING BYTES.**.*
14c00 2a 20 54 65 73 74 20 74 68 65 20 73 71 6c 69 74  * Test the sqlit
14c10 65 33 5f 62 69 6e 64 5f 74 65 78 74 31 36 20 69  e3_bind_text16 i
14c20 6e 74 65 72 66 61 63 65 2e 20 20 53 54 4d 54 20  nterface.  STMT 
14c30 69 73 20 61 20 70 72 65 70 61 72 65 64 20 73 74  is a prepared st
14c40 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 4e 20 69 73  atement..** N is
14c50 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
14c60 77 69 6c 64 63 61 72 64 20 69 6e 20 74 68 65 20  wildcard in the 
14c70 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
14c80 6e 74 2e 20 20 54 68 69 73 20 63 6f 6d 6d 61 6e  nt.  This comman
14c90 64 0a 2a 2a 20 62 69 6e 64 73 20 61 20 55 54 46  d.** binds a UTF
14ca0 2d 31 36 20 73 74 72 69 6e 67 20 53 54 52 49 4e  -16 string STRIN
14cb0 47 20 74 6f 20 74 68 65 20 77 69 6c 64 63 61 72  G to the wildcar
14cc0 64 2e 20 20 54 68 65 20 73 74 72 69 6e 67 20 69  d.  The string i
14cd0 73 20 42 59 54 45 53 20 62 79 74 65 73 0a 2a 2a  s BYTES bytes.**
14ce0 20 6c 6f 6e 67 2e 0a 2a 2f 0a 73 74 61 74 69 63   long..*/.static
14cf0 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f 74   int test_bind_t
14d00 65 78 74 31 36 28 0a 20 20 76 6f 69 64 20 2a 20  ext16(.  void * 
14d10 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
14d20 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
14d30 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
14d40 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
14d50 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66  bjv[].){.#ifndef
14d60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
14d70 31 36 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  16.  sqlite3_stm
14d80 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e 74 20  t *pStmt;.  int 
14d90 69 64 78 3b 0a 20 20 69 6e 74 20 62 79 74 65 73  idx;.  int bytes
14da0 3b 0a 20 20 63 68 61 72 20 2a 76 61 6c 75 65 3b  ;.  char *value;
14db0 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 76 6f  .  int rc;..  vo
14dc0 69 64 20 28 2a 78 44 65 6c 29 28 29 20 3d 20 28  id (*xDel)() = (
14dd0 6f 62 6a 63 3d 3d 36 3f 53 51 4c 49 54 45 5f 53  objc==6?SQLITE_S
14de0 54 41 54 49 43 3a 53 51 4c 49 54 45 5f 54 52 41  TATIC:SQLITE_TRA
14df0 4e 53 49 45 4e 54 29 3b 0a 20 20 54 63 6c 5f 4f  NSIENT);.  Tcl_O
14e00 62 6a 20 2a 6f 53 74 6d 74 20 20 20 20 3d 20 6f  bj *oStmt    = o
14e10 62 6a 76 5b 6f 62 6a 63 2d 34 5d 3b 0a 20 20 54  bjv[objc-4];.  T
14e20 63 6c 5f 4f 62 6a 20 2a 6f 4e 20 20 20 20 20 20  cl_Obj *oN      
14e30 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63 2d 33 5d 3b   = objv[objc-3];
14e40 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 53 74 72  .  Tcl_Obj *oStr
14e50 69 6e 67 20 20 3d 20 6f 62 6a 76 5b 6f 62 6a 63  ing  = objv[objc
14e60 2d 32 5d 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  -2];.  Tcl_Obj *
14e70 6f 42 79 74 65 73 20 20 20 3d 20 6f 62 6a 76 5b  oBytes   = objv[
14e80 6f 62 6a 63 2d 31 5d 3b 0a 0a 20 20 69 66 28 20  objc-1];..  if( 
14e90 6f 62 6a 63 21 3d 35 20 26 26 20 6f 62 6a 63 21  objc!=5 && objc!
14ea0 3d 36 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  =6){.    Tcl_App
14eb0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
14ec0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
14ed0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
14ee0 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53          Tcl_GetS
14ef0 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
14f00 76 5b 30 5d 2c 20 30 29 2c 20 22 20 53 54 4d 54  v[0], 0), " STMT
14f10 20 4e 20 56 41 4c 55 45 20 42 59 54 45 53 22 2c   N VALUE BYTES",
14f20 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
14f30 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
14f40 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
14f50 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
14f60 5f 47 65 74 53 74 72 69 6e 67 28 6f 53 74 6d 74  _GetString(oStmt
14f70 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65 74  ), &pStmt) ) ret
14f80 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
14f90 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46   if( Tcl_GetIntF
14fa0 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
14fb0 4e 2c 20 26 69 64 78 29 20 29 20 72 65 74 75 72  N, &idx) ) retur
14fc0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76  n TCL_ERROR;.  v
14fd0 61 6c 75 65 20 3d 20 28 63 68 61 72 2a 29 54 63  alue = (char*)Tc
14fe0 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79 46 72  l_GetByteArrayFr
14ff0 6f 6d 4f 62 6a 28 6f 53 74 72 69 6e 67 2c 20 30  omObj(oString, 0
15000 29 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  );.  if( Tcl_Get
15010 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
15020 70 2c 20 6f 42 79 74 65 73 2c 20 26 62 79 74 65  p, oBytes, &byte
15030 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  s) ) return TCL_
15040 45 52 52 4f 52 3b 0a 0a 20 20 72 63 20 3d 20 73  ERROR;..  rc = s
15050 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
15060 31 36 28 70 53 74 6d 74 2c 20 69 64 78 2c 20 28  16(pStmt, idx, (
15070 76 6f 69 64 20 2a 29 76 61 6c 75 65 2c 20 62 79  void *)value, by
15080 74 65 73 2c 20 78 44 65 6c 29 3b 0a 20 20 69 66  tes, xDel);.  if
15090 28 20 73 71 6c 69 74 65 33 54 65 73 74 45 72 72  ( sqlite3TestErr
150a0 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 53 74 6d  Code(interp, Stm
150b0 74 54 6f 44 62 28 70 53 74 6d 74 29 2c 20 72 63  tToDb(pStmt), rc
150c0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
150d0 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 21 3d  RROR;.  if( rc!=
150e0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
150f0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
15100 74 28 69 6e 74 65 72 70 2c 20 73 71 6c 69 74 65  t(interp, sqlite
15110 33 54 65 73 74 45 72 72 6f 72 4e 61 6d 65 28 72  3TestErrorName(r
15120 63 29 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  c), 0);.    retu
15130 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
15140 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  }..#endif /* SQL
15150 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
15160 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  /.  return TCL_O
15170 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
15180 65 3a 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e  e:   sqlite3_bin
15190 64 5f 62 6c 6f 62 20 3f 2d 73 74 61 74 69 63 3f  d_blob ?-static?
151a0 20 53 54 4d 54 20 4e 20 44 41 54 41 20 42 59 54   STMT N DATA BYT
151b0 45 53 0a 2a 2a 0a 2a 2a 20 54 65 73 74 20 74 68  ES.**.** Test th
151c0 65 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 62  e sqlite3_bind_b
151d0 6c 6f 62 20 69 6e 74 65 72 66 61 63 65 2e 20 20  lob interface.  
151e0 53 54 4d 54 20 69 73 20 61 20 70 72 65 70 61 72  STMT is a prepar
151f0 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  ed statement..**
15200 20 4e 20 69 73 20 74 68 65 20 69 6e 64 65 78 20   N is the index 
15210 6f 66 20 61 20 77 69 6c 64 63 61 72 64 20 69 6e  of a wildcard in
15220 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
15230 61 74 65 6d 65 6e 74 2e 20 20 54 68 69 73 20 63  atement.  This c
15240 6f 6d 6d 61 6e 64 0a 2a 2a 20 62 69 6e 64 73 20  ommand.** binds 
15250 61 20 42 4c 4f 42 20 74 6f 20 74 68 65 20 77 69  a BLOB to the wi
15260 6c 64 63 61 72 64 2e 20 20 54 68 65 20 42 4c 4f  ldcard.  The BLO
15270 42 20 69 73 20 42 59 54 45 53 20 62 79 74 65 73  B is BYTES bytes
15280 20 69 6e 20 73 69 7a 65 2e 0a 2a 2f 0a 73 74 61   in size..*/.sta
15290 74 69 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e  tic int test_bin
152a0 64 5f 62 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a  d_blob(.  void *
152b0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
152c0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
152d0 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
152e0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
152f0 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
15300 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
15310 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 69 6e  .  int idx;.  in
15320 74 20 62 79 74 65 73 3b 0a 20 20 63 68 61 72 20  t bytes;.  char 
15330 2a 76 61 6c 75 65 3b 0a 20 20 69 6e 74 20 72 63  *value;.  int rc
15340 3b 0a 20 20 73 71 6c 69 74 65 33 5f 64 65 73 74  ;.  sqlite3_dest
15350 72 75 63 74 6f 72 5f 74 79 70 65 20 78 44 65 73  ructor_type xDes
15360 74 72 75 63 74 6f 72 20 3d 20 53 51 4c 49 54 45  tructor = SQLITE
15370 5f 54 52 41 4e 53 49 45 4e 54 3b 0a 0a 20 20 69  _TRANSIENT;..  i
15380 66 28 20 6f 62 6a 63 21 3d 35 20 26 26 20 6f 62  f( objc!=5 && ob
15390 6a 63 21 3d 36 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=6 ){.    Tcl
153a0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
153b0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
153c0 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
153d0 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  "",.        Tcl_
153e0 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
153f0 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20  (objv[0], 0), " 
15400 53 54 4d 54 20 4e 20 44 41 54 41 20 42 59 54 45  STMT N DATA BYTE
15410 53 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  S", 0);.    retu
15420 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
15430 7d 0a 0a 20 20 69 66 28 20 6f 62 6a 63 3d 3d 36  }..  if( objc==6
15440 20 29 7b 0a 20 20 20 20 78 44 65 73 74 72 75 63   ){.    xDestruc
15450 74 6f 72 20 3d 20 53 51 4c 49 54 45 5f 53 54 41  tor = SQLITE_STA
15460 54 49 43 3b 0a 20 20 20 20 6f 62 6a 76 2b 2b 3b  TIC;.    objv++;
15470 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53  .  }..  if( getS
15480 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tmtPointer(inter
15490 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
154a0 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d  (objv[1]), &pStm
154b0 74 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  t) ) return TCL_
154c0 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c  ERROR;.  if( Tcl
154d0 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
154e0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
154f0 26 69 64 78 29 20 29 20 72 65 74 75 72 6e 20 54  &idx) ) return T
15500 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 76 61 6c 75  CL_ERROR;.  valu
15510 65 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e  e = Tcl_GetStrin
15520 67 28 6f 62 6a 76 5b 33 5d 29 3b 0a 20 20 69 66  g(objv[3]);.  if
15530 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
15540 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
15550 5b 34 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72  [4], &bytes) ) r
15560 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
15570 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
15580 5f 62 69 6e 64 5f 62 6c 6f 62 28 70 53 74 6d 74  _bind_blob(pStmt
15590 2c 20 69 64 78 2c 20 76 61 6c 75 65 2c 20 62 79  , idx, value, by
155a0 74 65 73 2c 20 78 44 65 73 74 72 75 63 74 6f 72  tes, xDestructor
155b0 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
155c0 54 65 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65  TestErrCode(inte
155d0 72 70 2c 20 53 74 6d 74 54 6f 44 62 28 70 53 74  rp, StmtToDb(pSt
155e0 6d 74 29 2c 20 72 63 29 20 29 20 72 65 74 75 72  mt), rc) ) retur
155f0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
15600 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
15610 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 54   ){.    return T
15620 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
15630 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
15640 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
15650 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
15660 61 72 61 6d 65 74 65 72 5f 63 6f 75 6e 74 20 20  arameter_count  
15670 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  STMT.**.** Retur
15680 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
15690 77 69 6c 64 63 61 72 64 73 20 69 6e 20 74 68 65  wildcards in the
156a0 20 67 69 76 65 6e 20 73 74 61 74 65 6d 65 6e 74   given statement
156b0 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
156c0 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61 6d 65  test_bind_parame
156d0 74 65 72 5f 63 6f 75 6e 74 28 0a 20 20 76 6f 69  ter_count(.  voi
156e0 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
156f0 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
15700 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63  terp,.  int objc
15710 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e  ,.  Tcl_Obj *CON
15720 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73  ST objv[].){.  s
15730 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
15740 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  mt;..  if( objc!
15750 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =2 ){.    Tcl_Wr
15760 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
15770 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 53 54 4d  p, 1, objv, "STM
15780 54 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20  T");.    return 
15790 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
157a0 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69 6e   if( getStmtPoin
157b0 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ter(interp, Tcl_
157c0 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31  GetString(objv[1
157d0 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72 65  ]), &pStmt) ) re
157e0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
157f0 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
15800 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e  lt(interp, Tcl_N
15810 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33  ewIntObj(sqlite3
15820 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
15830 63 6f 75 6e 74 28 70 53 74 6d 74 29 29 29 3b 0a  count(pStmt)));.
15840 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
15850 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
15860 20 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f     sqlite3_bind_
15870 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 20 20  parameter_name  
15880 53 54 4d 54 20 20 4e 0a 2a 2a 0a 2a 2a 20 52 65  STMT  N.**.** Re
15890 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66  turn the name of
158a0 20 74 68 65 20 4e 74 68 20 77 69 6c 64 63 61 72   the Nth wildcar
158b0 64 2e 20 20 54 68 65 20 66 69 72 73 74 20 77 69  d.  The first wi
158c0 6c 64 63 61 72 64 20 69 73 20 31 2e 0a 2a 2a 20  ldcard is 1..** 
158d0 41 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20  An empty string 
158e0 69 73 20 72 65 74 75 72 6e 65 64 20 69 66 20 4e  is returned if N
158f0 20 69 73 20 6f 75 74 20 6f 66 20 72 61 6e 67 65   is out of range
15900 20 6f 72 20 69 66 20 74 68 65 20 77 69 6c 64 63   or if the wildc
15910 61 72 64 0a 2a 2a 20 69 73 20 6e 61 6d 65 6c 65  ard.** is namele
15920 73 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ss..*/.static in
15930 74 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61  t test_bind_para
15940 6d 65 74 65 72 5f 6e 61 6d 65 28 0a 20 20 76 6f  meter_name(.  vo
15950 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
15960 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
15970 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
15980 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
15990 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
159a0 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
159b0 74 6d 74 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20  tmt;.  int i;.. 
159c0 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
159d0 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
159e0 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
159f0 6f 62 6a 76 2c 20 22 53 54 4d 54 20 4e 22 29 3b  objv, "STMT N");
15a00 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
15a10 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
15a20 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28   getStmtPointer(
15a30 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
15a40 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
15a50 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e  &pStmt) ) return
15a60 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66   TCL_ERROR;.  if
15a70 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d  ( Tcl_GetIntFrom
15a80 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76  Obj(interp, objv
15a90 5b 32 5d 2c 20 26 69 29 20 29 20 72 65 74 75 72  [2], &i) ) retur
15aa0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54  n TCL_ERROR;.  T
15ab0 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28  cl_SetObjResult(
15ac0 69 6e 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63  interp, .     Tc
15ad0 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 73  l_NewStringObj(s
15ae0 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
15af0 6d 65 74 65 72 5f 6e 61 6d 65 28 70 53 74 6d 74  meter_name(pStmt
15b00 2c 69 29 2c 2d 31 29 0a 20 20 29 3b 0a 20 20 72  ,i),-1).  );.  r
15b10 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
15b20 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
15b30 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
15b40 61 6d 65 74 65 72 5f 69 6e 64 65 78 20 20 53 54  ameter_index  ST
15b50 4d 54 20 20 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 52  MT  NAME.**.** R
15b60 65 74 75 72 6e 20 74 68 65 20 69 6e 64 65 78 20  eturn the index 
15b70 6f 66 20 74 68 65 20 77 69 6c 64 63 61 72 64 20  of the wildcard 
15b80 63 61 6c 6c 65 64 20 4e 41 4d 45 2e 20 20 52 65  called NAME.  Re
15b90 74 75 72 6e 20 30 20 69 66 20 74 68 65 72 65 20  turn 0 if there 
15ba0 69 73 0a 2a 2a 20 6e 6f 20 73 75 63 68 20 77 69  is.** no such wi
15bb0 6c 64 63 61 72 64 2e 0a 2a 2f 0a 73 74 61 74 69  ldcard..*/.stati
15bc0 63 20 69 6e 74 20 74 65 73 74 5f 62 69 6e 64 5f  c int test_bind_
15bd0 70 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28  parameter_index(
15be0 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
15bf0 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
15c00 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
15c10 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
15c20 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
15c30 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  ){.  sqlite3_stm
15c40 74 20 2a 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28  t *pStmt;..  if(
15c50 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20   objc!=3 ){.    
15c60 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73  Tcl_WrongNumArgs
15c70 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76  (interp, 1, objv
15c80 2c 20 22 53 54 4d 54 20 4e 41 4d 45 22 29 3b 0a  , "STMT NAME");.
15c90 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
15ca0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
15cb0 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
15cc0 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
15cd0 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
15ce0 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
15cf0 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c  TCL_ERROR;.  Tcl
15d00 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
15d10 74 65 72 70 2c 20 0a 20 20 20 20 20 54 63 6c 5f  terp, .     Tcl_
15d20 4e 65 77 49 6e 74 4f 62 6a 28 0a 20 20 20 20 20  NewIntObj(.     
15d30 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70    sqlite3_bind_p
15d40 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 70  arameter_index(p
15d50 53 74 6d 74 2c 54 63 6c 5f 47 65 74 53 74 72 69  Stmt,Tcl_GetStri
15d60 6e 67 28 6f 62 6a 76 5b 32 5d 29 29 0a 20 20 20  ng(objv[2])).   
15d70 20 20 29 0a 20 20 29 3b 0a 20 20 72 65 74 75 72    ).  );.  retur
15d80 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
15d90 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71 6c 69  ** Usage:   sqli
15da0 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e  te3_clear_bindin
15db0 67 73 20 53 54 4d 54 0a 2a 2a 0a 2a 2f 0a 73 74  gs STMT.**.*/.st
15dc0 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63 6c  atic int test_cl
15dd0 65 61 72 5f 62 69 6e 64 69 6e 67 73 28 0a 20 20  ear_bindings(.  
15de0 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
15df0 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
15e00 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
15e10 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
15e20 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
15e30 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
15e40 70 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62  pStmt;..  if( ob
15e50 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
15e60 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
15e70 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
15e80 53 54 4d 54 22 29 3b 0a 20 20 20 20 72 65 74 75  STMT");.    retu
15e90 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
15ea0 7d 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  }.  if( getStmtP
15eb0 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
15ec0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
15ed0 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
15ee0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
15ef0 52 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  R;.  Tcl_SetObjR
15f00 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
15f10 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c 69  l_NewIntObj(sqli
15f20 74 65 33 5f 63 6c 65 61 72 5f 62 69 6e 64 69 6e  te3_clear_bindin
15f30 67 73 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72  gs(pStmt)));.  r
15f40 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
15f50 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20  ./*.** Usage:   
15f60 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 20 4d 49  sqlite3_sleep MI
15f70 4c 4c 49 53 45 43 4f 4e 44 53 0a 2a 2f 0a 73 74  LLISECONDS.*/.st
15f80 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 73 6c  atic int test_sl
15f90 65 65 70 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  eep(.  void * cl
15fa0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
15fb0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
15fc0 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
15fd0 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
15fe0 76 5b 5d 0a 29 7b 0a 20 20 69 6e 74 20 6d 73 3b  v[].){.  int ms;
15ff0 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20  ..  if( objc!=2 
16000 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67  ){.    Tcl_Wrong
16010 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20  NumArgs(interp, 
16020 31 2c 20 6f 62 6a 76 2c 20 22 4d 49 4c 4c 49 53  1, objv, "MILLIS
16030 45 43 4f 4e 44 53 22 29 3b 0a 20 20 20 20 72 65  ECONDS");.    re
16040 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
16050 20 20 7d 0a 20 20 69 66 28 20 54 63 6c 5f 47 65    }.  if( Tcl_Ge
16060 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65  tIntFromObj(inte
16070 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 6d 73  rp, objv[1], &ms
16080 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
16090 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
160a0 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
160b0 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
160c0 77 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f  wIntObj(sqlite3_
160d0 73 6c 65 65 70 28 6d 73 29 29 29 3b 0a 20 20 72  sleep(ms)));.  r
160e0 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
160f0 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71  ./*.** Usage: sq
16100 6c 69 74 65 33 5f 65 78 74 65 6e 64 65 64 5f 65  lite3_extended_e
16110 72 72 63 6f 64 65 20 44 42 0a 2a 2a 0a 2a 2a 20  rrcode DB.**.** 
16120 52 65 74 75 72 6e 20 74 68 65 20 73 74 72 69 6e  Return the strin
16130 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
16140 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63   of the most rec
16150 65 6e 74 20 73 71 6c 69 74 65 33 5f 2a 20 41 50  ent sqlite3_* AP
16160 49 0a 2a 2a 20 65 72 72 6f 72 20 63 6f 64 65 2e  I.** error code.
16170 20 65 2e 67 2e 20 22 53 51 4c 49 54 45 5f 45 52   e.g. "SQLITE_ER
16180 52 4f 52 22 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ROR"..*/.static 
16190 69 6e 74 20 74 65 73 74 5f 65 78 5f 65 72 72 63  int test_ex_errc
161a0 6f 64 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ode(.  void * cl
161b0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
161c0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
161d0 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
161e0 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
161f0 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33  v[].){.  sqlite3
16200 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   *db;.  int rc;.
16210 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
16220 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
16230 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
16240 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
16250 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
16260 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
16270 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44  ng(objv[0]), " D
16280 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75  B", 0);.    retu
16290 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
162a0 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f 69  }.  if( getDbPoi
162b0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
162c0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
162d0 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74 75  1]), &db) ) retu
162e0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
162f0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 74  rc = sqlite3_ext
16300 65 6e 64 65 64 5f 65 72 72 63 6f 64 65 28 64 62  ended_errcode(db
16310 29 3b 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  );.  Tcl_AppendR
16320 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
16330 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d  har *)t1ErrorNam
16340 65 28 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74  e(rc), 0);.  ret
16350 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a  urn TCL_OK;.}...
16360 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
16370 69 74 65 33 5f 65 72 72 63 6f 64 65 20 44 42 0a  ite3_errcode DB.
16380 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  **.** Return the
16390 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
163a0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6d 6f  tation of the mo
163b0 73 74 20 72 65 63 65 6e 74 20 73 71 6c 69 74 65  st recent sqlite
163c0 33 5f 2a 20 41 50 49 0a 2a 2a 20 65 72 72 6f 72  3_* API.** error
163d0 20 63 6f 64 65 2e 20 65 2e 67 2e 20 22 53 51 4c   code. e.g. "SQL
163e0 49 54 45 5f 45 52 52 4f 52 22 2e 0a 2a 2f 0a 73  ITE_ERROR"..*/.s
163f0 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 65  tatic int test_e
16400 72 72 63 6f 64 65 28 0a 20 20 76 6f 69 64 20 2a  rrcode(.  void *
16410 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
16420 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
16430 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
16440 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
16450 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
16460 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72  te3 *db;.  int r
16470 63 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  c;..  if( objc!=
16480 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
16490 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
164a0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
164b0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
164c0 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
164d0 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
164e0 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72  " DB", 0);.    r
164f0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
16500 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
16510 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
16520 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
16530 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
16540 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
16550 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
16560 65 72 72 63 6f 64 65 28 64 62 29 3b 0a 20 20 54  errcode(db);.  T
16570 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
16580 69 6e 74 65 72 70 2c 20 28 63 68 61 72 20 2a 29  interp, (char *)
16590 74 31 45 72 72 6f 72 4e 61 6d 65 28 72 63 29 2c  t1ErrorName(rc),
165a0 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
165b0 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
165c0 73 61 67 65 3a 20 20 20 74 65 73 74 5f 65 72 72  sage:   test_err
165d0 6d 73 67 20 44 42 0a 2a 2a 0a 2a 2a 20 52 65 74  msg DB.**.** Ret
165e0 75 72 6e 73 20 74 68 65 20 55 54 46 2d 38 20 72  urns the UTF-8 r
165f0 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
16600 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
16610 67 65 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ge string for th
16620 65 0a 2a 2a 20 6d 6f 73 74 20 72 65 63 65 6e 74  e.** most recent
16630 20 73 71 6c 69 74 65 33 5f 2a 20 41 50 49 20 63   sqlite3_* API c
16640 61 6c 6c 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  all..*/.static i
16650 6e 74 20 74 65 73 74 5f 65 72 72 6d 73 67 28 0a  nt test_errmsg(.
16660 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44    void * clientD
16670 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72  ata,.  Tcl_Inter
16680 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74  p *interp,.  int
16690 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a   objc,.  Tcl_Obj
166a0 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29   *CONST objv[].)
166b0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
166c0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
166d0 45 72 72 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63  Err;..  if( objc
166e0 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41  !=2 ){.    Tcl_A
166f0 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65  ppendResult(inte
16700 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67  rp, "wrong # arg
16710 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22  s: should be \""
16720 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65  , .       Tcl_Ge
16730 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29  tString(objv[0])
16740 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20  , " DB", 0);.   
16750 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
16760 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
16770 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
16780 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
16790 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
167a0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
167b0 52 3b 0a 0a 20 20 7a 45 72 72 20 3d 20 73 71 6c  R;..  zErr = sql
167c0 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 3b  ite3_errmsg(db);
167d0 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
167e0 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
167f0 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 45 72  NewStringObj(zEr
16800 72 2c 20 2d 31 29 29 3b 0a 20 20 72 65 74 75 72  r, -1));.  retur
16810 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
16820 2a 2a 20 55 73 61 67 65 3a 20 20 20 74 65 73 74  ** Usage:   test
16830 5f 65 72 72 6d 73 67 31 36 20 44 42 0a 2a 2a 0a  _errmsg16 DB.**.
16840 2a 2a 20 52 65 74 75 72 6e 73 20 74 68 65 20 55  ** Returns the U
16850 54 46 2d 31 36 20 72 65 70 72 65 73 65 6e 74 61  TF-16 representa
16860 74 69 6f 6e 20 6f 66 20 74 68 65 20 65 72 72 6f  tion of the erro
16870 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67  r message string
16880 20 66 6f 72 20 74 68 65 0a 2a 2a 20 6d 6f 73 74   for the.** most
16890 20 72 65 63 65 6e 74 20 73 71 6c 69 74 65 33 5f   recent sqlite3_
168a0 2a 20 41 50 49 20 63 61 6c 6c 2e 20 54 68 69 73  * API call. This
168b0 20 69 73 20 61 20 62 79 74 65 20 61 72 72 61 79   is a byte array
168c0 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 54   object at the T
168d0 43 4c 20 0a 2a 2a 20 6c 65 76 65 6c 2c 20 61 6e  CL .** level, an
168e0 64 20 69 74 20 69 6e 63 6c 75 64 65 73 20 74 68  d it includes th
168f0 65 20 30 78 30 30 20 30 78 30 30 20 74 65 72 6d  e 0x00 0x00 term
16900 69 6e 61 74 6f 72 20 62 79 74 65 73 20 61 74 20  inator bytes at 
16910 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a 2a  the end of the.*
16920 2a 20 55 54 46 2d 31 36 20 73 74 72 69 6e 67 2e  * UTF-16 string.
16930 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
16940 65 73 74 5f 65 72 72 6d 73 67 31 36 28 0a 20 20  est_errmsg16(.  
16950 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
16960 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
16970 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
16980 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
16990 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
169a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
169b0 4d 49 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69  MIT_UTF16.  sqli
169c0 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74  te3 *db;.  const
169d0 20 76 6f 69 64 20 2a 7a 45 72 72 3b 0a 20 20 69   void *zErr;.  i
169e0 6e 74 20 62 79 74 65 73 20 3d 20 30 3b 0a 0a 20  nt bytes = 0;.. 
169f0 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
16a00 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
16a10 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
16a20 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
16a30 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
16a40 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
16a50 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 44 42 22  (objv[0]), " DB"
16a60 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
16a70 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
16a80 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
16a90 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47  er(interp, Tcl_G
16aa0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d  etString(objv[1]
16ab0 29 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e  ), &db) ) return
16ac0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a   TCL_ERROR;..  z
16ad0 45 72 72 20 3d 20 73 71 6c 69 74 65 33 5f 65 72  Err = sqlite3_er
16ae0 72 6d 73 67 31 36 28 64 62 29 3b 0a 20 20 69 66  rmsg16(db);.  if
16af0 28 20 7a 45 72 72 20 29 7b 0a 20 20 20 20 62 79  ( zErr ){.    by
16b00 74 65 73 20 3d 20 73 71 6c 69 74 65 33 55 74 66  tes = sqlite3Utf
16b10 31 36 42 79 74 65 4c 65 6e 28 7a 45 72 72 2c 20  16ByteLen(zErr, 
16b20 2d 31 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53  -1);.  }.  Tcl_S
16b30 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
16b40 72 70 2c 20 54 63 6c 5f 4e 65 77 42 79 74 65 41  rp, Tcl_NewByteA
16b50 72 72 61 79 4f 62 6a 28 7a 45 72 72 2c 20 62 79  rrayObj(zErr, by
16b60 74 65 73 29 29 3b 0a 23 65 6e 64 69 66 20 2f 2a  tes));.#endif /*
16b70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
16b80 31 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54  16 */.  return T
16b90 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
16ba0 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 70  Usage: sqlite3_p
16bb0 72 65 70 61 72 65 20 44 42 20 73 71 6c 20 62 79  repare DB sql by
16bc0 74 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a  tes tailvar.**.*
16bd0 2a 20 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f 20  * Compile up to 
16be0 3c 62 79 74 65 73 3e 20 62 79 74 65 73 20 6f 66  <bytes> bytes of
16bf0 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 53 51   the supplied SQ
16c00 4c 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20 75  L string <sql> u
16c10 73 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73 65  sing.** database
16c20 20 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54 68   handle <DB>. Th
16c30 65 20 70 61 72 61 6d 65 74 65 72 20 3c 74 61 69  e parameter <tai
16c40 6c 76 61 6c 3e 20 69 73 20 74 68 65 20 6e 61 6d  lval> is the nam
16c50 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a  e of a global.**
16c60 20 76 61 72 69 61 62 6c 65 20 74 68 61 74 20 69   variable that i
16c70 73 20 73 65 74 20 74 6f 20 74 68 65 20 75 6e 75  s set to the unu
16c80 73 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20 3c  sed portion of <
16c90 73 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20 41  sql> (if any). A
16ca0 0a 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65 20  .** STMT handle 
16cb0 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a  is returned..*/.
16cc0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
16cd0 70 72 65 70 61 72 65 28 0a 20 20 76 6f 69 64 20  prepare(.  void 
16ce0 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20  * clientData,.  
16cf0 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
16d00 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a  rp,.  int objc,.
16d10 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
16d20 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c   objv[].){.  sql
16d30 69 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73  ite3 *db;.  cons
16d40 74 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20  t char *zSql;.  
16d50 69 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 6f 6e  int bytes;.  con
16d60 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 20 3d  st char *zTail =
16d70 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74   0;.  sqlite3_st
16d80 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20  mt *pStmt = 0;. 
16d90 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a   char zBuf[50];.
16da0 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28    int rc;..  if(
16db0 20 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20   objc!=5 ){.    
16dc0 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
16dd0 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20  (interp, "wrong 
16de0 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62  # args: should b
16df0 65 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54  e \"", .       T
16e00 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
16e10 76 5b 30 5d 29 2c 20 22 20 44 42 20 73 71 6c 20  v[0]), " DB sql 
16e20 62 79 74 65 73 20 74 61 69 6c 76 61 72 22 2c 20  bytes tailvar", 
16e30 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
16e40 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
16e50 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72  if( getDbPointer
16e60 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
16e70 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
16e80 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
16e90 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c  CL_ERROR;.  zSql
16ea0 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67   = Tcl_GetString
16eb0 28 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20 69 66 28  (objv[2]);.  if(
16ec0 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
16ed0 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
16ee0 33 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65  3], &bytes) ) re
16ef0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
16f00 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
16f10 70 72 65 70 61 72 65 28 64 62 2c 20 7a 53 71 6c  prepare(db, zSql
16f20 2c 20 62 79 74 65 73 2c 20 26 70 53 74 6d 74 2c  , bytes, &pStmt,
16f30 20 26 7a 54 61 69 6c 29 3b 0a 20 20 69 66 28 20   &zTail);.  if( 
16f40 73 71 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f  sqlite3TestErrCo
16f50 64 65 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72  de(interp, db, r
16f60 63 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f  c) ) return TCL_
16f70 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 7a 54 61  ERROR;.  if( zTa
16f80 69 6c 20 29 7b 0a 20 20 20 20 69 66 28 20 62 79  il ){.    if( by
16f90 74 65 73 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20  tes>=0 ){.      
16fa0 62 79 74 65 73 20 3d 20 62 79 74 65 73 20 2d 20  bytes = bytes - 
16fb0 28 7a 54 61 69 6c 2d 7a 53 71 6c 29 3b 0a 20 20  (zTail-zSql);.  
16fc0 20 20 7d 0a 20 20 20 20 69 66 28 20 73 74 72 6c    }.    if( strl
16fd0 65 6e 28 7a 54 61 69 6c 29 3c 62 79 74 65 73 20  en(zTail)<bytes 
16fe0 29 7b 0a 20 20 20 20 20 20 62 79 74 65 73 20 3d  ){.      bytes =
16ff0 20 73 74 72 6c 65 6e 28 7a 54 61 69 6c 29 3b 0a   strlen(zTail);.
17000 20 20 20 20 7d 0a 20 20 20 20 54 63 6c 5f 4f 62      }.    Tcl_Ob
17010 6a 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c  jSetVar2(interp,
17020 20 6f 62 6a 76 5b 34 5d 2c 20 30 2c 20 54 63 6c   objv[4], 0, Tcl
17030 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 7a 54  _NewStringObj(zT
17040 61 69 6c 2c 20 62 79 74 65 73 29 2c 20 30 29 3b  ail, bytes), 0);
17050 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d 53  .  }.  if( rc!=S
17060 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
17070 61 73 73 65 72 74 28 20 70 53 74 6d 74 3d 3d 30  assert( pStmt==0
17080 20 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28   );.    sprintf(
17090 7a 42 75 66 2c 20 22 28 25 64 29 20 22 2c 20 72  zBuf, "(%d) ", r
170a0 63 29 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  c);.    Tcl_Appe
170b0 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
170c0 20 7a 42 75 66 2c 20 73 71 6c 69 74 65 33 5f 65   zBuf, sqlite3_e
170d0 72 72 6d 73 67 28 64 62 29 2c 20 30 29 3b 0a 20  rrmsg(db), 0);. 
170e0 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
170f0 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
17100 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 69 66 28  pStmt ){.    if(
17110 20 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65   sqlite3TestMake
17120 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72  PointerStr(inter
17130 70 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74 29 20  p, zBuf, pStmt) 
17140 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
17150 4f 52 3b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65  OR;.    Tcl_Appe
17160 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
17170 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 7d 0a 20   zBuf, 0);.  }. 
17180 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
17190 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
171a0 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
171b0 76 32 20 44 42 20 73 71 6c 20 62 79 74 65 73 20  v2 DB sql bytes 
171c0 74 61 69 6c 76 61 72 0a 2a 2a 0a 2a 2a 20 43 6f  tailvar.**.** Co
171d0 6d 70 69 6c 65 20 75 70 20 74 6f 20 3c 62 79 74  mpile up to <byt
171e0 65 73 3e 20 62 79 74 65 73 20 6f 66 20 74 68 65  es> bytes of the
171f0 20 73 75 70 70 6c 69 65 64 20 53 51 4c 20 73 74   supplied SQL st
17200 72 69 6e 67 20 3c 73 71 6c 3e 20 75 73 69 6e 67  ring <sql> using
17210 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 68 61 6e  .** database han
17220 64 6c 65 20 3c 44 42 3e 2e 20 54 68 65 20 70 61  dle <DB>. The pa
17230 72 61 6d 65 74 65 72 20 3c 74 61 69 6c 76 61 6c  rameter <tailval
17240 3e 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  > is the name of
17250 20 61 20 67 6c 6f 62 61 6c 0a 2a 2a 20 76 61 72   a global.** var
17260 69 61 62 6c 65 20 74 68 61 74 20 69 73 20 73 65  iable that is se
17270 74 20 74 6f 20 74 68 65 20 75 6e 75 73 65 64 20  t to the unused 
17280 70 6f 72 74 69 6f 6e 20 6f 66 20 3c 73 71 6c 3e  portion of <sql>
17290 20 28 69 66 20 61 6e 79 29 2e 20 41 0a 2a 2a 20   (if any). A.** 
172a0 53 54 4d 54 20 68 61 6e 64 6c 65 20 69 73 20 72  STMT handle is r
172b0 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74  eturned..*/.stat
172c0 69 63 20 69 6e 74 20 74 65 73 74 5f 70 72 65 70  ic int test_prep
172d0 61 72 65 5f 76 32 28 0a 20 20 76 6f 69 64 20 2a  are_v2(.  void *
172e0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
172f0 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
17300 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
17310 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
17320 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
17330 74 65 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74  te3 *db;.  const
17340 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 69   char *zSql;.  i
17350 6e 74 20 62 79 74 65 73 3b 0a 20 20 63 6f 6e 73  nt bytes;.  cons
17360 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 20 3d 20  t char *zTail = 
17370 30 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 6d  0;.  sqlite3_stm
17380 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20  t *pStmt = 0;.  
17390 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a 20  char zBuf[50];. 
173a0 20 69 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20   int rc;..  if( 
173b0 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54  objc!=5 ){.    T
173c0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
173d0 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
173e0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
173f0 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
17400 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
17410 5b 30 5d 29 2c 20 22 20 44 42 20 73 71 6c 20 62  [0]), " DB sql b
17420 79 74 65 73 20 74 61 69 6c 76 61 72 22 2c 20 30  ytes tailvar", 0
17430 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
17440 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
17450 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
17460 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
17470 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
17480 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
17490 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20  L_ERROR;.  zSql 
174a0 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  = Tcl_GetString(
174b0 6f 62 6a 76 5b 32 5d 29 3b 0a 20 20 69 66 28 20  objv[2]);.  if( 
174c0 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
174d0 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33  j(interp, objv[3
174e0 5d 2c 20 26 62 79 74 65 73 29 20 29 20 72 65 74  ], &bytes) ) ret
174f0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a  urn TCL_ERROR;..
17500 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 70    rc = sqlite3_p
17510 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20 7a 53  repare_v2(db, zS
17520 71 6c 2c 20 62 79 74 65 73 2c 20 26 70 53 74 6d  ql, bytes, &pStm
17530 74 2c 20 26 7a 54 61 69 6c 29 3b 0a 20 20 61 73  t, &zTail);.  as
17540 73 65 72 74 28 72 63 3d 3d 53 51 4c 49 54 45 5f  sert(rc==SQLITE_
17550 4f 4b 20 7c 7c 20 70 53 74 6d 74 3d 3d 30 29 3b  OK || pStmt==0);
17560 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
17570 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
17580 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
17590 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
175a0 69 66 28 20 7a 54 61 69 6c 20 29 7b 0a 20 20 20  if( zTail ){.   
175b0 20 69 66 28 20 62 79 74 65 73 3e 3d 30 20 29 7b   if( bytes>=0 ){
175c0 0a 20 20 20 20 20 20 62 79 74 65 73 20 3d 20 62  .      bytes = b
175d0 79 74 65 73 20 2d 20 28 7a 54 61 69 6c 2d 7a 53  ytes - (zTail-zS
175e0 71 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54  ql);.    }.    T
175f0 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32 28 69 6e  cl_ObjSetVar2(in
17600 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d 2c 20 30  terp, objv[4], 0
17610 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
17620 62 6a 28 7a 54 61 69 6c 2c 20 62 79 74 65 73 29  bj(zTail, bytes)
17630 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  , 0);.  }.  if( 
17640 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
17650 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 53 74  .    assert( pSt
17660 6d 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 70 72  mt==0 );.    spr
17670 69 6e 74 66 28 7a 42 75 66 2c 20 22 28 25 64 29  intf(zBuf, "(%d)
17680 20 22 2c 20 72 63 29 3b 0a 20 20 20 20 54 63 6c   ", rc);.    Tcl
17690 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
176a0 74 65 72 70 2c 20 7a 42 75 66 2c 20 73 71 6c 69  terp, zBuf, sqli
176b0 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c 20  te3_errmsg(db), 
176c0 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
176d0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
176e0 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20 20   if( pStmt ){.  
176f0 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65 73    if( sqlite3Tes
17700 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72 28  tMakePointerStr(
17710 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70 53  interp, zBuf, pS
17720 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54 43  tmt) ) return TC
17730 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 54 63 6c  L_ERROR;.    Tcl
17740 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
17750 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a  terp, zBuf, 0);.
17760 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c    }.  return TCL
17770 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
17780 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 70 72 65  age: sqlite3_pre
17790 70 61 72 65 5f 74 6b 74 33 31 33 34 20 44 42 0a  pare_tkt3134 DB.
177a0 2a 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 61  **.** Generate a
177b0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
177c0 65 6e 74 20 66 6f 72 20 61 20 7a 65 72 6f 2d 62  ent for a zero-b
177d0 79 74 65 20 73 74 72 69 6e 67 20 61 73 20 61 20  yte string as a 
177e0 74 65 73 74 0a 2a 2a 20 66 6f 72 20 74 69 63 6b  test.** for tick
177f0 65 74 20 23 33 31 33 34 2e 20 20 54 68 65 20 73  et #3134.  The s
17800 74 72 69 6e 67 20 73 68 6f 75 6c 64 20 62 65 20  tring should be 
17810 70 72 65 63 65 65 64 65 64 20 62 79 20 61 20 7a  preceeded by a z
17820 65 72 6f 20 62 79 74 65 2e 0a 2a 2f 0a 73 74 61  ero byte..*/.sta
17830 74 69 63 20 69 6e 74 20 74 65 73 74 5f 70 72 65  tic int test_pre
17840 70 61 72 65 5f 74 6b 74 33 31 33 34 28 0a 20 20  pare_tkt3134(.  
17850 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74  void * clientDat
17860 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  a,.  Tcl_Interp 
17870 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f  *interp,.  int o
17880 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  bjc,.  Tcl_Obj *
17890 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a  CONST objv[].){.
178a0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20    sqlite3 *db;. 
178b0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
178c0 61 72 20 7a 53 71 6c 5b 5d 20 3d 20 22 5c 30 30  ar zSql[] = "\00
178d0 30 53 45 4c 45 43 54 20 31 22 3b 0a 20 20 73 71  0SELECT 1";.  sq
178e0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
178f0 74 20 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 42  t = 0;.  char zB
17900 75 66 5b 35 30 5d 3b 0a 20 20 69 6e 74 20 72 63  uf[50];.  int rc
17910 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32  ;..  if( objc!=2
17920 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65   ){.    Tcl_Appe
17930 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  ndResult(interp,
17940 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20   "wrong # args: 
17950 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a  should be \"", .
17960 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74         Tcl_GetSt
17970 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22  ring(objv[0]), "
17980 20 44 42 20 73 71 6c 20 62 79 74 65 73 20 74 61   DB sql bytes ta
17990 69 6c 76 61 72 22 2c 20 30 29 3b 0a 20 20 20 20  ilvar", 0);.    
179a0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
179b0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44  ;.  }.  if( getD
179c0 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  bPointer(interp,
179d0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
179e0 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20  bjv[1]), &db) ) 
179f0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
17a00 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
17a10 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c 20  _prepare_v2(db, 
17a20 26 7a 53 71 6c 5b 31 5d 2c 20 30 2c 20 26 70 53  &zSql[1], 0, &pS
17a30 74 6d 74 2c 20 30 29 3b 0a 20 20 61 73 73 65 72  tmt, 0);.  asser
17a40 74 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  t(rc==SQLITE_OK 
17a50 7c 7c 20 70 53 74 6d 74 3d 3d 30 29 3b 0a 20 20  || pStmt==0);.  
17a60 69 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 45  if( sqlite3TestE
17a70 72 72 43 6f 64 65 28 69 6e 74 65 72 70 2c 20 64  rrCode(interp, d
17a80 62 2c 20 72 63 29 20 29 20 72 65 74 75 72 6e 20  b, rc) ) return 
17a90 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
17aa0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
17ab0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 53  {.    assert( pS
17ac0 74 6d 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 70  tmt==0 );.    sp
17ad0 72 69 6e 74 66 28 7a 42 75 66 2c 20 22 28 25 64  rintf(zBuf, "(%d
17ae0 29 20 22 2c 20 72 63 29 3b 0a 20 20 20 20 54 63  ) ", rc);.    Tc
17af0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
17b00 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 73 71 6c  nterp, zBuf, sql
17b10 69 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c  ite3_errmsg(db),
17b20 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
17b30 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
17b40 20 20 69 66 28 20 70 53 74 6d 74 20 29 7b 0a 20    if( pStmt ){. 
17b50 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65     if( sqlite3Te
17b60 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72 53 74 72  stMakePointerStr
17b70 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 70  (interp, zBuf, p
17b80 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
17b90 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 54 63  CL_ERROR;.    Tc
17ba0 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69  l_AppendResult(i
17bb0 6e 74 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b  nterp, zBuf, 0);
17bc0 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43  .  }.  return TC
17bd0 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
17be0 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 70 72  sage: sqlite3_pr
17bf0 65 70 61 72 65 31 36 20 44 42 20 73 71 6c 20 62  epare16 DB sql b
17c00 79 74 65 73 20 74 61 69 6c 76 61 72 0a 2a 2a 0a  ytes tailvar.**.
17c10 2a 2a 20 43 6f 6d 70 69 6c 65 20 75 70 20 74 6f  ** Compile up to
17c20 20 3c 62 79 74 65 73 3e 20 62 79 74 65 73 20 6f   <bytes> bytes o
17c30 66 20 74 68 65 20 73 75 70 70 6c 69 65 64 20 53  f the supplied S
17c40 51 4c 20 73 74 72 69 6e 67 20 3c 73 71 6c 3e 20  QL string <sql> 
17c50 75 73 69 6e 67 0a 2a 2a 20 64 61 74 61 62 61 73  using.** databas
17c60 65 20 68 61 6e 64 6c 65 20 3c 44 42 3e 2e 20 54  e handle <DB>. T
17c70 68 65 20 70 61 72 61 6d 65 74 65 72 20 3c 74 61  he parameter <ta
17c80 69 6c 76 61 6c 3e 20 69 73 20 74 68 65 20 6e 61  ilval> is the na
17c90 6d 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c 0a 2a  me of a global.*
17ca0 2a 20 76 61 72 69 61 62 6c 65 20 74 68 61 74 20  * variable that 
17cb0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 75 6e  is set to the un
17cc0 75 73 65 64 20 70 6f 72 74 69 6f 6e 20 6f 66 20  used portion of 
17cd0 3c 73 71 6c 3e 20 28 69 66 20 61 6e 79 29 2e 20  <sql> (if any). 
17ce0 41 0a 2a 2a 20 53 54 4d 54 20 68 61 6e 64 6c 65  A.** STMT handle
17cf0 20 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 2a 2f   is returned..*/
17d00 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74  .static int test
17d10 5f 70 72 65 70 61 72 65 31 36 28 0a 20 20 76 6f  _prepare16(.  vo
17d20 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
17d30 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
17d40 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
17d50 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
17d60 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69  NST objv[].){.#i
17d70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
17d80 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69 74 65  T_UTF16.  sqlite
17d90 33 20 2a 64 62 3b 0a 20 20 63 6f 6e 73 74 20 76  3 *db;.  const v
17da0 6f 69 64 20 2a 7a 53 71 6c 3b 0a 20 20 63 6f 6e  oid *zSql;.  con
17db0 73 74 20 76 6f 69 64 20 2a 7a 54 61 69 6c 20 3d  st void *zTail =
17dc0 20 30 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70   0;.  Tcl_Obj *p
17dd0 54 61 69 6c 20 3d 20 30 3b 0a 20 20 73 71 6c 69  Tail = 0;.  sqli
17de0 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20  te3_stmt *pStmt 
17df0 3d 20 30 3b 0a 20 20 63 68 61 72 20 7a 42 75 66  = 0;.  char zBuf
17e00 5b 35 30 5d 3b 20 0a 20 20 69 6e 74 20 72 63 3b  [50]; .  int rc;
17e10 0a 20 20 69 6e 74 20 62 79 74 65 73 3b 20 20 20  .  int bytes;   
17e20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17e30 54 68 65 20 69 6e 74 65 67 65 72 20 73 70 65 63  The integer spec
17e40 69 66 69 65 64 20 61 73 20 61 72 67 20 33 20 2a  ified as arg 3 *
17e50 2f 0a 20 20 69 6e 74 20 6f 62 6a 6c 65 6e 3b 20  /.  int objlen; 
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17e70 20 54 68 65 20 62 79 74 65 2d 61 72 72 61 79 20   The byte-array 
17e80 6c 65 6e 67 74 68 20 6f 66 20 61 72 67 20 32 20  length of arg 2 
17e90 2a 2f 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  */..  if( objc!=
17ea0 35 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  5 ){.    Tcl_App
17eb0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
17ec0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
17ed0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
17ee0 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53  .       Tcl_GetS
17ef0 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20  tring(objv[0]), 
17f00 22 20 44 42 20 73 71 6c 20 62 79 74 65 73 20 74  " DB sql bytes t
17f10 61 69 6c 76 61 72 22 2c 20 30 29 3b 0a 20 20 20  ailvar", 0);.   
17f20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
17f30 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
17f40 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
17f50 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
17f60 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29  objv[1]), &db) )
17f70 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
17f80 52 3b 0a 20 20 7a 53 71 6c 20 3d 20 54 63 6c 5f  R;.  zSql = Tcl_
17f90 47 65 74 42 79 74 65 41 72 72 61 79 46 72 6f 6d  GetByteArrayFrom
17fa0 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 26 6f 62  Obj(objv[2], &ob
17fb0 6a 6c 65 6e 29 3b 0a 20 20 69 66 28 20 54 63 6c  jlen);.  if( Tcl
17fc0 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  _GetIntFromObj(i
17fd0 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20  nterp, objv[3], 
17fe0 26 62 79 74 65 73 29 20 29 20 72 65 74 75 72 6e  &bytes) ) return
17ff0 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 72   TCL_ERROR;..  r
18000 63 20 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70  c = sqlite3_prep
18010 61 72 65 31 36 28 64 62 2c 20 7a 53 71 6c 2c 20  are16(db, zSql, 
18020 62 79 74 65 73 2c 20 26 70 53 74 6d 74 2c 20 26  bytes, &pStmt, &
18030 7a 54 61 69 6c 29 3b 0a 20 20 69 66 28 20 73 71  zTail);.  if( sq
18040 6c 69 74 65 33 54 65 73 74 45 72 72 43 6f 64 65  lite3TestErrCode
18050 28 69 6e 74 65 72 70 2c 20 64 62 2c 20 72 63 29  (interp, db, rc)
18060 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
18070 52 4f 52 3b 0a 20 20 69 66 28 20 72 63 20 29 7b  ROR;.  if( rc ){
18080 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
18090 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
180a0 28 20 7a 54 61 69 6c 20 29 7b 0a 20 20 20 20 6f  ( zTail ){.    o
180b0 62 6a 6c 65 6e 20 3d 20 6f 62 6a 6c 65 6e 20 2d  bjlen = objlen -
180c0 20 28 28 75 38 20 2a 29 7a 54 61 69 6c 2d 28 75   ((u8 *)zTail-(u
180d0 38 20 2a 29 7a 53 71 6c 29 3b 0a 20 20 7d 65 6c  8 *)zSql);.  }el
180e0 73 65 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e 20 3d  se{.    objlen =
180f0 20 30 3b 0a 20 20 7d 0a 20 20 70 54 61 69 6c 20   0;.  }.  pTail 
18100 3d 20 54 63 6c 5f 4e 65 77 42 79 74 65 41 72 72  = Tcl_NewByteArr
18110 61 79 4f 62 6a 28 28 75 38 20 2a 29 7a 54 61 69  ayObj((u8 *)zTai
18120 6c 2c 20 6f 62 6a 6c 65 6e 29 3b 0a 20 20 54 63  l, objlen);.  Tc
18130 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 70  l_IncrRefCount(p
18140 54 61 69 6c 29 3b 0a 20 20 54 63 6c 5f 4f 62 6a  Tail);.  Tcl_Obj
18150 53 65 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20  SetVar2(interp, 
18160 6f 62 6a 76 5b 34 5d 2c 20 30 2c 20 70 54 61 69  objv[4], 0, pTai
18170 6c 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 44 65 63  l, 0);.  Tcl_Dec
18180 72 52 65 66 43 6f 75 6e 74 28 70 54 61 69 6c 29  rRefCount(pTail)
18190 3b 0a 0a 20 20 69 66 28 20 70 53 74 6d 74 20 29  ;..  if( pStmt )
181a0 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  {.    if( sqlite
181b0 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72  3TestMakePointer
181c0 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  Str(interp, zBuf
181d0 2c 20 70 53 74 6d 74 29 20 29 20 72 65 74 75 72  , pStmt) ) retur
181e0 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
181f0 0a 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73  .  Tcl_AppendRes
18200 75 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  ult(interp, zBuf
18210 2c 20 30 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  , 0);.#endif /* 
18220 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
18230 36 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43  6 */.  return TC
18240 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
18250 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 70 72  sage: sqlite3_pr
18260 65 70 61 72 65 31 36 5f 76 32 20 44 42 20 73 71  epare16_v2 DB sq
18270 6c 20 62 79 74 65 73 20 74 61 69 6c 76 61 72 0a  l bytes tailvar.
18280 2a 2a 0a 2a 2a 20 43 6f 6d 70 69 6c 65 20 75 70  **.** Compile up
18290 20 74 6f 20 3c 62 79 74 65 73 3e 20 62 79 74 65   to <bytes> byte
182a0 73 20 6f 66 20 74 68 65 20 73 75 70 70 6c 69 65  s of the supplie
182b0 64 20 53 51 4c 20 73 74 72 69 6e 67 20 3c 73 71  d SQL string <sq
182c0 6c 3e 20 75 73 69 6e 67 0a 2a 2a 20 64 61 74 61  l> using.** data
182d0 62 61 73 65 20 68 61 6e 64 6c 65 20 3c 44 42 3e  base handle <DB>
182e0 2e 20 54 68 65 20 70 61 72 61 6d 65 74 65 72 20  . The parameter 
182f0 3c 74 61 69 6c 76 61 6c 3e 20 69 73 20 74 68 65  <tailval> is the
18300 20 6e 61 6d 65 20 6f 66 20 61 20 67 6c 6f 62 61   name of a globa
18310 6c 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 74 68  l.** variable th
18320 61 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  at is set to the
18330 20 75 6e 75 73 65 64 20 70 6f 72 74 69 6f 6e 20   unused portion 
18340 6f 66 20 3c 73 71 6c 3e 20 28 69 66 20 61 6e 79  of <sql> (if any
18350 29 2e 20 41 0a 2a 2a 20 53 54 4d 54 20 68 61 6e  ). A.** STMT han
18360 64 6c 65 20 69 73 20 72 65 74 75 72 6e 65 64 2e  dle is returned.
18370 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
18380 65 73 74 5f 70 72 65 70 61 72 65 31 36 5f 76 32  est_prepare16_v2
18390 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e  (.  void * clien
183a0 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74  tData,.  Tcl_Int
183b0 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69  erp *interp,.  i
183c0 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f  nt objc,.  Tcl_O
183d0 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d  bj *CONST objv[]
183e0 0a 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .){.#ifndef SQLI
183f0 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
18400 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 63  sqlite3 *db;.  c
18410 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 53 71 6c 3b  onst void *zSql;
18420 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 7a  .  const void *z
18430 54 61 69 6c 20 3d 20 30 3b 0a 20 20 54 63 6c 5f  Tail = 0;.  Tcl_
18440 4f 62 6a 20 2a 70 54 61 69 6c 20 3d 20 30 3b 0a  Obj *pTail = 0;.
18450 20 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a    sqlite3_stmt *
18460 70 53 74 6d 74 20 3d 20 30 3b 0a 20 20 63 68 61  pStmt = 0;.  cha
18470 72 20 7a 42 75 66 5b 35 30 5d 3b 20 0a 20 20 69  r zBuf[50]; .  i
18480 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 62 79 74  nt rc;.  int byt
18490 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  es;             
184a0 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65     /* The intege
184b0 72 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61  r specified as a
184c0 72 67 20 33 20 2a 2f 0a 20 20 69 6e 74 20 6f 62  rg 3 */.  int ob
184d0 6a 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  jlen;           
184e0 20 20 20 20 2f 2a 20 54 68 65 20 62 79 74 65 2d      /* The byte-
184f0 61 72 72 61 79 20 6c 65 6e 67 74 68 20 6f 66 20  array length of 
18500 61 72 67 20 32 20 2a 2f 0a 0a 20 20 69 66 28 20  arg 2 */..  if( 
18510 6f 62 6a 63 21 3d 35 20 29 7b 0a 20 20 20 20 54  objc!=5 ){.    T
18520 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
18530 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
18540 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
18550 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
18560 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
18570 5b 30 5d 29 2c 20 22 20 44 42 20 73 71 6c 20 62  [0]), " DB sql b
18580 79 74 65 73 20 74 61 69 6c 76 61 72 22 2c 20 30  ytes tailvar", 0
18590 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
185a0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
185b0 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
185c0 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53  interp, Tcl_GetS
185d0 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20  tring(objv[1]), 
185e0 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
185f0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 53 71 6c 20  L_ERROR;.  zSql 
18600 3d 20 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72  = Tcl_GetByteArr
18610 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32  ayFromObj(objv[2
18620 5d 2c 20 26 6f 62 6a 6c 65 6e 29 3b 0a 20 20 69  ], &objlen);.  i
18630 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f  f( Tcl_GetIntFro
18640 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
18650 76 5b 33 5d 2c 20 26 62 79 74 65 73 29 20 29 20  v[3], &bytes) ) 
18660 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
18670 3b 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ;..  rc = sqlite
18680 33 5f 70 72 65 70 61 72 65 31 36 5f 76 32 28 64  3_prepare16_v2(d
18690 62 2c 20 7a 53 71 6c 2c 20 62 79 74 65 73 2c 20  b, zSql, bytes, 
186a0 26 70 53 74 6d 74 2c 20 26 7a 54 61 69 6c 29 3b  &pStmt, &zTail);
186b0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 65  .  if( sqlite3Te
186c0 73 74 45 72 72 43 6f 64 65 28 69 6e 74 65 72 70  stErrCode(interp
186d0 2c 20 64 62 2c 20 72 63 29 20 29 20 72 65 74 75  , db, rc) ) retu
186e0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
186f0 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 72 65  if( rc ){.    re
18700 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
18710 20 20 7d 0a 0a 20 20 69 66 28 20 7a 54 61 69 6c    }..  if( zTail
18720 20 29 7b 0a 20 20 20 20 6f 62 6a 6c 65 6e 20 3d   ){.    objlen =
18730 20 6f 62 6a 6c 65 6e 20 2d 20 28 28 75 38 20 2a   objlen - ((u8 *
18740 29 7a 54 61 69 6c 2d 28 75 38 20 2a 29 7a 53 71  )zTail-(u8 *)zSq
18750 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  l);.  }else{.   
18760 20 6f 62 6a 6c 65 6e 20 3d 20 30 3b 0a 20 20 7d   objlen = 0;.  }
18770 0a 20 20 70 54 61 69 6c 20 3d 20 54 63 6c 5f 4e  .  pTail = Tcl_N
18780 65 77 42 79 74 65 41 72 72 61 79 4f 62 6a 28 28  ewByteArrayObj((
18790 75 38 20 2a 29 7a 54 61 69 6c 2c 20 6f 62 6a 6c  u8 *)zTail, objl
187a0 65 6e 29 3b 0a 20 20 54 63 6c 5f 49 6e 63 72 52  en);.  Tcl_IncrR
187b0 65 66 43 6f 75 6e 74 28 70 54 61 69 6c 29 3b 0a  efCount(pTail);.
187c0 20 20 54 63 6c 5f 4f 62 6a 53 65 74 56 61 72 32    Tcl_ObjSetVar2
187d0 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 34 5d  (interp, objv[4]
187e0 2c 20 30 2c 20 70 54 61 69 6c 2c 20 30 29 3b 0a  , 0, pTail, 0);.
187f0 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75    Tcl_DecrRefCou
18800 6e 74 28 70 54 61 69 6c 29 3b 0a 0a 20 20 69 66  nt(pTail);..  if
18810 28 20 70 53 74 6d 74 20 29 7b 0a 20 20 20 20 69  ( pStmt ){.    i
18820 66 28 20 73 71 6c 69 74 65 33 54 65 73 74 4d 61  f( sqlite3TestMa
18830 6b 65 50 6f 69 6e 74 65 72 53 74 72 28 69 6e 74  kePointerStr(int
18840 65 72 70 2c 20 7a 42 75 66 2c 20 70 53 74 6d 74  erp, zBuf, pStmt
18850 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
18860 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  RROR;.  }.  Tcl_
18870 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
18880 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23  erp, zBuf, 0);.#
18890 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
188a0 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20  OMIT_UTF16 */.  
188b0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
188c0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
188d0 71 6c 69 74 65 33 5f 6f 70 65 6e 20 66 69 6c 65  qlite3_open file
188e0 6e 61 6d 65 20 3f 6f 70 74 69 6f 6e 73 2d 6c 69  name ?options-li
188f0 73 74 3f 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  st?.*/.static in
18900 74 20 74 65 73 74 5f 6f 70 65 6e 28 0a 20 20 76  t test_open(.  v
18910 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
18920 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
18930 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
18940 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
18950 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
18960 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
18970 6c 65 6e 61 6d 65 3b 0a 20 20 73 71 6c 69 74 65  lename;.  sqlite
18980 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b  3 *db;.  int rc;
18990 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30  .  char zBuf[100
189a0 5d 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  ];..  if( objc!=
189b0 33 20 26 26 20 6f 62 6a 63 21 3d 32 20 26 26 20  3 && objc!=2 && 
189c0 6f 62 6a 63 21 3d 31 20 29 7b 0a 20 20 20 20 54  objc!=1 ){.    T
189d0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
189e0 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
189f0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
18a00 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
18a10 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
18a20 5b 30 5d 29 2c 20 22 20 66 69 6c 65 6e 61 6d 65  [0]), " filename
18a30 20 6f 70 74 69 6f 6e 73 2d 6c 69 73 74 22 2c 20   options-list", 
18a40 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  0);.    return T
18a50 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20  CL_ERROR;.  }.. 
18a60 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 6f 62 6a   zFilename = obj
18a70 63 3e 31 20 3f 20 54 63 6c 5f 47 65 74 53 74 72  c>1 ? Tcl_GetStr
18a80 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 20 3a 20 30  ing(objv[1]) : 0
18a90 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
18aa0 5f 6f 70 65 6e 28 7a 46 69 6c 65 6e 61 6d 65 2c  _open(zFilename,
18ab0 20 26 64 62 29 3b 0a 20 20 0a 20 20 69 66 28 20   &db);.  .  if( 
18ac0 73 71 6c 69 74 65 33 54 65 73 74 4d 61 6b 65 50  sqlite3TestMakeP
18ad0 6f 69 6e 74 65 72 53 74 72 28 69 6e 74 65 72 70  ointerStr(interp
18ae0 2c 20 7a 42 75 66 2c 20 64 62 29 20 29 20 72 65  , zBuf, db) ) re
18af0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
18b00 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
18b10 6c 74 28 69 6e 74 65 72 70 2c 20 7a 42 75 66 2c  lt(interp, zBuf,
18b20 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43   0);.  return TC
18b30 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
18b40 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 6f 70  sage: sqlite3_op
18b50 65 6e 31 36 20 66 69 6c 65 6e 61 6d 65 20 6f 70  en16 filename op
18b60 74 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74 69 63 20  tions.*/.static 
18b70 69 6e 74 20 74 65 73 74 5f 6f 70 65 6e 31 36 28  int test_open16(
18b80 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
18b90 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
18ba0 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
18bb0 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62  t objc,.  Tcl_Ob
18bc0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a  j *CONST objv[].
18bd0 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
18be0 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 63  E_OMIT_UTF16.  c
18bf0 6f 6e 73 74 20 76 6f 69 64 20 2a 7a 46 69 6c 65  onst void *zFile
18c00 6e 61 6d 65 3b 0a 20 20 73 71 6c 69 74 65 33 20  name;.  sqlite3 
18c10 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  *db;.  int rc;. 
18c20 20 63 68 61 72 20 7a 42 75 66 5b 31 30 30 5d 3b   char zBuf[100];
18c30 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 33 20  ..  if( objc!=3 
18c40 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
18c50 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
18c60 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
18c70 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20  hould be \"", . 
18c80 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72        Tcl_GetStr
18c90 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20  ing(objv[0]), " 
18ca0 66 69 6c 65 6e 61 6d 65 20 6f 70 74 69 6f 6e 73  filename options
18cb0 2d 6c 69 73 74 22 2c 20 30 29 3b 0a 20 20 20 20  -list", 0);.    
18cc0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
18cd0 3b 0a 20 20 7d 0a 0a 20 20 7a 46 69 6c 65 6e 61  ;.  }..  zFilena
18ce0 6d 65 20 3d 20 54 63 6c 5f 47 65 74 42 79 74 65  me = Tcl_GetByte
18cf0 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a  ArrayFromObj(obj
18d00 76 5b 31 5d 2c 20 30 29 3b 0a 20 20 72 63 20 3d  v[1], 0);.  rc =
18d10 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 31 36 28   sqlite3_open16(
18d20 7a 46 69 6c 65 6e 61 6d 65 2c 20 26 64 62 29 3b  zFilename, &db);
18d30 0a 20 20 0a 20 20 69 66 28 20 73 71 6c 69 74 65  .  .  if( sqlite
18d40 33 54 65 73 74 4d 61 6b 65 50 6f 69 6e 74 65 72  3TestMakePointer
18d50 53 74 72 28 69 6e 74 65 72 70 2c 20 7a 42 75 66  Str(interp, zBuf
18d60 2c 20 64 62 29 20 29 20 72 65 74 75 72 6e 20 54  , db) ) return T
18d70 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 54 63 6c 5f  CL_ERROR;.  Tcl_
18d80 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
18d90 65 72 70 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 23  erp, zBuf, 0);.#
18da0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
18db0 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 20 20  OMIT_UTF16 */.  
18dc0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
18dd0 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
18de0 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65 31  qlite3_complete1
18df0 36 20 3c 55 54 46 2d 31 36 20 73 74 72 69 6e 67  6 <UTF-16 string
18e00 3e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 31  >.**.** Return 1
18e10 20 69 66 20 74 68 65 20 73 75 70 70 6c 69 65 64   if the supplied
18e20 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 63   argument is a c
18e30 6f 6d 70 6c 65 74 65 20 53 51 4c 20 73 74 61 74  omplete SQL stat
18e40 65 6d 65 6e 74 2c 20 6f 72 20 7a 65 72 6f 0a 2a  ement, or zero.*
18e50 2a 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2f 0a  * otherwise..*/.
18e60 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
18e70 63 6f 6d 70 6c 65 74 65 31 36 28 0a 20 20 76 6f  complete16(.  vo
18e80 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
18e90 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
18ea0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
18eb0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
18ec0 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69  NST objv[].){.#i
18ed0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
18ee0 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 29  E_OMIT_COMPLETE)
18ef0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
18f00 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 29 0a  ITE_OMIT_UTF16).
18f10 20 20 63 68 61 72 20 2a 7a 42 75 66 3b 0a 0a 20    char *zBuf;.. 
18f20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
18f30 20 20 20 20 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d      Tcl_WrongNum
18f40 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c 20  Args(interp, 1, 
18f50 6f 62 6a 76 2c 20 22 3c 75 74 66 2d 31 36 20 73  objv, "<utf-16 s
18f60 71 6c 3e 22 29 3b 0a 20 20 20 20 72 65 74 75 72  ql>");.    retur
18f70 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
18f80 0a 0a 20 20 7a 42 75 66 20 3d 20 28 63 68 61 72  ..  zBuf = (char
18f90 2a 29 54 63 6c 5f 47 65 74 42 79 74 65 41 72 72  *)Tcl_GetByteArr
18fa0 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31  ayFromObj(objv[1
18fb0 5d 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74  ], 0);.  Tcl_Set
18fc0 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
18fd0 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
18fe0 73 71 6c 69 74 65 33 5f 63 6f 6d 70 6c 65 74 65  sqlite3_complete
18ff0 31 36 28 7a 42 75 66 29 29 29 3b 0a 23 65 6e 64  16(zBuf)));.#end
19000 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
19010 54 5f 43 4f 4d 50 4c 45 54 45 20 26 26 20 53 51  T_COMPLETE && SQ
19020 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
19030 2a 2f 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  */.  return TCL_
19040 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
19050 67 65 3a 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ge: sqlite3_step
19060 20 53 54 4d 54 0a 2a 2a 0a 2a 2a 20 41 64 76 61   STMT.**.** Adva
19070 6e 63 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e  nce the statemen
19080 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f  t to the next ro
19090 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  w..*/.static int
190a0 20 74 65 73 74 5f 73 74 65 70 28 0a 20 20 76 6f   test_step(.  vo
190b0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
190c0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
190d0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
190e0 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
190f0 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20  NST objv[].){.  
19100 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53  sqlite3_stmt *pS
19110 74 6d 74 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a  tmt;.  int rc;..
19120 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
19130 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
19140 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
19150 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
19160 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20  uld be \"", .   
19170 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e      Tcl_GetStrin
19180 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54  g(objv[0]), " ST
19190 4d 54 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  MT", 0);.    ret
191a0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
191b0 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d   }..  if( getStm
191c0 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c  tPointer(interp,
191d0 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f   Tcl_GetString(o
191e0 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29  bjv[1]), &pStmt)
191f0 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
19200 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
19210 74 65 33 5f 73 74 65 70 28 70 53 74 6d 74 29 3b  te3_step(pStmt);
19220 0a 0a 20 20 2f 2a 20 69 66 28 20 72 63 21 3d 53  ..  /* if( rc!=S
19230 51 4c 49 54 45 5f 44 4f 4e 45 20 26 26 20 72 63  QLITE_DONE && rc
19240 21 3d 53 51 4c 49 54 45 5f 52 4f 57 20 29 20 72  !=SQLITE_ROW ) r
19250 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
19260 20 2a 2f 0a 20 20 54 63 6c 5f 53 65 74 52 65 73   */.  Tcl_SetRes
19270 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
19280 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28  r *)t1ErrorName(
19290 72 63 29 2c 20 30 29 3b 0a 20 20 72 65 74 75 72  rc), 0);.  retur
192a0 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  n TCL_OK;.}../*.
192b0 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
192c0 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 53  3_column_count S
192d0 54 4d 54 20 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72  TMT .**.** Retur
192e0 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
192f0 63 6f 6c 75 6d 6e 73 20 72 65 74 75 72 6e 65 64  columns returned
19300 20 62 79 20 74 68 65 20 73 71 6c 20 73 74 61 74   by the sql stat
19310 65 6d 65 6e 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73  ement STMT..*/.s
19320 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f 63  tatic int test_c
19330 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 0a 20 20 76  olumn_count(.  v
19340 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
19350 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
19360 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
19370 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
19380 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
19390 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70   sqlite3_stmt *p
193a0 53 74 6d 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  Stmt;..  if( obj
193b0 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=2 ){.    Tcl_
193c0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
193d0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
193e0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
193f0 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
19400 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
19410 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
19420 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
19430 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
19440 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
19450 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
19460 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
19470 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
19480 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
19490 52 3b 0a 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a  R;..  Tcl_SetObj
194a0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54  Result(interp, T
194b0 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 73 71 6c  cl_NewIntObj(sql
194c0 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e  ite3_column_coun
194d0 74 28 70 53 74 6d 74 29 29 29 3b 0a 20 20 72 65  t(pStmt)));.  re
194e0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
194f0 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
19500 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65  ite3_column_type
19510 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a   STMT column.**.
19520 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 74 79  ** Return the ty
19530 70 65 20 6f 66 20 74 68 65 20 64 61 74 61 20 69  pe of the data i
19540 6e 20 63 6f 6c 75 6d 6e 20 27 63 6f 6c 75 6d 6e  n column 'column
19550 27 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  ' of the current
19560 20 72 6f 77 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   row..*/.static 
19570 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f  int test_column_
19580 74 79 70 65 28 0a 20 20 76 6f 69 64 20 2a 20 63  type(.  void * c
19590 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
195a0 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
195b0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
195c0 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
195d0 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
195e0 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
195f0 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 6e 74 20   int col;.  int 
19600 74 70 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21  tp;..  if( objc!
19610 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70  =3 ){.    Tcl_Ap
19620 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72  pendResult(inter
19630 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73  p, "wrong # args
19640 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c  : should be \"",
19650 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74   .       Tcl_Get
19660 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c  String(objv[0]),
19670 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c   " STMT column",
19680 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
19690 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a  TCL_ERROR;.  }..
196a0 20 20 69 66 28 20 67 65 74 53 74 6d 74 50 6f 69    if( getStmtPoi
196b0 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63 6c  nter(interp, Tcl
196c0 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  _GetString(objv[
196d0 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29 20 72  1]), &pStmt) ) r
196e0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
196f0 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e  .  if( Tcl_GetIn
19700 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
19710 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c 29 20   objv[2], &col) 
19720 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
19730 4f 52 3b 0a 0a 20 20 74 70 20 3d 20 73 71 6c 69  OR;..  tp = sqli
19740 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28  te3_column_type(
19750 70 53 74 6d 74 2c 20 63 6f 6c 29 3b 0a 20 20 73  pStmt, col);.  s
19760 77 69 74 63 68 28 20 74 70 20 29 7b 0a 20 20 20  witch( tp ){.   
19770 20 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54   case SQLITE_INT
19780 45 47 45 52 3a 20 0a 20 20 20 20 20 20 54 63 6c  EGER: .      Tcl
19790 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
197a0 70 2c 20 22 49 4e 54 45 47 45 52 22 2c 20 54 43  p, "INTEGER", TC
197b0 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20 20  L_STATIC); .    
197c0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
197d0 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 3a 0a 20  e SQLITE_NULL:. 
197e0 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73 75       Tcl_SetResu
197f0 6c 74 28 69 6e 74 65 72 70 2c 20 22 4e 55 4c 4c  lt(interp, "NULL
19800 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b 20  ", TCL_STATIC); 
19810 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
19820 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4c    case SQLITE_FL
19830 4f 41 54 3a 0a 20 20 20 20 20 20 54 63 6c 5f 53  OAT:.      Tcl_S
19840 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c  etResult(interp,
19850 20 22 46 4c 4f 41 54 22 2c 20 54 43 4c 5f 53 54   "FLOAT", TCL_ST
19860 41 54 49 43 29 3b 20 0a 20 20 20 20 20 20 62 72  ATIC); .      br
19870 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 53 51  eak;.    case SQ
19880 4c 49 54 45 5f 54 45 58 54 3a 0a 20 20 20 20 20  LITE_TEXT:.     
19890 20 54 63 6c 5f 53 65 74 52 65 73 75 6c 74 28 69   Tcl_SetResult(i
198a0 6e 74 65 72 70 2c 20 22 54 45 58 54 22 2c 20 54  nterp, "TEXT", T
198b0 43 4c 5f 53 54 41 54 49 43 29 3b 20 0a 20 20 20  CL_STATIC); .   
198c0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
198d0 73 65 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3a 0a  se SQLITE_BLOB:.
198e0 20 20 20 20 20 20 54 63 6c 5f 53 65 74 52 65 73        Tcl_SetRes
198f0 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 42 4c 4f  ult(interp, "BLO
19900 42 22 2c 20 54 43 4c 5f 53 54 41 54 49 43 29 3b  B", TCL_STATIC);
19910 20 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20   .      break;. 
19920 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
19930 20 20 61 73 73 65 72 74 28 30 29 3b 0a 20 20 7d    assert(0);.  }
19940 0a 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ..  return TCL_O
19950 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
19960 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
19970 6e 5f 69 6e 74 36 34 20 53 54 4d 54 20 63 6f 6c  n_int64 STMT col
19980 75 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e  umn.**.** Return
19990 20 74 68 65 20 64 61 74 61 20 69 6e 20 63 6f 6c   the data in col
199a0 75 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20  umn 'column' of 
199b0 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
199c0 63 61 73 74 20 61 73 20 61 6e 0a 2a 2a 20 77 69  cast as an.** wi
199d0 64 65 20 28 36 34 2d 62 69 74 29 20 69 6e 74 65  de (64-bit) inte
199e0 67 65 72 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ger..*/.static i
199f0 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 69  nt test_column_i
19a00 6e 74 36 34 28 0a 20 20 76 6f 69 64 20 2a 20 63  nt64(.  void * c
19a10 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
19a20 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
19a30 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54  .  int objc,.  T
19a40 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
19a50 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65  jv[].){.  sqlite
19a60 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
19a70 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 69 36 34 20   int col;.  i64 
19a80 69 56 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  iVal;..  if( obj
19a90 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
19aa0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
19ab0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
19ac0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
19ad0 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
19ae0 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
19af0 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
19b00 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
19b10 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
19b20 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
19b30 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
19b40 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
19b50 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
19b60 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
19b70 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
19b80 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
19b90 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
19ba0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
19bb0 52 52 4f 52 3b 0a 0a 20 20 69 56 61 6c 20 3d 20  RROR;..  iVal = 
19bc0 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
19bd0 6e 74 36 34 28 70 53 74 6d 74 2c 20 63 6f 6c 29  nt64(pStmt, col)
19be0 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65  ;.  Tcl_SetObjRe
19bf0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c  sult(interp, Tcl
19c00 5f 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 69  _NewWideIntObj(i
19c10 56 61 6c 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  Val));.  return 
19c20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
19c30 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
19c40 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 20 53 54 4d 54  column_blob STMT
19c50 20 63 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69   column.*/.stati
19c60 63 20 69 6e 74 20 74 65 73 74 5f 63 6f 6c 75 6d  c int test_colum
19c70 6e 5f 62 6c 6f 62 28 0a 20 20 76 6f 69 64 20 2a  n_blob(.  void *
19c80 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
19c90 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
19ca0 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
19cb0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
19cc0 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
19cd0 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b  te3_stmt *pStmt;
19ce0 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 0a 20 20 69  .  int col;..  i
19cf0 6e 74 20 6c 65 6e 3b 0a 20 20 63 6f 6e 73 74 20  nt len;.  const 
19d00 76 6f 69 64 20 2a 70 42 6c 6f 62 3b 0a 0a 20 20  void *pBlob;..  
19d10 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a 20  if( objc!=3 ){. 
19d20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
19d30 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f  ult(interp, "wro
19d40 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c  ng # args: shoul
19d50 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20 20  d be \"", .     
19d60 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28    Tcl_GetString(
19d70 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d 54  objv[0]), " STMT
19d80 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20 20   column", 0);.  
19d90 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
19da0 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 67  OR;.  }..  if( g
19db0 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69 6e  etStmtPointer(in
19dc0 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72  terp, Tcl_GetStr
19dd0 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 70  ing(objv[1]), &p
19de0 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20 54  Stmt) ) return T
19df0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
19e00 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62  Tcl_GetIntFromOb
19e10 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32  j(interp, objv[2
19e20 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75 72  ], &col) ) retur
19e30 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
19e40 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  len = sqlite3_co
19e50 6c 75 6d 6e 5f 62 79 74 65 73 28 70 53 74 6d 74  lumn_bytes(pStmt
19e60 2c 20 63 6f 6c 29 3b 0a 20 20 70 42 6c 6f 62 20  , col);.  pBlob 
19e70 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
19e80 5f 62 6c 6f 62 28 70 53 74 6d 74 2c 20 63 6f 6c  _blob(pStmt, col
19e90 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  );.  Tcl_SetObjR
19ea0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
19eb0 6c 5f 4e 65 77 42 79 74 65 41 72 72 61 79 4f 62  l_NewByteArrayOb
19ec0 6a 28 70 42 6c 6f 62 2c 20 6c 65 6e 29 29 3b 0a  j(pBlob, len));.
19ed0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
19ee0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a  .}../*.** Usage:
19ef0 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
19f00 64 6f 75 62 6c 65 20 53 54 4d 54 20 63 6f 6c 75  double STMT colu
19f10 6d 6e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  mn.**.** Return 
19f20 74 68 65 20 64 61 74 61 20 69 6e 20 63 6f 6c 75  the data in colu
19f30 6d 6e 20 27 63 6f 6c 75 6d 6e 27 20 6f 66 20 74  mn 'column' of t
19f40 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 63  he current row c
19f50 61 73 74 20 61 73 20 61 20 64 6f 75 62 6c 65 2e  ast as a double.
19f60 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74  .*/.static int t
19f70 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64 6f 75 62 6c  est_column_doubl
19f80 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  e(.  void * clie
19f90 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
19fa0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
19fb0 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
19fc0 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
19fd0 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
19fe0 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
19ff0 74 20 63 6f 6c 3b 0a 20 20 64 6f 75 62 6c 65 20  t col;.  double 
1a000 72 56 61 6c 3b 0a 0a 20 20 69 66 28 20 6f 62 6a  rVal;..  if( obj
1a010 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
1a020 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
1a030 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
1a040 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
1a050 22 2c 20 0a 20 20 20 20 20 20 20 54 63 6c 5f 47  ", .       Tcl_G
1a060 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 30 5d  etString(objv[0]
1a070 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c 75 6d 6e  ), " STMT column
1a080 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72  ", 0);.    retur
1a090 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d  n TCL_ERROR;.  }
1a0a0 0a 0a 20 20 69 66 28 20 67 65 74 53 74 6d 74 50  ..  if( getStmtP
1a0b0 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54  ointer(interp, T
1a0c0 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a  cl_GetString(obj
1a0d0 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74 29 20 29  v[1]), &pStmt) )
1a0e0 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1a0f0 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f 47 65 74  R;.  if( Tcl_Get
1a100 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
1a110 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 63 6f 6c  p, objv[2], &col
1a120 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
1a130 52 52 4f 52 3b 0a 0a 20 20 72 56 61 6c 20 3d 20  RROR;..  rVal = 
1a140 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64  sqlite3_column_d
1a150 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20 63 6f 6c  ouble(pStmt, col
1a160 29 3b 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52  );.  Tcl_SetObjR
1a170 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
1a180 6c 5f 4e 65 77 44 6f 75 62 6c 65 4f 62 6a 28 72  l_NewDoubleObj(r
1a190 56 61 6c 29 29 3b 0a 20 20 72 65 74 75 72 6e 20  Val));.  return 
1a1a0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
1a1b0 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
1a1c0 64 61 74 61 5f 63 6f 75 6e 74 20 53 54 4d 54 20  data_count STMT 
1a1d0 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  .**.** Return th
1a1e0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1a1f0 6d 6e 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  mns returned by 
1a200 74 68 65 20 73 71 6c 20 73 74 61 74 65 6d 65 6e  the sql statemen
1a210 74 20 53 54 4d 54 2e 0a 2a 2f 0a 73 74 61 74 69  t STMT..*/.stati
1a220 63 20 69 6e 74 20 74 65 73 74 5f 64 61 74 61 5f  c int test_data_
1a230 63 6f 75 6e 74 28 0a 20 20 76 6f 69 64 20 2a 20  count(.  void * 
1a240 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
1a250 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
1a260 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
1a270 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
1a280 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74  bjv[].){.  sqlit
1a290 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a  e3_stmt *pStmt;.
1a2a0 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29  .  if( objc!=2 )
1a2b0 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
1a2c0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
1a2d0 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
1a2e0 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20  ould be \"", .  
1a2f0 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
1a300 6e 67 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53  ng(objv[0]), " S
1a310 54 4d 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b  TMT column", 0);
1a320 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
1a330 45 52 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66  ERROR;.  }..  if
1a340 28 20 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72  ( getStmtPointer
1a350 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74  (interp, Tcl_Get
1a360 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c  String(objv[1]),
1a370 20 26 70 53 74 6d 74 29 20 29 20 72 65 74 75 72   &pStmt) ) retur
1a380 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20  n TCL_ERROR;..  
1a390 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
1a3a0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
1a3b0 49 6e 74 4f 62 6a 28 73 71 6c 69 74 65 33 5f 64  IntObj(sqlite3_d
1a3c0 61 74 61 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29  ata_count(pStmt)
1a3d0 29 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  ));.  return TCL
1a3e0 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
1a3f0 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
1a400 75 6d 6e 5f 74 65 78 74 20 53 54 4d 54 20 63 6f  umn_text STMT co
1a410 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67 65  lumn.**.** Usage
1a420 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  : sqlite3_column
1a430 5f 64 65 63 6c 74 79 70 65 20 53 54 4d 54 20 63  _decltype STMT c
1a440 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73 61 67  olumn.**.** Usag
1a450 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  e: sqlite3_colum
1a460 6e 5f 6e 61 6d 65 20 53 54 4d 54 20 63 6f 6c 75  n_name STMT colu
1a470 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  mn.*/.static int
1a480 20 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 38 28   test_stmt_utf8(
1a490 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
1a4a0 44 61 74 61 2c 20 20 20 20 20 20 20 20 2f 2a 20  Data,        /* 
1a4b0 50 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c 69 74  Pointer to SQLit
1a4c0 65 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 74  e API function t
1a4d0 6f 20 62 65 20 69 6e 76 6f 6b 65 20 2a 2f 0a 20  o be invoke */. 
1a4e0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
1a4f0 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
1a500 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
1a510 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
1a520 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
1a530 74 3b 0a 20 20 69 6e 74 20 63 6f 6c 3b 0a 20 20  t;.  int col;.  
1a540 63 6f 6e 73 74 20 63 68 61 72 20 2a 28 2a 78 46  const char *(*xF
1a550 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 73 74 6d  unc)(sqlite3_stm
1a560 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 63 6f 6e 73  t*, int);.  cons
1a570 74 20 63 68 61 72 20 2a 7a 52 65 74 3b 0a 0a 20  t char *zRet;.. 
1a580 20 78 46 75 6e 63 20 3d 20 28 63 6f 6e 73 74 20   xFunc = (const 
1a590 63 68 61 72 20 2a 28 2a 29 28 73 71 6c 69 74 65  char *(*)(sqlite
1a5a0 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 29 63 6c  3_stmt*, int))cl
1a5b0 69 65 6e 74 44 61 74 61 3b 0a 20 20 69 66 28 20  ientData;.  if( 
1a5c0 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
1a5d0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
1a5e0 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
1a5f0 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
1a600 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
1a610 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
1a620 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c  [0]), " STMT col
1a630 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  umn", 0);.    re
1a640 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1a650 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
1a660 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
1a670 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
1a680 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
1a690 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
1a6a0 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
1a6b0 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
1a6c0 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
1a6d0 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  col) ) return TC
1a6e0 4c 5f 45 52 52 4f 52 3b 0a 20 20 7a 52 65 74 20  L_ERROR;.  zRet 
1a6f0 3d 20 78 46 75 6e 63 28 70 53 74 6d 74 2c 20 63  = xFunc(pStmt, c
1a700 6f 6c 29 3b 0a 20 20 69 66 28 20 7a 52 65 74 20  ol);.  if( zRet 
1a710 29 7b 0a 20 20 20 20 54 63 6c 5f 53 65 74 52 65  ){.    Tcl_SetRe
1a720 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68  sult(interp, (ch
1a730 61 72 20 2a 29 7a 52 65 74 2c 20 30 29 3b 0a 20  ar *)zRet, 0);. 
1a740 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f   }.  return TCL_
1a750 4f 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e  OK;.}..static in
1a760 74 20 74 65 73 74 5f 67 6c 6f 62 61 6c 5f 72 65  t test_global_re
1a770 63 6f 76 65 72 28 0a 20 20 76 6f 69 64 20 2a 20  cover(.  void * 
1a780 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
1a790 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
1a7a0 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
1a7b0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
1a7c0 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66  bjv[].){.#ifndef
1a7d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 47 4c 4f   SQLITE_OMIT_GLO
1a7e0 42 41 4c 52 45 43 4f 56 45 52 0a 23 69 66 6e 64  BALRECOVER.#ifnd
1a7f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ef SQLITE_OMIT_D
1a800 45 50 52 45 43 41 54 45 44 0a 20 20 69 6e 74 20  EPRECATED.  int 
1a810 72 63 3b 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  rc;.  if( objc!=
1a820 31 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72 6f  1 ){.    Tcl_Wro
1a830 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72 70  ngNumArgs(interp
1a840 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 22 29 3b 0a  , 1, objv, "");.
1a850 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
1a860 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  RROR;.  }.  rc =
1a870 20 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f   sqlite3_global_
1a880 72 65 63 6f 76 65 72 28 29 3b 0a 20 20 54 63 6c  recover();.  Tcl
1a890 5f 53 65 74 52 65 73 75 6c 74 28 69 6e 74 65 72  _SetResult(inter
1a8a0 70 2c 20 28 63 68 61 72 20 2a 29 74 31 45 72 72  p, (char *)t1Err
1a8b0 6f 72 4e 61 6d 65 28 72 63 29 2c 20 54 43 4c 5f  orName(rc), TCL_
1a8c0 53 54 41 54 49 43 29 3b 0a 23 65 6e 64 69 66 0a  STATIC);.#endif.
1a8d0 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20  #endif.  return 
1a8e0 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  TCL_OK;.}../*.**
1a8f0 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f   Usage: sqlite3_
1a900 63 6f 6c 75 6d 6e 5f 74 65 78 74 20 53 54 4d 54  column_text STMT
1a910 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55 73   column.**.** Us
1a920 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f 6c  age: sqlite3_col
1a930 75 6d 6e 5f 64 65 63 6c 74 79 70 65 20 53 54 4d  umn_decltype STM
1a940 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a 2a 2a 20 55  T column.**.** U
1a950 73 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 63 6f  sage: sqlite3_co
1a960 6c 75 6d 6e 5f 6e 61 6d 65 20 53 54 4d 54 20 63  lumn_name STMT c
1a970 6f 6c 75 6d 6e 0a 2a 2f 0a 73 74 61 74 69 63 20  olumn.*/.static 
1a980 69 6e 74 20 74 65 73 74 5f 73 74 6d 74 5f 75 74  int test_stmt_ut
1a990 66 31 36 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  f16(.  void * cl
1a9a0 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20 2f 2a  ientData,     /*
1a9b0 20 50 6f 69 6e 74 65 72 20 74 6f 20 53 51 4c 69   Pointer to SQLi
1a9c0 74 65 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20  te API function 
1a9d0 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 20 2a 2f  to be invoked */
1a9e0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1a9f0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a  nterp,.  int obj
1aa00 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  c,.  Tcl_Obj *CO
1aa10 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 23 69  NST objv[].){.#i
1aa20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1aa30 54 5f 55 54 46 31 36 0a 20 20 73 71 6c 69 74 65  T_UTF16.  sqlite
1aa40 33 5f 73 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20  3_stmt *pStmt;. 
1aa50 20 69 6e 74 20 63 6f 6c 3b 0a 20 20 54 63 6c 5f   int col;.  Tcl_
1aa60 4f 62 6a 20 2a 70 52 65 74 3b 0a 20 20 63 6f 6e  Obj *pRet;.  con
1aa70 73 74 20 76 6f 69 64 20 2a 7a 4e 61 6d 65 31 36  st void *zName16
1aa80 3b 0a 20 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  ;.  const void *
1aa90 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33  (*xFunc)(sqlite3
1aaa0 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 3b 0a 0a 20  _stmt*, int);.. 
1aab0 20 78 46 75 6e 63 20 3d 20 28 63 6f 6e 73 74 20   xFunc = (const 
1aac0 76 6f 69 64 20 2a 28 2a 29 28 73 71 6c 69 74 65  void *(*)(sqlite
1aad0 33 5f 73 74 6d 74 2a 2c 20 69 6e 74 29 29 63 6c  3_stmt*, int))cl
1aae0 69 65 6e 74 44 61 74 61 3b 0a 20 20 69 66 28 20  ientData;.  if( 
1aaf0 6f 62 6a 63 21 3d 33 20 29 7b 0a 20 20 20 20 54  objc!=3 ){.    T
1ab00 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
1ab10 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23  interp, "wrong #
1ab20 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65   args: should be
1ab30 20 5c 22 22 2c 20 0a 20 20 20 20 20 20 20 54 63   \"", .       Tc
1ab40 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
1ab50 5b 30 5d 29 2c 20 22 20 53 54 4d 54 20 63 6f 6c  [0]), " STMT col
1ab60 75 6d 6e 22 2c 20 30 29 3b 0a 20 20 20 20 72 65  umn", 0);.    re
1ab70 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1ab80 20 20 7d 0a 0a 20 20 69 66 28 20 67 65 74 53 74    }..  if( getSt
1ab90 6d 74 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  mtPointer(interp
1aba0 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28  , Tcl_GetString(
1abb0 6f 62 6a 76 5b 31 5d 29 2c 20 26 70 53 74 6d 74  objv[1]), &pStmt
1abc0 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
1abd0 52 52 4f 52 3b 0a 20 20 69 66 28 20 54 63 6c 5f  RROR;.  if( Tcl_
1abe0 47 65 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e  GetIntFromObj(in
1abf0 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26  terp, objv[2], &
1ac00 63 6f 6c 29 20 29 20 72 65 74 75 72 6e 20 54 43  col) ) return TC
1ac10 4c 5f 45 52 52 4f 52 3b 0a 0a 20 20 7a 4e 61 6d  L_ERROR;..  zNam
1ac20 65 31 36 20 3d 20 78 46 75 6e 63 28 70 53 74 6d  e16 = xFunc(pStm
1ac30 74 2c 20 63 6f 6c 29 3b 0a 20 20 69 66 28 20 7a  t, col);.  if( z
1ac40 4e 61 6d 65 31 36 20 29 7b 0a 20 20 20 20 70 52  Name16 ){.    pR
1ac50 65 74 20 3d 20 54 63 6c 5f 4e 65 77 42 79 74 65  et = Tcl_NewByte
1ac60 41 72 72 61 79 4f 62 6a 28 7a 4e 61 6d 65 31 36  ArrayObj(zName16
1ac70 2c 20 73 71 6c 69 74 65 33 55 74 66 31 36 42 79  , sqlite3Utf16By
1ac80 74 65 4c 65 6e 28 7a 4e 61 6d 65 31 36 2c 20 2d  teLen(zName16, -
1ac90 31 29 2b 32 29 3b 0a 20 20 20 20 54 63 6c 5f 53  1)+2);.    Tcl_S
1aca0 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
1acb0 72 70 2c 20 70 52 65 74 29 3b 0a 20 20 7d 0a 23  rp, pRet);.  }.#
1acc0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
1acd0 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 20  OMIT_UTF16 */.. 
1ace0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
1acf0 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
1ad00 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
1ad10 6e 74 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a  nt STMT column.*
1ad20 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69  *.** Usage: sqli
1ad30 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73  te3_column_bytes
1ad40 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a   STMT column.**.
1ad50 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c 69 74 65  ** Usage: sqlite
1ad60 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 31 36  3_column_bytes16
1ad70 20 53 54 4d 54 20 63 6f 6c 75 6d 6e 0a 2a 2a 0a   STMT column.**.
1ad80 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
1ad90 73 74 5f 73 74 6d 74 5f 69 6e 74 28 0a 20 20 76  st_stmt_int(.  v
1ada0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
1adb0 2c 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20  ,    /* Pointer 
1adc0 74 6f 20 53 51 4c 69 74 65 20 41 50 49 20 66 75  to SQLite API fu
1add0 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 69 6e 76  nction to be inv
1ade0 6f 6b 65 64 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  oked */.  Tcl_In
1adf0 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
1ae00 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
1ae10 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
1ae20 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  ].){.  sqlite3_s
1ae30 74 6d 74 20 2a 70 53 74 6d 74 3b 0a 20 20 69 6e  tmt *pStmt;.  in
1ae40 74 20 63 6f 6c 3b 0a 20 20 69 6e 74 20 28 2a 78  t col;.  int (*x
1ae50 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 73 74  Func)(sqlite3_st
1ae60 6d 74 2a 2c 20 69 6e 74 29 3b 0a 0a 20 20 78 46  mt*, int);..  xF
1ae70 75 6e 63 20 3d 20 28 69 6e 74 20 28 2a 29 28 73  unc = (int (*)(s
1ae80 71 6c 69 74 65 33 5f 73 74 6d 74 2a 2c 20 69 6e  qlite3_stmt*, in
1ae90 74 29 29 63 6c 69 65 6e 74 44 61 74 61 3b 0a 20  t))clientData;. 
1aea0 20 69 66 28 20 6f 62 6a 63 21 3d 33 20 29 7b 0a   if( objc!=3 ){.
1aeb0 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
1aec0 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
1aed0 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
1aee0 6c 64 20 62 65 20 5c 22 22 2c 20 0a 20 20 20 20  ld be \"", .    
1aef0 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
1af00 28 6f 62 6a 76 5b 30 5d 29 2c 20 22 20 53 54 4d  (objv[0]), " STM
1af10 54 20 63 6f 6c 75 6d 6e 22 2c 20 30 29 3b 0a 20  T column", 0);. 
1af20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52     return TCL_ER
1af30 52 4f 52 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  ROR;.  }..  if( 
1af40 67 65 74 53 74 6d 74 50 6f 69 6e 74 65 72 28 69  getStmtPointer(i
1af50 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74  nterp, Tcl_GetSt
1af60 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26  ring(objv[1]), &
1af70 70 53 74 6d 74 29 20 29 20 72 65 74 75 72 6e 20  pStmt) ) return 
1af80 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  TCL_ERROR;.  if(
1af90 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
1afa0 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
1afb0 32 5d 2c 20 26 63 6f 6c 29 20 29 20 72 65 74 75  2], &col) ) retu
1afc0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 0a 20  rn TCL_ERROR;.. 
1afd0 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
1afe0 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
1aff0 77 49 6e 74 4f 62 6a 28 78 46 75 6e 63 28 70 53  wIntObj(xFunc(pS
1b000 74 6d 74 2c 20 63 6f 6c 29 29 29 3b 0a 20 20 72  tmt, col)));.  r
1b010 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
1b020 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73  ./*.** Usage:  s
1b030 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 20  qlite_set_magic 
1b040 20 44 42 20 20 4d 41 47 49 43 2d 4e 55 4d 42 45   DB  MAGIC-NUMBE
1b050 52 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  R.**.** Set the 
1b060 64 62 2d 3e 6d 61 67 69 63 20 76 61 6c 75 65 2e  db->magic value.
1b070 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74    This is used t
1b080 6f 20 74 65 73 74 20 65 72 72 6f 72 20 72 65 63  o test error rec
1b090 6f 76 65 72 79 20 6c 6f 67 69 63 2e 0a 2a 2f 0a  overy logic..*/.
1b0a0 73 74 61 74 69 63 20 69 6e 74 20 73 71 6c 69 74  static int sqlit
1b0b0 65 5f 73 65 74 5f 6d 61 67 69 63 28 0a 20 20 76  e_set_magic(.  v
1b0c0 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
1b0d0 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
1b0e0 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72  interp,.  int ar
1b0f0 67 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67  gc,.  char **arg
1b100 76 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  v.){.  sqlite3 *
1b110 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  db;.  if( argc!=
1b120 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  3 ){.    Tcl_App
1b130 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
1b140 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
1b150 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
1b160 61 72 67 76 5b 30 5d 2c 0a 20 20 20 20 20 20 20  argv[0],.       
1b170 20 20 22 20 44 42 20 4d 41 47 49 43 22 2c 20 30    " DB MAGIC", 0
1b180 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
1b190 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
1b1a0 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
1b1b0 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
1b1c0 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
1b1d0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28 20  CL_ERROR;.  if( 
1b1e0 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d 2c 20  strcmp(argv[2], 
1b1f0 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50  "SQLITE_MAGIC_OP
1b200 45 4e 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 64  EN")==0 ){.    d
1b210 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51 4c 49 54  b->magic = SQLIT
1b220 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 3b 0a 20 20  E_MAGIC_OPEN;.  
1b230 7d 65 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70  }else if( strcmp
1b240 28 61 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54  (argv[2], "SQLIT
1b250 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 22 29  E_MAGIC_CLOSED")
1b260 3d 3d 30 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d  ==0 ){.    db->m
1b270 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 4d 41  agic = SQLITE_MA
1b280 47 49 43 5f 43 4c 4f 53 45 44 3b 0a 20 20 7d 65  GIC_CLOSED;.  }e
1b290 6c 73 65 20 69 66 28 20 73 74 72 63 6d 70 28 61  lse if( strcmp(a
1b2a0 72 67 76 5b 32 5d 2c 20 22 53 51 4c 49 54 45 5f  rgv[2], "SQLITE_
1b2b0 4d 41 47 49 43 5f 42 55 53 59 22 29 3d 3d 30 20  MAGIC_BUSY")==0 
1b2c0 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 67 69 63  ){.    db->magic
1b2d0 20 3d 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f   = SQLITE_MAGIC_
1b2e0 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66  BUSY;.  }else if
1b2f0 28 20 73 74 72 63 6d 70 28 61 72 67 76 5b 32 5d  ( strcmp(argv[2]
1b300 2c 20 22 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  , "SQLITE_MAGIC_
1b310 45 52 52 4f 52 22 29 3d 3d 30 20 29 7b 0a 20 20  ERROR")==0 ){.  
1b320 20 20 64 62 2d 3e 6d 61 67 69 63 20 3d 20 53 51    db->magic = SQ
1b330 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52  LITE_MAGIC_ERROR
1b340 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 54 63  ;.  }else if( Tc
1b350 6c 5f 47 65 74 49 6e 74 28 69 6e 74 65 72 70 2c  l_GetInt(interp,
1b360 20 61 72 67 76 5b 32 5d 2c 20 26 64 62 2d 3e 6d   argv[2], &db->m
1b370 61 67 69 63 29 20 29 7b 0a 20 20 20 20 72 65 74  agic) ){.    ret
1b380 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1b390 20 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f   }.  return TCL_
1b3a0 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61  OK;.}../*.** Usa
1b3b0 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  ge:  sqlite3_int
1b3c0 65 72 72 75 70 74 20 20 44 42 20 0a 2a 2a 0a 2a  errupt  DB .**.*
1b3d0 2a 20 54 72 69 67 67 65 72 20 61 6e 20 69 6e 74  * Trigger an int
1b3e0 65 72 72 75 70 74 20 6f 6e 20 44 42 0a 2a 2f 0a  errupt on DB.*/.
1b3f0 73 74 61 74 69 63 20 69 6e 74 20 74 65 73 74 5f  static int test_
1b400 69 6e 74 65 72 72 75 70 74 28 0a 20 20 76 6f 69  interrupt(.  voi
1b410 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
1b420 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
1b430 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63  terp,.  int argc
1b440 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a  ,.  char **argv.
1b450 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
1b460 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d 32 20  ;.  if( argc!=2 
1b470 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e  ){.    Tcl_Appen
1b480 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20  dResult(interp, 
1b490 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73  "wrong # args: s
1b4a0 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72  hould be \"", ar
1b4b0 67 76 5b 30 5d 2c 20 22 20 44 42 22 2c 20 30 29  gv[0], " DB", 0)
1b4c0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  ;.    return TCL
1b4d0 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66  _ERROR;.  }.  if
1b4e0 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69  ( getDbPointer(i
1b4f0 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c 20  nterp, argv[1], 
1b500 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54 43  &db) ) return TC
1b510 4c 5f 45 52 52 4f 52 3b 0a 20 20 73 71 6c 69 74  L_ERROR;.  sqlit
1b520 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29  e3_interrupt(db)
1b530 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
1b540 4b 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 75 38 20  K;.}..static u8 
1b550 2a 73 71 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62  *sqlite3_stack_b
1b560 61 73 65 6c 69 6e 65 20 3d 20 30 3b 0a 0a 2f 2a  aseline = 0;../*
1b570 0a 2a 2a 20 46 69 6c 6c 20 74 68 65 20 73 74 61  .** Fill the sta
1b580 63 6b 20 77 69 74 68 20 61 20 6b 6e 6f 77 6e 20  ck with a known 
1b590 62 69 74 70 61 74 74 65 72 6e 2e 0a 2a 2f 0a 73  bitpattern..*/.s
1b5a0 74 61 74 69 63 20 76 6f 69 64 20 70 72 65 70 53  tatic void prepS
1b5b0 74 61 63 6b 28 76 6f 69 64 29 7b 0a 20 20 69 6e  tack(void){.  in
1b5c0 74 20 69 3b 0a 20 20 75 33 32 20 62 69 67 42 75  t i;.  u32 bigBu
1b5d0 66 5b 36 35 35 33 36 5d 3b 0a 20 20 66 6f 72 28  f[65536];.  for(
1b5e0 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 62 69  i=0; i<sizeof(bi
1b5f0 67 42 75 66 29 3b 20 69 2b 2b 29 20 62 69 67 42  gBuf); i++) bigB
1b600 75 66 5b 69 5d 20 3d 20 30 78 64 65 61 64 62 65  uf[i] = 0xdeadbe
1b610 65 66 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  ef;.  sqlite3_st
1b620 61 63 6b 5f 62 61 73 65 6c 69 6e 65 20 3d 20 28  ack_baseline = (
1b630 75 38 2a 29 26 62 69 67 42 75 66 5b 36 35 35 33  u8*)&bigBuf[6553
1b640 36 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65 74  6];.}../*.** Get
1b650 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61   the current sta
1b660 63 6b 20 64 65 70 74 68 2e 20 20 55 73 65 64 20  ck depth.  Used 
1b670 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 6f 6e  for debugging on
1b680 6c 79 2e 0a 2a 2f 0a 75 36 34 20 73 71 6c 69 74  ly..*/.u64 sqlit
1b690 65 33 53 74 61 63 6b 44 65 70 74 68 28 76 6f 69  e3StackDepth(voi
1b6a0 64 29 7b 0a 20 20 75 38 20 78 3b 0a 20 20 72 65  d){.  u8 x;.  re
1b6b0 74 75 72 6e 20 28 75 36 34 29 28 73 71 6c 69 74  turn (u64)(sqlit
1b6c0 65 33 5f 73 74 61 63 6b 5f 62 61 73 65 6c 69 6e  e3_stack_baselin
1b6d0 65 20 2d 20 26 78 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  e - &x);.}../*.*
1b6e0 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69 74 65  * Usage:  sqlite
1b6f0 33 5f 73 74 61 63 6b 5f 75 73 65 64 20 44 42 20  3_stack_used DB 
1b700 53 51 4c 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f  SQL.**.** Try to
1b710 20 6d 65 61 73 75 72 65 20 74 68 65 20 61 6d 6f   measure the amo
1b720 75 6e 74 20 6f 66 20 73 74 61 63 6b 20 73 70 61  unt of stack spa
1b730 63 65 20 75 73 65 64 20 62 79 20 61 20 63 61 6c  ce used by a cal
1b740 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 78 65  l to sqlite3_exe
1b750 63 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  c.*/.static int 
1b760 74 65 73 74 5f 73 74 61 63 6b 5f 75 73 65 64 28  test_stack_used(
1b770 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65 6e 74  .  void * client
1b780 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e 74 65  Data,.  Tcl_Inte
1b790 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20 69 6e  rp *interp,.  in
1b7a0 74 20 61 72 67 63 2c 0a 20 20 63 68 61 72 20 2a  t argc,.  char *
1b7b0 2a 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74  *argv.){.  sqlit
1b7c0 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 69 3b  e3 *db;.  int i;
1b7d0 0a 20 20 69 66 28 20 61 72 67 63 21 3d 33 20 29  .  if( argc!=3 )
1b7e0 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
1b7f0 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
1b800 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
1b810 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20 61 72 67  ould be \"", arg
1b820 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 22  v[0], .        "
1b830 20 44 42 20 53 51 4c 22 2c 20 30 29 3b 0a 20 20   DB SQL", 0);.  
1b840 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
1b850 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
1b860 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
1b870 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
1b880 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
1b890 52 4f 52 3b 0a 20 20 70 72 65 70 53 74 61 63 6b  ROR;.  prepStack
1b8a0 28 29 3b 0a 20 20 28 76 6f 69 64 29 73 71 6c 69  ();.  (void)sqli
1b8b0 74 65 33 5f 65 78 65 63 28 64 62 2c 20 61 72 67  te3_exec(db, arg
1b8c0 76 5b 32 5d 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  v[2], 0, 0, 0);.
1b8d0 20 20 66 6f 72 28 69 3d 36 35 35 33 35 3b 20 69    for(i=65535; i
1b8e0 3e 3d 30 20 26 26 20 28 28 75 33 32 2a 29 73 71  >=0 && ((u32*)sq
1b8f0 6c 69 74 65 33 5f 73 74 61 63 6b 5f 62 61 73 65  lite3_stack_base
1b900 6c 69 6e 65 29 5b 2d 69 5d 3d 3d 30 78 64 65 61  line)[-i]==0xdea
1b910 64 62 65 65 66 3b 20 69 2d 2d 29 7b 7d 0a 20 20  dbeef; i--){}.  
1b920 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
1b930 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
1b940 49 6e 74 4f 62 6a 28 69 2a 34 29 29 3b 0a 20 20  IntObj(i*4));.  
1b950 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
1b960 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73  ../*.** Usage: s
1b970 71 6c 69 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e  qlite_delete_fun
1b980 63 74 69 6f 6e 20 44 42 20 66 75 6e 63 74 69 6f  ction DB functio
1b990 6e 2d 6e 61 6d 65 0a 2a 2a 0a 2a 2a 20 44 65 6c  n-name.**.** Del
1b9a0 65 74 65 20 74 68 65 20 75 73 65 72 20 66 75 6e  ete the user fun
1b9b0 63 74 69 6f 6e 20 27 66 75 6e 63 74 69 6f 6e 2d  ction 'function-
1b9c0 6e 61 6d 65 27 20 66 72 6f 6d 20 64 61 74 61 62  name' from datab
1b9d0 61 73 65 20 68 61 6e 64 6c 65 20 44 42 2e 20 49  ase handle DB. I
1b9e0 74 0a 2a 2a 20 69 73 20 61 73 73 75 6d 65 64 20  t.** is assumed 
1b9f0 74 68 61 74 20 74 68 65 20 75 73 65 72 20 66 75  that the user fu
1ba00 6e 63 74 69 6f 6e 20 77 61 73 20 63 72 65 61 74  nction was creat
1ba10 65 64 20 61 73 20 55 54 46 38 2c 20 61 6e 79 20  ed as UTF8, any 
1ba20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 61 72 67  number of.** arg
1ba30 75 6d 65 6e 74 73 20 28 74 68 65 20 77 61 79 20  uments (the way 
1ba40 74 68 65 20 54 43 4c 20 69 6e 74 65 72 66 61 63  the TCL interfac
1ba50 65 20 64 6f 65 73 20 69 74 29 2e 0a 2a 2f 0a 73  e does it)..*/.s
1ba60 74 61 74 69 63 20 69 6e 74 20 64 65 6c 65 74 65  tatic int delete
1ba70 5f 66 75 6e 63 74 69 6f 6e 28 0a 20 20 76 6f 69  _function(.  voi
1ba80 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a  d * clientData,.
1ba90 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
1baa0 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67 63  terp,.  int argc
1bab0 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76 0a  ,.  char **argv.
1bac0 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 73  ){.  int rc;.  s
1bad0 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69 66  qlite3 *db;.  if
1bae0 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20 20  ( argc!=3 ){.   
1baf0 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c   Tcl_AppendResul
1bb00 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e 67  t(interp, "wrong
1bb10 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64 20   # args: should 
1bb20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d 2c  be \"", argv[0],
1bb30 20 0a 20 20 20 20 20 20 20 20 22 20 44 42 20 66   .        " DB f
1bb40 75 6e 63 74 69 6f 6e 2d 6e 61 6d 65 22 2c 20 30  unction-name", 0
1bb50 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43  );.    return TC
1bb60 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69  L_ERROR;.  }.  i
1bb70 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65 72 28  f( getDbPointer(
1bb80 69 6e 74 65 72 70 2c 20 61 72 67 76 5b 31 5d 2c  interp, argv[1],
1bb90 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20 54   &db) ) return T
1bba0 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d  CL_ERROR;.  rc =
1bbb0 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
1bbc0 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 61 72 67  function(db, arg
1bbd0 76 5b 32 5d 2c 20 2d 31 2c 20 53 51 4c 49 54 45  v[2], -1, SQLITE
1bbe0 5f 55 54 46 38 2c 20 30 2c 20 30 2c 20 30 2c 20  _UTF8, 0, 0, 0, 
1bbf0 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52 65 73  0);.  Tcl_SetRes
1bc00 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63 68 61  ult(interp, (cha
1bc10 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d 65 28  r *)t1ErrorName(
1bc20 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49 43 29  rc), TCL_STATIC)
1bc30 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  ;.  return TCL_O
1bc40 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67  K;.}../*.** Usag
1bc50 65 3a 20 73 71 6c 69 74 65 5f 64 65 6c 65 74 65  e: sqlite_delete
1bc60 5f 63 6f 6c 6c 61 74 69 6f 6e 20 44 42 20 63 6f  _collation DB co
1bc70 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65 0a 2a 2a 0a  llation-name.**.
1bc80 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 63 6f  ** Delete the co
1bc90 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
1bca0 20 27 63 6f 6c 6c 61 74 69 6f 6e 2d 6e 61 6d 65   'collation-name
1bcb0 27 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20  ' from database 
1bcc0 68 61 6e 64 6c 65 20 0a 2a 2a 20 44 42 2e 20 49  handle .** DB. I
1bcd0 74 20 69 73 20 61 73 73 75 6d 65 64 20 74 68 61  t is assumed tha
1bce0 74 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  t the collation 
1bcf0 73 65 71 75 65 6e 63 65 20 77 61 73 20 63 72 65  sequence was cre
1bd00 61 74 65 64 20 61 73 20 55 54 46 38 20 28 74 68  ated as UTF8 (th
1bd10 65 20 0a 2a 2a 20 77 61 79 20 74 68 65 20 54 43  e .** way the TC
1bd20 4c 20 69 6e 74 65 72 66 61 63 65 20 64 6f 65 73  L interface does
1bd30 20 69 74 29 2e 0a 2a 2f 0a 73 74 61 74 69 63 20   it)..*/.static 
1bd40 69 6e 74 20 64 65 6c 65 74 65 5f 63 6f 6c 6c 61  int delete_colla
1bd50 74 69 6f 6e 28 0a 20 20 76 6f 69 64 20 2a 20 63  tion(.  void * c
1bd60 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c  lientData,.  Tcl
1bd70 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
1bd80 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 63  .  int argc,.  c
1bd90 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a 20 20  har **argv.){.  
1bda0 69 6e 74 20 72 63 3b 0a 20 20 73 71 6c 69 74 65  int rc;.  sqlite
1bdb0 33 20 2a 64 62 3b 0a 20 20 69 66 28 20 61 72 67  3 *db;.  if( arg
1bdc0 63 21 3d 33 20 29 7b 0a 20 20 20 20 54 63 6c 5f  c!=3 ){.    Tcl_
1bdd0 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
1bde0 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61 72  erp, "wrong # ar
1bdf0 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c 22  gs: should be \"
1be00 22 2c 20 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20  ", argv[0], .   
1be10 20 20 20 20 20 22 20 44 42 20 66 75 6e 63 74 69       " DB functi
1be20 6f 6e 2d 6e 61 6d 65 22 2c 20 30 29 3b 0a 20 20  on-name", 0);.  
1be30 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
1be40 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
1be50 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
1be60 70 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29  p, argv[1], &db)
1be70 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52   ) return TCL_ER
1be80 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ROR;.  rc = sqli
1be90 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
1bea0 74 69 6f 6e 28 64 62 2c 20 61 72 67 76 5b 32 5d  tion(db, argv[2]
1beb0 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 30  , SQLITE_UTF8, 0
1bec0 2c 20 30 29 3b 0a 20 20 54 63 6c 5f 53 65 74 52  , 0);.  Tcl_SetR
1bed0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 28 63  esult(interp, (c
1bee0 68 61 72 20 2a 29 74 31 45 72 72 6f 72 4e 61 6d  har *)t1ErrorNam
1bef0 65 28 72 63 29 2c 20 54 43 4c 5f 53 54 41 54 49  e(rc), TCL_STATI
1bf00 43 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c  C);.  return TCL
1bf10 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73  _OK;.}../*.** Us
1bf20 61 67 65 3a 20 73 71 6c 69 74 65 33 5f 67 65 74  age: sqlite3_get
1bf30 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 44 42 0a 2a  _autocommit DB.*
1bf40 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
1bf50 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
1bf60 20 44 42 20 69 73 20 63 75 72 72 65 6e 74 6c 79   DB is currently
1bf70 20 69 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20   in auto-commit 
1bf80 6d 6f 64 65 2e 0a 2a 2a 20 52 65 74 75 72 6e 20  mode..** Return 
1bf90 66 61 6c 73 65 20 69 66 20 6e 6f 74 2e 0a 2a 2f  false if not..*/
1bfa0 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 5f  .static int get_
1bfb0 61 75 74 6f 63 6f 6d 6d 69 74 28 0a 20 20 76 6f  autocommit(.  vo
1bfc0 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c  id * clientData,
1bfd0 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1bfe0 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 61 72 67  nterp,.  int arg
1bff0 63 2c 0a 20 20 63 68 61 72 20 2a 2a 61 72 67 76  c,.  char **argv
1c000 0a 29 7b 0a 20 20 63 68 61 72 20 7a 42 75 66 5b  .){.  char zBuf[
1c010 33 30 5d 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  30];.  sqlite3 *
1c020 64 62 3b 0a 20 20 69 66 28 20 61 72 67 63 21 3d  db;.  if( argc!=
1c030 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
1c040 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
1c050 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
1c060 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 20   should be \"", 
1c070 61 72 67 76 5b 30 5d 2c 20 0a 20 20 20 20 20 20  argv[0], .      
1c080 20 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20 20    " DB", 0);.   
1c090 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f   return TCL_ERRO
1c0a0 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74  R;.  }.  if( get
1c0b0 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70  DbPointer(interp
1c0c0 2c 20 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 20  , argv[1], &db) 
1c0d0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
1c0e0 4f 52 3b 0a 20 20 73 70 72 69 6e 74 66 28 7a 42  OR;.  sprintf(zB
1c0f0 75 66 2c 20 22 25 64 22 2c 20 73 71 6c 69 74 65  uf, "%d", sqlite
1c100 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
1c110 28 64 62 29 29 3b 0a 20 20 54 63 6c 5f 41 70 70  (db));.  Tcl_App
1c120 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
1c130 2c 20 7a 42 75 66 2c 20 30 29 3b 0a 20 20 72 65  , zBuf, 0);.  re
1c140 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a  turn TCL_OK;.}..
1c150 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 73 71 6c  /*.** Usage: sql
1c160 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
1c170 74 20 44 42 20 4d 53 0a 2a 2a 0a 2a 2a 20 53 65  t DB MS.**.** Se
1c180 74 20 74 68 65 20 62 75 73 79 20 74 69 6d 65 6f  t the busy timeo
1c190 75 74 2e 20 20 54 68 69 73 20 69 73 20 6d 6f 72  ut.  This is mor
1c1a0 65 20 65 61 73 69 6c 79 20 64 6f 6e 65 20 75 73  e easily done us
1c1b0 69 6e 67 20 74 68 65 20 74 69 6d 65 6f 75 74 0a  ing the timeout.
1c1c0 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  ** method of the
1c1d0 20 54 43 4c 20 69 6e 74 65 72 66 61 63 65 2e 20   TCL interface. 
1c1e0 20 42 75 74 20 77 65 20 6e 65 65 64 20 61 20 77   But we need a w
1c1f0 61 79 20 74 6f 20 74 65 73 74 20 74 68 65 20 63  ay to test the c
1c200 61 73 65 0a 2a 2a 20 77 68 65 72 65 20 69 74 20  ase.** where it 
1c210 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4d  returns SQLITE_M
1c220 49 53 55 53 45 2e 0a 2a 2f 0a 73 74 61 74 69 63  ISUSE..*/.static
1c230 20 69 6e 74 20 74 65 73 74 5f 62 75 73 79 5f 74   int test_busy_t
1c240 69 6d 65 6f 75 74 28 0a 20 20 76 6f 69 64 20 2a  imeout(.  void *
1c250 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
1c260 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1c270 70 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20  p,.  int argc,. 
1c280 20 63 68 61 72 20 2a 2a 61 72 67 76 0a 29 7b 0a   char **argv.){.
1c290 20 20 69 6e 74 20 72 63 2c 20 6d 73 3b 0a 20 20    int rc, ms;.  
1c2a0 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
1c2b0 66 28 20 61 72 67 63 21 3d 33 20 29 7b 0a 20 20  f( argc!=3 ){.  
1c2c0 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75    Tcl_AppendResu
1c2d0 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72 6f 6e  lt(interp, "wron
1c2e0 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75 6c 64  g # args: should
1c2f0 20 62 65 20 5c 22 22 2c 20 61 72 67 76 5b 30 5d   be \"", argv[0]
1c300 2c 20 0a 20 20 20 20 20 20 20 20 22 20 44 42 22  , .        " DB"
1c310 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , 0);.    return
1c320 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a   TCL_ERROR;.  }.
1c330 20 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74    if( getDbPoint
1c340 65 72 28 69 6e 74 65 72 70 2c 20 61 72 67 76 5b  er(interp, argv[
1c350 31 5d 2c 20 26 64 62 29 20 29 20 72 65 74 75 72  1], &db) ) retur
1c360 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 69  n TCL_ERROR;.  i
1c370 66 28 20 54 63 6c 5f 47 65 74 49 6e 74 28 69 6e  f( Tcl_GetInt(in
1c380 74 65 72 70 2c 20 61 72 67 76 5b 32 5d 2c 20 26  terp, argv[2], &
1c390 6d 73 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c  ms) ) return TCL
1c3a0 5f 45 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73  _ERROR;.  rc = s
1c3b0 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65  qlite3_busy_time
1c3c0 6f 75 74 28 64 62 2c 20 6d 73 29 3b 0a 20 20 54  out(db, ms);.  T
1c3d0 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28  cl_AppendResult(
1c3e0 69 6e 74 65 72 70 2c 20 73 71 6c 69 74 65 33 54  interp, sqlite3T
1c3f0 65 73 74 45 72 72 6f 72 4e 61 6d 65 28 72 63 29  estErrorName(rc)
1c400 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e 20 54  , 0);.  return T
1c410 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  CL_OK;.}../*.** 
1c420 55 73 61 67 65 3a 20 20 74 63 6c 5f 76 61 72 69  Usage:  tcl_vari
1c430 61 62 6c 65 5f 74 79 70 65 20 56 41 52 49 41 42  able_type VARIAB
1c440 4c 45 4e 41 4d 45 0a 2a 2a 0a 2a 2a 20 52 65 74  LENAME.**.** Ret
1c450 75 72 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  urn the name of 
1c460 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
1c470 72 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  resentation for 
1c480 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  the.** value of 
1c490 74 68 65 20 67 69 76 65 6e 20 76 61 72 69 61 62  the given variab
1c4a0 6c 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  le..*/.static in
1c4b0 74 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74  t tcl_variable_t
1c4c0 79 70 65 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c  ype(.  void * cl
1c4d0 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f  ientData,.  Tcl_
1c4e0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
1c4f0 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63    int objc,.  Tc
1c500 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
1c510 76 5b 5d 0a 29 7b 0a 20 20 54 63 6c 5f 4f 62 6a  v[].){.  Tcl_Obj
1c520 20 2a 70 56 61 72 3b 0a 20 20 69 66 28 20 6f 62   *pVar;.  if( ob
1c530 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
1c540 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
1c550 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
1c560 56 41 52 49 41 42 4c 45 22 29 3b 0a 20 20 20 20  VARIABLE");.    
1c570 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1c580 3b 0a 20 20 7d 0a 20 20 70 56 61 72 20 3d 20 54  ;.  }.  pVar = T
1c590 63 6c 5f 47 65 74 56 61 72 32 45 78 28 69 6e 74  cl_GetVar2Ex(int
1c5a0 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
1c5b0 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 30 2c 20  ng(objv[1]), 0, 
1c5c0 54 43 4c 5f 4c 45 41 56 45 5f 45 52 52 5f 4d 53  TCL_LEAVE_ERR_MS
1c5d0 47 29 3b 0a 20 20 69 66 28 20 70 56 61 72 3d 3d  G);.  if( pVar==
1c5e0 30 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  0 ) return TCL_E
1c5f0 52 52 4f 52 3b 0a 20 20 69 66 28 20 70 56 61 72  RROR;.  if( pVar
1c600 2d 3e 74 79 70 65 50 74 72 20 29 7b 0a 20 20 20  ->typePtr ){.   
1c610 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
1c620 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
1c630 77 53 74 72 69 6e 67 4f 62 6a 28 70 56 61 72 2d  wStringObj(pVar-
1c640 3e 74 79 70 65 50 74 72 2d 3e 6e 61 6d 65 2c 20  >typePtr->name, 
1c650 2d 31 29 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  -1));.  }.  retu
1c660 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a  rn TCL_OK;.}../*
1c670 0a 2a 2a 20 55 73 61 67 65 3a 20 20 73 71 6c 69  .** Usage:  sqli
1c680 74 65 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f  te3_release_memo
1c690 72 79 20 3f 4e 3f 0a 2a 2a 0a 2a 2a 20 41 74 74  ry ?N?.**.** Att
1c6a0 65 6d 70 74 20 74 6f 20 72 65 6c 65 61 73 65 20  empt to release 
1c6b0 6d 65 6d 6f 72 79 20 63 75 72 72 65 6e 74 6c 79  memory currently
1c6c0 20 68 65 6c 64 20 62 75 74 20 6e 6f 74 20 61 63   held but not ac
1c6d0 74 75 61 6c 6c 79 20 72 65 71 75 69 72 65 64 2e  tually required.
1c6e0 0a 2a 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20  .** The integer 
1c6f0 4e 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  N is the number 
1c700 6f 66 20 62 79 74 65 73 20 77 65 20 61 72 65 20  of bytes we are 
1c710 74 72 79 69 6e 67 20 74 6f 20 72 65 6c 65 61 73  trying to releas
1c720 65 2e 20 20 54 68 65 20 0a 2a 2a 20 72 65 74 75  e.  The .** retu
1c730 72 6e 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  rn value is the 
1c740 61 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72 79  amount of memory
1c750 20 61 63 74 75 61 6c 6c 79 20 72 65 6c 65 61 73   actually releas
1c760 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ed..*/.static in
1c770 74 20 74 65 73 74 5f 72 65 6c 65 61 73 65 5f 6d  t test_release_m
1c780 65 6d 6f 72 79 28 0a 20 20 76 6f 69 64 20 2a 20  emory(.  void * 
1c790 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
1c7a0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
1c7b0 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
1c7c0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
1c7d0 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 20 64 65 66  bjv[].){.#if def
1c7e0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1c7f0 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45  LE_MEMORY_MANAGE
1c800 4d 45 4e 54 29 20 26 26 20 21 64 65 66 69 6e 65  MENT) && !define
1c810 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 49  d(SQLITE_OMIT_DI
1c820 53 4b 49 4f 29 0a 20 20 69 6e 74 20 4e 3b 0a 20  SKIO).  int N;. 
1c830 20 69 6e 74 20 61 6d 74 3b 0a 20 20 69 66 28 20   int amt;.  if( 
1c840 6f 62 6a 63 21 3d 31 20 26 26 20 6f 62 6a 63 21  objc!=1 && objc!
1c850 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =2 ){.    Tcl_Wr
1c860 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
1c870 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 4e 3f  p, 1, objv, "?N?
1c880 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
1c890 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
1c8a0 69 66 28 20 6f 62 6a 63 3d 3d 32 20 29 7b 0a 20  if( objc==2 ){. 
1c8b0 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74 49 6e     if( Tcl_GetIn
1c8c0 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c  tFromObj(interp,
1c8d0 20 6f 62 6a 76 5b 31 5d 2c 20 26 4e 29 20 29 20   objv[1], &N) ) 
1c8e0 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52  return TCL_ERROR
1c8f0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 4e  ;.  }else{.    N
1c900 20 3d 20 2d 31 3b 0a 20 20 7d 0a 20 20 61 6d 74   = -1;.  }.  amt
1c910 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61   = sqlite3_relea
1c920 73 65 5f 6d 65 6d 6f 72 79 28 4e 29 3b 0a 20 20  se_memory(N);.  
1c930 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
1c940 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
1c950 49 6e 74 4f 62 6a 28 61 6d 74 29 29 3b 0a 23 65  IntObj(amt));.#e
1c960 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54 43  ndif.  return TC
1c970 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 55  L_OK;.}../*.** U
1c980 73 61 67 65 3a 20 20 73 71 6c 69 74 65 33 5f 73  sage:  sqlite3_s
1c990 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3f  oft_heap_limit ?
1c9a0 4e 3f 0a 2a 2a 0a 2a 2a 20 51 75 65 72 79 20 6f  N?.**.** Query o
1c9b0 72 20 73 65 74 20 74 68 65 20 73 6f 66 74 20 68  r set the soft h
1c9c0 65 61 70 20 6c 69 6d 69 74 20 66 6f 72 20 74 68  eap limit for th
1c9d0 65 20 63 75 72 72 65 6e 74 20 74 68 72 65 61 64  e current thread
1c9e0 2e 20 20 54 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  .  The.** limit 
1c9f0 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20  is only changed 
1ca00 69 66 20 74 68 65 20 4e 20 69 73 20 70 72 65 73  if the N is pres
1ca10 65 6e 74 2e 20 20 54 68 65 20 70 72 65 76 69 6f  ent.  The previo
1ca20 75 73 20 6c 69 6d 69 74 0a 2a 2a 20 69 73 20 72  us limit.** is r
1ca30 65 74 75 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74  eturned..*/.stat
1ca40 69 63 20 69 6e 74 20 74 65 73 74 5f 73 6f 66 74  ic int test_soft
1ca50 5f 68 65 61 70 5f 6c 69 6d 69 74 28 0a 20 20 76  _heap_limit(.  v
1ca60 6f 69 64 20 2a 20 63 6c 69 65 6e 74 44 61 74 61  oid * clientData
1ca70 2c 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a  ,.  Tcl_Interp *
1ca80 69 6e 74 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62  interp,.  int ob
1ca90 6a 63 2c 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43  jc,.  Tcl_Obj *C
1caa0 4f 4e 53 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20  ONST objv[].){. 
1cab0 20 73 74 61 74 69 63 20 69 6e 74 20 73 6f 66 74   static int soft
1cac0 48 65 61 70 4c 69 6d 69 74 20 3d 20 30 3b 0a 20  HeapLimit = 0;. 
1cad0 20 69 6e 74 20 61 6d 74 3b 0a 20 20 69 66 28 20   int amt;.  if( 
1cae0 6f 62 6a 63 21 3d 31 20 26 26 20 6f 62 6a 63 21  objc!=1 && objc!
1caf0 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 57 72  =2 ){.    Tcl_Wr
1cb00 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e 74 65 72  ongNumArgs(inter
1cb10 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22 3f 4e 3f  p, 1, objv, "?N?
1cb20 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
1cb30 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
1cb40 61 6d 74 20 3d 20 73 6f 66 74 48 65 61 70 4c 69  amt = softHeapLi
1cb50 6d 69 74 3b 0a 20 20 69 66 28 20 6f 62 6a 63 3d  mit;.  if( objc=
1cb60 3d 32 20 29 7b 0a 20 20 20 20 69 6e 74 20 4e 3b  =2 ){.    int N;
1cb70 0a 20 20 20 20 69 66 28 20 54 63 6c 5f 47 65 74  .    if( Tcl_Get
1cb80 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
1cb90 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 4e 29 20  p, objv[1], &N) 
1cba0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
1cbb0 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  OR;.    sqlite3_
1cbc0 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 28  soft_heap_limit(
1cbd0 4e 29 3b 0a 20 20 20 20 73 6f 66 74 48 65 61 70  N);.    softHeap
1cbe0 4c 69 6d 69 74 20 3d 20 4e 3b 0a 20 20 7d 0a 20  Limit = N;.  }. 
1cbf0 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c   Tcl_SetObjResul
1cc00 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65  t(interp, Tcl_Ne
1cc10 77 49 6e 74 4f 62 6a 28 61 6d 74 29 29 3b 0a 20  wIntObj(amt));. 
1cc20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
1cc30 7d 0a 0a 2f 2a 0a 2a 2a 20 55 73 61 67 65 3a 20  }../*.** Usage: 
1cc40 20 20 73 71 6c 69 74 65 33 5f 74 68 72 65 61 64    sqlite3_thread
1cc50 5f 63 6c 65 61 6e 75 70 0a 2a 2a 0a 2a 2a 20 43  _cleanup.**.** C
1cc60 61 6c 6c 20 74 68 65 20 73 71 6c 69 74 65 33 5f  all the sqlite3_
1cc70 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70 20 41  thread_cleanup A
1cc80 50 49 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  PI..*/.static in
1cc90 74 20 74 65 73 74 5f 74 68 72 65 61 64 5f 63 6c  t test_thread_cl
1cca0 65 61 6e 75 70 28 0a 20 20 76 6f 69 64 20 2a 20  eanup(.  void * 
1ccb0 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54 63  clientData,.  Tc
1ccc0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
1ccd0 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20  ,.  int objc,.  
1cce0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
1ccf0 62 6a 76 5b 5d 0a 29 7b 0a 23 69 66 6e 64 65 66  bjv[].){.#ifndef
1cd00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50   SQLITE_OMIT_DEP
1cd10 52 45 43 41 54 45 44 0a 20 20 73 71 6c 69 74 65  RECATED.  sqlite
1cd20 33 5f 74 68 72 65 61 64 5f 63 6c 65 61 6e 75 70  3_thread_cleanup
1cd30 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 72 65 74  ();.#endif.  ret
1cd40 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
1cd50 2a 0a 2a 2a 20 55 73 61 67 65 3a 20 20 20 73 71  *.** Usage:   sq
1cd60 6c 69 74 65 33 5f 70 61 67 65 72 5f 72 65 66 63  lite3_pager_refc
1cd70 6f 75 6e 74 73 20 20 44 42 0a 2a 2a 0a 2a 2a 20  ounts  DB.**.** 
1cd80 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66  Return a list of
1cd90 20 6e 75 6d 62 65 72 73 20 77 68 69 63 68 20 61   numbers which a
1cda0 72 65 20 74 68 65 20 50 61 67 65 72 52 65 66 63  re the PagerRefc
1cdb0 6f 75 6e 74 20 66 6f 72 20 61 6c 6c 0a 2a 2a 20  ount for all.** 
1cdc0 70 61 67 65 72 73 20 6f 6e 20 65 61 63 68 20 64  pagers on each d
1cdd0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
1cde0 6f 6e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  on..*/.static in
1cdf0 74 20 74 65 73 74 5f 70 61 67 65 72 5f 72 65 66  t test_pager_ref
1ce00 63 6f 75 6e 74 73 28 0a 20 20 76 6f 69 64 20 2a  counts(.  void *
1ce10 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20 20 54   clientData,.  T
1ce20 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72  cl_Interp *inter
1ce30 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20  p,.  int objc,. 
1ce40 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
1ce50 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69  objv[].){.  sqli
1ce60 74 65 33 20 2a 64 62 3b 0a 20 20 69 6e 74 20 69  te3 *db;.  int i
1ce70 3b 0a 20 20 69 6e 74 20 76 2c 20 2a 61 3b 0a 20  ;.  int v, *a;. 
1ce80 20 54 63 6c 5f 4f 62 6a 20 2a 70 52 65 73 75 6c   Tcl_Obj *pResul
1ce90 74 3b 0a 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d  t;..  if( objc!=
1cea0 32 20 29 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70  2 ){.    Tcl_App
1ceb0 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
1cec0 2c 20 22 77 72 6f 6e 67 20 23 20 61 72 67 73 3a  , "wrong # args:
1ced0 20 73 68 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a   should be \"",.
1cee0 20 20 20 20 20 20 20 20 54 63 6c 5f 47 65 74 53          Tcl_GetS
1cef0 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a  tringFromObj(obj
1cf00 76 5b 30 5d 2c 20 30 29 2c 20 22 20 44 42 22 2c  v[0], 0), " DB",
1cf10 20 30 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20   0);.    return 
1cf20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  TCL_ERROR;.  }. 
1cf30 20 69 66 28 20 67 65 74 44 62 50 6f 69 6e 74 65   if( getDbPointe
1cf40 72 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65  r(interp, Tcl_Ge
1cf50 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b 31 5d 29  tString(objv[1])
1cf60 2c 20 26 64 62 29 20 29 20 72 65 74 75 72 6e 20  , &db) ) return 
1cf70 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 70 52 65  TCL_ERROR;.  pRe
1cf80 73 75 6c 74 20 3d 20 54 63 6c 5f 4e 65 77 4f 62  sult = Tcl_NewOb
1cf90 6a 28 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  j();.  for(i=0; 
1cfa0 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
1cfb0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62  .    if( db->aDb
1cfc0 5b 69 5d 2e 70 42 74 3d 3d 30 20 29 7b 0a 20 20  [i].pBt==0 ){.  
1cfd0 20 20 20 20 76 20 3d 20 2d 31 3b 0a 20 20 20 20      v = -1;.    
1cfe0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
1cff0 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72  ite3_mutex_enter
1d000 28 64 62 2d 3e 6d 75 74 65 78 29 3b 0a 20 20 20  (db->mutex);.   
1d010 20 20 20 61 20 3d 20 73 71 6c 69 74 65 33 50 61     a = sqlite3Pa
1d020 67 65 72 53 74 61 74 73 28 73 71 6c 69 74 65 33  gerStats(sqlite3
1d030 42 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61  BtreePager(db->a
1d040 44 62 5b 69 5d 2e 70 42 74 29 29 3b 0a 20 20 20  Db[i].pBt));.   
1d050 20 20 20 76 20 3d 20 61 5b 30 5d 3b 0a 20 20 20     v = a[0];.   
1d060 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78     sqlite3_mutex
1d070 5f 6c 65 61 76 65 28 64 62 2d 3e 6d 75 74 65 78  _leave(db->mutex
1d080 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 54 63 6c  );.    }.    Tcl
1d090 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
1d0a0 65 6d 65 6e 74 28 30 2c 20 70 52 65 73 75 6c 74  ement(0, pResult
1d0b0 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
1d0c0 76 29 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f 53  v));.  }.  Tcl_S
1d0d0 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65  etObjResult(inte
1d0e0 72 70 2c 20 70 52 65 73 75 6c 74 29 3b 0a 20 20  rp, pResult);.  
1d0f0 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d  return TCL_OK;.}
1d100 0a 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a  .../*.** tclcmd:
1d110 20 20 20 77 6f 72 6b 69 6e 67 5f 36 34 62 69 74     working_64bit
1d120 5f 69 6e 74 0a 2a 2a 0a 2a 2a 20 53 6f 6d 65 20  _int.**.** Some 
1d130 54 43 4c 20 62 75 69 6c 64 73 20 28 65 78 3a 20  TCL builds (ex: 
1d140 63 79 67 77 69 6e 29 20 64 6f 20 6e 6f 74 20 73  cygwin) do not s
1d150 75 70 70 6f 72 74 20 36 34 2d 62 69 74 20 69 6e  upport 64-bit in
1d160 74 65 67 65 72 73 2e 20 20 54 68 69 73 0a 2a 2a  tegers.  This.**
1d170 20 6c 65 61 64 73 20 74 6f 20 61 20 6e 75 6d 62   leads to a numb
1d180 65 72 20 6f 66 20 74 65 73 74 20 66 61 69 6c 75  er of test failu
1d190 72 65 73 2e 20 20 54 68 65 20 70 72 65 73 65 6e  res.  The presen
1d1a0 74 20 63 6f 6d 6d 61 6e 64 20 63 68 65 63 6b 73  t command checks
1d1b0 20 74 68 65 0a 2a 2a 20 54 43 4c 20 62 75 69 6c   the.** TCL buil
1d1c0 64 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  d to see whether
1d1d0 20 6f 72 20 6e 6f 74 20 69 74 20 73 75 70 70 6f   or not it suppo
1d1e0 72 74 73 20 36 34 2d 62 69 74 20 69 6e 74 65 67  rts 64-bit integ
1d1f0 65 72 73 2e 20 20 49 74 0a 2a 2a 20 72 65 74 75  ers.  It.** retu
1d200 72 6e 73 20 54 52 55 45 20 69 66 20 69 74 20 64  rns TRUE if it d
1d210 6f 65 73 20 61 6e 64 20 46 41 4c 53 45 20 69 66  oes and FALSE if
1d220 20 6e 6f 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73   not..**.** This
1d230 20 63 6f 6d 6d 61 6e 64 20 69 73 20 75 73 65 64   command is used
1d240 20 74 6f 20 77 61 72 6e 20 75 73 65 72 73 20 74   to warn users t
1d250 68 61 74 20 74 68 65 69 72 20 54 43 4c 20 62 75  hat their TCL bu
1d260 69 6c 64 20 69 73 20 64 65 66 65 63 74 69 76 65  ild is defective
1d270 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65  .** and that the
1d280 20 65 72 72 6f 72 73 20 74 68 65 79 20 61 72 65   errors they are
1d290 20 73 65 65 69 6e 67 20 69 6e 20 74 68 65 20 74   seeing in the t
1d2a0 65 73 74 20 73 63 72 69 70 74 73 20 6d 69 67 68  est scripts migh
1d2b0 74 20 62 65 0a 2a 2a 20 61 20 72 65 73 75 6c 74  t be.** a result
1d2c0 20 6f 66 20 74 68 65 69 72 20 64 65 66 65 63 74   of their defect
1d2d0 69 76 65 20 54 43 4c 20 72 61 74 68 65 72 20 74  ive TCL rather t
1d2e0 68 61 6e 20 70 72 6f 62 6c 65 6d 73 20 69 6e 20  han problems in 
1d2f0 53 51 4c 69 74 65 2e 0a 2a 2f 0a 73 74 61 74 69  SQLite..*/.stati
1d300 63 20 69 6e 74 20 77 6f 72 6b 69 6e 67 5f 36 34  c int working_64
1d310 62 69 74 5f 69 6e 74 28 0a 20 20 43 6c 69 65 6e  bit_int(.  Clien
1d320 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
1d330 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20  , /* Pointer to 
1d340 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58  sqlite3_enable_X
1d350 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  XX function */. 
1d360 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
1d370 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
1d380 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
1d390 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
1d3a0 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
1d3b0 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20  t objc,         
1d3c0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1d3d0 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
1d3e0 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
1d3f0 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61  objv[]  /* Comma
1d400 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  nd arguments */.
1d410 29 7b 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 54  ){.  Tcl_Obj *pT
1d420 65 73 74 4f 62 6a 3b 0a 20 20 69 6e 74 20 77 6f  estObj;.  int wo
1d430 72 6b 69 6e 67 20 3d 20 30 3b 0a 0a 20 20 70 54  rking = 0;..  pT
1d440 65 73 74 4f 62 6a 20 3d 20 54 63 6c 5f 4e 65 77  estObj = Tcl_New
1d450 57 69 64 65 49 6e 74 4f 62 6a 28 31 30 30 30 30  WideIntObj(10000
1d460 30 30 2a 28 69 36 34 29 31 32 33 34 35 36 37 38  00*(i64)12345678
1d470 39 30 29 3b 0a 20 20 77 6f 72 6b 69 6e 67 20 3d  90);.  working =
1d480 20 73 74 72 63 6d 70 28 54 63 6c 5f 47 65 74 53   strcmp(Tcl_GetS
1d490 74 72 69 6e 67 28 70 54 65 73 74 4f 62 6a 29 2c  tring(pTestObj),
1d4a0 20 22 31 32 33 34 35 36 37 38 39 30 30 30 30 30   "12345678900000
1d4b0 30 30 22 29 3d 3d 30 3b 0a 20 20 54 63 6c 5f 44  00")==0;.  Tcl_D
1d4c0 65 63 72 52 65 66 43 6f 75 6e 74 28 70 54 65 73  ecrRefCount(pTes
1d4d0 74 4f 62 6a 29 3b 0a 20 20 54 63 6c 5f 53 65 74  tObj);.  Tcl_Set
1d4e0 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
1d4f0 2c 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65 61 6e  , Tcl_NewBoolean
1d500 4f 62 6a 28 77 6f 72 6b 69 6e 67 29 29 3b 0a 20  Obj(working));. 
1d510 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
1d520 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64  }.../*.** tclcmd
1d530 3a 20 20 20 76 66 73 5f 75 6e 6c 69 6e 6b 5f 74  :   vfs_unlink_t
1d540 65 73 74 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 54  est.**.** This T
1d550 43 4c 20 63 6f 6d 6d 61 6e 64 20 75 6e 72 65 67  CL command unreg
1d560 69 73 74 65 72 73 20 74 68 65 20 70 72 69 6d 61  isters the prima
1d570 72 79 20 56 46 53 20 61 6e 64 20 74 68 65 6e 20  ry VFS and then 
1d580 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 69 74 20  registers.** it 
1d590 62 61 63 6b 20 61 67 61 69 6e 2e 20 20 54 68 69  back again.  Thi
1d5a0 73 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73  s is used to tes
1d5b0 74 20 74 68 65 20 61 62 69 6c 69 74 79 20 74 6f  t the ability to
1d5c0 20 72 65 67 69 73 74 65 72 20 61 0a 2a 2a 20 56   register a.** V
1d5d0 46 53 20 77 68 65 6e 20 6e 6f 6e 65 20 61 72 65  FS when none are
1d5e0 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 67 69   previously regi
1d5f0 73 74 65 72 65 64 2c 20 61 6e 64 20 74 68 65 20  stered, and the 
1d600 61 62 69 6c 69 74 79 20 74 6f 20 0a 2a 2a 20 75  ability to .** u
1d610 6e 72 65 67 69 73 74 65 72 20 74 68 65 20 6f 6e  nregister the on
1d620 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 56 46 53  ly available VFS
1d630 2e 20 20 54 69 63 6b 65 74 20 23 32 37 33 38 0a  .  Ticket #2738.
1d640 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 76 66  */.static int vf
1d650 73 5f 75 6e 6c 69 6e 6b 5f 74 65 73 74 28 0a 20  s_unlink_test(. 
1d660 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
1d670 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74  ntData, /* Point
1d680 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e  er to sqlite3_en
1d690 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f  able_XXX functio
1d6a0 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  n */.  Tcl_Inter
1d6b0 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
1d6c0 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
1d6d0 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
1d6e0 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
1d6f0 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
1d700 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1d710 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
1d720 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
1d730 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
1d740 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
1d750 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69  ts */.){.  int i
1d760 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20  ;.  sqlite3_vfs 
1d770 2a 70 4d 61 69 6e 3b 0a 20 20 73 71 6c 69 74 65  *pMain;.  sqlite
1d780 33 5f 76 66 73 20 2a 61 70 56 66 73 5b 32 30 5d  3_vfs *apVfs[20]
1d790 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20  ;.  sqlite3_vfs 
1d7a0 6f 6e 65 2c 20 74 77 6f 3b 0a 0a 20 20 73 71 6c  one, two;..  sql
1d7b0 69 74 65 33 5f 76 66 73 5f 75 6e 72 65 67 69 73  ite3_vfs_unregis
1d7c0 74 65 72 28 30 29 3b 20 20 20 2f 2a 20 55 6e 72  ter(0);   /* Unr
1d7d0 65 67 69 73 74 65 72 20 6f 66 20 4e 55 4c 4c 20  egister of NULL 
1d7e0 69 73 20 68 61 72 6d 6c 65 73 73 20 2a 2f 0a 20  is harmless */. 
1d7f0 20 6f 6e 65 2e 7a 4e 61 6d 65 20 3d 20 22 5f 5f   one.zName = "__
1d800 6f 6e 65 22 3b 0a 20 20 74 77 6f 2e 7a 4e 61 6d  one";.  two.zNam
1d810 65 20 3d 20 22 5f 5f 74 77 6f 22 3b 0a 0a 20 20  e = "__two";..  
1d820 2f 2a 20 43 61 6c 6c 69 6e 67 20 73 71 6c 69 74  /* Calling sqlit
1d830 65 33 5f 76 66 73 5f 72 65 67 69 73 74 65 72 20  e3_vfs_register 
1d840 77 69 74 68 20 32 6e 64 20 61 72 67 75 6d 65 6e  with 2nd argumen
1d850 74 20 6f 66 20 30 20 64 6f 65 73 20 6e 6f 74 0a  t of 0 does not.
1d860 20 20 2a 2a 20 63 68 61 6e 67 65 20 74 68 65 20    ** change the 
1d870 64 65 66 61 75 6c 74 20 56 46 53 0a 20 20 2a 2f  default VFS.  */
1d880 0a 20 20 70 4d 61 69 6e 20 3d 20 73 71 6c 69 74  .  pMain = sqlit
1d890 65 33 5f 76 66 73 5f 66 69 6e 64 28 30 29 3b 0a  e3_vfs_find(0);.
1d8a0 20 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 72 65    sqlite3_vfs_re
1d8b0 67 69 73 74 65 72 28 26 6f 6e 65 2c 20 30 29 3b  gister(&one, 0);
1d8c0 0a 20 20 61 73 73 65 72 74 28 20 70 4d 61 69 6e  .  assert( pMain
1d8d0 3d 3d 30 20 7c 7c 20 70 4d 61 69 6e 3d 3d 73 71  ==0 || pMain==sq
1d8e0 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 30  lite3_vfs_find(0
1d8f0 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  ) );.  sqlite3_v
1d900 66 73 5f 72 65 67 69 73 74 65 72 28 26 74 77 6f  fs_register(&two
1d910 2c 20 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20  , 0);.  assert( 
1d920 70 4d 61 69 6e 3d 3d 30 20 7c 7c 20 70 4d 61 69  pMain==0 || pMai
1d930 6e 3d 3d 73 71 6c 69 74 65 33 5f 76 66 73 5f 66  n==sqlite3_vfs_f
1d940 69 6e 64 28 30 29 20 29 3b 0a 0a 20 20 2f 2a 20  ind(0) );..  /* 
1d950 57 65 20 63 61 6e 20 66 69 6e 64 20 61 20 56 46  We can find a VF
1d960 53 20 62 79 20 69 74 73 20 6e 61 6d 65 20 2a 2f  S by its name */
1d970 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
1d980 65 33 5f 76 66 73 5f 66 69 6e 64 28 22 5f 5f 6f  e3_vfs_find("__o
1d990 6e 65 22 29 3d 3d 26 6f 6e 65 20 29 3b 0a 20 20  ne")==&one );.  
1d9a0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f  assert( sqlite3_
1d9b0 76 66 73 5f 66 69 6e 64 28 22 5f 5f 74 77 6f 22  vfs_find("__two"
1d9c0 29 3d 3d 26 74 77 6f 20 29 3b 0a 0a 20 20 2f 2a  )==&two );..  /*
1d9d0 20 43 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 5f   Calling sqlite_
1d9e0 76 66 73 5f 72 65 67 69 73 74 65 72 20 77 69 74  vfs_register wit
1d9f0 68 20 6e 6f 6e 2d 7a 65 72 6f 20 73 65 63 6f 6e  h non-zero secon
1da00 64 20 70 61 72 61 6d 65 74 65 72 20 63 68 61 6e  d parameter chan
1da10 67 65 73 20 74 68 65 0a 20 20 2a 2a 20 64 65 66  ges the.  ** def
1da20 61 75 6c 74 20 56 46 53 2c 20 65 76 65 6e 20 69  ault VFS, even i
1da30 66 20 74 68 65 20 31 73 74 20 70 61 72 61 6d 65  f the 1st parame
1da40 74 65 72 20 69 73 20 61 6e 20 65 78 69 73 74 69  ter is an existi
1da50 67 20 56 46 53 20 74 68 61 74 20 69 73 0a 20 20  g VFS that is.  
1da60 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65  ** previously re
1da70 67 69 73 74 65 72 65 64 20 61 73 20 74 68 65 20  gistered as the 
1da80 6e 6f 6e 2d 64 65 66 61 75 6c 74 2e 0a 20 20 2a  non-default..  *
1da90 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 5f  /.  sqlite3_vfs_
1daa0 72 65 67 69 73 74 65 72 28 26 6f 6e 65 2c 20 31  register(&one, 1
1dab0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
1dac0 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 22 5f  ite3_vfs_find("_
1dad0 5f 6f 6e 65 22 29 3d 3d 26 6f 6e 65 20 29 3b 0a  _one")==&one );.
1dae0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1daf0 33 5f 76 66 73 5f 66 69 6e 64 28 22 5f 5f 74 77  3_vfs_find("__tw
1db00 6f 22 29 3d 3d 26 74 77 6f 20 29 3b 0a 20 20 61  o")==&two );.  a
1db10 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 5f 76  ssert( sqlite3_v
1db20 66 73 5f 66 69 6e 64 28 30 29 3d 3d 26 6f 6e 65  fs_find(0)==&one
1db30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66   );.  sqlite3_vf
1db40 73 5f 72 65 67 69 73 74 65 72 28 26 74 77 6f 2c  s_register(&two,
1db50 20 31 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73   1);.  assert( s
1db60 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28  qlite3_vfs_find(
1db70 22 5f 5f 6f 6e 65 22 29 3d 3d 26 6f 6e 65 20 29  "__one")==&one )
1db80 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
1db90 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 22 5f 5f  te3_vfs_find("__
1dba0 74 77 6f 22 29 3d 3d 26 74 77 6f 20 29 3b 0a 20  two")==&two );. 
1dbb0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1dbc0 5f 76 66 73 5f 66 69 6e 64 28 30 29 3d 3d 26 74  _vfs_find(0)==&t
1dbd0 77 6f 20 29 3b 0a 20 20 69 66 28 20 70 4d 61 69  wo );.  if( pMai
1dbe0 6e 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  n ){.    sqlite3
1dbf0 5f 76 66 73 5f 72 65 67 69 73 74 65 72 28 70 4d  _vfs_register(pM
1dc00 61 69 6e 2c 20 31 29 3b 0a 20 20 20 20 61 73 73  ain, 1);.    ass
1dc10 65 72 74 28 20 73 71 6c 69 74 65 33 5f 76 66 73  ert( sqlite3_vfs
1dc20 5f 66 69 6e 64 28 22 5f 5f 6f 6e 65 22 29 3d 3d  _find("__one")==
1dc30 26 6f 6e 65 20 29 3b 0a 20 20 20 20 61 73 73 65  &one );.    asse
1dc40 72 74 28 20 73 71 6c 69 74 65 33 5f 76 66 73 5f  rt( sqlite3_vfs_
1dc50 66 69 6e 64 28 22 5f 5f 74 77 6f 22 29 3d 3d 26  find("__two")==&
1dc60 74 77 6f 20 29 3b 0a 20 20 20 20 61 73 73 65 72  two );.    asser
1dc70 74 28 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66  t( sqlite3_vfs_f
1dc80 69 6e 64 28 30 29 3d 3d 70 4d 61 69 6e 20 29 3b  ind(0)==pMain );
1dc90 0a 20 20 7d 0a 20 20 0a 20 20 2f 2a 20 55 6e 6c  .  }.  .  /* Unl
1dca0 69 6e 6b 20 74 68 65 20 64 65 66 61 75 6c 74 20  ink the default 
1dcb0 56 46 53 2e 20 20 52 65 70 65 61 74 20 75 6e 74  VFS.  Repeat unt
1dcc0 69 6c 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  il there are no 
1dcd0 6d 6f 72 65 20 56 46 53 65 73 0a 20 20 2a 2a 20  more VFSes.  ** 
1dce0 72 65 67 69 73 74 65 72 65 64 2e 0a 20 20 2a 2f  registered..  */
1dcf0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69  .  for(i=0; i<si
1dd00 7a 65 6f 66 28 61 70 56 66 73 29 2f 73 69 7a 65  zeof(apVfs)/size
1dd10 6f 66 28 61 70 56 66 73 5b 30 5d 29 3b 20 69 2b  of(apVfs[0]); i+
1dd20 2b 29 7b 0a 20 20 20 20 61 70 56 66 73 5b 69 5d  +){.    apVfs[i]
1dd30 20 3d 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 66   = sqlite3_vfs_f
1dd40 69 6e 64 28 30 29 3b 0a 20 20 20 20 69 66 28 20  ind(0);.    if( 
1dd50 61 70 56 66 73 5b 69 5d 20 29 7b 0a 20 20 20 20  apVfs[i] ){.    
1dd60 20 20 61 73 73 65 72 74 28 20 61 70 56 66 73 5b    assert( apVfs[
1dd70 69 5d 3d 3d 73 71 6c 69 74 65 33 5f 76 66 73 5f  i]==sqlite3_vfs_
1dd80 66 69 6e 64 28 61 70 56 66 73 5b 69 5d 2d 3e 7a  find(apVfs[i]->z
1dd90 4e 61 6d 65 29 20 29 3b 0a 20 20 20 20 20 20 73  Name) );.      s
1dda0 71 6c 69 74 65 33 5f 76 66 73 5f 75 6e 72 65 67  qlite3_vfs_unreg
1ddb0 69 73 74 65 72 28 61 70 56 66 73 5b 69 5d 29 3b  ister(apVfs[i]);
1ddc0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 30  .      assert( 0
1ddd0 3d 3d 73 71 6c 69 74 65 33 5f 76 66 73 5f 66 69  ==sqlite3_vfs_fi
1dde0 6e 64 28 61 70 56 66 73 5b 69 5d 2d 3e 7a 4e 61  nd(apVfs[i]->zNa
1ddf0 6d 65 29 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  me) );.    }.  }
1de00 0a 20 20 61 73 73 65 72 74 28 20 30 3d 3d 73 71  .  assert( 0==sq
1de10 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 30  lite3_vfs_find(0
1de20 29 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 52 65 67  ) );.  .  /* Reg
1de30 69 73 74 65 72 20 74 68 65 20 6d 61 69 6e 20 56  ister the main V
1de40 46 53 20 61 73 20 6e 6f 6e 2d 64 65 66 61 75 6c  FS as non-defaul
1de50 74 20 28 77 69 6c 6c 20 62 65 20 6d 61 64 65 20  t (will be made 
1de60 64 65 66 61 75 6c 74 2c 20 73 69 6e 63 65 0a 20  default, since. 
1de70 20 2a 2a 20 69 74 27 6c 6c 20 62 65 20 74 68 65   ** it'll be the
1de80 20 6f 6e 6c 79 20 6f 6e 65 20 69 6e 20 65 78 69   only one in exi
1de90 73 74 65 6e 63 65 29 2e 0a 20 20 2a 2f 0a 20 20  stence)..  */.  
1dea0 73 71 6c 69 74 65 33 5f 76 66 73 5f 72 65 67 69  sqlite3_vfs_regi
1deb0 73 74 65 72 28 70 4d 61 69 6e 2c 20 30 29 3b 0a  ster(pMain, 0);.
1dec0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1ded0 33 5f 76 66 73 5f 66 69 6e 64 28 30 29 3d 3d 70  3_vfs_find(0)==p
1dee0 4d 61 69 6e 20 29 3b 0a 20 20 0a 20 20 2f 2a 20  Main );.  .  /* 
1def0 55 6e 2d 72 65 67 69 73 74 65 72 20 74 68 65 20  Un-register the 
1df00 6d 61 69 6e 20 56 46 53 20 61 67 61 69 6e 20 74  main VFS again t
1df10 6f 20 72 65 73 74 6f 72 65 20 61 6e 20 65 6d 70  o restore an emp
1df20 74 79 20 56 46 53 20 6c 69 73 74 20 2a 2f 0a 20  ty VFS list */. 
1df30 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 75 6e 72   sqlite3_vfs_unr
1df40 65 67 69 73 74 65 72 28 70 4d 61 69 6e 29 3b 0a  egister(pMain);.
1df50 20 20 61 73 73 65 72 74 28 20 30 3d 3d 73 71 6c    assert( 0==sql
1df60 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 30 29  ite3_vfs_find(0)
1df70 20 29 3b 0a 0a 20 20 2f 2a 20 52 65 6c 69 6e 6b   );..  /* Relink
1df80 20 61 6c 6c 20 56 46 53 65 73 20 69 6e 20 72 65   all VFSes in re
1df90 76 65 72 73 65 20 6f 72 64 65 72 2e 20 2a 2f 20  verse order. */ 
1dfa0 20 0a 20 20 66 6f 72 28 69 3d 73 69 7a 65 6f 66   .  for(i=sizeof
1dfb0 28 61 70 56 66 73 29 2f 73 69 7a 65 6f 66 28 61  (apVfs)/sizeof(a
1dfc0 70 56 66 73 5b 30 5d 29 2d 31 3b 20 69 3e 3d 30  pVfs[0])-1; i>=0
1dfd0 3b 20 69 2d 2d 29 7b 0a 20 20 20 20 69 66 28 20  ; i--){.    if( 
1dfe0 61 70 56 66 73 5b 69 5d 20 29 7b 0a 20 20 20 20  apVfs[i] ){.    
1dff0 20 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 72 65    sqlite3_vfs_re
1e000 67 69 73 74 65 72 28 61 70 56 66 73 5b 69 5d 2c  gister(apVfs[i],
1e010 20 31 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72   1);.      asser
1e020 74 28 20 61 70 56 66 73 5b 69 5d 3d 3d 73 71 6c  t( apVfs[i]==sql
1e030 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 30 29  ite3_vfs_find(0)
1e040 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1e050 28 20 61 70 56 66 73 5b 69 5d 3d 3d 73 71 6c 69  ( apVfs[i]==sqli
1e060 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 61 70 56  te3_vfs_find(apV
1e070 66 73 5b 69 5d 2d 3e 7a 4e 61 6d 65 29 20 29 3b  fs[i]->zName) );
1e080 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
1e090 20 55 6e 72 65 67 69 73 74 65 72 20 6f 75 74 20   Unregister out 
1e0a0 73 61 6d 70 6c 65 20 56 46 53 65 73 2e 20 2a 2f  sample VFSes. */
1e0b0 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 75  .  sqlite3_vfs_u
1e0c0 6e 72 65 67 69 73 74 65 72 28 26 6f 6e 65 29 3b  nregister(&one);
1e0d0 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 75  .  sqlite3_vfs_u
1e0e0 6e 72 65 67 69 73 74 65 72 28 26 74 77 6f 29 3b  nregister(&two);
1e0f0 0a 0a 20 20 2f 2a 20 55 6e 72 65 67 69 73 74 65  ..  /* Unregiste
1e100 72 69 6e 67 20 61 20 56 46 53 20 74 68 61 74 20  ring a VFS that 
1e110 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
1e120 20 72 65 67 69 73 74 65 72 65 64 20 69 73 20 68   registered is h
1e130 61 72 6d 6c 65 73 73 20 2a 2f 0a 20 20 73 71 6c  armless */.  sql
1e140 69 74 65 33 5f 76 66 73 5f 75 6e 72 65 67 69 73  ite3_vfs_unregis
1e150 74 65 72 28 26 6f 6e 65 29 3b 0a 20 20 73 71 6c  ter(&one);.  sql
1e160 69 74 65 33 5f 76 66 73 5f 75 6e 72 65 67 69 73  ite3_vfs_unregis
1e170 74 65 72 28 26 74 77 6f 29 3b 0a 20 20 61 73 73  ter(&two);.  ass
1e180 65 72 74 28 20 73 71 6c 69 74 65 33 5f 76 66 73  ert( sqlite3_vfs
1e190 5f 66 69 6e 64 28 22 5f 5f 6f 6e 65 22 29 3d 3d  _find("__one")==
1e1a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  0 );.  assert( s
1e1b0 71 6c 69 74 65 33 5f 76 66 73 5f 66 69 6e 64 28  qlite3_vfs_find(
1e1c0 22 5f 5f 74 77 6f 22 29 3d 3d 30 20 29 3b 0a 0a  "__two")==0 );..
1e1d0 20 20 2f 2a 20 57 65 20 73 68 6f 75 6c 64 20 62    /* We should b
1e1e0 65 20 6c 65 66 74 20 77 69 74 68 20 74 68 65 20  e left with the 
1e1f0 6f 72 69 67 69 6e 61 6c 20 64 65 66 61 75 6c 74  original default
1e200 20 56 46 53 20 62 61 63 6b 20 61 73 20 74 68 65   VFS back as the
1e210 0a 20 20 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 2a  .  ** original *
1e220 2f 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  /.  assert( sqli
1e230 74 65 33 5f 76 66 73 5f 66 69 6e 64 28 30 29 3d  te3_vfs_find(0)=
1e240 3d 70 4d 61 69 6e 20 29 3b 0a 0a 20 20 72 65 74  =pMain );..  ret
1e250 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 0a 2f  urn TCL_OK;.}../
1e260 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20 20 20 76  *.** tclcmd:   v
1e270 66 73 5f 69 6e 69 74 66 61 69 6c 5f 74 65 73 74  fs_initfail_test
1e280 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 54 43 4c 20  .**.** This TCL 
1e290 63 6f 6d 6d 61 6e 64 20 61 74 74 65 6d 70 74 73  command attempts
1e2a0 20 74 6f 20 76 66 73 5f 66 69 6e 64 20 61 6e 64   to vfs_find and
1e2b0 20 76 66 73 5f 72 65 67 69 73 74 65 72 20 77 68   vfs_register wh
1e2c0 65 6e 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  en the.** sqlite
1e2d0 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 69  3_initialize() i
1e2e0 6e 74 65 72 66 61 63 65 20 69 73 20 66 61 69 6c  nterface is fail
1e2f0 69 6e 67 2e 20 20 41 6c 6c 20 63 61 6c 6c 73 20  ing.  All calls 
1e300 73 68 6f 75 6c 64 20 66 61 69 6c 2e 0a 2a 2f 0a  should fail..*/.
1e310 73 74 61 74 69 63 20 69 6e 74 20 76 66 73 5f 69  static int vfs_i
1e320 6e 69 74 66 61 69 6c 5f 74 65 73 74 28 0a 20 20  nitfail_test(.  
1e330 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
1e340 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65  tData, /* Pointe
1e350 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61  r to sqlite3_ena
1e360 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e  ble_XXX function
1e370 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
1e380 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
1e390 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
1e3a0 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
1e3b0 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
1e3c0 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20  .  int objc,    
1e3d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1e3e0 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
1e3f0 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43   */.  Tcl_Obj *C
1e400 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20  ONST objv[]  /* 
1e410 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74  Command argument
1e420 73 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65  s */.){.  sqlite
1e430 33 5f 76 66 73 20 6f 6e 65 3b 0a 20 20 6f 6e 65  3_vfs one;.  one
1e440 2e 7a 4e 61 6d 65 20 3d 20 22 5f 5f 6f 6e 65 22  .zName = "__one"
1e450 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ;..  if( sqlite3
1e460 5f 76 66 73 5f 66 69 6e 64 28 30 29 20 29 20 72  _vfs_find(0) ) r
1e470 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
1e480 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 72  .  sqlite3_vfs_r
1e490 65 67 69 73 74 65 72 28 26 6f 6e 65 2c 20 30 29  egister(&one, 0)
1e4a0 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f  ;.  if( sqlite3_
1e4b0 76 66 73 5f 66 69 6e 64 28 30 29 20 29 20 72 65  vfs_find(0) ) re
1e4c0 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
1e4d0 20 20 73 71 6c 69 74 65 33 5f 76 66 73 5f 72 65    sqlite3_vfs_re
1e4e0 67 69 73 74 65 72 28 26 6f 6e 65 2c 20 31 29 3b  gister(&one, 1);
1e4f0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 76  .  if( sqlite3_v
1e500 66 73 5f 66 69 6e 64 28 30 29 20 29 20 72 65 74  fs_find(0) ) ret
1e510 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1e520 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
1e530 7d 0a 0a 2f 2a 0a 2a 2a 20 53 61 76 65 64 20 56  }../*.** Saved V
1e540 46 53 65 73 0a 2a 2f 0a 73 74 61 74 69 63 20 73  FSes.*/.static s
1e550 71 6c 69 74 65 33 5f 76 66 73 20 2a 61 70 56 66  qlite3_vfs *apVf
1e560 73 5b 32 30 5d 3b 0a 73 74 61 74 69 63 20 69 6e  s[20];.static in
1e570 74 20 6e 56 66 73 20 3d 20 30 3b 0a 0a 2f 2a 0a  t nVfs = 0;../*.
1e580 2a 2a 20 74 63 6c 63 6d 64 3a 20 20 20 76 66 73  ** tclcmd:   vfs
1e590 5f 75 6e 72 65 67 69 73 74 65 72 5f 61 6c 6c 0a  _unregister_all.
1e5a0 2a 2a 0a 2a 2a 20 55 6e 72 65 67 69 73 74 65 72  **.** Unregister
1e5b0 20 61 6c 6c 20 56 46 53 65 73 2e 0a 2a 2f 0a 73   all VFSes..*/.s
1e5c0 74 61 74 69 63 20 69 6e 74 20 76 66 73 5f 75 6e  tatic int vfs_un
1e5d0 72 65 67 69 73 74 65 72 5f 61 6c 6c 28 0a 20 20  register_all(.  
1e5e0 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
1e5f0 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65  tData, /* Pointe
1e600 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61  r to sqlite3_ena
1e610 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e  ble_XXX function
1e620 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70   */.  Tcl_Interp
1e630 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20   *interp,    /* 
1e640 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65  The TCL interpre
1e650 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64  ter that invoked
1e660 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f   this command */
1e670 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20  .  int objc,    
1e680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1e690 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
1e6a0 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43   */.  Tcl_Obj *C
1e6b0 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20  ONST objv[]  /* 
1e6c0 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74  Command argument
1e6d0 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 3b  s */.){.  int i;
1e6e0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72  .  for(i=0; i<Ar
1e6f0 72 61 79 53 69 7a 65 28 61 70 56 66 73 29 3b 20  raySize(apVfs); 
1e700 69 2b 2b 29 7b 0a 20 20 20 20 61 70 56 66 73 5b  i++){.    apVfs[
1e710 69 5d 20 3d 20 73 71 6c 69 74 65 33 5f 76 66 73  i] = sqlite3_vfs
1e720 5f 66 69 6e 64 28 30 29 3b 0a 20 20 20 20 69 66  _find(0);.    if
1e730 28 20 61 70 56 66 73 5b 69 5d 3d 3d 30 20 29 20  ( apVfs[i]==0 ) 
1e740 62 72 65 61 6b 3b 0a 20 20 20 20 73 71 6c 69 74  break;.    sqlit
1e750 65 33 5f 76 66 73 5f 75 6e 72 65 67 69 73 74 65  e3_vfs_unregiste
1e760 72 28 61 70 56 66 73 5b 69 5d 29 3b 0a 20 20 7d  r(apVfs[i]);.  }
1e770 0a 20 20 6e 56 66 73 20 3d 20 69 3b 0a 20 20 72  .  nVfs = i;.  r
1e780 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a  eturn TCL_OK;.}.
1e790 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20 20 20  /*.** tclcmd:   
1e7a0 76 66 73 5f 72 65 72 65 67 69 73 74 65 72 5f 61  vfs_reregister_a
1e7b0 6c 6c 0a 2a 2a 0a 2a 2a 20 52 65 73 74 6f 72 65  ll.**.** Restore
1e7c0 20 61 6c 6c 20 56 46 53 65 73 20 74 68 61 74 20   all VFSes that 
1e7d0 77 65 72 65 20 72 65 6d 6f 76 65 64 20 75 73 69  were removed usi
1e7e0 6e 67 20 76 66 73 5f 75 6e 72 65 67 69 73 74 65  ng vfs_unregiste
1e7f0 72 5f 61 6c 6c 0a 2a 2f 0a 73 74 61 74 69 63 20  r_all.*/.static 
1e800 69 6e 74 20 76 66 73 5f 72 65 72 65 67 69 73 74  int vfs_reregist
1e810 65 72 5f 61 6c 6c 28 0a 20 20 43 6c 69 65 6e 74  er_all(.  Client
1e820 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 2c  Data clientData,
1e830 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73   /* Pointer to s
1e840 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58 58  qlite3_enable_XX
1e850 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  X function */.  
1e860 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
1e870 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54 43  rp,    /* The TC
1e880 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74 68  L interpreter th
1e890 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73 20  at invoked this 
1e8a0 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e 74  command */.  int
1e8b0 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20 20   objc,          
1e8c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1e8d0 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
1e8e0 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f  Tcl_Obj *CONST o
1e8f0 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e  bjv[]  /* Comman
1e900 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 29  d arguments */.)
1e910 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72  {.  int i;.  for
1e920 28 69 3d 30 3b 20 69 3c 6e 56 66 73 3b 20 69 2b  (i=0; i<nVfs; i+
1e930 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  +){.    sqlite3_
1e940 76 66 73 5f 72 65 67 69 73 74 65 72 28 61 70 56  vfs_register(apV
1e950 66 73 5b 69 5d 2c 20 69 3d 3d 30 29 3b 0a 20 20  fs[i], i==0);.  
1e960 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  }.  return TCL_O
1e970 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c  K;.}.../*.** tcl
1e980 63 6d 64 3a 20 20 20 66 69 6c 65 5f 63 6f 6e 74  cmd:   file_cont
1e990 72 6f 6c 5f 74 65 73 74 20 44 42 0a 2a 2a 0a 2a  rol_test DB.**.*
1e9a0 2a 20 54 68 69 73 20 54 43 4c 20 63 6f 6d 6d 61  * This TCL comma
1e9b0 6e 64 20 72 75 6e 73 20 74 68 65 20 73 71 6c 69  nd runs the sqli
1e9c0 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  te3_file_control
1e9d0 20 69 6e 74 65 72 66 61 63 65 20 61 6e 64 0a 2a   interface and.*
1e9e0 2a 20 76 65 72 69 66 69 65 73 20 63 6f 72 72 65  * verifies corre
1e9f0 63 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20  ct operation of 
1ea00 74 68 65 20 73 61 6d 65 2e 0a 2a 2f 0a 73 74 61  the same..*/.sta
1ea10 74 69 63 20 69 6e 74 20 66 69 6c 65 5f 63 6f 6e  tic int file_con
1ea20 74 72 6f 6c 5f 74 65 73 74 28 0a 20 20 43 6c 69  trol_test(.  Cli
1ea30 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
1ea40 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  ta, /* Pointer t
1ea50 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  o sqlite3_enable
1ea60 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  _XXX function */
1ea70 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  .  Tcl_Interp *i
1ea80 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65  nterp,    /* The
1ea90 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72   TCL interpreter
1eaa0 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
1eab0 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20  is command */.  
1eac0 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20  int objc,       
1ead0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1eae0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
1eaf0 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
1eb00 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d  T objv[]  /* Com
1eb10 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a  mand arguments *
1eb20 2f 0a 29 7b 0a 20 20 69 6e 74 20 69 41 72 67 20  /.){.  int iArg 
1eb30 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  = 0;.  sqlite3 *
1eb40 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 0a 20  db;.  int rc;.. 
1eb50 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b 0a   if( objc!=2 ){.
1eb60 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
1eb70 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77 72  sult(interp, "wr
1eb80 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f 75  ong # args: shou
1eb90 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20 20  ld be \"",.     
1eba0 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67     Tcl_GetString
1ebb0 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c  FromObj(objv[0],
1ebc0 20 30 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a   0), " DB", 0);.
1ebd0 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45      return TCL_E
1ebe0 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20  RROR;.  }.  if( 
1ebf0 67 65 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74  getDbPointer(int
1ec00 65 72 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69  erp, Tcl_GetStri
1ec10 6e 67 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62  ng(objv[1]), &db
1ec20 29 20 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45  ) ) return TCL_E
1ec30 52 52 4f 52 3b 0a 20 20 72 63 20 3d 20 73 71 6c  RROR;.  rc = sql
1ec40 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
1ec50 6c 28 64 62 2c 20 30 2c 20 30 2c 20 26 69 41 72  l(db, 0, 0, &iAr
1ec60 67 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  g);.  assert( rc
1ec70 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29  ==SQLITE_ERROR )
1ec80 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1ec90 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62  _file_control(db
1eca0 2c 20 22 6e 6f 74 61 64 61 74 61 62 61 73 65 22  , "notadatabase"
1ecb0 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c  , SQLITE_FCNTL_L
1ecc0 4f 43 4b 53 54 41 54 45 2c 20 26 69 41 72 67 29  OCKSTATE, &iArg)
1ecd0 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
1ece0 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a  SQLITE_ERROR );.
1ecf0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66    rc = sqlite3_f
1ed00 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
1ed10 22 6d 61 69 6e 22 2c 20 2d 31 2c 20 26 69 41 72  "main", -1, &iAr
1ed20 67 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  g);.  assert( rc
1ed30 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29  ==SQLITE_ERROR )
1ed40 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1ed50 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62  _file_control(db
1ed60 2c 20 22 74 65 6d 70 22 2c 20 2d 31 2c 20 26 69  , "temp", -1, &i
1ed70 41 72 67 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Arg);.  assert( 
1ed80 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52  rc==SQLITE_ERROR
1ed90 20 29 3b 0a 0a 20 20 72 65 74 75 72 6e 20 54 43   );..  return TC
1eda0 4c 5f 4f 4b 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  L_OK;.}.../*.** 
1edb0 74 63 6c 63 6d 64 3a 20 20 20 66 69 6c 65 5f 63  tclcmd:   file_c
1edc0 6f 6e 74 72 6f 6c 5f 6c 61 73 74 65 72 72 6e 6f  ontrol_lasterrno
1edd0 5f 74 65 73 74 20 44 42 0a 2a 2a 0a 2a 2a 20 54  _test DB.**.** T
1ede0 68 69 73 20 54 43 4c 20 63 6f 6d 6d 61 6e 64 20  his TCL command 
1edf0 72 75 6e 73 20 74 68 65 20 73 71 6c 69 74 65 33  runs the sqlite3
1ee00 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 20 69 6e  _file_control in
1ee10 74 65 72 66 61 63 65 20 61 6e 64 0a 2a 2a 20 76  terface and.** v
1ee20 65 72 69 66 69 65 73 20 63 6f 72 72 65 63 74 20  erifies correct 
1ee30 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  operation of the
1ee40 20 53 51 4c 49 54 45 5f 4c 41 53 54 5f 45 52 52   SQLITE_LAST_ERR
1ee50 4e 4f 20 76 65 72 62 2e 0a 2a 2f 0a 73 74 61 74  NO verb..*/.stat
1ee60 69 63 20 69 6e 74 20 66 69 6c 65 5f 63 6f 6e 74  ic int file_cont
1ee70 72 6f 6c 5f 6c 61 73 74 65 72 72 6e 6f 5f 74 65  rol_lasterrno_te
1ee80 73 74 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61  st(.  ClientData
1ee90 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20   clientData, /* 
1eea0 50 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74  Pointer to sqlit
1eeb0 65 33 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75  e3_enable_XXX fu
1eec0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f  nction */.  Tcl_
1eed0 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20  Interp *interp, 
1eee0 20 20 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e     /* The TCL in
1eef0 74 65 72 70 72 65 74 65 72 20 74 68 61 74 20 69  terpreter that i
1ef00 6e 76 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d  nvoked this comm
1ef10 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a  and */.  int obj
1ef20 63 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c,              
1ef30 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
1ef40 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f  uments */.  Tcl_
1ef50 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
1ef60 5d 20 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72  ]  /* Command ar
1ef70 67 75 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20  guments */.){.  
1ef80 69 6e 74 20 69 41 72 67 20 3d 20 30 3b 0a 20 20  int iArg = 0;.  
1ef90 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
1efa0 6e 74 20 72 63 3b 0a 0a 20 20 69 66 28 20 6f 62  nt rc;..  if( ob
1efb0 6a 63 21 3d 32 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=2 ){.    Tcl
1efc0 5f 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e  _AppendResult(in
1efd0 74 65 72 70 2c 20 22 77 72 6f 6e 67 20 23 20 61  terp, "wrong # a
1efe0 72 67 73 3a 20 73 68 6f 75 6c 64 20 62 65 20 5c  rgs: should be \
1eff0 22 22 2c 0a 20 20 20 20 20 20 20 20 54 63 6c 5f  "",.        Tcl_
1f000 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a  GetStringFromObj
1f010 28 6f 62 6a 76 5b 30 5d 2c 20 30 29 2c 20 22 20  (objv[0], 0), " 
1f020 44 42 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74  DB", 0);.    ret
1f030 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1f040 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62 50 6f   }.  if( getDbPo
1f050 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20 54 63  inter(interp, Tc
1f060 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76  l_GetString(objv
1f070 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72 65 74  [1]), &db) ) ret
1f080 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20  urn TCL_ERROR;. 
1f090 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69   rc = sqlite3_fi
1f0a0 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 4e  le_control(db, N
1f0b0 55 4c 4c 2c 20 53 51 4c 49 54 45 5f 4c 41 53 54  ULL, SQLITE_LAST
1f0c0 5f 45 52 52 4e 4f 2c 20 26 69 41 72 67 29 3b 0a  _ERRNO, &iArg);.
1f0d0 20 20 69 66 28 20 72 63 20 29 20 7b 20 54 63 6c    if( rc ) { Tcl
1f0e0 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e  _SetObjResult(in
1f0f0 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e 74  terp, Tcl_NewInt
1f100 4f 62 6a 28 72 63 29 29 3b 20 72 65 74 75 72 6e  Obj(rc)); return
1f110 20 54 43 4c 5f 45 52 52 4f 52 3b 20 7d 0a 20 20   TCL_ERROR; }.  
1f120 69 66 28 20 69 41 72 67 21 3d 30 20 29 20 7b 0a  if( iArg!=0 ) {.
1f130 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65      Tcl_AppendRe
1f140 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 55 6e  sult(interp, "Un
1f150 65 78 70 65 63 74 65 64 20 6e 6f 6e 2d 7a 65 72  expected non-zer
1f160 6f 20 65 72 72 6e 6f 3a 20 22 2c 0a 20 20 20 20  o errno: ",.    
1f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f180 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
1f190 6f 6d 4f 62 6a 28 54 63 6c 5f 4e 65 77 49 6e 74  omObj(Tcl_NewInt
1f1a0 4f 62 6a 28 69 41 72 67 29 2c 20 30 29 2c 20 22  Obj(iArg), 0), "
1f1b0 20 22 2c 20 30 29 3b 0a 20 20 20 20 72 65 74 75   ", 0);.    retu
1f1c0 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
1f1d0 7d 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f  }.  return TCL_O
1f1e0 4b 3b 20 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63  K;  .}../*.** tc
1f1f0 6c 63 6d 64 3a 20 20 20 66 69 6c 65 5f 63 6f 6e  lcmd:   file_con
1f200 74 72 6f 6c 5f 6c 6f 63 6b 70 72 6f 78 79 5f 74  trol_lockproxy_t
1f210 65 73 74 20 44 42 0a 2a 2a 0a 2a 2a 20 54 68 69  est DB.**.** Thi
1f220 73 20 54 43 4c 20 63 6f 6d 6d 61 6e 64 20 72 75  s TCL command ru
1f230 6e 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 66  ns the sqlite3_f
1f240 69 6c 65 5f 63 6f 6e 74 72 6f 6c 20 69 6e 74 65  ile_control inte
1f250 72 66 61 63 65 20 61 6e 64 0a 2a 2a 20 76 65 72  rface and.** ver
1f260 69 66 69 65 73 20 63 6f 72 72 65 63 74 20 6f 70  ifies correct op
1f270 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 53  eration of the S
1f280 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43 4b 50 52  QLITE_GET_LOCKPR
1f290 4f 58 59 46 49 4c 45 20 61 6e 64 0a 2a 2a 20 53  OXYFILE and.** S
1f2a0 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52  QLITE_SET_LOCKPR
1f2b0 4f 58 59 46 49 4c 45 20 76 65 72 62 73 2e 0a 2a  OXYFILE verbs..*
1f2c0 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c  /.static int fil
1f2d0 65 5f 63 6f 6e 74 72 6f 6c 5f 6c 6f 63 6b 70 72  e_control_lockpr
1f2e0 6f 78 79 5f 74 65 73 74 28 0a 20 20 43 6c 69 65  oxy_test(.  Clie
1f2f0 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74  ntData clientDat
1f300 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  a, /* Pointer to
1f310 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f   sqlite3_enable_
1f320 58 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  XXX function */.
1f330 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e    Tcl_Interp *in
1f340 74 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20  terp,    /* The 
1f350 54 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20  TCL interpreter 
1f360 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69  that invoked thi
1f370 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69  s command */.  i
1f380 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20  nt objc,        
1f390 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f3a0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
1f3b0 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54    Tcl_Obj *CONST
1f3c0 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d   objv[]  /* Comm
1f3d0 61 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f  and arguments */
1f3e0 0a 29 7b 0a 20 20 69 6e 74 20 69 41 72 67 20 3d  .){.  int iArg =
1f3f0 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   0;.  sqlite3 *d
1f400 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 0a  b;.  int rc;.  .
1f410 20 20 69 66 28 20 6f 62 6a 63 21 3d 32 20 29 7b    if( objc!=2 ){
1f420 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52  .    Tcl_AppendR
1f430 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 77  esult(interp, "w
1f440 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68 6f  rong # args: sho
1f450 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20 20  uld be \"",.    
1f460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f470 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72   Tcl_GetStringFr
1f480 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 30  omObj(objv[0], 0
1f490 29 2c 20 22 20 44 42 22 2c 20 30 29 3b 0a 20 20  ), " DB", 0);.  
1f4a0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
1f4b0 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28 20 67 65  OR;.  }.  if( ge
1f4c0 74 44 62 50 6f 69 6e 74 65 72 28 69 6e 74 65 72  tDbPointer(inter
1f4d0 70 2c 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67  p, Tcl_GetString
1f4e0 28 6f 62 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20  (objv[1]), &db) 
1f4f0 29 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ) return TCL_ERR
1f500 4f 52 3b 0a 20 20 0a 23 69 66 64 65 66 20 53 51  OR;.  .#ifdef SQ
1f510 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b  LITE_ENABLE_LOCK
1f520 49 4e 47 5f 53 54 59 4c 45 0a 09 7b 0a 20 20 20  ING_STYLE..{.   
1f530 20 63 68 61 72 20 2a 70 72 6f 78 79 50 61 74 68   char *proxyPath
1f540 20 3d 20 22 74 65 73 74 2e 70 72 6f 78 79 22 3b   = "test.proxy";
1f550 0a 20 20 20 20 63 68 61 72 20 2a 74 65 73 74 50  .    char *testP
1f560 61 74 68 3b 0a 09 09 72 63 20 3d 20 73 71 6c 69  ath;...rc = sqli
1f570 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  te3_file_control
1f580 28 64 62 2c 20 4e 55 4c 4c 2c 20 53 51 4c 49 54  (db, NULL, SQLIT
1f590 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46  E_SET_LOCKPROXYF
1f5a0 49 4c 45 2c 20 70 72 6f 78 79 50 61 74 68 29 3b  ILE, proxyPath);
1f5b0 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 7b 20  .    if( rc ) { 
1f5c0 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74  Tcl_SetObjResult
1f5d0 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77  (interp, Tcl_New
1f5e0 49 6e 74 4f 62 6a 28 72 63 29 29 3b 20 72 65 74  IntObj(rc)); ret
1f5f0 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 20 7d  urn TCL_ERROR; }
1f600 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1f610 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
1f620 62 2c 20 4e 55 4c 4c 2c 20 53 51 4c 49 54 45 5f  b, NULL, SQLITE_
1f630 47 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c  GET_LOCKPROXYFIL
1f640 45 2c 20 26 74 65 73 74 50 61 74 68 29 3b 0a 20  E, &testPath);. 
1f650 20 20 20 69 66 28 20 73 74 72 6e 63 6d 70 28 70     if( strncmp(p
1f660 72 6f 78 79 50 61 74 68 2c 74 65 73 74 50 61 74  roxyPath,testPat
1f670 68 2c 31 31 29 20 29 20 7b 0a 20 20 20 20 20 20  h,11) ) {.      
1f680 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
1f690 28 69 6e 74 65 72 70 2c 20 22 4c 6f 63 6b 20 70  (interp, "Lock p
1f6a0 72 6f 78 79 20 66 69 6c 65 20 64 69 64 20 6e 6f  roxy file did no
1f6b0 74 20 6d 61 74 63 68 20 74 68 65 20 70 72 65 76  t match the prev
1f6c0 69 6f 75 73 6c 79 20 61 73 73 69 67 6e 65 64 20  iously assigned 
1f6d0 76 61 6c 75 65 22 2c 20 30 29 3b 0a 20 20 20 20  value", 0);.    
1f6e0 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52    return TCL_ERR
1f6f0 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  OR;.    }.    if
1f700 28 20 72 63 20 29 20 7b 20 54 63 6c 5f 53 65 74  ( rc ) { Tcl_Set
1f710 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
1f720 2c 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28  , Tcl_NewIntObj(
1f730 72 63 29 29 3b 20 72 65 74 75 72 6e 20 54 43 4c  rc)); return TCL
1f740 5f 45 52 52 4f 52 3b 20 7d 0a 09 09 72 63 20 3d  _ERROR; }...rc =
1f750 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
1f760 6e 74 72 6f 6c 28 64 62 2c 20 4e 55 4c 4c 2c 20  ntrol(db, NULL, 
1f770 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50  SQLITE_SET_LOCKP
1f780 52 4f 58 59 46 49 4c 45 2c 20 70 72 6f 78 79 50  ROXYFILE, proxyP
1f790 61 74 68 29 3b 0a 20 20 20 20 69 66 28 20 72 63  ath);.    if( rc
1f7a0 20 29 20 7b 20 54 63 6c 5f 53 65 74 4f 62 6a 52   ) { Tcl_SetObjR
1f7b0 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63  esult(interp, Tc
1f7c0 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 72 63 29 29  l_NewIntObj(rc))
1f7d0 3b 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52  ; return TCL_ERR
1f7e0 4f 52 3b 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66  OR; }.  }.#endif
1f7f0 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b  .  return TCL_OK
1f800 3b 20 20 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 74 63  ;  .}.../*.** tc
1f810 6c 63 6d 64 3a 20 20 20 73 71 6c 69 74 65 33 5f  lcmd:   sqlite3_
1f820 76 66 73 5f 6c 69 73 74 0a 2a 2a 0a 2a 2a 20 20  vfs_list.**.**  
1f830 20 52 65 74 75 72 6e 20 61 20 74 63 6c 20 6c 69   Return a tcl li
1f840 73 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  st containing th
1f850 65 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 72  e names of all r
1f860 65 67 69 73 74 65 72 65 64 20 76 66 73 27 73 2e  egistered vfs's.
1f870 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 76  .*/.static int v
1f880 66 73 5f 6c 69 73 74 28 0a 20 20 43 6c 69 65 6e  fs_list(.  Clien
1f890 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61  tData clientData
1f8a0 2c 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20  , /* Pointer to 
1f8b0 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 58  sqlite3_enable_X
1f8c0 58 58 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  XX function */. 
1f8d0 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
1f8e0 65 72 70 2c 20 20 20 20 2f 2a 20 54 68 65 20 54  erp,    /* The T
1f8f0 43 4c 20 69 6e 74 65 72 70 72 65 74 65 72 20 74  CL interpreter t
1f900 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 69 73  hat invoked this
1f910 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a 20 20 69 6e   command */.  in
1f920 74 20 6f 62 6a 63 2c 20 20 20 20 20 20 20 20 20  t objc,         
1f930 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f940 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
1f950 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20   Tcl_Obj *CONST 
1f960 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43 6f 6d 6d 61  objv[]  /* Comma
1f970 6e 64 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  nd arguments */.
1f980 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73  ){.  sqlite3_vfs
1f990 20 2a 70 56 66 73 3b 0a 20 20 54 63 6c 5f 4f 62   *pVfs;.  Tcl_Ob
1f9a0 6a 20 2a 70 52 65 74 20 3d 20 54 63 6c 5f 4e 65  j *pRet = Tcl_Ne
1f9b0 77 4f 62 6a 28 29 3b 0a 20 20 69 66 28 20 6f 62  wObj();.  if( ob
1f9c0 6a 63 21 3d 31 20 29 7b 0a 20 20 20 20 54 63 6c  jc!=1 ){.    Tcl
1f9d0 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 28 69 6e  _WrongNumArgs(in
1f9e0 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 2c 20 22  terp, 1, objv, "
1f9f0 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 54  ");.    return T
1fa00 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  CL_ERROR;.  }.  
1fa10 66 6f 72 28 70 56 66 73 3d 73 71 6c 69 74 65 33  for(pVfs=sqlite3
1fa20 5f 76 66 73 5f 66 69 6e 64 28 30 29 3b 20 70 56  _vfs_find(0); pV
1fa30 66 73 3b 20 70 56 66 73 3d 70 56 66 73 2d 3e 70  fs; pVfs=pVfs->p
1fa40 4e 65 78 74 29 7b 0a 20 20 20 20 54 63 6c 5f 4c  Next){.    Tcl_L
1fa50 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d  istObjAppendElem
1fa60 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74  ent(interp, pRet
1fa70 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f  , Tcl_NewStringO
1fa80 62 6a 28 70 56 66 73 2d 3e 7a 4e 61 6d 65 2c 20  bj(pVfs->zName, 
1fa90 2d 31 29 29 3b 0a 20 20 7d 0a 20 20 54 63 6c 5f  -1));.  }.  Tcl_
1faa0 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74  SetObjResult(int
1fab0 65 72 70 2c 20 70 52 65 74 29 3b 0a 20 20 72 65  erp, pRet);.  re
1fac0 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 20 20 0a 7d  turn TCL_OK;  .}
1fad0 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20  ../*.** tclcmd: 
1fae0 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20    sqlite3_limit 
1faf0 44 42 20 49 44 20 56 41 4c 55 45 0a 2a 2a 0a 2a  DB ID VALUE.**.*
1fb00 2a 20 54 68 69 73 20 54 43 4c 20 63 6f 6d 6d 61  * This TCL comma
1fb10 6e 64 20 72 75 6e 73 20 74 68 65 20 73 71 6c 69  nd runs the sqli
1fb20 74 65 33 5f 6c 69 6d 69 74 20 69 6e 74 65 72 66  te3_limit interf
1fb30 61 63 65 20 61 6e 64 0a 2a 2a 20 76 65 72 69 66  ace and.** verif
1fb40 69 65 73 20 63 6f 72 72 65 63 74 20 6f 70 65 72  ies correct oper
1fb50 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 61 6d  ation of the sam
1fb60 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
1fb70 20 74 65 73 74 5f 6c 69 6d 69 74 28 0a 20 20 43   test_limit(.  C
1fb80 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
1fb90 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72  Data, /* Pointer
1fba0 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62   to sqlite3_enab
1fbb0 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20  le_XXX function 
1fbc0 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  */.  Tcl_Interp 
1fbd0 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
1fbe0 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
1fbf0 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
1fc00 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
1fc10 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20    int objc,     
1fc20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1fc30 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
1fc40 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  */.  Tcl_Obj *CO
1fc50 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43  NST objv[]  /* C
1fc60 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73  ommand arguments
1fc70 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33   */.){.  sqlite3
1fc80 20 2a 64 62 3b 0a 20 20 69 6e 74 20 72 63 3b 0a   *db;.  int rc;.
1fc90 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73    static const s
1fca0 74 72 75 63 74 20 7b 0a 20 20 20 20 20 63 68 61  truct {.     cha
1fcb0 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 69  r *zName;.     i
1fcc0 6e 74 20 69 64 3b 0a 20 20 7d 20 61 49 64 5b 5d  nt id;.  } aId[]
1fcd0 20 3d 20 7b 0a 20 20 20 20 7b 20 22 53 51 4c 49   = {.    { "SQLI
1fce0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 22  TE_LIMIT_LENGTH"
1fcf0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  ,              S
1fd00 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
1fd10 54 48 20 20 20 20 20 20 20 20 20 20 20 20 20 20  TH              
1fd20 20 7d 2c 0a 20 20 20 20 7b 20 22 53 51 4c 49 54   },.    { "SQLIT
1fd30 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47  E_LIMIT_SQL_LENG
1fd40 54 48 22 2c 20 20 20 20 20 20 20 20 20 20 53 51  TH",          SQ
1fd50 4c 49 54 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c  LITE_LIMIT_SQL_L
1fd60 45 4e 47 54 48 20 20 20 20 20 20 20 20 20 20 20  ENGTH           
1fd70 7d 2c 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45  },.    { "SQLITE
1fd80 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 22 2c 20  _LIMIT_COLUMN", 
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
1fda0 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e  ITE_LIMIT_COLUMN
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1fdc0 2c 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f  ,.    { "SQLITE_
1fdd0 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45 50 54 48  LIMIT_EXPR_DEPTH
1fde0 22 2c 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  ",          SQLI
1fdf0 54 45 5f 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45  TE_LIMIT_EXPR_DE
1fe00 50 54 48 20 20 20 20 20 20 20 20 20 20 20 7d 2c  PTH           },
1fe10 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c  .    { "SQLITE_L
1fe20 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45  IMIT_COMPOUND_SE
1fe30 4c 45 43 54 22 2c 20 20 20 20 20 53 51 4c 49 54  LECT",     SQLIT
1fe40 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44  E_LIMIT_COMPOUND
1fe50 5f 53 45 4c 45 43 54 20 20 20 20 20 20 7d 2c 0a  _SELECT      },.
1fe60 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49      { "SQLITE_LI
1fe70 4d 49 54 5f 56 44 42 45 5f 4f 50 22 2c 20 20 20  MIT_VDBE_OP",   
1fe80 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
1fe90 5f 4c 49 4d 49 54 5f 56 44 42 45 5f 4f 50 20 20  _LIMIT_VDBE_OP  
1fea0 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20              },. 
1feb0 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d     { "SQLITE_LIM
1fec0 49 54 5f 46 55 4e 43 54 49 4f 4e 5f 41 52 47 22  IT_FUNCTION_ARG"
1fed0 2c 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f  ,        SQLITE_
1fee0 4c 49 4d 49 54 5f 46 55 4e 43 54 49 4f 4e 5f 41  LIMIT_FUNCTION_A
1fef0 52 47 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20  RG         },.  
1ff00 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d 49    { "SQLITE_LIMI
1ff10 54 5f 41 54 54 41 43 48 45 44 22 2c 20 20 20 20  T_ATTACHED",    
1ff20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4c          SQLITE_L
1ff30 49 4d 49 54 5f 41 54 54 41 43 48 45 44 20 20 20  IMIT_ATTACHED   
1ff40 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
1ff50 20 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d 49 54   { "SQLITE_LIMIT
1ff60 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45  _LIKE_PATTERN_LE
1ff70 4e 47 54 48 22 2c 20 53 51 4c 49 54 45 5f 4c 49  NGTH", SQLITE_LI
1ff80 4d 49 54 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e  MIT_LIKE_PATTERN
1ff90 5f 4c 45 4e 47 54 48 20 20 7d 2c 0a 20 20 20 20  _LENGTH  },.    
1ffa0 7b 20 22 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  { "SQLITE_LIMIT_
1ffb0 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 22  VARIABLE_NUMBER"
1ffc0 2c 20 20 20 20 20 53 51 4c 49 54 45 5f 4c 49 4d  ,     SQLITE_LIM
1ffd0 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  IT_VARIABLE_NUMB
1ffe0 45 52 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 0a  ER      },.    .
1fff0 20 20 20 20 2f 2a 20 4f 75 74 20 6f 66 20 72 61      /* Out of ra
20000 6e 67 65 20 74 65 73 74 20 63 61 73 65 73 20 2a  nge test cases *
20010 2f 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f  /.    { "SQLITE_
20020 4c 49 4d 49 54 5f 54 4f 4f 53 4d 41 4c 4c 22 2c  LIMIT_TOOSMALL",
20030 20 20 20 20 20 20 20 20 20 20 20 20 2d 31 2c 20              -1, 
20040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
20060 0a 20 20 20 20 7b 20 22 53 51 4c 49 54 45 5f 4c  .    { "SQLITE_L
20070 49 4d 49 54 5f 54 4f 4f 42 49 47 22 2c 20 20 20  IMIT_TOOBIG",   
20080 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
20090 45 5f 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45  E_LIMIT_VARIABLE
200a0 5f 4e 55 4d 42 45 52 2b 31 20 20 20 20 7d 2c 0a  _NUMBER+1    },.
200b0 20 20 7d 3b 0a 20 20 69 6e 74 20 69 2c 20 69 64    };.  int i, id
200c0 3b 0a 20 20 69 6e 74 20 76 61 6c 3b 0a 20 20 63  ;.  int val;.  c
200d0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 49 64 3b 0a  onst char *zId;.
200e0 0a 20 20 69 66 28 20 6f 62 6a 63 21 3d 34 20 29  .  if( objc!=4 )
200f0 7b 0a 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  {.    Tcl_Append
20100 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 22  Result(interp, "
20110 77 72 6f 6e 67 20 23 20 61 72 67 73 3a 20 73 68  wrong # args: sh
20120 6f 75 6c 64 20 62 65 20 5c 22 22 2c 0a 20 20 20  ould be \"",.   
20130 20 20 20 20 20 54 63 6c 5f 47 65 74 53 74 72 69       Tcl_GetStri
20140 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30  ngFromObj(objv[0
20150 5d 2c 20 30 29 2c 20 22 20 44 42 20 49 44 20 56  ], 0), " DB ID V
20160 41 4c 55 45 22 2c 20 30 29 3b 0a 20 20 20 20 72  ALUE", 0);.    r
20170 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
20180 0a 20 20 7d 0a 20 20 69 66 28 20 67 65 74 44 62  .  }.  if( getDb
20190 50 6f 69 6e 74 65 72 28 69 6e 74 65 72 70 2c 20  Pointer(interp, 
201a0 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 28 6f 62  Tcl_GetString(ob
201b0 6a 76 5b 31 5d 29 2c 20 26 64 62 29 20 29 20 72  jv[1]), &db) ) r
201c0 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
201d0 0a 20 20 7a 49 64 20 3d 20 54 63 6c 5f 47 65 74  .  zId = Tcl_Get
201e0 53 74 72 69 6e 67 28 6f 62 6a 76 5b 32 5d 29 3b  String(objv[2]);
201f0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69  .  for(i=0; i<si
20200 7a 65 6f 66 28 61 49 64 29 2f 73 69 7a 65 6f 66  zeof(aId)/sizeof
20210 28 61 49 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a  (aId[0]); i++){.
20220 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
20230 49 64 2c 20 61 49 64 5b 69 5d 2e 7a 4e 61 6d 65  Id, aId[i].zName
20240 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 64  )==0 ){.      id
20250 20 3d 20 61 49 64 5b 69 5d 2e 69 64 3b 0a 20 20   = aId[i].id;.  
20260 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
20270 0a 20 20 7d 0a 20 20 69 66 28 20 69 3e 3d 73 69  .  }.  if( i>=si
20280 7a 65 6f 66 28 61 49 64 29 2f 73 69 7a 65 6f 66  zeof(aId)/sizeof
20290 28 61 49 64 5b 30 5d 29 20 29 7b 0a 20 20 20 20  (aId[0]) ){.    
202a0 54 63 6c 5f 41 70 70 65 6e 64 52 65 73 75 6c 74  Tcl_AppendResult
202b0 28 69 6e 74 65 72 70 2c 20 22 75 6e 6b 6e 6f 77  (interp, "unknow
202c0 6e 20 6c 69 6d 69 74 20 74 79 70 65 3a 20 22 2c  n limit type: ",
202d0 20 7a 49 64 2c 20 28 63 68 61 72 2a 29 30 29 3b   zId, (char*)0);
202e0 0a 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  .    return TCL_
202f0 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 69 66 28  ERROR;.  }.  if(
20300 20 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f   Tcl_GetIntFromO
20310 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b  bj(interp, objv[
20320 33 5d 2c 20 26 76 61 6c 29 20 29 20 72 65 74 75  3], &val) ) retu
20330 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20  rn TCL_ERROR;.  
20340 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 6c 69 6d  rc = sqlite3_lim
20350 69 74 28 64 62 2c 20 69 64 2c 20 76 61 6c 29 3b  it(db, id, val);
20360 0a 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73  .  Tcl_SetObjRes
20370 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f  ult(interp, Tcl_
20380 4e 65 77 49 6e 74 4f 62 6a 28 72 63 29 29 3b 0a  NewIntObj(rc));.
20390 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
203a0 20 20 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63    .}../*.** tclc
203b0 6d 64 3a 20 20 73 61 76 65 5f 70 72 6e 67 5f 73  md:  save_prng_s
203c0 74 61 74 65 0a 2a 2a 0a 2a 2a 20 53 61 76 65 20  tate.**.** Save 
203d0 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
203e0 20 70 73 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 6e   pseudo-random n
203f0 75 6d 62 65 72 20 67 65 6e 65 72 61 74 6f 72 2e  umber generator.
20400 0a 2a 2a 20 41 74 20 74 68 65 20 73 61 6d 65 20  .** At the same 
20410 74 69 6d 65 2c 20 76 65 72 69 66 79 20 74 68 61  time, verify tha
20420 74 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  t sqlite3_test_c
20430 6f 6e 74 72 6f 6c 20 77 6f 72 6b 73 20 65 76 65  ontrol works eve
20440 6e 20 77 68 65 6e 0a 2a 2a 20 63 61 6c 6c 65 64  n when.** called
20450 20 77 69 74 68 20 61 6e 20 6f 75 74 2d 6f 66 2d   with an out-of-
20460 72 61 6e 67 65 20 6f 70 63 6f 64 65 2e 0a 2a 2f  range opcode..*/
20470 0a 73 74 61 74 69 63 20 69 6e 74 20 73 61 76 65  .static int save
20480 5f 70 72 6e 67 5f 73 74 61 74 65 28 0a 20 20 43  _prng_state(.  C
20490 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74  lientData client
204a0 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74 65 72  Data, /* Pointer
204b0 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e 61 62   to sqlite3_enab
204c0 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f 6e 20  le_XXX function 
204d0 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72 70 20  */.  Tcl_Interp 
204e0 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a 20 54  *interp,    /* T
204f0 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72 65 74  he TCL interpret
20500 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  er that invoked 
20510 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a 2f 0a  this command */.
20520 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20 20 20    int objc,     
20530 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20540 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
20550 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f  */.  Tcl_Obj *CO
20560 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a 20 43  NST objv[]  /* C
20570 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e 74 73  ommand arguments
20580 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 72 63 20   */.){.  int rc 
20590 3d 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  = sqlite3_test_c
205a0 6f 6e 74 72 6f 6c 28 39 39 39 39 29 3b 0a 20 20  ontrol(9999);.  
205b0 61 73 73 65 72 74 28 20 72 63 3d 3d 30 20 29 3b  assert( rc==0 );
205c0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
205d0 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 2d 31 29  test_control(-1)
205e0 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
205f0 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 74  0 );.  sqlite3_t
20600 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
20610 54 45 5f 54 45 53 54 43 54 52 4c 5f 50 52 4e 47  TE_TESTCTRL_PRNG
20620 5f 53 41 56 45 29 3b 0a 20 20 72 65 74 75 72 6e  _SAVE);.  return
20630 20 54 43 4c 5f 4f 4b 3b 0a 7d 0a 2f 2a 0a 2a 2a   TCL_OK;.}./*.**
20640 20 74 63 6c 63 6d 64 3a 20 20 72 65 73 74 6f 72   tclcmd:  restor
20650 65 5f 70 72 6e 67 5f 73 74 61 74 65 0a 2a 2f 0a  e_prng_state.*/.
20660 73 74 61 74 69 63 20 69 6e 74 20 72 65 73 74 6f  static int resto
20670 72 65 5f 70 72 6e 67 5f 73 74 61 74 65 28 0a 20  re_prng_state(. 
20680 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65   ClientData clie
20690 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69 6e 74  ntData, /* Point
206a0 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f 65 6e  er to sqlite3_en
206b0 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74 69 6f  able_XXX functio
206c0 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74 65 72  n */.  Tcl_Inter
206d0 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20 2f 2a  p *interp,    /*
206e0 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   The TCL interpr
206f0 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f 6b 65  eter that invoke
20700 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 2a  d this command *
20710 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20 20 20  /.  int objc,   
20720 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
20730 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
20740 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a  s */.  Tcl_Obj *
20750 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20 2f 2a  CONST objv[]  /*
20760 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 6e   Command argumen
20770 74 73 20 2a 2f 0a 29 7b 0a 20 20 73 71 6c 69 74  ts */.){.  sqlit
20780 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
20790 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
207a0 50 52 4e 47 5f 52 45 53 54 4f 52 45 29 3b 0a 20  PRNG_RESTORE);. 
207b0 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
207c0 7d 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64 3a 20  }./*.** tclcmd: 
207d0 20 72 65 73 65 74 5f 70 72 6e 67 5f 73 74 61 74   reset_prng_stat
207e0 65 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  e.*/.static int 
207f0 72 65 73 65 74 5f 70 72 6e 67 5f 73 74 61 74 65  reset_prng_state
20800 28 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63  (.  ClientData c
20810 6c 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f  lientData, /* Po
20820 69 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  inter to sqlite3
20830 5f 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63  _enable_XXX func
20840 74 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e  tion */.  Tcl_In
20850 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20  terp *interp,   
20860 20 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65   /* The TCL inte
20870 72 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76  rpreter that inv
20880 6f 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e  oked this comman
20890 64 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  d */.  int objc,
208a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
208b0 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
208c0 65 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62  ents */.  Tcl_Ob
208d0 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20  j *CONST objv[] 
208e0 20 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75   /* Command argu
208f0 6d 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 73 71  ments */.){.  sq
20900 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
20910 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ol(SQLITE_TESTCT
20920 52 4c 5f 50 52 4e 47 5f 52 45 53 45 54 29 3b 0a  RL_PRNG_RESET);.
20930 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b    return TCL_OK;
20940 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c 63 6d 64  .}../*.** tclcmd
20950 3a 20 20 70 63 61 63 68 65 5f 73 74 61 74 73 0a  :  pcache_stats.
20960 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 74 65  */.static int te
20970 73 74 5f 70 63 61 63 68 65 5f 73 74 61 74 73 28  st_pcache_stats(
20980 0a 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c  .  ClientData cl
20990 69 65 6e 74 44 61 74 61 2c 20 2f 2a 20 50 6f 69  ientData, /* Poi
209a0 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 5f  nter to sqlite3_
209b0 65 6e 61 62 6c 65 5f 58 58 58 20 66 75 6e 63 74  enable_XXX funct
209c0 69 6f 6e 20 2a 2f 0a 20 20 54 63 6c 5f 49 6e 74  ion */.  Tcl_Int
209d0 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 20 20 20  erp *interp,    
209e0 2f 2a 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72  /* The TCL inter
209f0 70 72 65 74 65 72 20 74 68 61 74 20 69 6e 76 6f  preter that invo
20a00 6b 65 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  ked this command
20a10 20 2a 2f 0a 20 20 69 6e 74 20 6f 62 6a 63 2c 20   */.  int objc, 
20a20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20a30 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
20a40 6e 74 73 20 2a 2f 0a 20 20 54 63 6c 5f 4f 62 6a  nts */.  Tcl_Obj
20a50 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 20 20   *CONST objv[]  
20a60 2f 2a 20 43 6f 6d 6d 61 6e 64 20 61 72 67 75 6d  /* Command argum
20a70 65 6e 74 73 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74  ents */.){.  int
20a80 20 6e 4d 69 6e 3b 0a 20 20 69 6e 74 20 6e 4d 61   nMin;.  int nMa
20a90 78 3b 0a 20 20 69 6e 74 20 6e 43 75 72 72 65 6e  x;.  int nCurren
20aa0 74 3b 0a 20 20 69 6e 74 20 6e 52 65 63 79 63 6c  t;.  int nRecycl
20ab0 61 62 6c 65 3b 0a 20 20 54 63 6c 5f 4f 62 6a 20  able;.  Tcl_Obj 
20ac0 2a 70 52 65 74 3b 0a 0a 20 20 73 71 6c 69 74 65  *pRet;..  sqlite
20ad0 33 50 63 61 63 68 65 53 74 61 74 73 28 26 6e 43  3PcacheStats(&nC
20ae0 75 72 72 65 6e 74 2c 20 26 6e 4d 61 78 2c 20 26  urrent, &nMax, &
20af0 6e 4d 69 6e 2c 20 26 6e 52 65 63 79 63 6c 61 62  nMin, &nRecyclab
20b00 6c 65 29 3b 0a 0a 20 20 70 52 65 74 20 3d 20 54  le);..  pRet = T
20b10 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 0a 20 20 54  cl_NewObj();.  T
20b20 63 6c 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64  cl_ListObjAppend
20b30 45 6c 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20  Element(interp, 
20b40 70 52 65 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72  pRet, Tcl_NewStr
20b50 69 6e 67 4f 62 6a 28 22 63 75 72 72 65 6e 74 22  ingObj("current"
20b60 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69  , -1));.  Tcl_Li
20b70 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
20b80 6e 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74 2c  nt(interp, pRet,
20b90 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e   Tcl_NewIntObj(n
20ba0 43 75 72 72 65 6e 74 29 29 3b 0a 20 20 54 63 6c  Current));.  Tcl
20bb0 5f 4c 69 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c  _ListObjAppendEl
20bc0 65 6d 65 6e 74 28 69 6e 74 65 72 70 2c 20 70 52  ement(interp, pR
20bd0 65 74 2c 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e  et, Tcl_NewStrin
20be0 67 4f 62 6a 28 22 6d 61 78 22 2c 20 2d 31 29 29  gObj("max", -1))
20bf0 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41  ;.  Tcl_ListObjA
20c00 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74  ppendElement(int
20c10 65 72 70 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e  erp, pRet, Tcl_N
20c20 65 77 49 6e 74 4f 62 6a 28 6e 4d 61 78 29 29 3b  ewIntObj(nMax));
20c30 0a 20 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 41 70  .  Tcl_ListObjAp
20c40 70 65 6e 64 45 6c 65 6d 65 6e 74 28 69 6e 74 65  pendElement(inte
20c50 72 70 2c 20 70 52 65 74 2c 20 54 63 6c 5f 4e 65  rp, pRet, Tcl_Ne
20c60 77 53 74 72 69 6e 67 4f 62 6a 28 22 6d 69 6e 22  wStringObj("min"
20c70 2c 20 2d 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69  , -1));.  Tcl_Li
20c80 73 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65  stObjAppendEleme
20c90 6e 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74 2c  nt(interp, pRet,
20ca0 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e   Tcl_NewIntObj(n
20cb0 4d 69 6e 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73  Min));.  Tcl_Lis
20cc0 74 4f 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e  tObjAppendElemen
20cd0 74 28 69 6e 74 65 72 70 2c 20 70 52 65 74 2c 20  t(interp, pRet, 
20ce0 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a  Tcl_NewStringObj
20cf0 28 22 72 65 63 79 63 6c 61 62 6c 65 22 2c 20 2d  ("recyclable", -
20d00 31 29 29 3b 0a 20 20 54 63 6c 5f 4c 69 73 74 4f  1));.  Tcl_ListO
20d10 62 6a 41 70 70 65 6e 64 45 6c 65 6d 65 6e 74 28  bjAppendElement(
20d20 69 6e 74 65 72 70 2c 20 70 52 65 74 2c 20 54 63  interp, pRet, Tc
20d30 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 6e 52 65 63  l_NewIntObj(nRec
20d40 79 63 6c 61 62 6c 65 29 29 3b 0a 0a 20 20 54 63  yclable));..  Tc
20d50 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69  l_SetObjResult(i
20d60 6e 74 65 72 70 2c 20 70 52 65 74 29 3b 0a 0a 20  nterp, pRet);.. 
20d70 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
20d80 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 67 69 73 74  }.../*.** Regist
20d90 65 72 20 63 6f 6d 6d 61 6e 64 73 20 77 69 74 68  er commands with
20da0 20 74 68 65 20 54 43 4c 20 69 6e 74 65 72 70 72   the TCL interpr
20db0 65 74 65 72 2e 0a 2a 2f 0a 69 6e 74 20 53 71 6c  eter..*/.int Sql
20dc0 69 74 65 74 65 73 74 31 5f 49 6e 69 74 28 54 63  itetest1_Init(Tc
20dd0 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
20de0 29 7b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  ){.  extern int 
20df0 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
20e00 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69  ount;.  extern i
20e10 6e 74 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  nt sqlite3_inter
20e20 72 75 70 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78  rupt_count;.  ex
20e30 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
20e40 5f 6f 70 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74  _open_file_count
20e50 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
20e60 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
20e70 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  t;.  extern int 
20e80 73 71 6c 69 74 65 33 5f 63 75 72 72 65 6e 74 5f  sqlite3_current_
20e90 74 69 6d 65 3b 0a 20 20 65 78 74 65 72 6e 20 69  time;.  extern i
20ea0 6e 74 20 73 71 6c 69 74 65 33 5f 68 6f 73 74 69  nt sqlite3_hosti
20eb0 64 5f 6e 75 6d 3b 0a 20 20 65 78 74 65 72 6e 20  d_num;.  extern 
20ec0 69 6e 74 20 73 71 6c 69 74 65 33 5f 6d 61 78 5f  int sqlite3_max_
20ed0 62 6c 6f 62 73 69 7a 65 3b 0a 20 20 65 78 74 65  blobsize;.  exte
20ee0 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 42 74  rn int sqlite3Bt
20ef0 72 65 65 53 68 61 72 65 64 43 61 63 68 65 52 65  reeSharedCacheRe
20f00 70 6f 72 74 28 76 6f 69 64 2a 2c 0a 20 20 20 20  port(void*,.    
20f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f30 20 20 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70        Tcl_Interp
20f40 2a 2c 69 6e 74 2c 54 63 6c 5f 4f 62 6a 2a 43 4f  *,int,Tcl_Obj*CO
20f50 4e 53 54 2a 29 3b 0a 20 20 73 74 61 74 69 63 20  NST*);.  static 
20f60 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 63 68  struct {.     ch
20f70 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20  ar *zName;.     
20f80 54 63 6c 5f 43 6d 64 50 72 6f 63 20 2a 78 50 72  Tcl_CmdProc *xPr
20f90 6f 63 3b 0a 20 20 7d 20 61 43 6d 64 5b 5d 20 3d  oc;.  } aCmd[] =
20fa0 20 7b 0a 20 20 20 20 20 7b 20 22 64 62 5f 65 6e   {.     { "db_en
20fb0 74 65 72 22 2c 20 20 20 20 20 20 20 20 20 20 20  ter",           
20fc0 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
20fd0 43 6d 64 50 72 6f 63 2a 29 64 62 5f 65 6e 74 65  CmdProc*)db_ente
20fe0 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
20ff0 7d 2c 0a 20 20 20 20 20 7b 20 22 64 62 5f 6c 65  },.     { "db_le
21000 61 76 65 22 2c 20 20 20 20 20 20 20 20 20 20 20  ave",           
21010 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
21020 43 6d 64 50 72 6f 63 2a 29 64 62 5f 6c 65 61 76  CmdProc*)db_leav
21030 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
21040 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21050 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 22 2c  e3_mprintf_int",
21060 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
21070 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
21080 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 20 20 20 20  _mprintf_int    
21090 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
210a0 65 33 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34  e3_mprintf_int64
210b0 22 2c 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f  ",         (Tcl_
210c0 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
210d0 5f 6d 70 72 69 6e 74 66 5f 69 6e 74 36 34 20 20  _mprintf_int64  
210e0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
210f0 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 22 2c  e3_mprintf_str",
21100 20 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f             (Tcl_
21110 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
21120 5f 6d 70 72 69 6e 74 66 5f 73 74 72 20 20 20 20  _mprintf_str    
21130 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21140 65 33 5f 73 6e 70 72 69 6e 74 66 5f 73 74 72 22  e3_snprintf_str"
21150 2c 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f  ,          (Tcl_
21160 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
21170 5f 73 6e 70 72 69 6e 74 66 5f 73 74 72 20 20 20  _snprintf_str   
21180 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21190 65 33 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e  e3_mprintf_stron
211a0 6c 79 22 2c 20 20 20 20 20 20 20 28 54 63 6c 5f  ly",       (Tcl_
211b0 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
211c0 5f 6d 70 72 69 6e 74 66 5f 73 74 72 6f 6e 6c 79  _mprintf_stronly
211d0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
211e0 65 33 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c  e3_mprintf_doubl
211f0 65 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  e",        (Tcl_
21200 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
21210 5f 6d 70 72 69 6e 74 66 5f 64 6f 75 62 6c 65 20  _mprintf_double 
21220 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21230 65 33 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65  e3_mprintf_scale
21240 64 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  d",        (Tcl_
21250 43 6d 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33  CmdProc*)sqlite3
21260 5f 6d 70 72 69 6e 74 66 5f 73 63 61 6c 65 64 20  _mprintf_scaled 
21270 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21280 65 33 5f 6d 70 72 69 6e 74 66 5f 68 65 78 64 6f  e3_mprintf_hexdo
21290 75 62 6c 65 22 2c 20 20 20 28 54 63 6c 5f 43 6d  uble",   (Tcl_Cm
212a0 64 50 72 6f 63 2a 29 73 71 6c 69 74 65 33 5f 6d  dProc*)sqlite3_m
212b0 70 72 69 6e 74 66 5f 68 65 78 64 6f 75 62 6c 65  printf_hexdouble
212c0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
212d0 65 33 5f 6d 70 72 69 6e 74 66 5f 7a 5f 74 65 73  e3_mprintf_z_tes
212e0 74 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  t",        (Tcl_
212f0 43 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6d 70  CmdProc*)test_mp
21300 72 69 6e 74 66 5f 7a 20 20 20 20 20 20 20 20 7d  rintf_z        }
21310 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
21320 33 5f 6d 70 72 69 6e 74 66 5f 6e 5f 74 65 73 74  3_mprintf_n_test
21330 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43  ",        (Tcl_C
21340 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 6d 70 72  mdProc*)test_mpr
21350 69 6e 74 66 5f 6e 20 20 20 20 20 20 20 20 7d 2c  intf_n        },
21360 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
21370 5f 73 6e 70 72 69 6e 74 66 5f 69 6e 74 22 2c 20  _snprintf_int", 
21380 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
21390 64 50 72 6f 63 2a 29 74 65 73 74 5f 73 6e 70 72  dProc*)test_snpr
213a0 69 6e 74 66 5f 69 6e 74 20 20 20 20 20 7d 2c 0a  intf_int     },.
213b0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
213c0 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
213d0 64 22 2c 20 20 20 20 20 28 54 63 6c 5f 43 6d 64  d",     (Tcl_Cmd
213e0 50 72 6f 63 2a 29 74 65 73 74 5f 6c 61 73 74 5f  Proc*)test_last_
213f0 72 6f 77 69 64 20 20 20 20 20 20 20 7d 2c 0a 20  rowid       },. 
21400 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65      { "sqlite3_e
21410 78 65 63 5f 70 72 69 6e 74 66 22 2c 20 20 20 20  xec_printf",    
21420 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
21430 72 6f 63 2a 29 74 65 73 74 5f 65 78 65 63 5f 70  roc*)test_exec_p
21440 72 69 6e 74 66 20 20 20 20 20 20 7d 2c 0a 20 20  rintf      },.  
21450 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 78     { "sqlite3_ex
21460 65 63 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ec",            
21470 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
21480 6f 63 2a 29 74 65 73 74 5f 65 78 65 63 20 20 20  oc*)test_exec   
21490 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20            },.   
214a0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 78 65    { "sqlite3_exe
214b0 63 5f 6e 72 22 2c 20 20 20 20 20 20 20 20 20 20  c_nr",          
214c0 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
214d0 63 2a 29 74 65 73 74 5f 65 78 65 63 5f 6e 72 20  c*)test_exec_nr 
214e0 20 20 20 20 20 20 20 20 20 7d 2c 0a 23 69 66 6e           },.#ifn
214f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21500 47 45 54 5f 54 41 42 4c 45 0a 20 20 20 20 20 7b  GET_TABLE.     {
21510 20 22 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61   "sqlite3_get_ta
21520 62 6c 65 5f 70 72 69 6e 74 66 22 2c 20 20 20 20  ble_printf",    
21530 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
21540 74 65 73 74 5f 67 65 74 5f 74 61 62 6c 65 5f 70  test_get_table_p
21550 72 69 6e 74 66 20 7d 2c 0a 23 65 6e 64 69 66 0a  rintf },.#endif.
21560 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
21570 63 6c 6f 73 65 22 2c 20 20 20 20 20 20 20 20 20  close",         
21580 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
21590 50 72 6f 63 2a 29 73 71 6c 69 74 65 5f 74 65 73  Proc*)sqlite_tes
215a0 74 5f 63 6c 6f 73 65 20 20 20 20 20 7d 2c 0a 20  t_close     },. 
215b0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
215c0 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 22 2c  reate_function",
215d0 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50         (Tcl_CmdP
215e0 72 6f 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65  roc*)test_create
215f0 5f 66 75 6e 63 74 69 6f 6e 20 20 7d 2c 0a 20 20  _function  },.  
21600 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 72     { "sqlite3_cr
21610 65 61 74 65 5f 61 67 67 72 65 67 61 74 65 22 2c  eate_aggregate",
21620 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72        (Tcl_CmdPr
21630 6f 63 2a 29 74 65 73 74 5f 63 72 65 61 74 65 5f  oc*)test_create_
21640 61 67 67 72 65 67 61 74 65 20 7d 2c 0a 20 20 20  aggregate },.   
21650 20 20 7b 20 22 73 71 6c 69 74 65 5f 72 65 67 69    { "sqlite_regi
21660 73 74 65 72 5f 74 65 73 74 5f 66 75 6e 63 74 69  ster_test_functi
21670 6f 6e 22 2c 20 28 54 63 6c 5f 43 6d 64 50 72 6f  on", (Tcl_CmdPro
21680 63 2a 29 74 65 73 74 5f 72 65 67 69 73 74 65 72  c*)test_register
21690 5f 66 75 6e 63 20 20 20 20 7d 2c 0a 20 20 20 20  _func    },.    
216a0 20 7b 20 22 73 71 6c 69 74 65 5f 61 62 6f 72 74   { "sqlite_abort
216b0 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
216c0 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63      (Tcl_CmdProc
216d0 2a 29 73 71 6c 69 74 65 5f 61 62 6f 72 74 20 20  *)sqlite_abort  
216e0 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
216f0 7b 20 22 73 71 6c 69 74 65 5f 62 69 6e 64 22 2c  { "sqlite_bind",
21700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21710 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a     (Tcl_CmdProc*
21720 29 74 65 73 74 5f 62 69 6e 64 20 20 20 20 20 20  )test_bind      
21730 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b         },.     {
21740 20 22 62 72 65 61 6b 70 6f 69 6e 74 22 2c 20 20   "breakpoint",  
21750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21760 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29    (Tcl_CmdProc*)
21770 74 65 73 74 5f 62 72 65 61 6b 70 6f 69 6e 74 20  test_breakpoint 
21780 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
21790 22 73 71 6c 69 74 65 33 5f 6b 65 79 22 2c 20 20  "sqlite3_key",  
217a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217b0 20 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74   (Tcl_CmdProc*)t
217c0 65 73 74 5f 6b 65 79 20 20 20 20 20 20 20 20 20  est_key         
217d0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22       },.     { "
217e0 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 22 2c 20  sqlite3_rekey", 
217f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21800 28 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65  (Tcl_CmdProc*)te
21810 73 74 5f 72 65 6b 65 79 20 20 20 20 20 20 20 20  st_rekey        
21820 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73      },.     { "s
21830 71 6c 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 22  qlite_set_magic"
21840 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  ,              (
21850 54 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 73 71 6c  Tcl_CmdProc*)sql
21860 69 74 65 5f 73 65 74 5f 6d 61 67 69 63 20 20 20  ite_set_magic   
21870 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71     },.     { "sq
21880 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 22  lite3_interrupt"
21890 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 28 54  ,             (T
218a0 63 6c 5f 43 6d 64 50 72 6f 63 2a 29 74 65 73 74  cl_CmdProc*)test
218b0 5f 69 6e 74 65 72 72 75 70 74 20 20 20 20 20 20  _interrupt      
218c0 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
218d0 69 74 65 5f 64 65 6c 65 74 65 5f 66 75 6e 63 74  ite_delete_funct
218e0 69 6f 6e 22 2c 20 20 20 20 20 20 20 20 28 54 63  ion",        (Tc
218f0 6c 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65 74  l_CmdProc*)delet
21900 65 5f 66 75 6e 63 74 69 6f 6e 20 20 20 20 20 20  e_function      
21910 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
21920 74 65 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c 61 74  te_delete_collat
21930 69 6f 6e 22 2c 20 20 20 20 20 20 20 28 54 63 6c  ion",       (Tcl
21940 5f 43 6d 64 50 72 6f 63 2a 29 64 65 6c 65 74 65  _CmdProc*)delete
21950 5f 63 6f 6c 6c 61 74 69 6f 6e 20 20 20 20 20 20  _collation      
21960 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21970 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69  e3_get_autocommi
21980 74 22 2c 20 20 20 20 20 20 20 20 28 54 63 6c 5f  t",        (Tcl_
21990 43 6d 64 50 72 6f 63 2a 29 67 65 74 5f 61 75 74  CmdProc*)get_aut
219a0 6f 63 6f 6d 6d 69 74 20 20 20 20 20 20 20 20 7d  ocommit        }
219b0 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
219c0 33 5f 73 74 61 63 6b 5f 75 73 65 64 22 2c 20 20  3_stack_used",  
219d0 20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43            (Tcl_C
219e0 6d 64 50 72 6f 63 2a 29 74 65 73 74 5f 73 74 61  mdProc*)test_sta
219f0 63 6b 5f 75 73 65 64 20 20 20 20 20 20 20 7d 2c  ck_used       },
21a00 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
21a10 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 22 2c 20  _busy_timeout", 
21a20 20 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d           (Tcl_Cm
21a30 64 50 72 6f 63 2a 29 74 65 73 74 5f 62 75 73 79  dProc*)test_busy
21a40 5f 74 69 6d 65 6f 75 74 20 20 20 20 20 7d 2c 0a  _timeout     },.
21a50 20 20 20 20 20 7b 20 22 70 72 69 6e 74 66 22 2c       { "printf",
21a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a70 20 20 20 20 20 20 20 20 28 54 63 6c 5f 43 6d 64          (Tcl_Cmd
21a80 50 72 6f 63 2a 29 74 65 73 74 5f 70 72 69 6e 74  Proc*)test_print
21a90 66 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a 20  f           },. 
21aa0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 49 6f      { "sqlite3Io
21ab0 54 72 61 63 65 22 2c 20 20 20 20 20 20 20 20 20  Trace",         
21ac0 20 20 20 20 20 28 54 63 6c 5f 43 6d 64 50 72 6f       (Tcl_CmdPro
21ad0 63 2a 29 74 65 73 74 5f 69 6f 5f 74 72 61 63 65  c*)test_io_trace
21ae0 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 7d 3b           },.  };
21af0 0a 20 20 73 74 61 74 69 63 20 73 74 72 75 63 74  .  static struct
21b00 20 7b 0a 20 20 20 20 20 63 68 61 72 20 2a 7a 4e   {.     char *zN
21b10 61 6d 65 3b 0a 20 20 20 20 20 54 63 6c 5f 4f 62  ame;.     Tcl_Ob
21b20 6a 43 6d 64 50 72 6f 63 20 2a 78 50 72 6f 63 3b  jCmdProc *xProc;
21b30 0a 20 20 20 20 20 76 6f 69 64 20 2a 63 6c 69 65  .     void *clie
21b40 6e 74 44 61 74 61 3b 0a 20 20 7d 20 61 4f 62 6a  ntData;.  } aObj
21b50 43 6d 64 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 7b  Cmd[] = {.     {
21b60 20 22 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63   "sqlite3_connec
21b70 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 22 2c 20 20  tion_pointer",  
21b80 20 20 67 65 74 5f 73 71 6c 69 74 65 5f 70 6f 69    get_sqlite_poi
21b90 6e 74 65 72 2c 20 30 20 7d 2c 0a 20 20 20 20 20  nter, 0 },.     
21ba0 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  { "sqlite3_bind_
21bb0 69 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 20  int",           
21bc0 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 69 6e 74     test_bind_int
21bd0 2c 20 20 20 20 20 20 30 20 7d 2c 0a 20 20 20 20  ,      0 },.    
21be0 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64   { "sqlite3_bind
21bf0 5f 7a 65 72 6f 62 6c 6f 62 22 2c 20 20 20 20 20  _zeroblob",     
21c00 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 7a 65      test_bind_ze
21c10 72 6f 62 6c 6f 62 2c 20 30 20 7d 2c 0a 20 20 20  roblob, 0 },.   
21c20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69 6e    { "sqlite3_bin
21c30 64 5f 69 6e 74 36 34 22 2c 20 20 20 20 20 20 20  d_int64",       
21c40 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f 69       test_bind_i
21c50 6e 74 36 34 2c 20 20 20 20 30 20 7d 2c 0a 20 20  nt64,    0 },.  
21c60 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62 69     { "sqlite3_bi
21c70 6e 64 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20 20  nd_double",     
21c80 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64 5f        test_bind_
21c90 64 6f 75 62 6c 65 2c 20 20 20 30 20 7d 2c 0a 20  double,   0 },. 
21ca0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 62      { "sqlite3_b
21cb0 69 6e 64 5f 6e 75 6c 6c 22 2c 20 20 20 20 20 20  ind_null",      
21cc0 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e 64         test_bind
21cd0 5f 6e 75 6c 6c 20 20 20 20 20 2c 30 20 7d 2c 0a  _null     ,0 },.
21ce0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
21cf0 62 69 6e 64 5f 74 65 78 74 22 2c 20 20 20 20 20  bind_text",     
21d00 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69 6e          test_bin
21d10 64 5f 74 65 78 74 20 20 20 20 20 2c 30 20 7d 2c  d_text     ,0 },
21d20 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
21d30 5f 62 69 6e 64 5f 74 65 78 74 31 36 22 2c 20 20  _bind_text16",  
21d40 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62 69           test_bi
21d50 6e 64 5f 74 65 78 74 31 36 20 20 20 2c 30 20 7d  nd_text16   ,0 }
21d60 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ,.     { "sqlite
21d70 33 5f 62 69 6e 64 5f 62 6c 6f 62 22 2c 20 20 20  3_bind_blob",   
21d80 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 62            test_b
21d90 69 6e 64 5f 62 6c 6f 62 20 20 20 20 20 2c 30 20  ind_blob     ,0 
21da0 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
21db0 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
21dc0 72 5f 63 6f 75 6e 74 22 2c 20 20 74 65 73 74 5f  r_count",  test_
21dd0 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63  bind_parameter_c
21de0 6f 75 6e 74 2c 20 30 7d 2c 0a 20 20 20 20 20 7b  ount, 0},.     {
21df0 20 22 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70   "sqlite3_bind_p
21e00 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 22 2c 20  arameter_name", 
21e10 20 20 74 65 73 74 5f 62 69 6e 64 5f 70 61 72 61    test_bind_para
21e20 6d 65 74 65 72 5f 6e 61 6d 65 2c 20 20 30 7d 2c  meter_name,  0},
21e30 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
21e40 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
21e50 69 6e 64 65 78 22 2c 20 20 74 65 73 74 5f 62 69  index",  test_bi
21e60 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 69 6e 64  nd_parameter_ind
21e70 65 78 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22  ex, 0},.     { "
21e80 73 71 6c 69 74 65 33 5f 63 6c 65 61 72 5f 62 69  sqlite3_clear_bi
21e90 6e 64 69 6e 67 73 22 2c 20 20 20 20 20 20 20 20  ndings",        
21ea0 74 65 73 74 5f 63 6c 65 61 72 5f 62 69 6e 64 69  test_clear_bindi
21eb0 6e 67 73 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20  ngs, 0},.     { 
21ec0 22 73 71 6c 69 74 65 33 5f 73 6c 65 65 70 22 2c  "sqlite3_sleep",
21ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ee0 20 74 65 73 74 5f 73 6c 65 65 70 2c 20 20 20 20   test_sleep,    
21ef0 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 7b        0},.     {
21f00 20 22 73 71 6c 69 74 65 33 5f 65 72 72 63 6f 64   "sqlite3_errcod
21f10 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  e",             
21f20 20 20 74 65 73 74 5f 65 72 72 63 6f 64 65 20 20    test_errcode  
21f30 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
21f40 7b 20 22 73 71 6c 69 74 65 33 5f 65 78 74 65 6e  { "sqlite3_exten
21f50 64 65 64 5f 65 72 72 63 6f 64 65 22 2c 20 20 20  ded_errcode",   
21f60 20 20 20 74 65 73 74 5f 65 78 5f 65 72 72 63 6f     test_ex_errco
21f70 64 65 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20  de    ,0 },.    
21f80 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72 6d   { "sqlite3_errm
21f90 73 67 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  sg",            
21fa0 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67 20      test_errmsg 
21fb0 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20         ,0 },.   
21fc0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 65 72 72    { "sqlite3_err
21fd0 6d 73 67 31 36 22 2c 20 20 20 20 20 20 20 20 20  msg16",         
21fe0 20 20 20 20 20 74 65 73 74 5f 65 72 72 6d 73 67       test_errmsg
21ff0 31 36 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20  16      ,0 },.  
22000 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f 70     { "sqlite3_op
22010 65 6e 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  en",            
22020 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65 6e 20        test_open 
22030 20 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20           ,0 },. 
22040 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6f      { "sqlite3_o
22050 70 65 6e 31 36 22 2c 20 20 20 20 20 20 20 20 20  pen16",         
22060 20 20 20 20 20 20 20 74 65 73 74 5f 6f 70 65 6e         test_open
22070 31 36 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a  16        ,0 },.
22080 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
22090 63 6f 6d 70 6c 65 74 65 31 36 22 2c 20 20 20 20  complete16",    
220a0 20 20 20 20 20 20 20 20 74 65 73 74 5f 63 6f 6d          test_com
220b0 70 6c 65 74 65 31 36 20 20 20 20 2c 30 20 7d 2c  plete16    ,0 },
220c0 0a 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65  ..     { "sqlite
220d0 33 5f 70 72 65 70 61 72 65 22 2c 20 20 20 20 20  3_prepare",     
220e0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f 70            test_p
220f0 72 65 70 61 72 65 20 20 20 20 20 20 20 2c 30 20  repare       ,0 
22100 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  },.     { "sqlit
22110 65 33 5f 70 72 65 70 61 72 65 31 36 22 2c 20 20  e3_prepare16",  
22120 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 5f             test_
22130 70 72 65 70 61 72 65 31 36 20 20 20 20 20 2c 30  prepare16     ,0
22140 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c 69   },.     { "sqli
22150 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 22 2c  te3_prepare_v2",
22160 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
22170 5f 70 72 65 70 61 72 65 5f 76 32 20 20 20 20 2c  _prepare_v2    ,
22180 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c  0 },.     { "sql
22190 69 74 65 33 5f 70 72 65 70 61 72 65 5f 74 6b 74  ite3_prepare_tkt
221a0 33 31 33 34 22 2c 20 20 20 20 20 20 20 74 65 73  3134",       tes
221b0 74 5f 70 72 65 70 61 72 65 5f 74 6b 74 33 31 33  t_prepare_tkt313
221c0 34 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73  4, 0},.     { "s
221d0 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 31 36  qlite3_prepare16
221e0 5f 76 32 22 2c 20 20 20 20 20 20 20 20 20 20 74  _v2",          t
221f0 65 73 74 5f 70 72 65 70 61 72 65 31 36 5f 76 32  est_prepare16_v2
22200 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
22210 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
22220 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
22230 74 65 73 74 5f 66 69 6e 61 6c 69 7a 65 20 20 20  test_finalize   
22240 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
22250 22 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 73 74  "sqlite3_stmt_st
22260 61 74 75 73 22 2c 20 20 20 20 20 20 20 20 20 20  atus",          
22270 20 74 65 73 74 5f 73 74 6d 74 5f 73 74 61 74 75   test_stmt_statu
22280 73 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b  s   ,0 },.     {
22290 20 22 73 71 6c 69 74 65 33 5f 72 65 73 65 74 22   "sqlite3_reset"
222a0 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
222b0 20 20 74 65 73 74 5f 72 65 73 65 74 20 20 20 20    test_reset    
222c0 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20       ,0 },.     
222d0 7b 20 22 73 71 6c 69 74 65 33 5f 65 78 70 69 72  { "sqlite3_expir
222e0 65 64 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ed",            
222f0 20 20 20 74 65 73 74 5f 65 78 70 69 72 65 64 20     test_expired 
22300 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20        ,0 },.    
22310 20 7b 20 22 73 71 6c 69 74 65 33 5f 74 72 61 6e   { "sqlite3_tran
22320 73 66 65 72 5f 62 69 6e 64 69 6e 67 73 22 2c 20  sfer_bindings", 
22330 20 20 20 20 74 65 73 74 5f 74 72 61 6e 73 66 65      test_transfe
22340 72 5f 62 69 6e 64 20 2c 30 20 7d 2c 0a 20 20 20  r_bind ,0 },.   
22350 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 68 61    { "sqlite3_cha
22360 6e 67 65 73 22 2c 20 20 20 20 20 20 20 20 20 20  nges",          
22370 20 20 20 20 20 74 65 73 74 5f 63 68 61 6e 67 65       test_change
22380 73 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20 20  s       ,0 },.  
22390 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 73 74     { "sqlite3_st
223a0 65 70 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ep",            
223b0 20 20 20 20 20 20 74 65 73 74 5f 73 74 65 70 20        test_step 
223c0 20 20 20 20 20 20 20 20 20 2c 30 20 7d 2c 0a 20           ,0 },. 
223d0 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 6e      { "sqlite3_n
223e0 65 78 74 5f 73 74 6d 74 22 2c 20 20 20 20 20 20  ext_stmt",      
223f0 20 20 20 20 20 20 20 74 65 73 74 5f 6e 65 78 74         test_next
22400 5f 73 74 6d 74 20 20 20 20 20 2c 30 20 7d 2c 0a  _stmt     ,0 },.
22410 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
22420 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 22  _release_memory"
22430 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f 72 65  ,        test_re
22440 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 2c 20 20 20  lease_memory,   
22450 20 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71    0},.     { "sq
22460 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f  lite3_soft_heap_
22470 6c 69 6d 69 74 22 2c 20 20 20 20 20 20 20 74 65  limit",       te
22480 73 74 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  st_soft_heap_lim
22490 69 74 2c 20 20 20 20 30 7d 2c 0a 20 20 20 20 20  it,    0},.     
224a0 7b 20 22 73 71 6c 69 74 65 33 5f 74 68 72 65 61  { "sqlite3_threa
224b0 64 5f 63 6c 65 61 6e 75 70 22 2c 20 20 20 20 20  d_cleanup",     
224c0 20 20 20 74 65 73 74 5f 74 68 72 65 61 64 5f 63     test_thread_c
224d0 6c 65 61 6e 75 70 2c 20 20 20 20 20 30 7d 2c 0a  leanup,     0},.
224e0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
224f0 70 61 67 65 72 5f 72 65 66 63 6f 75 6e 74 73 22  pager_refcounts"
22500 2c 20 20 20 20 20 20 20 74 65 73 74 5f 70 61 67  ,       test_pag
22510 65 72 5f 72 65 66 63 6f 75 6e 74 73 2c 20 20 20  er_refcounts,   
22520 20 30 7d 2c 0a 0a 20 20 20 20 20 7b 20 22 73 71   0},..     { "sq
22530 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e  lite3_load_exten
22540 73 69 6f 6e 22 2c 20 20 20 20 20 20 20 20 74 65  sion",        te
22550 73 74 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  st_load_extensio
22560 6e 2c 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20  n,     0},.     
22570 7b 20 22 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  { "sqlite3_enabl
22580 65 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e_load_extension
22590 22 2c 20 74 65 73 74 5f 65 6e 61 62 6c 65 5f 6c  ", test_enable_l
225a0 6f 61 64 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  oad,        0},.
225b0 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
225c0 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f  extended_result_
225d0 63 6f 64 65 73 22 2c 20 74 65 73 74 5f 65 78 74  codes", test_ext
225e0 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f 63 6f 64  ended_result_cod
225f0 65 73 2c 20 30 7d 2c 0a 20 20 20 20 20 7b 20 22  es, 0},.     { "
22600 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 22 2c 20  sqlite3_limit", 
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22620 74 65 73 74 5f 6c 69 6d 69 74 2c 20 20 20 20 20  test_limit,     
22630 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 0a              0},.
22640 0a 20 20 20 20 20 7b 20 22 73 61 76 65 5f 70 72  .     { "save_pr
22650 6e 67 5f 73 74 61 74 65 22 2c 20 20 20 20 20 20  ng_state",      
22660 20 20 20 20 20 20 20 20 20 73 61 76 65 5f 70 72           save_pr
22670 6e 67 5f 73 74 61 74 65 2c 20 20 20 20 30 20 7d  ng_state,    0 }
22680 2c 0a 20 20 20 20 20 7b 20 22 72 65 73 74 6f 72  ,.     { "restor
22690 65 5f 70 72 6e 67 5f 73 74 61 74 65 22 2c 20 20  e_prng_state",  
226a0 20 20 20 20 20 20 20 20 20 20 72 65 73 74 6f 72            restor
226b0 65 5f 70 72 6e 67 5f 73 74 61 74 65 2c 20 30 20  e_prng_state, 0 
226c0 7d 2c 0a 20 20 20 20 20 7b 20 22 72 65 73 65 74  },.     { "reset
226d0 5f 70 72 6e 67 5f 73 74 61 74 65 22 2c 20 20 20  _prng_state",   
226e0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 65 74             reset
226f0 5f 70 72 6e 67 5f 73 74 61 74 65 2c 20 20 20 30  _prng_state,   0
22700 20 7d 2c 0a 0a 20 20 20 20 20 2f 2a 20 73 71 6c   },..     /* sql
22710 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 2a 28 29 20  ite3_column_*() 
22720 41 50 49 20 2a 2f 0a 20 20 20 20 20 7b 20 22 73  API */.     { "s
22730 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 63 6f  qlite3_column_co
22740 75 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 74  unt",          t
22750 65 73 74 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74  est_column_count
22760 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22    ,0 },.     { "
22770 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 63 6f 75  sqlite3_data_cou
22780 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  nt",            
22790 74 65 73 74 5f 64 61 74 61 5f 63 6f 75 6e 74 20  test_data_count 
227a0 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b 20     ,0 },.     { 
227b0 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  "sqlite3_column_
227c0 74 79 70 65 22 2c 20 20 20 20 20 20 20 20 20 20  type",          
227d0 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 74 79 70   test_column_typ
227e0 65 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20 7b  e   ,0 },.     {
227f0 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
22800 5f 62 6c 6f 62 22 2c 20 20 20 20 20 20 20 20 20  _blob",         
22810 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 62 6c    test_column_bl
22820 6f 62 20 20 20 2c 30 20 7d 2c 0a 20 20 20 20 20  ob   ,0 },.     
22830 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
22840 6e 5f 64 6f 75 62 6c 65 22 2c 20 20 20 20 20 20  n_double",      
22850 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f 64     test_column_d
22860 6f 75 62 6c 65 20 2c 30 20 7d 2c 0a 20 20 20 20  ouble ,0 },.    
22870 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
22880 6d 6e 5f 69 6e 74 36 34 22 2c 20 20 20 20 20 20  mn_int64",      
22890 20 20 20 20 74 65 73 74 5f 63 6f 6c 75 6d 6e 5f      test_column_
228a0 69 6e 74 36 34 20 20 2c 30 20 7d 2c 0a 20 20 20  int64  ,0 },.   
228b0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
228c0 75 6d 6e 5f 74 65 78 74 22 2c 20 20 20 74 65 73  umn_text",   tes
228d0 74 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 28 76  t_stmt_utf8,  (v
228e0 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c  oid*)sqlite3_col
228f0 75 6d 6e 5f 74 65 78 74 20 7d 2c 0a 20 20 20 20  umn_text },.    
22900 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75   { "sqlite3_colu
22910 6d 6e 5f 6e 61 6d 65 22 2c 20 20 20 74 65 73 74  mn_name",   test
22920 5f 73 74 6d 74 5f 75 74 66 38 2c 20 20 28 76 6f  _stmt_utf8,  (vo
22930 69 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  id*)sqlite3_colu
22940 6d 6e 5f 6e 61 6d 65 20 7d 2c 0a 20 20 20 20 20  mn_name },.     
22950 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  { "sqlite3_colum
22960 6e 5f 69 6e 74 22 2c 20 20 20 20 74 65 73 74 5f  n_int",    test_
22970 73 74 6d 74 5f 69 6e 74 2c 20 20 20 28 76 6f 69  stmt_int,   (voi
22980 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  d*)sqlite3_colum
22990 6e 5f 69 6e 74 20 20 7d 2c 0a 20 20 20 20 20 7b  n_int  },.     {
229a0 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e   "sqlite3_column
229b0 5f 62 79 74 65 73 22 2c 20 20 74 65 73 74 5f 73  _bytes",  test_s
229c0 74 6d 74 5f 69 6e 74 2c 20 20 20 28 76 6f 69 64  tmt_int,   (void
229d0 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  *)sqlite3_column
229e0 5f 62 79 74 65 73 7d 2c 0a 23 69 66 6e 64 65 66  _bytes},.#ifndef
229f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 43   SQLITE_OMIT_DEC
22a00 4c 54 59 50 45 0a 20 20 20 20 20 7b 20 22 73 71  LTYPE.     { "sq
22a10 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
22a20 6c 74 79 70 65 22 2c 74 65 73 74 5f 73 74 6d 74  ltype",test_stmt
22a30 5f 75 74 66 38 2c 28 76 6f 69 64 2a 29 73 71 6c  _utf8,(void*)sql
22a40 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  ite3_column_decl
22a50 74 79 70 65 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  type},.#endif.#i
22a60 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
22a70 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41  LE_COLUMN_METADA
22a80 54 41 0a 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f  TA.{ "sqlite3_co
22a90 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
22aa0 6d 65 22 2c 74 65 73 74 5f 73 74 6d 74 5f 75 74  me",test_stmt_ut
22ab0 66 38 2c 28 76 6f 69 64 2a 29 73 71 6c 69 74 65  f8,(void*)sqlite
22ac0 33 5f 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73  3_column_databas
22ad0 65 5f 6e 61 6d 65 7d 2c 0a 7b 20 22 73 71 6c 69  e_name},.{ "sqli
22ae0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65  te3_column_table
22af0 5f 6e 61 6d 65 22 2c 74 65 73 74 5f 73 74 6d 74  _name",test_stmt
22b00 5f 75 74 66 38 2c 28 76 6f 69 64 2a 29 73 71 6c  _utf8,(void*)sql
22b10 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c  ite3_column_tabl
22b20 65 5f 6e 61 6d 65 7d 2c 0a 7b 20 22 73 71 6c 69  e_name},.{ "sqli
22b30 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69 67 69  te3_column_origi
22b40 6e 5f 6e 61 6d 65 22 2c 74 65 73 74 5f 73 74 6d  n_name",test_stm
22b50 74 5f 75 74 66 38 2c 28 76 6f 69 64 2a 29 73 71  t_utf8,(void*)sq
22b60 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72 69  lite3_column_ori
22b70 67 69 6e 5f 6e 61 6d 65 7d 2c 0a 23 65 6e 64 69  gin_name},.#endi
22b80 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
22b90 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 20  E_OMIT_UTF16.   
22ba0 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f 6c    { "sqlite3_col
22bb0 75 6d 6e 5f 62 79 74 65 73 31 36 22 2c 20 74 65  umn_bytes16", te
22bc0 73 74 5f 73 74 6d 74 5f 69 6e 74 2c 20 28 76 6f  st_stmt_int, (vo
22bd0 69 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75  id*)sqlite3_colu
22be0 6d 6e 5f 62 79 74 65 73 31 36 20 7d 2c 0a 20 20  mn_bytes16 },.  
22bf0 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
22c00 6c 75 6d 6e 5f 74 65 78 74 31 36 22 2c 20 20 74  lumn_text16",  t
22c10 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20  est_stmt_utf16, 
22c20 28 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 63  (void*)sqlite3_c
22c30 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 7d 2c 0a 20  olumn_text16},. 
22c40 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63      { "sqlite3_c
22c50 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 22 2c 20 20  olumn_name16",  
22c60 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c  test_stmt_utf16,
22c70 20 28 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f   (void*)sqlite3_
22c80 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 31 36 7d 2c 0a  column_name16},.
22c90 20 20 20 20 20 7b 20 22 61 64 64 5f 61 6c 69 67       { "add_alig
22ca0 6e 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61  nment_test_colla
22cb0 74 69 6f 6e 73 22 2c 20 61 64 64 5f 61 6c 69 67  tions", add_alig
22cc0 6e 6d 65 6e 74 5f 74 65 73 74 5f 63 6f 6c 6c 61  nment_test_colla
22cd0 74 69 6f 6e 73 2c 20 30 20 20 20 20 20 20 7d 2c  tions, 0      },
22ce0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
22cf0 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 0a 20 20  OMIT_DECLTYPE.  
22d00 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f 63 6f     { "sqlite3_co
22d10 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31 36 22  lumn_decltype16"
22d20 2c 74 65 73 74 5f 73 74 6d 74 5f 75 74 66 31 36  ,test_stmt_utf16
22d30 2c 28 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f  ,(void*)sqlite3_
22d40 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 31  column_decltype1
22d50 36 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  6},.#endif.#ifde
22d60 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
22d70 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41 54 41 0a  COLUMN_METADATA.
22d80 7b 22 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  {"sqlite3_column
22d90 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 31 36  _database_name16
22da0 22 2c 0a 20 20 74 65 73 74 5f 73 74 6d 74 5f 75  ",.  test_stmt_u
22db0 74 66 31 36 2c 20 73 71 6c 69 74 65 33 5f 63 6f  tf16, sqlite3_co
22dc0 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61  lumn_database_na
22dd0 6d 65 31 36 7d 2c 0a 7b 22 73 71 6c 69 74 65 33  me16},.{"sqlite3
22de0 5f 63 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61  _column_table_na
22df0 6d 65 31 36 22 2c 20 74 65 73 74 5f 73 74 6d 74  me16", test_stmt
22e00 5f 75 74 66 31 36 2c 20 28 76 6f 69 64 2a 29 73  _utf16, (void*)s
22e10 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 61  qlite3_column_ta
22e20 62 6c 65 5f 6e 61 6d 65 31 36 7d 2c 0a 7b 22 73  ble_name16},.{"s
22e30 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6f 72  qlite3_column_or
22e40 69 67 69 6e 5f 6e 61 6d 65 31 36 22 2c 20 74 65  igin_name16", te
22e50 73 74 5f 73 74 6d 74 5f 75 74 66 31 36 2c 20 28  st_stmt_utf16, (
22e60 76 6f 69 64 2a 29 73 71 6c 69 74 65 33 5f 63 6f  void*)sqlite3_co
22e70 6c 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65  lumn_origin_name
22e80 31 36 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64  16},.#endif.#end
22e90 69 66 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74  if.     { "sqlit
22ea0 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74  e3_create_collat
22eb0 69 6f 6e 5f 76 32 22 2c 20 74 65 73 74 5f 63 72  ion_v2", test_cr
22ec0 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e 5f 76  eate_collation_v
22ed0 32 2c 20 30 20 7d 2c 0a 20 20 20 20 20 7b 20 22  2, 0 },.     { "
22ee0 73 71 6c 69 74 65 33 5f 67 6c 6f 62 61 6c 5f 72  sqlite3_global_r
22ef0 65 63 6f 76 65 72 22 2c 20 20 20 20 20 74 65 73  ecover",     tes
22f00 74 5f 67 6c 6f 62 61 6c 5f 72 65 63 6f 76 65 72  t_global_recover
22f10 2c 20 30 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20  , 0   },.     { 
22f20 22 77 6f 72 6b 69 6e 67 5f 36 34 62 69 74 5f 69  "working_64bit_i
22f30 6e 74 22 2c 20 20 20 20 20 20 20 20 20 20 77 6f  nt",          wo
22f40 72 6b 69 6e 67 5f 36 34 62 69 74 5f 69 6e 74 2c  rking_64bit_int,
22f50 20 20 20 30 20 20 20 7d 2c 0a 20 20 20 20 20 7b     0   },.     {
22f60 20 22 76 66 73 5f 75 6e 6c 69 6e 6b 5f 74 65 73   "vfs_unlink_tes
22f70 74 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 76  t",            v
22f80 66 73 5f 75 6e 6c 69 6e 6b 5f 74 65 73 74 2c 20  fs_unlink_test, 
22f90 20 20 20 20 30 20 20 20 7d 2c 0a 20 20 20 20 20      0   },.     
22fa0 7b 20 22 76 66 73 5f 69 6e 69 74 66 61 69 6c 5f  { "vfs_initfail_
22fb0 74 65 73 74 22 2c 20 20 20 20 20 20 20 20 20 20  test",          
22fc0 76 66 73 5f 69 6e 69 74 66 61 69 6c 5f 74 65 73  vfs_initfail_tes
22fd0 74 2c 20 20 20 30 20 20 20 7d 2c 0a 20 20 20 20  t,   0   },.    
22fe0 20 7b 20 22 76 66 73 5f 75 6e 72 65 67 69 73 74   { "vfs_unregist
22ff0 65 72 5f 61 6c 6c 22 2c 20 20 20 20 20 20 20 20  er_all",        
23000 20 76 66 73 5f 75 6e 72 65 67 69 73 74 65 72 5f   vfs_unregister_
23010 61 6c 6c 2c 20 20 30 20 20 20 7d 2c 0a 20 20 20  all,  0   },.   
23020 20 20 7b 20 22 76 66 73 5f 72 65 72 65 67 69 73    { "vfs_reregis
23030 74 65 72 5f 61 6c 6c 22 2c 20 20 20 20 20 20 20  ter_all",       
23040 20 20 76 66 73 5f 72 65 72 65 67 69 73 74 65 72    vfs_reregister
23050 5f 61 6c 6c 2c 20 20 30 20 20 20 7d 2c 0a 20 20  _all,  0   },.  
23060 20 20 20 7b 20 22 66 69 6c 65 5f 63 6f 6e 74 72     { "file_contr
23070 6f 6c 5f 74 65 73 74 22 2c 20 20 20 20 20 20 20  ol_test",       
23080 20 20 20 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f     file_control_
23090 74 65 73 74 2c 20 20 20 30 20 20 20 7d 2c 0a 20  test,   0   },. 
230a0 20 20 20 20 7b 20 22 66 69 6c 65 5f 63 6f 6e 74      { "file_cont
230b0 72 6f 6c 5f 6c 61 73 74 65 72 72 6e 6f 5f 74 65  rol_lasterrno_te
230c0 73 74 22 2c 20 66 69 6c 65 5f 63 6f 6e 74 72 6f  st", file_contro
230d0 6c 5f 6c 61 73 74 65 72 72 6e 6f 5f 74 65 73 74  l_lasterrno_test
230e0 2c 20 20 30 20 20 20 7d 2c 0a 20 20 20 20 20 7b  ,  0   },.     {
230f0 20 22 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 6c   "file_control_l
23100 6f 63 6b 70 72 6f 78 79 5f 74 65 73 74 22 2c 20  ockproxy_test", 
23110 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 5f 6c 6f 63  file_control_loc
23120 6b 70 72 6f 78 79 5f 74 65 73 74 2c 20 20 30 20  kproxy_test,  0 
23130 20 20 7d 2c 0a 20 20 20 20 20 7b 20 22 73 71 6c    },.     { "sql
23140 69 74 65 33 5f 76 66 73 5f 6c 69 73 74 22 2c 20  ite3_vfs_list", 
23150 20 20 20 20 20 20 20 20 20 20 76 66 73 5f 6c 69            vfs_li
23160 73 74 2c 20 20 20 20 20 30 20 20 20 7d 2c 0a 0a  st,     0   },..
23170 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69 6f 6e       /* Function
23180 73 20 66 72 6f 6d 20 6f 73 2e 68 20 2a 2f 0a 23  s from os.h */.#
23190 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
231a0 49 54 5f 55 54 46 31 36 0a 20 20 20 20 20 7b 20  IT_UTF16.     { 
231b0 22 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74  "add_test_collat
231c0 65 22 2c 20 20 20 20 20 20 20 20 74 65 73 74 5f  e",        test_
231d0 63 6f 6c 6c 61 74 65 2c 20 30 20 20 20 20 20 20  collate, 0      
231e0 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20        },.     { 
231f0 22 61 64 64 5f 74 65 73 74 5f 63 6f 6c 6c 61 74  "add_test_collat
23200 65 5f 6e 65 65 64 65 64 22 2c 20 74 65 73 74 5f  e_needed", test_
23210 63 6f 6c 6c 61 74 65 5f 6e 65 65 64 65 64 2c 20  collate_needed, 
23220 30 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 7b 20  0     },.     { 
23230 22 61 64 64 5f 74 65 73 74 5f 66 75 6e 63 74 69  "add_test_functi
23240 6f 6e 22 2c 20 20 20 20 20 20 20 74 65 73 74 5f  on",       test_
23250 66 75 6e 63 74 69 6f 6e 2c 20 30 20 20 20 20 20  function, 0     
23260 20 20 20 20 20 20 7d 2c 0a 23 65 6e 64 69 66 0a        },.#endif.
23270 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33 5f       { "sqlite3_
23280 74 65 73 74 5f 65 72 72 73 74 72 22 2c 20 20 20  test_errstr",   
23290 20 20 74 65 73 74 5f 65 72 72 73 74 72 2c 20 30    test_errstr, 0
232a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 0a               },.
232b0 20 20 20 20 20 7b 20 22 74 63 6c 5f 76 61 72 69       { "tcl_vari
232c0 61 62 6c 65 5f 74 79 70 65 22 2c 20 20 20 20 20  able_type",     
232d0 20 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74    tcl_variable_t
232e0 79 70 65 2c 20 30 20 20 20 20 20 20 20 7d 2c 0a  ype, 0       },.
232f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
23300 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
23310 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
23320 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63  _enable_shared_c
23330 61 63 68 65 22 2c 20 74 65 73 74 5f 65 6e 61 62  ache", test_enab
23340 6c 65 5f 73 68 61 72 65 64 2c 20 30 20 20 7d 2c  le_shared, 0  },
23350 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
23360 5f 73 68 61 72 65 64 5f 63 61 63 68 65 5f 72 65  _shared_cache_re
23370 70 6f 72 74 22 2c 20 73 71 6c 69 74 65 33 42 74  port", sqlite3Bt
23380 72 65 65 53 68 61 72 65 64 43 61 63 68 65 52 65  reeSharedCacheRe
23390 70 6f 72 74 2c 20 30 7d 2c 0a 23 65 6e 64 69 66  port, 0},.#endif
233a0 0a 20 20 20 20 20 7b 20 22 73 71 6c 69 74 65 33  .     { "sqlite3
233b0 5f 6c 69 62 76 65 72 73 69 6f 6e 5f 6e 75 6d 62  _libversion_numb
233c0 65 72 22 2c 20 74 65 73 74 5f 6c 69 62 76 65 72  er", test_libver
233d0 73 69 6f 6e 5f 6e 75 6d 62 65 72 2c 20 30 20 20  sion_number, 0  
233e0 7d 2c 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  },.#ifdef SQLITE
233f0 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d  _ENABLE_COLUMN_M
23400 45 54 41 44 41 54 41 0a 20 20 20 20 20 7b 20 22  ETADATA.     { "
23410 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 6f  sqlite3_table_co
23420 6c 75 6d 6e 5f 6d 65 74 61 64 61 74 61 22 2c 20  lumn_metadata", 
23430 74 65 73 74 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d  test_table_colum
23440 6e 5f 6d 65 74 61 64 61 74 61 2c 20 30 20 20 7d  n_metadata, 0  }
23450 2c 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ,.#endif.#ifndef
23460 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 43   SQLITE_OMIT_INC
23470 52 42 4c 4f 42 0a 20 20 20 20 20 7b 20 22 73 71  RBLOB.     { "sq
23480 6c 69 74 65 33 5f 62 6c 6f 62 5f 72 65 61 64 22  lite3_blob_read"
23490 2c 20 20 74 65 73 74 5f 62 6c 6f 62 5f 72 65 61  ,  test_blob_rea
234a0 64 2c 20 30 20 20 7d 2c 0a 20 20 20 20 20 7b 20  d, 0  },.     { 
234b0 22 73 71 6c 69 74 65 33 5f 62 6c 6f 62 5f 77 72  "sqlite3_blob_wr
234c0 69 74 65 22 2c 20 74 65 73 74 5f 62 6c 6f 62 5f  ite", test_blob_
234d0 77 72 69 74 65 2c 20 30 20 20 7d 2c 0a 23 65 6e  write, 0  },.#en
234e0 64 69 66 0a 20 20 20 20 20 7b 20 22 70 63 61 63  dif.     { "pcac
234f0 68 65 5f 73 74 61 74 73 22 2c 20 20 20 20 20 20  he_stats",      
23500 20 74 65 73 74 5f 70 63 61 63 68 65 5f 73 74 61   test_pcache_sta
23510 74 73 2c 20 30 20 20 7d 2c 0a 20 20 7d 3b 0a 20  ts, 0  },.  };. 
23520 20 73 74 61 74 69 63 20 69 6e 74 20 62 69 74 6d   static int bitm
23530 61 73 6b 5f 73 69 7a 65 20 3d 20 73 69 7a 65 6f  ask_size = sizeo
23540 66 28 42 69 74 6d 61 73 6b 29 2a 38 3b 0a 20 20  f(Bitmask)*8;.  
23550 69 6e 74 20 69 3b 0a 20 20 65 78 74 65 72 6e 20  int i;.  extern 
23560 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 79 6e 63  int sqlite3_sync
23570 5f 63 6f 75 6e 74 2c 20 73 71 6c 69 74 65 33 5f  _count, sqlite3_
23580 66 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 3b 0a  fullsync_count;.
23590 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
235a0 69 74 65 33 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f  ite3_opentemp_co
235b0 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  unt;.  extern in
235c0 74 20 73 71 6c 69 74 65 33 5f 6c 69 6b 65 5f 63  t sqlite3_like_c
235d0 6f 75 6e 74 3b 0a 20 20 65 78 74 65 72 6e 20 69  ount;.  extern i
235e0 6e 74 20 73 71 6c 69 74 65 33 5f 78 66 65 72 6f  nt sqlite3_xfero
235f0 70 74 5f 63 6f 75 6e 74 3b 0a 20 20 65 78 74 65  pt_count;.  exte
23600 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 70  rn int sqlite3_p
23610 61 67 65 72 5f 72 65 61 64 64 62 5f 63 6f 75 6e  ager_readdb_coun
23620 74 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20  t;.  extern int 
23630 73 71 6c 69 74 65 33 5f 70 61 67 65 72 5f 77 72  sqlite3_pager_wr
23640 69 74 65 64 62 5f 63 6f 75 6e 74 3b 0a 20 20 65  itedb_count;.  e
23650 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65  xtern int sqlite
23660 33 5f 70 61 67 65 72 5f 77 72 69 74 65 6a 5f 63  3_pager_writej_c
23670 6f 75 6e 74 3b 0a 23 69 66 20 53 51 4c 49 54 45  ount;.#if SQLITE
23680 5f 4f 53 5f 55 4e 49 58 20 26 26 20 64 65 66 69  _OS_UNIX && defi
23690 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
236a0 20 26 26 20 53 51 4c 49 54 45 5f 54 48 52 45 41   && SQLITE_THREA
236b0 44 53 41 46 45 0a 20 20 65 78 74 65 72 6e 20 69  DSAFE.  extern i
236c0 6e 74 20 74 68 72 65 61 64 73 4f 76 65 72 72 69  nt threadsOverri
236d0 64 65 45 61 63 68 4f 74 68 65 72 73 4c 6f 63 6b  deEachOthersLock
236e0 73 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51  s;.#endif.#if SQ
236f0 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 20 20 65 78  LITE_OS_WIN.  ex
23700 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
23710 5f 6f 73 5f 74 79 70 65 3b 0a 23 65 6e 64 69 66  _os_type;.#endif
23720 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
23730 45 42 55 47 0a 20 20 65 78 74 65 72 6e 20 69 6e  EBUG.  extern in
23740 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 54 72  t sqlite3WhereTr
23750 61 63 65 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e  ace;.  extern in
23760 74 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65  t sqlite3OSTrace
23770 3b 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ;.  extern int s
23780 71 6c 69 74 65 33 56 64 62 65 41 64 64 6f 70 54  qlite3VdbeAddopT
23790 72 61 63 65 3b 0a 23 65 6e 64 69 66 0a 23 69 66  race;.#endif.#if
237a0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
237b0 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c    extern int sql
237c0 69 74 65 33 5f 65 6e 61 62 6c 65 5f 69 6e 5f 6f  ite3_enable_in_o
237d0 70 74 3b 0a 20 20 65 78 74 65 72 6e 20 63 68 61  pt;.  extern cha
237e0 72 20 73 71 6c 69 74 65 33 5f 71 75 65 72 79 5f  r sqlite3_query_
237f0 70 6c 61 6e 5b 5d 3b 0a 20 20 73 74 61 74 69 63  plan[];.  static
23800 20 63 68 61 72 20 2a 71 75 65 72 79 5f 70 6c 61   char *query_pla
23810 6e 20 3d 20 73 71 6c 69 74 65 33 5f 71 75 65 72  n = sqlite3_quer
23820 79 5f 70 6c 61 6e 3b 0a 23 65 6e 64 69 66 0a 0a  y_plan;.#endif..
23830 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a    for(i=0; i<siz
23840 65 6f 66 28 61 43 6d 64 29 2f 73 69 7a 65 6f 66  eof(aCmd)/sizeof
23850 28 61 43 6d 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b  (aCmd[0]); i++){
23860 0a 20 20 20 20 54 63 6c 5f 43 72 65 61 74 65 43  .    Tcl_CreateC
23870 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 61  ommand(interp, a
23880 43 6d 64 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 61 43  Cmd[i].zName, aC
23890 6d 64 5b 69 5d 2e 78 50 72 6f 63 2c 20 30 2c 20  md[i].xProc, 0, 
238a0 30 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d  0);.  }.  for(i=
238b0 30 3b 20 69 3c 73 69 7a 65 6f 66 28 61 4f 62 6a  0; i<sizeof(aObj
238c0 43 6d 64 29 2f 73 69 7a 65 6f 66 28 61 4f 62 6a  Cmd)/sizeof(aObj
238d0 43 6d 64 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20  Cmd[0]); i++){. 
238e0 20 20 20 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a     Tcl_CreateObj
238f0 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20  Command(interp, 
23900 61 4f 62 6a 43 6d 64 5b 69 5d 2e 7a 4e 61 6d 65  aObjCmd[i].zName
23910 2c 20 0a 20 20 20 20 20 20 20 20 61 4f 62 6a 43  , .        aObjC
23920 6d 64 5b 69 5d 2e 78 50 72 6f 63 2c 20 61 4f 62  md[i].xProc, aOb
23930 6a 43 6d 64 5b 69 5d 2e 63 6c 69 65 6e 74 44 61  jCmd[i].clientDa
23940 74 61 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 54 63  ta, 0);.  }.  Tc
23950 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
23960 2c 20 22 73 71 6c 69 74 65 5f 73 65 61 72 63 68  , "sqlite_search
23970 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20  _count", .      
23980 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
23990 73 65 61 72 63 68 5f 63 6f 75 6e 74 2c 20 54 43  search_count, TC
239a0 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54  L_LINK_INT);.  T
239b0 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
239c0 70 2c 20 22 73 71 6c 69 74 65 5f 73 6f 72 74 5f  p, "sqlite_sort_
239d0 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28  count", .      (
239e0 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 73  char*)&sqlite3_s
239f0 6f 72 74 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c  ort_count, TCL_L
23a00 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f  INK_INT);.  Tcl_
23a10 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
23a20 22 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f  "sqlite3_max_blo
23a30 62 73 69 7a 65 22 2c 20 0a 20 20 20 20 20 20 28  bsize", .      (
23a40 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6d  char*)&sqlite3_m
23a50 61 78 5f 62 6c 6f 62 73 69 7a 65 2c 20 54 43 4c  ax_blobsize, TCL
23a60 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63  _LINK_INT);.  Tc
23a70 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70  l_LinkVar(interp
23a80 2c 20 22 73 71 6c 69 74 65 5f 6c 69 6b 65 5f 63  , "sqlite_like_c
23a90 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20 28 63  ount", .      (c
23aa0 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 6c 69  har*)&sqlite3_li
23ab0 6b 65 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49  ke_count, TCL_LI
23ac0 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c  NK_INT);.  Tcl_L
23ad0 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22  inkVar(interp, "
23ae0 73 71 6c 69 74 65 5f 69 6e 74 65 72 72 75 70 74  sqlite_interrupt
23af0 5f 63 6f 75 6e 74 22 2c 20 0a 20 20 20 20 20 20  _count", .      
23b00 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
23b10 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2c  interrupt_count,
23b20 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
23b30 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e    Tcl_LinkVar(in
23b40 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70  terp, "sqlite_op
23b50 65 6e 5f 66 69 6c 65 5f 63 6f 75 6e 74 22 2c 20  en_file_count", 
23b60 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73  .      (char*)&s
23b70 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 66 69 6c 65  qlite3_open_file
23b80 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b  _count, TCL_LINK
23b90 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
23ba0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
23bb0 6c 69 74 65 5f 63 75 72 72 65 6e 74 5f 74 69 6d  lite_current_tim
23bc0 65 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72  e", .      (char
23bd0 2a 29 26 73 71 6c 69 74 65 33 5f 63 75 72 72 65  *)&sqlite3_curre
23be0 6e 74 5f 74 69 6d 65 2c 20 54 43 4c 5f 4c 49 4e  nt_time, TCL_LIN
23bf0 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69  K_INT);.  Tcl_Li
23c00 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
23c10 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e 75 6d  qlite_hostid_num
23c20 22 2c 20 0a 20 20 20 20 20 20 28 63 68 61 72 2a  ", .      (char*
23c30 29 26 73 71 6c 69 74 65 33 5f 68 6f 73 74 69 64  )&sqlite3_hostid
23c40 5f 6e 75 6d 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  _num, TCL_LINK_I
23c50 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
23c60 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
23c70 74 65 33 5f 78 66 65 72 6f 70 74 5f 63 6f 75 6e  te3_xferopt_coun
23c80 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a  t",.      (char*
23c90 29 26 73 71 6c 69 74 65 33 5f 78 66 65 72 6f 70  )&sqlite3_xferop
23ca0 74 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e  t_count, TCL_LIN
23cb0 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69  K_INT);.  Tcl_Li
23cc0 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73  nkVar(interp, "s
23cd0 71 6c 69 74 65 33 5f 70 61 67 65 72 5f 72 65 61  qlite3_pager_rea
23ce0 64 64 62 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20  ddb_count",.    
23cf0 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
23d00 33 5f 70 61 67 65 72 5f 72 65 61 64 64 62 5f 63  3_pager_readdb_c
23d10 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49  ount, TCL_LINK_I
23d20 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56  NT);.  Tcl_LinkV
23d30 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69  ar(interp, "sqli
23d40 74 65 33 5f 70 61 67 65 72 5f 77 72 69 74 65 64  te3_pager_writed
23d50 62 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20  b_count",.      
23d60 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f  (char*)&sqlite3_
23d70 70 61 67 65 72 5f 77 72 69 74 65 64 62 5f 63 6f  pager_writedb_co
23d80 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  unt, TCL_LINK_IN
23d90 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61  T);.  Tcl_LinkVa
23da0 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c 69 74  r(interp, "sqlit
23db0 65 33 5f 70 61 67 65 72 5f 77 72 69 74 65 6a 5f  e3_pager_writej_
23dc0 63 6f 75 6e 74 22 2c 0a 20 20 20 20 20 20 28 63  count",.      (c
23dd0 68 61 72 2a 29 26 73 71 6c 69 74 65 33 5f 70 61  har*)&sqlite3_pa
23de0 67 65 72 5f 77 72 69 74 65 6a 5f 63 6f 75 6e 74  ger_writej_count
23df0 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b  , TCL_LINK_INT);
23e00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23e10 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 54 63 6c  OMIT_UTF16.  Tcl
23e20 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
23e30 20 22 75 6e 61 6c 69 67 6e 65 64 5f 73 74 72 69   "unaligned_stri
23e40 6e 67 5f 63 6f 75 6e 74 65 72 22 2c 0a 20 20 20  ng_counter",.   
23e50 20 20 20 28 63 68 61 72 2a 29 26 75 6e 61 6c 69     (char*)&unali
23e60 67 6e 65 64 5f 73 74 72 69 6e 67 5f 63 6f 75 6e  gned_string_coun
23e70 74 65 72 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e  ter, TCL_LINK_IN
23e80 54 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 53  T);.#endif.#if S
23e90 51 4c 49 54 45 5f 4f 53 5f 55 4e 49 58 20 26 26  QLITE_OS_UNIX &&
23ea0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
23eb0 54 45 53 54 29 20 26 26 20 53 51 4c 49 54 45 5f  TEST) && SQLITE_
23ec0 54 48 52 45 41 44 53 41 46 45 0a 20 20 54 63 6c  THREADSAFE.  Tcl
23ed0 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
23ee0 20 22 74 68 72 65 61 64 73 4f 76 65 72 72 69 64   "threadsOverrid
23ef0 65 45 61 63 68 4f 74 68 65 72 73 4c 6f 63 6b 73  eEachOthersLocks
23f00 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29  ",.      (char*)
23f10 26 74 68 72 65 61 64 73 4f 76 65 72 72 69 64 65  &threadsOverride
23f20 45 61 63 68 4f 74 68 65 72 73 4c 6f 63 6b 73 2c  EachOthersLocks,
23f30 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a   TCL_LINK_INT);.
23f40 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
23f50 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
23f60 0a 20 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69  .  Tcl_LinkVar(i
23f70 6e 74 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6c  nterp, "sqlite_l
23f80 61 73 74 5f 6e 65 65 64 65 64 5f 63 6f 6c 6c 61  ast_needed_colla
23f90 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 28 63 68  tion",.      (ch
23fa0 61 72 2a 29 26 70 7a 4e 65 65 64 65 64 43 6f 6c  ar*)&pzNeededCol
23fb0 6c 61 74 69 6f 6e 2c 20 54 43 4c 5f 4c 49 4e 4b  lation, TCL_LINK
23fc0 5f 53 54 52 49 4e 47 7c 54 43 4c 5f 4c 49 4e 4b  _STRING|TCL_LINK
23fd0 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a 23 65 6e  _READ_ONLY);.#en
23fe0 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f  dif.#if SQLITE_O
23ff0 53 5f 57 49 4e 0a 20 20 54 63 6c 5f 4c 69 6e 6b  S_WIN.  Tcl_Link
24000 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
24010 69 74 65 5f 6f 73 5f 74 79 70 65 22 2c 0a 20 20  ite_os_type",.  
24020 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
24030 74 65 33 5f 6f 73 5f 74 79 70 65 2c 20 54 43 4c  te3_os_type, TCL
24040 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e 64  _LINK_INT);.#end
24050 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
24060 5f 54 45 53 54 0a 20 20 54 63 6c 5f 4c 69 6e 6b  _TEST.  Tcl_Link
24070 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
24080 69 74 65 5f 71 75 65 72 79 5f 70 6c 61 6e 22 2c  ite_query_plan",
24090 0a 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 71  .      (char*)&q
240a0 75 65 72 79 5f 70 6c 61 6e 2c 20 54 43 4c 5f 4c  uery_plan, TCL_L
240b0 49 4e 4b 5f 53 54 52 49 4e 47 7c 54 43 4c 5f 4c  INK_STRING|TCL_L
240c0 49 4e 4b 5f 52 45 41 44 5f 4f 4e 4c 59 29 3b 0a  INK_READ_ONLY);.
240d0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
240e0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 54 63 6c  LITE_DEBUG.  Tcl
240f0 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
24100 20 22 73 71 6c 69 74 65 5f 61 64 64 6f 70 5f 74   "sqlite_addop_t
24110 72 61 63 65 22 2c 0a 20 20 20 20 20 20 28 63 68  race",.      (ch
24120 61 72 2a 29 26 73 71 6c 69 74 65 33 56 64 62 65  ar*)&sqlite3Vdbe
24130 41 64 64 6f 70 54 72 61 63 65 2c 20 54 43 4c 5f  AddopTrace, TCL_
24140 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20 20 54 63 6c  LINK_INT);.  Tcl
24150 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c  _LinkVar(interp,
24160 20 22 73 71 6c 69 74 65 5f 77 68 65 72 65 5f 74   "sqlite_where_t
24170 72 61 63 65 22 2c 0a 20 20 20 20 20 20 28 63 68  race",.      (ch
24180 61 72 2a 29 26 73 71 6c 69 74 65 33 57 68 65 72  ar*)&sqlite3Wher
24190 65 54 72 61 63 65 2c 20 54 43 4c 5f 4c 49 4e 4b  eTrace, TCL_LINK
241a0 5f 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e  _INT);.  Tcl_Lin
241b0 6b 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71  kVar(interp, "sq
241c0 6c 69 74 65 5f 6f 73 5f 74 72 61 63 65 22 2c 0a  lite_os_trace",.
241d0 20 20 20 20 20 20 28 63 68 61 72 2a 29 26 73 71        (char*)&sq
241e0 6c 69 74 65 33 4f 53 54 72 61 63 65 2c 20 54 43  lite3OSTrace, TC
241f0 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23 65 6e  L_LINK_INT);.#en
24200 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
24210 54 45 5f 4f 4d 49 54 5f 44 49 53 4b 49 4f 0a 20  TE_OMIT_DISKIO. 
24220 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
24230 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 6f 70 65  erp, "sqlite_ope
24240 6e 74 65 6d 70 5f 63 6f 75 6e 74 22 2c 0a 20 20  ntemp_count",.  
24250 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
24260 74 65 33 5f 6f 70 65 6e 74 65 6d 70 5f 63 6f 75  te3_opentemp_cou
24270 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54  nt, TCL_LINK_INT
24280 29 3b 0a 23 65 6e 64 69 66 0a 20 20 54 63 6c 5f  );.#endif.  Tcl_
24290 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
242a0 22 73 71 6c 69 74 65 5f 73 74 61 74 69 63 5f 62  "sqlite_static_b
242b0 69 6e 64 5f 76 61 6c 75 65 22 2c 0a 20 20 20 20  ind_value",.    
242c0 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65    (char*)&sqlite
242d0 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f 76 61 6c  _static_bind_val
242e0 75 65 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52  ue, TCL_LINK_STR
242f0 49 4e 47 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  ING);.  Tcl_Link
24300 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
24310 69 74 65 5f 73 74 61 74 69 63 5f 62 69 6e 64 5f  ite_static_bind_
24320 6e 62 79 74 65 22 2c 0a 20 20 20 20 20 20 28 63  nbyte",.      (c
24330 68 61 72 2a 29 26 73 71 6c 69 74 65 5f 73 74 61  har*)&sqlite_sta
24340 74 69 63 5f 62 69 6e 64 5f 6e 62 79 74 65 2c 20  tic_bind_nbyte, 
24350 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 20  TCL_LINK_INT);. 
24360 20 54 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74   Tcl_LinkVar(int
24370 65 72 70 2c 20 22 73 71 6c 69 74 65 5f 74 65 6d  erp, "sqlite_tem
24380 70 5f 64 69 72 65 63 74 6f 72 79 22 2c 0a 20 20  p_directory",.  
24390 20 20 20 20 28 63 68 61 72 2a 29 26 73 71 6c 69      (char*)&sqli
243a0 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
243b0 72 79 2c 20 54 43 4c 5f 4c 49 4e 4b 5f 53 54 52  ry, TCL_LINK_STR
243c0 49 4e 47 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  ING);.  Tcl_Link
243d0 56 61 72 28 69 6e 74 65 72 70 2c 20 22 62 69 74  Var(interp, "bit
243e0 6d 61 73 6b 5f 73 69 7a 65 22 2c 0a 20 20 20 20  mask_size",.    
243f0 20 20 28 63 68 61 72 2a 29 26 62 69 74 6d 61 73    (char*)&bitmas
24400 6b 5f 73 69 7a 65 2c 20 54 43 4c 5f 4c 49 4e 4b  k_size, TCL_LINK
24410 5f 49 4e 54 7c 54 43 4c 5f 4c 49 4e 4b 5f 52 45  _INT|TCL_LINK_RE
24420 41 44 5f 4f 4e 4c 59 29 3b 0a 20 20 54 63 6c 5f  AD_ONLY);.  Tcl_
24430 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72 70 2c 20  LinkVar(interp, 
24440 22 73 71 6c 69 74 65 5f 73 79 6e 63 5f 63 6f 75  "sqlite_sync_cou
24450 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  nt",.      (char
24460 2a 29 26 73 71 6c 69 74 65 33 5f 73 79 6e 63 5f  *)&sqlite3_sync_
24470 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c 49 4e 4b 5f  count, TCL_LINK_
24480 49 4e 54 29 3b 0a 20 20 54 63 6c 5f 4c 69 6e 6b  INT);.  Tcl_Link
24490 56 61 72 28 69 6e 74 65 72 70 2c 20 22 73 71 6c  Var(interp, "sql
244a0 69 74 65 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f 75  ite_fullsync_cou
244b0 6e 74 22 2c 0a 20 20 20 20 20 20 28 63 68 61 72  nt",.      (char
244c0 2a 29 26 73 71 6c 69 74 65 33 5f 66 75 6c 6c 73  *)&sqlite3_fulls
244d0 79 6e 63 5f 63 6f 75 6e 74 2c 20 54 43 4c 5f 4c  ync_count, TCL_L
244e0 49 4e 4b 5f 49 4e 54 29 3b 0a 23 69 66 64 65 66  INK_INT);.#ifdef
244f0 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 54   SQLITE_TEST.  T
24500 63 6c 5f 4c 69 6e 6b 56 61 72 28 69 6e 74 65 72  cl_LinkVar(inter
24510 70 2c 20 22 73 71 6c 69 74 65 5f 65 6e 61 62 6c  p, "sqlite_enabl
24520 65 5f 69 6e 5f 6f 70 74 22 2c 0a 20 20 20 20 20  e_in_opt",.     
24530 20 28 63 68 61 72 2a 29 26 73 71 6c 69 74 65 33   (char*)&sqlite3
24540 5f 65 6e 61 62 6c 65 5f 69 6e 5f 6f 70 74 2c 20  _enable_in_opt, 
24550 54 43 4c 5f 4c 49 4e 4b 5f 49 4e 54 29 3b 0a 23  TCL_LINK_INT);.#
24560 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 54  endif.  return T
24570 43 4c 5f 4f 4b 3b 0a 7d 0a                       CL_OK;.}.